Files
SlabUploader/.audit/coverage/matrix/create.md
T
Ty 01aa4c52c3 docs(phase2): reconcile requirements and migrate capabilities/contracts
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/.
2026-09-18 21:02:06 -07:00

159 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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