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.
This commit is contained in:
2026-09-02 02:38:15 +00:00
parent 06a5c23c5f
commit b5c45c75be
4 changed files with 13 additions and 17 deletions
+1 -1
View File
@@ -172,7 +172,7 @@ Prompt file mechanics: `docs/PROMPTS.md`.
`draft → calibrated → ready → publishing → published` (or `failed` with detail). `draft → calibrated → ready → publishing → published` (or `failed` with detail).
- **calibrated:** mask + axis confirmed; length/thickness/SKU entered; client computed sqft/bdft/widths; draft uploaded. - **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). - 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`). - Never confuse slab `draft` with **Woo draft** (`woo_create_status`).
+1 -1
View File
@@ -65,7 +65,7 @@ any → failed (with error)
1. **draft** — photos taken, no mask confirmed. 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. 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. 4. **publishing** — Woo create in flight. Poll for result.
5. **published** — Woo product created. This row + all photos deleted. sync_log retained. 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. 6. **failed** — pipeline, inference, or publish error. Error detail stored. Retry available.
+1 -1
View File
@@ -188,7 +188,7 @@ Sheet/slider prefs are client localStorage only in POC (not in SettingsView).
### Publish ### Publish
- `POST /api/v1/slabs/{id}/publish` — Publish to WooCommerce. - `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). - 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. - Stale Woo value → `422 stale_field` as above. Draft stays on the phone.
- Returns `202` `{ "status": "publishing" }`. Client polls. - Returns `202` `{ "status": "publishing" }`. Client polls.
+10 -14
View File
@@ -6,13 +6,15 @@ A suggestion from the vision model never beats a typed value. Empty is better th
## Before you can list ## 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 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.
- at least one wood category
- at least one figure (the store's figure list, including `fig-*` tags)
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 ## 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 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. 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 ### Nudges on the field
Empty required fields show a line under the control as soon as the screen opens: 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.
- 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.
### Overrides ### 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. 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. 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. 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. 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. 9. Duplicate SKU: message under SKU, two actions, no status number.
10. Stale category: message under that field, current options. 10. Stale category: message under that field, current options.