Files
SlabUploader/docs
Ty 120e0be871 docs(m3): settle deterministic title and Call 2 design
Encode the recovered per-leaf title/short-description rule and the Call 2
input set into the point of record.

- REQUIREMENTS.md: METADATA-55 now produces the description only; METADATA-60
  carries the ruled input set; METADATA-80 is the deterministic title; new
  METADATA-81 is the deterministic spec-line short description; METADATA-85
  selects the patterns; REVIEW-15 declares the primary before Call 2;
  PUBLISH-55 carries an explicit name+SKU slug.
- CONTENT-WOO.md: per-leaf title and short-description catalog, slot order,
  dimension placement, and the Cook Woods provenance.
- PROMPTS.md: Call 2 inputs and output; the deterministic patterns are cited,
  not restated.
- CREATE.md, WOO-API.md, MILESTONES.md, task_breakdown.md updated to match.

Modeled on Cook Woods product-title form; the seven per-leaf prose templates
and Specialty cuts are parked in the M3 breakdown.
2026-09-19 11:36:03 -07:00
..

Docs map

Phase 2 status (2026-09-18). Requirements are reconciled; capability and contract docs are migrated into docs/capabilities/ and docs/contracts/. .audit/ holds the working records.

Read this file first. It tells you what SlabUploader is for, what already ships, and what Milestone 3 must build.

Who this is for. Mill owner (Ty), humans reviewing scope, and agents implementing.

Source of truth for Milestone 3. docs/REQUIREMENTS.md plus the M3 ID subset in docs/MILESTONES.md. Behavior is in docs/capabilities/CREATE.md and the docs/contracts/ set.

High-level project goal

SlabUploader lists one-of-a-kind wood slabs on Whidbey Wood Store (WooCommerce).

One slab is one unit and one listing. Photos and metadata are the inventory record. The mill owner photographs a slab on a green or black sheet, gets store-ready transparent PNGs and measurements on the phone, fills the store's taxonomy and price, then creates a WooCommerce product.

Store: https://www.whidbeywoodstore.com/

What is already implemented (pre-M3)

Milestone Spec Status on this branch
1 Capture docs/capabilities/CAPTURE.md Shipped. Browser-only mask, length axis, measure, inventory PNG, device draft.
2 Photos docs/capabilities/PHOTOS.md Shipped. Batch photos, pick calibration, apply mask/crop to the batch, dimension overlay, Photos-ready lineup. UAT on :10881.

There is no Woo create yet. There is no Complete-listing taxonomy UI yet. There is no FastAPI Woo client (backend/ is a stub). Inference is not wired.

What Milestone 3 builds

Spec: docs/capabilities/CREATE.md.

Exit criteria. A Photos-ready slab becomes submission-ready for WooCommerce, and a practice SLAB-UAT-* draft exists in the store that matches the reviewed ready set. Create must still work with inference off.

In plain terms, M3 connects the Photos-ready device draft to the real store:

  1. Talk to WooCommerce with a WordPress application password (server-side only).
  2. Sync and use the Woo Slab Taxonomy (categories, five locked attributes, fig-* / feat-* tags) per the requirements.
  3. Pricing from species $/bdft rules, with user override.
  4. Inference Settings (OpenAI-compatible URL, key, model) and Call 1 / Call 2 rules when enabled.
  5. Review to the full ready set, then create the Woo product (force draft for SLAB-UAT-*).

Technical detail for Woo sync, metadata, pricing, and inference is in docs/capabilities/CREATE.md and docs/contracts/.

How to read the folder

File Role
README.md (this file) Map: goals, shipped, M3.
PRODUCT.md Product overview: complete listing, decision rights, seams.
capabilities/CAPTURE.md Milestone 1 Capture (shipped).
capabilities/PHOTOS.md Milestone 2 Photos (shipped).
capabilities/CREATE.md Milestone 3 Create. Read this before task breakdown or coding.
contracts/CONTENT-WOO.md Listing copy templates and Woo payload intent.
UAT-PRACTICE.md Human practice walk for a SLAB-UAT-* listing. Defers to capabilities/CREATE.md on conflict.
archive/ Historical only. Not M3 scope.

Deploy reminders for this branch

  • Dev-test env Docker: ubudual5060 http://192.168.1.202:10881 (LAN) · http://100.64.0.9:10881 (Tailscale)
  • Port block 10880–10889 is this project's; never bind :10880 (Ty Node/SvelteKit)
  • Dev-test env binds 0.0.0.0 — reachable from any machine on 192.168.1.0/24
  • Store URL (WOO_BASE_URL) lives in compose / host .env
  • Woo application password and inference URL live in encrypted Settings, not in compose