1a50fad0a5
Drop the metadata_locked column + "Save and lock" UI end-to-end. The review endpoint now builds the deterministic title/short_description on every call; the owner's Create title / Create short desc buttons fire the build and write the result (force-overwrite contract). commitReview auto-fills only empty fields (no owner-clobber) and folds the deterministic copy into its single PUT (kills the client_rev 409 cascade). Taken wholesale from the branch: photo strip, wood primary/secondary, server-side thickness band (hidden from UI, passed to Woo on publish), and fixes #80/#82/#83/#84. - backend: remove metadata_locked from schema.sql, db sentinels, slabs.py client fields/exposure, review.py lock action; review always computes title/short_desc - frontend: slabs.ts + Review.svelte drop the lock model, add Create-string workflow + wood primary + photo strip - e2e: m3-create + review-photo-strip rewritten for the Create-string contract; thickness-band test asserts absence (per #90) - deploy: recreate LAN binds (override-m3.yml was absent); verify metadata_locked gone, review builds title, PUT persists Gates: backend 117/117, unit 88/88, tsc clean, e2e 6/6 (m3-create + photo-strip). Live UAT verified at 192.168.1.202:10881.
5.0 KiB
5.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.
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.