bdd03afce4
#88 — thickness band is now display-only, derived deterministically from thickness_in against the synced Woo thickness terms (TV-9 / QUALITY-95). Replaces the <select> with a read-only div. New pure function deriveThicknessTermId + 6 unit tests. Docs (UAT-PRACTICE, contracts/UX) updated to reflect the band is not an owner control. #90 — MultiSelect closed state now shows the selected option names (truncated to 2 + +N) instead of just a count. onCommit prop wired so multi-select changes persist + re-review immediately (250ms debounce, flush on Done, cleanup on destroy). Single-select binds use string vars (speciesSel/edgeSel/gradeSel) to fix the number/string mismatch with <option value={id}>; a tick()-deferred syncSelects() keeps the DOM option in sync after programmatic writes (AI prefill, reload hydrate) that Svelte's own select_option would otherwise reset.
Contract docs
Cross-cutting interface detail shared by capabilities.
Rules (docs/STRUCTURE.md): a contract doc cites requirement IDs from docs/REQUIREMENTS.md; it never defines or restates them.
Contract docs (migrated):
WOO-API.md— external WooCommerce REST API v3 surface (new; the dependency contract)API.md— FastAPI HTTP contract (from tagOPENAPI.md)DATA-MODEL.md— SQLite schema and status machine (from tagDATA-MODEL.md)UX.md— screens, field recovery, outcomes (from tagUX.md)PROMPTS.md— Call 1 / Call 2 prompt text and inputs (from tagPROMPTS.md)CONTENT-WOO.md— listing copy and Woo payload intent (fromdocs/CONTENT-WOO.md)TEST-SPEC.md— test pyramid, vectors, dishonest proxies (from tagTEST-SPEC.md) — pending
Template: docs/_templates/contract.md.