01aa4c52c3
Surface-matrix sweep of every source doc; added nine missed behaviors (METADATA-115, REVIEW-50, APP-55/60/65, SETTINGS-45 mode, Generate-text availability, defaults-off). 153 requirements, 0 coverage gaps. Migrated capabilities to docs/capabilities/ and contracts to docs/contracts/; added WOO-API, API, DATA-MODEL, PROMPTS, UX, TEST-SPEC. Populated MILESTONES; branch-neutral trunk docs; renamed umbrella term to Woo Slab Taxonomy. Archived reconciliation working records under .audit/archive/.
159 lines
6.8 KiB
Markdown
159 lines
6.8 KiB
Markdown
# Coverage matrix — CREATE.md (current branch)
|
||
|
||
Source: `docs/CREATE.md` (current working tree).
|
||
Method: every surface entry dispositioned to PoR IDs or a recorded drop.
|
||
|
||
## Findings
|
||
|
||
None new. Two open decisions in the doc are already settled elsewhere: the `attributes` element
|
||
shape is resolved in `docs/contracts/WOO-API.md` §4, and the crop fill/floor (90% / 800) is the
|
||
PoR. The client stack note ("Vite + Svelte SPA") is implementation, not a requirement.
|
||
|
||
## Superseded (queued in migration TODOs)
|
||
|
||
- ready set "at least one inventory PNG" → REVIEW-5 (two images)
|
||
- grade 1+ → METADATA-15 (exactly one)
|
||
- `fig-*` 1+ required → METADATA-30 (optional)
|
||
- `short_title` → REVIEW-10 (`short_description`)
|
||
- "user typed number wins if overridden" for widths/sqft/bdft → REVIEW-30, REVIEW-40 (read-only)
|
||
- "title/short/desc not required to reach ready" → REVIEW-10
|
||
- "templates always available" and "server assembles from templates" → METADATA-70, METADATA-80
|
||
(model writes when Call 2 runs; template is fallback)
|
||
- "Cap at 5 images" / "Cap ≤5" → PUBLISH-40 (no cap)
|
||
- Call 1 input "inventory photos downscaled to 1024" → METADATA-35 (clean processed photos)
|
||
|
||
## SETTINGS KEYS
|
||
|
||
- `WOO_BASE_URL` env, read-only → SETTINGS-5; HTTPS → SETTINGS-10
|
||
- `SLAB_AES_KEY` env → SETTINGS-25
|
||
- `woo_wp_username` / `woo_app_password` encrypted → SETTINGS-20
|
||
- `woo_create_status` default draft → SETTINGS-65
|
||
- `inference_base_url`, `inference_api_key`, `inference_model`, `inference_enabled` → SETTINGS-30
|
||
- `content_llm_enabled` → SETTINGS-30, SETTINGS-90
|
||
- `taxonomy_last_sync_at`, `taxonomy_anchor` → SETTINGS-55
|
||
- `brand_voice`, `geo_context` → SETTINGS-30
|
||
|
||
## CONTROLS
|
||
|
||
- store URL read-only → SETTINGS-5
|
||
- credential entry → SETTINGS-20
|
||
- Generate text disabled when endpoint down → METADATA-110, METADATA-75
|
||
- Call 2 blocked when test-inference `fail` → SETTINGS-45
|
||
- inline nudges → REVIEW-20
|
||
- species picker synced only → METADATA-5, METADATA-10
|
||
- attribute pickers synced only → METADATA-15
|
||
- stale field / vanished id → PUBLISH-20, REVIEW-35
|
||
- duplicate SKU actions → PUBLISH-15
|
||
- create/publish trigger → PUBLISH-5
|
||
- draft upload trigger → CAPTURE-135
|
||
|
||
## LISTING FIELDS
|
||
|
||
- `sku` → REVIEW-45; `status` enum → APP-5
|
||
- `length_in`, `thickness_in` 1/8 → CAPTURE-70
|
||
- `sqft`, `bdft`, widths → CAPTURE-80, CAPTURE-85, CAPTURE-90
|
||
- `species_id` 1 leaf → METADATA-10; `wood_category_ids` 1+ → METADATA-10
|
||
- `edge_type_term_id` 1 → METADATA-15; `figure_term_ids` 1+ → METADATA-15
|
||
- `thickness_term_id` round-up → METADATA-15; `moisture_term_id` default kiln-dried → METADATA-15
|
||
- `feat_tag_ids` 0+ → METADATA-30
|
||
- `price`, `price_per_bdft`, `price_source` → REVIEW-25
|
||
- templates (title, short, description, `{character}`, `{geo_sentence}`) → contract detail in
|
||
`docs/contracts/CONTENT-WOO.md`; fallback only
|
||
- species/character/length/free-text thickness not attributes → METADATA-25
|
||
|
||
## STATUSES
|
||
|
||
- draft/calibrated/ready/publishing/published/failed → APP-5
|
||
- `woo_create_status` draft/publish → SETTINGS-65
|
||
- test-inference mode stateful/stateless/fail → SETTINGS-45
|
||
- device draft is not a Woo draft → APP-10
|
||
|
||
## ENDPOINTS
|
||
|
||
- `/api/health` → APP-30, APP-45
|
||
- slabs CRUD, photos, infer-taxon, infer-content, publish, taxonomy, pricing, settings →
|
||
`docs/contracts/API.md`
|
||
- Woo endpoints (`/wc/v3/products`, categories, tags, attributes, media) →
|
||
`docs/contracts/WOO-API.md`
|
||
|
||
## ERROR CODES
|
||
|
||
- 502 `woo_error` → SETTINGS-50, PUBLISH-30
|
||
- 422 `unpublishable` → REVIEW-5
|
||
- 409 `duplicate_sku` → PUBLISH-15
|
||
- 202 publish → contract
|
||
|
||
## USER-FACING ERROR / EMPTY STATES
|
||
|
||
- sync failure keeps previous cache → SETTINGS-50
|
||
- create blocked until ready → REVIEW-5, REVIEW-20
|
||
- duplicate SKU block → PUBLISH-15
|
||
- stale field, current options → PUBLISH-20
|
||
- vanished id not silently swapped → REVIEW-35
|
||
- failure: log, mark failed, keep photos, field-level error, no raw code → PUBLISH-30, PUBLISH-35
|
||
- low-confidence not shown as defaults → METADATA-45
|
||
- Generate text down → METADATA-110
|
||
- no pricing rule → price empty, owner types → REVIEW-25
|
||
|
||
## INFERENCE
|
||
|
||
- Call 1 auto only when enabled → METADATA-35
|
||
- Call 1 input (photos, metadata, taxonomy) → METADATA-35
|
||
- Call 1 output + confidence → METADATA-40
|
||
- threshold 0.7 pre-fill / below empty → METADATA-45
|
||
- moisture never inferred → METADATA-15
|
||
- typed wins → METADATA-50
|
||
- never blocks create / auto-publish → METADATA-75
|
||
- Call 2 user-triggered; requires test-inference ok → METADATA-55, SETTINGS-45
|
||
- model prose only, no dimensions → METADATA-65
|
||
- templates fallback → METADATA-70
|
||
- test-inference shape, fail blocks Call 2 only → SETTINGS-45
|
||
- templates math from deterministic pipeline → METADATA-90
|
||
- inference-off create → QUALITY-20, METADATA-70
|
||
- FastAPI proxies inference → APP-25
|
||
|
||
## PUBLISH PAYLOAD / FLOW
|
||
|
||
- payload fields (`name`, `type`, `status`, `sku`, `regular_price`, `description`,
|
||
`short_description`, `categories`, `tags`, `images`, `attributes`, `virtual`, `downloadable`,
|
||
`catalog_visibility`) → `docs/contracts/WOO-API.md`, PUBLISH-55
|
||
- non-null only → PUBLISH-55
|
||
- `SLAB-UAT-*` force draft → PUBLISH-10
|
||
- images upload keep alpha, lineup order → PUBLISH-40, PUBLISH-45
|
||
- published meaning (not live) → PUBLISH-50
|
||
- success behavior (product id, purge, delete row, clear device draft) → PUBLISH-25, APP-15
|
||
- failure behavior → PUBLISH-30
|
||
- create sequence steps 1–4 → PUBLISH-5
|
||
- `images alt` text → contract detail
|
||
- attributes element shape → resolved, `docs/contracts/WOO-API.md` §4
|
||
|
||
## CONSTANTS / NUMBERS
|
||
|
||
- `per_page=100` → SETTINGS-50, WOO-API §7
|
||
- connect 10s / read 60s → contract detail
|
||
- taxonomy staleness 1 hour → SETTINGS-60
|
||
- SKU `[A-Z0-9-]{3,24}` → REVIEW-45
|
||
- downscale 1024 → METADATA-35
|
||
- confidence 0.7 → METADATA-45
|
||
- bdft and price formulas → CAPTURE-90, REVIEW-25
|
||
- 1/8 step → CAPTURE-70
|
||
- five attributes → METADATA-15
|
||
- UAT port `:10881`, do not touch `:10880` → OPS-40
|
||
- fill 90% / 800px floor → CAPTURE-100, CAPTURE-105
|
||
|
||
## BROWSER / API SUPPORT
|
||
|
||
- FastAPI only Woo caller; browser no creds → APP-25
|
||
- app-password Basic auth, not consumer keys → SETTINGS-15
|
||
- HTTPS only → SETTINGS-10
|
||
- proxy inference, no key in browser → APP-25, SETTINGS-30
|
||
- device draft IndexedDB → APP-10, CAPTURE-140
|
||
- Woo source of truth, cache ids → METADATA-5
|
||
- v1 no term creation → METADATA-20
|
||
- taxonomy sync order, transactional, anchor, re-pull, triggers → SETTINGS-50, SETTINGS-55,
|
||
SETTINGS-60
|
||
- pricing rules flat per species, seed, override sticks, manual allowed → SETTINGS-35, REVIEW-25
|
||
- practice rules (`SLAB-UAT-*`, hidden, inference off) → PUBLISH-10, QUALITY-20
|
||
- dishonest proxies → QUALITY-105
|
||
- tag/leaf filters and feat mapping → SETTINGS-51, METADATA-10, METADATA-30, METADATA-100
|