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/.
6.8 KiB
6.8 KiB
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_URLenv, read-only → SETTINGS-5; HTTPS → SETTINGS-10SLAB_AES_KEYenv → SETTINGS-25woo_wp_username/woo_app_passwordencrypted → SETTINGS-20woo_create_statusdefault draft → SETTINGS-65inference_base_url,inference_api_key,inference_model,inference_enabled→ SETTINGS-30content_llm_enabled→ SETTINGS-30, SETTINGS-90taxonomy_last_sync_at,taxonomy_anchor→ SETTINGS-55brand_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;statusenum → APP-5length_in,thickness_in1/8 → CAPTURE-70sqft,bdft, widths → CAPTURE-80, CAPTURE-85, CAPTURE-90species_id1 leaf → METADATA-10;wood_category_ids1+ → METADATA-10edge_type_term_id1 → METADATA-15;figure_term_ids1+ → METADATA-15thickness_term_idround-up → METADATA-15;moisture_term_iddefault kiln-dried → METADATA-15feat_tag_ids0+ → METADATA-30price,price_per_bdft,price_source→ REVIEW-25- templates (title, short, description,
{character},{geo_sentence}) → contract detail indocs/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_statusdraft/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 alttext → 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