693719e85f88ed964beb555ccab7d582f28722a8
The Review screen now has an explicit 'Lock & Build Title' step. Until the
owner locks, title/short_description stay empty (no 'ready' copy from an
unlocked AI draft). On lock the server validates the taxonomy, sets
metadata_locked=1, builds + persists the deterministic title/short_description
(owner prose wins), and returns the ready state.
- schema.sql: add metadata_locked INTEGER DEFAULT 0 to slabs
- db/__init__.py: bump _SCHEMA_SENTINELS for metadata_locked
- slabs.py: expose metadata_locked in GET; reject it in PUT (server-managed)
- review.py: POST /{id}/review action=lock path; regular review reports
stored (empty) copy until locked
- test_review.py: 8 tests covering lock gate, owner-prose-wins, stale taxonomy
- frontend/api/slabs.ts: Slab.metadata_locked, ReviewResult.locked,
ReviewInput.action, lockSlab() helper
- Review.svelte: lockMetadata() with correct commit-token ordering (bump AFTER
inner commit so the inner PUT isn't superseded), Lock button, locked banner
- e2e/m3-create.spec.ts: pare to single golden path (capture→review→lock→
ready→publish→done); mock respects optimistic concurrency (client_rev) so
stale PUTs 409 like the real backend
…
SlabUploader
Lists one-of-a-kind wood slabs on Whidbey Wood Store.
Start at docs/README.md for goals, what already shipped, and Milestone 3.
| Artifact | File |
|---|---|
| Docs map | docs/README.md |
| Structure contract | docs/STRUCTURE.md |
| Requirements (normative) | docs/REQUIREMENTS.md |
| Milestones (ID subsets) | docs/MILESTONES.md |
| Product overview | docs/PRODUCT.md |
| Invariants and agent context | AGENTS.md |
| Milestone 1 Capture (shipped) | docs/capabilities/CAPTURE.md |
| Milestone 2 Photos (shipped) | docs/capabilities/PHOTOS.md |
| Milestone 3 Create (paused — requirements reconciliation) | docs/capabilities/CREATE.md |
| UAT practice walk | docs/UAT-PRACTICE.md |
| Hosting | deploy/ |
Owner: Ty. Store: https://www.whidbeywoodstore.com/
Repo: Ty_Tech/SlabUploader
Languages
TypeScript
43.5%
Python
37%
Svelte
18.8%
Shell
0.4%
Dockerfile
0.2%