Files
SlabUploader/.audit/coverage/matrix/openapi.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

153 lines
6.1 KiB
Markdown

# Coverage matrix — OPENAPI.md
Source: `docs/OPENAPI.md` at tag `pre-simplification`.
Method: subagent extracted every surface entry; PoR home assigned here.
Dispositions: `ported`, `superseded`, `dropped` (contract detail), `ui`, `missing`.
## Findings
None. Three items are contract detail (photo 40 MB request cap, `GET /meta`, `inference_error`
field), and the schema conflicts are already resolved in the PoR.
## SETTINGS KEYS
- `woo_base_url` read-only → SETTINGS-5
- `woo_base_url` not writable, reject write → SETTINGS-85
- `woo_wp_username` / `woo_app_password` write-only, AES-GCM → SETTINGS-20
- reject `woo_consumer_key` / `woo_consumer_secret` → SETTINGS-15
- `woo_credentials_configured` boolean → SETTINGS-75
- secrets masked, never echoed → SETTINGS-75
- `inference_base_url`, `inference_model`, `inference_enabled`, `content_llm_enabled`,
`brand_voice`, `geo_context`, `woo_create_status` → SETTINGS-30, SETTINGS-65
- `aspect_ratio` 3:4 → CAPTURE-100
- `output_px` / `output_px_min` 1600, `fill_target` 0.80 → superseded CAPTURE-105
- client prefs not in SettingsView → CAPTURE-145
- PUT partial body, re-encrypt, no echo → SETTINGS-20, SETTINGS-30
- `inference_enabled` default `true` in the example → superseded SETTINGS-90 (default off)
## CONTROLS
- pickers limited to synced taxonomy → METADATA-5
- duplicate SKU actions `edit_sku` / `open_existing` → PUBLISH-15
- stale field actions/options → PUBLISH-20
## LISTING FIELDS (SlabCreate, read model, results)
- `id`, `client_rev` → APP-20
- `sku` 3..24 uppercase → REVIEW-45 (case widened; Woo hard cap in WOO-API §9)
- `length_in`, `thickness_in` 1/8 → CAPTURE-70
- `sqft`, `bdft`, widths → CAPTURE-80, CAPTURE-85, CAPTURE-90
- `species_id`, `wood_category_ids` → METADATA-10
- `edge_type_term_id`, `figure_term_ids`, `thickness_term_id`, `moisture_term_id` → METADATA-15
- `grade_term_ids` (plural, 1+) → superseded METADATA-15 (exactly one, singular)
- `fig_tag_ids` (1+) → superseded METADATA-30 (optional)
- `feat_tag_ids` (0+) → METADATA-30
- `price`, `price_source` → REVIEW-25
- `price_per_bdft` on slab → contract detail (pricing rules SETTINGS-35)
- `title`, `description` → REVIEW-10
- `short_title` → superseded REVIEW-10 (`short_description` canonical)
- `content_source` → METADATA-66
- read model `status`, `inference_status`, `woo_product_id`, `published_at`, revisions → APP-5,
METADATA-35, PUBLISH-25, APP-20
- `inference_error` → contract detail
- PhotoRead `kind` label → dropped (label discarded); urls → contract; 410 → PUBLISH-25
- Call1 result ids/confidences → METADATA-40; free-text → METADATA-100
- Call2 result → METADATA-55/60
- PriceRule shape → SETTINGS-35
## STATUSES
- `calibrated` on create → APP-5, CAPTURE-135
- `ready` preconditions → REVIEW-5 (fig/grade cardinality superseded)
- `publishing` / `failed` / `published` → APP-5, PUBLISH-25, PUBLISH-30
- `inference_status` enum → METADATA-35
- duplicate check across any Woo status → PUBLISH-15
## ENDPOINTS
- `GET /api/health` body → APP-45
- `GET /api/v1/meta` → contract detail
- `POST/GET/PUT/DELETE /api/v1/slabs` → docs/contracts/API.md
- `POST .../u2net/{pid}` reserved → CAPTURE-165
- `GET .../photos/...` → PUBLISH-25
- `POST .../infer-taxon` → METADATA-35
- `POST .../infer-content` → METADATA-55
- `POST .../publish` → PUBLISH-5
- taxonomy GET/sync → SETTINGS-50, SETTINGS-55, SETTINGS-60
- pricing CRUD → SETTINGS-35
- settings GET/PUT, test-woo, test-inference → SETTINGS-20, SETTINGS-30, SETTINGS-40, SETTINGS-45,
SETTINGS-75, SETTINGS-85
- `GET /api/v1/validation/module` → dropped (module cut)
## ERROR CODES
- 400, 404, 500 → APP-35
- 409 `revision_conflict` → APP-20
- 409 `duplicate_sku` → PUBLISH-15
- 422 `unpublishable` → REVIEW-5, REVIEW-20
- 422 `stale_field` → PUBLISH-20
- 422 test-inference gate → SETTINGS-45
- 422 `woo_base_url` write → SETTINGS-85
- 502 `woo_error` → PUBLISH-30, SETTINGS-50
- 504 timeout → METADATA-115
- 410 photos → PUBLISH-25
- 412 validation module → dropped (module cut)
## USER-FACING ERROR / EMPTY STATES
- never show the code, no raw code → PUBLISH-35
- unpublishable UI mapping → REVIEW-20
- test-woo fails closed → SETTINGS-80
- test-inference `fail` blocks Call 2 only → SETTINGS-45, METADATA-75
- low-confidence no prefill → METADATA-45
- Woo failure surfaces as failed + log → PUBLISH-30
- taxonomy sync failure keeps previous cache → SETTINGS-50
## INFERENCE
- Call 1 auto only if enabled → METADATA-35
- Call 1 inputs "original photos downscaled to 1024" → superseded METADATA-35 (clean processed
photos)
- Call 1 timeout 45s → METADATA-115
- confidence persist ≥0.7 → METADATA-45
- free-text → feat-* mapping → METADATA-100
- Call 2 default resend full context → METADATA-60 (no thread)
- `previous_response_id`, per-slab thread → superseded (thread work out)
- Call 2 requires test-inference ok → SETTINGS-45
- validation module shared with Call 2 → dropped (module cut)
## PUBLISH PAYLOAD / FLOW
- preconditions → REVIEW-5
- dedupe → PUBLISH-15
- stale → PUBLISH-20
- success (product id, purge, delete row) → PUBLISH-25
- failure (failed, sync_log, poll 502) → PUBLISH-30
- create-time Woo status → SETTINGS-65, PUBLISH-10
## CONSTANTS / NUMBERS
- base path `/api/v1`, version bump → APP-30
- timestamps UTC ISO-8601 → APP-20
- photo request cap 40 MB → contract detail
- SKU pattern `[A-Z0-9-]{3,24}` → REVIEW-45
- 1/8 step → CAPTURE-70
- price 2 decimals → REVIEW-25
- poll backoff 1/2/4/10s → contract detail
- 1024 downscale → METADATA-35
- 0.7 threshold → METADATA-45
- 45s timeout → METADATA-115
- 3:4 → CAPTURE-100
- 1600 / 0.80 → superseded CAPTURE-105
- publish cardinalities → REVIEW-5
## BROWSER / API SUPPORT
- client pins version → APP-30
- no client auth → OPS-55
- Woo HTTPS Basic Auth, application password, not consumer keys → SETTINGS-10, SETTINGS-15
- u2net post-POC not exposed → CAPTURE-165
- out of contract (bulk, staff, webhook, analytics) → dropped
- test-woo always resyncs → SETTINGS-40
- anchor re-pull / bump rules → SETTINGS-55, SETTINGS-60