From b5c45c75be940d151a042e22612e56baa9fa676f Mon Sep 17 00:00:00 2001 From: grokbot_ty Date: Wed, 2 Sep 2026 02:38:15 +0000 Subject: [PATCH] docs: list-ready is the full store row, not the confidence-gate trio Ty rejected the three-bullet UX block. Name the DATA-MODEL submit set. Empty-below-0.7 stays a subset for vision fields only. --- AGENTS.md | 2 +- docs/DATA-MODEL.md | 2 +- docs/OPENAPI.md | 2 +- docs/UX.md | 24 ++++++++++-------------- 4 files changed, 13 insertions(+), 17 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 1aa6a87..a8d37e5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -172,7 +172,7 @@ Prompt file mechanics: `docs/PROMPTS.md`. `draft → calibrated → ready → publishing → published` (or `failed` with detail). - **calibrated:** mask + axis confirmed; length/thickness/SKU entered; client computed sqft/bdft/widths; draft uploaded. -- **ready:** mandatory fields filled (exactly one species, ≥1 wood category, ≥1 figure, plus remaining required listing fields). Values from Call 1 only when confidence ≥ 0.7, else manual. Inference optional. +- **ready:** SKU, length, thickness, client sqft/bdft/widths, at least one inventory PNG, exactly one species, ≥1 wood category, edge type, ≥1 figure and matching fig tags, grade, thickness store band, moisture (default kiln-dried), price, title, short title, description. Feature tags optional. Vision may prefill taxonomy only when confidence ≥ 0.7. - Inference does not gate publish. Below-threshold Call 1 does not prefill; empty mandatory fields block ready (see UX spec). - Never confuse slab `draft` with **Woo draft** (`woo_create_status`). diff --git a/docs/DATA-MODEL.md b/docs/DATA-MODEL.md index 4208bae..9837cec 100644 --- a/docs/DATA-MODEL.md +++ b/docs/DATA-MODEL.md @@ -65,7 +65,7 @@ any → failed (with error) 1. **draft** — photos taken, no mask confirmed. 2. **calibrated** — BG edge confirmed, length axis confirmed, length/thickness/SKU entered. Client computed sqft/bdft/widths. Draft uploaded to server. -3. **ready** — exactly one species, ≥1 wood category, ≥1 figure, plus remaining listing fields. Call 1 may prefill only when confidence ≥ 0.7. Inference optional. Publishable. +3. **ready** — SKU, length, thickness, client sqft/bdft/widths, ≥1 inventory PNG, one species, ≥1 wood category, edge type, ≥1 figure and fig tags, grade, thickness store band, moisture (default kiln-dried), price, title, short title, description. Feature tags optional. Vision may prefill taxonomy only when confidence ≥ 0.7. 4. **publishing** — Woo create in flight. Poll for result. 5. **published** — Woo product created. This row + all photos deleted. sync_log retained. 6. **failed** — pipeline, inference, or publish error. Error detail stored. Retry available. diff --git a/docs/OPENAPI.md b/docs/OPENAPI.md index 6c3fc15..db8ff82 100644 --- a/docs/OPENAPI.md +++ b/docs/OPENAPI.md @@ -188,7 +188,7 @@ Sheet/slider prefs are client localStorage only in POC (not in SettingsView). ### Publish - `POST /api/v1/slabs/{id}/publish` — Publish to WooCommerce. - - Pre-conditions: status in `ready`, mandatory set (exactly one species, ≥1 wood category, ≥1 figure, remaining listing fields). Else `422 unpublishable` with field keys — UI maps, no raw code. + - Pre-conditions: status `ready` with the DATA-MODEL ready set (SKU, measures, PNG, species, wood category, edge, figure+fig tags, grade, thickness band, moisture, price, title, short title, description). Else `422 unpublishable` with field keys. UI maps, no raw code. - Dedupe: if SKU already exists in Woo under any status → `409 duplicate_sku` (same payload as PUT). - Stale Woo value → `422 stale_field` as above. Draft stays on the phone. - Returns `202` `{ "status": "publishing" }`. Client polls. diff --git a/docs/UX.md b/docs/UX.md index f36d9e1..8be943d 100644 --- a/docs/UX.md +++ b/docs/UX.md @@ -6,13 +6,15 @@ A suggestion from the vision model never beats a typed value. Empty is better th ## Before you can list -You cannot mark a slab ready until all of these are set: +A listing is ready when the store row is complete, not when species and figure are filled. -- exactly one species -- at least one wood category -- at least one figure (the store's figure list, including `fig-*` tags) +Capture already gave you photos (cut and length axis confirmed), the listing PNG, SKU, length, thickness, and the computed square feet, board feet, and widths. -The missing field is marked on the control itself, not only after you tap continue. +Review still needs the rest of the store fields: one species, at least one wood category, edge type, at least one figure (the figure attribute and the matching fig tag), grade, the store thickness band taken from the thickness you typed, moisture (kiln-dried unless you change it), a price, and a title, short title, and description. Feature tags are optional. + +If vision is on and sure enough, it may fill some of those store fields. If it is not sure, species, wood category, edge, figure, grade, and feature tags stay empty for you to pick. That empty-vs-fill rule is only those fields. It is not the whole listing. SKU and measurements do not wait on the model. + +Any required field that is still empty is marked on that control. You should not have to tap continue to find out which one. ## First time you open the camera @@ -76,7 +78,7 @@ If the model is at least that sure, it fills species, wood categories, edge, fig If it is less sure, leave those fields empty. Do not hide the guess in a secret field. -If vision is off, the fields start empty. Same required set. You fill them by hand. +If vision is off, those store fields start empty. You fill the listing by hand. Measurements and SKU are already there from capture. Species, wood category, and figure lists are only what we last pulled from the store. No "other." No mill list baked into the app. A species added in WooCommerce after the last sync does not appear until the next successful sync. @@ -86,13 +88,7 @@ Title and description start empty until you type or tap Generate text. Generate ### Nudges on the field -Empty required fields show a line under the control as soon as the screen opens: - -- Species: "Pick the species from the store list." -- Wood category: "Pick at least one wood category." -- Figure: "Pick at least one figure." - -The line goes away when the field is valid. Continue stays off while any of the three is empty. You should not have to tap continue to find out which one. +Every required field that is empty gets a line under that control when the screen opens. Species: "Pick the species from the store list." Wood category: "Pick at least one wood category." Figure: "Pick at least one figure." Edge, grade, moisture, price, title, short title, and description use the same pattern on their own controls if they are empty. The line goes away when that field is valid. Continue stays off while any required field is empty. ### Overrides @@ -140,7 +136,7 @@ If the store is down, times out, or auth fails: one banner, "Couldn't reach the 4. Length axis: rotate and confirm by eye; retake if the shot is still wrong. 5. Optional size gate: after crop, if the short side is under the tech-spec minimum, that photo cannot list until retake. No invented pixels. 6. Vision on and sure: fields filled, still editable. -7. Vision unsure: species, wood category, and figure empty, with lines under them. Cannot mark ready until all three are set. +7. Vision unsure: species, wood category, edge, figure, grade, and feature tags empty. Continue stays off until the whole listing is filled, not only those fields. 8. Species list is only synced names. You cannot type a name that is not there. 9. Duplicate SKU: message under SKU, two actions, no status number. 10. Stale category: message under that field, current options.