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/.
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user