Files
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

6.1 KiB

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