96a697a50a
Morning merge kept Review call sites (nextPrimary, keptInOrder, roleLabel, …) and dropped the imports, so hydrate threw ReferenceError and the UI showed "Could not load the slab." Live UAT redeployed; sample data preserved.
8.0 KiB
8.0 KiB
Host
Port block 10880–10889 on ubudual5060 is allocated to this project.
:10880 is Ty's local Node/SvelteKit and must never be bound by project deploys.
The dev-test environment binds 0.0.0.0 so any machine on 192.168.1.0/24 can reach it.
Check to see if you are running on ubudual5060 (192.168.1.202) before attempting SSH.
Dev-test environment (M2 current, M3 incoming)
- Host:
ubudual5060/ LAN192.168.1.202/ Tailscale100.64.0.9 - Container:
slabuploader-m2-overnight(imageslabuploader-m2:overnight) - Port: 10881 → 80, bound
0.0.0.0 - URLs:
http://192.168.1.202:10881(LAN) ·http://100.64.0.9:10881(Tailscale) - M3 replaces this container on the same port; remove the M2 container once M3 is healthy.
Ty local Node/SvelteKit (do not overwrite)
- Host:
ubudual5060/100.64.0.9 - Container:
slabuploader-m1 - Port: 18080 → 80 (inventory previously listed 10880; that port is off limits to project deploys)
- URL:
http://100.64.0.9:18080 - Never recreate or remap this container for project deploys.
Future deploys use a separate container name and a free port in 10880–10889
(other than 10880), bound 0.0.0.0.
Do not put a host name in the product spec.
Deploy records
2026-09-21 02:41 PDT — #90 wood primary category + derived thickness band
- Source ref:
0329052onissue-89-metadata-lock(pushed to Gitea; pulled into~/slab-deploy). - Images (built on
ubudual5060):deploy-frontend:latest1c169c29f131,deploy-fastapi:latest32671659639b. - Compose:
deploy/docker-compose.yml+ host-local (untracked)deploy/override-m3.yml. - URL:
http://192.168.1.202:10881(LAN) ·http://100.64.0.9:10881(Tailscale). matches HEAD: yes.- Sample data preserved: yes — 24 slabs before and after
up -d(no-v, no volume removal). - Verified on the live stack: served asset
assets/index-tlFib3RM.js(sha2563b665746ec81f28e…) contains the new markers and no#thicknessselect;POST /api/v1/slabsatthickness_in 1.0stored band350(1"- 1 1/2");PUTat2.75re-banded to352; a client-sent stale band id was ignored;POST /reviewno longer lists thickness as missing; the Review screen in a real browser (LAN URL) shows the wood-category MultiSelect closed summary with names + count, thePrimary wood categoryradio set switching on click, and the band as read-only text. - Not exercised: the Woo publish path. Rows created before this deploy keep
thickness_term_idNULL until their next save (the band is derived on write, so any Review commit fills it in).
2026-09-21 03:12 PDT — follow-up: thickness band omitted entirely from Review
- Commit:
204bc5e(fix #90: band removed from UI, not merely read-only; publish test added). - Rebuilt
deploy-frontend:latestand recreated the container on 10881. - Live verification: served HTML and bundle contain zero occurrences of "Thickness band" or "set from the measurement".
- Sample data unchanged (still 25 slabs post-recreate).
- All gates (unit, build, requirements, coverage, m3-create e2e) pass.
2026-09-21 11:52 PDT — merge issue-89-metadata-lock → main (Create-string model)
- Source: branch
work/merge-89-90(baseorigin/issue-89-metadata-lock+ Create-string re-applied).matches HEAD: no — staged from the uncommitted working tree (local sync; Gitea push not attempted this round). 9 files changed: Review.svelte, slabs.ts, review.py, slabs.py, schema.sql, db/__init__.py, test_review.py, m3-create.spec.ts, review-photo-strip.spec.ts. - Model change:
metadata_lockedDB column + "Save and lock" UI dropped end-to-end. The deterministic title/short_description are now built by the review endpoint on every call; the owner's Create title / Create short desc buttons fire the build and write the result (overwrite contract).commitReviewauto-fills only empty fields (no owner-clobber);createTitleis the explicit force-overwrite. Photo strip, wood primary/secondary, and server-side thickness band (item: not shown in UI, passed to Woo on publish) all taken from the branch. - LAN binds:
deploy/override-m3.ymlwas absent from disk; the live stack's 10881/10882 LAN binds were re-created by editingdeploy/docker-compose.ymlports in-place (loopback 18082/18083 from.env+0.0.0.0:10881/0.0.0.0:10882), thendown --remove-orphans+up -d(no-v). - Bundle:
assets/index-YPAqx609.js(new; containscreate-title). API/api/healthwoo_reachable:true. - Sample data preserved: yes — 34 slabs before/after.
- Live verification (LAN URL, real DB):
slabstable has nometadata_lockedcolumn;slab_photos.rolepresent.POST /reviewon slabec4088da…→title:'Curl Black Walnut Slab',ready:True.PUTtitle persisted (rev 1→2) then restored (original sample value intact, rev 3). - Not exercised live: the full browser Create-button click (verified via in-repo Playwright 6/6 m3-create + review-photo-strip; the endpoint + PUT path are proven live above). Woo publish path not exercised this round.
2026-09-21 12:10 PDT — redeploy: main after merge 8ee3da9 (reconciled PR #97 + branch)
- Source:
main@8ee3da9(merge ofwork/merge-89-90into main, which itself reconciled main's PR #97 client-sidethicknessBand.ts+syncSelects/box-sizingagainst the branch's server-sidethickness_band.py+ Create-string #89).matches HEAD: yes. - Resolution outcome in the deployed bundle: band is server-side —
Review.svelteno longer importsthicknessBandand the read-only band display is gone; PR #97'ssyncSelects()(3× in source) +box-sizingCSS preserved;metadata_lockedstill dropped; Create-string + photo strip + wood primary live. - Rebuilt both images from
main; recreated the stack (down --remove-orphans+up -d, no-v). LAN binds 10881/10882 intact. - Bundle:
assets/index-BScrgd8o.js(new; differs from pre-mergeYPAqx609; containscreate-title, zerothicknessBandreferences). API/api/healthwoo_reachable:true. - Sample data preserved: yes — 35 slabs (one added upstream since last deploy).
- Live verification (LAN URL, real DB):
POST /reviewon slabec4088da…→title:'Curl Black Walnut Slab',ready:True. - Gates at merge time: backend 117/117, unit 88/88, tsc clean, e2e 6/6 (m3-create + photo-strip).
- Branches
work/merge-89-90andissue-89-metadata-lockdeleted (local + remote); remote has onlymain.
2026-09-21 12:34 PDT — Review mount: restore dropped lineup/woodPrimary imports
- Source: uncommitted working tree on
main(parent67aa3d6).matches HEAD: no. Diff:frontend/src/create/review/Review.svelte+5 lines restoring imports ofkeptInOrder/moveItem/missingMinimums/roleLabel/resolvePhotoUrl/LineupItemfromlineup.tsandnextPrimaryfromwoodPrimary.ts. The morning merge kept the call sites and dropped the imports →ReferenceErroron Review mount → "Could not load the slab." - Rebuilt
deploy-frontendonly (compose build frontend+up -d frontend, no-v). Image56b35f6cdcdf. FastAPI container left running. - URL: http://192.168.1.202:10881 (LAN) · loopback 127.0.0.1:18082
- Bundle:
assets/index-BVCyM130.js(replacedindex-ck41xD02.js). Served JS has 0nextPrimary/keptInOrder(minified locals) vs 3 unresolvednextPrimaryin the broken bundle. - Sample data preserved: yes — 47 slabs before rebuild; 48 after live Capture→Review probe
(created
ef1f4101-b1d2-459d-b9a0-842e7650ea3c, sku NULL, status calibrated, 48×2 in; not published). - Live verification (loopback, real API): Continue to Review →
review-screenvisible, heading "Review to Ready", no loadError, no pageerror. POST /slabs 201, photos 201×2, GET slab/taxonomy/settings 200, review 200. - In-repo mock e2e (m3-create + photo-strip) 6/6 green against the same bundle hash before deploy.
- Not done: commit/push of the import restore; Woo publish path not re-exercised this round.