# Coverage matrix — TEST-SPEC.md Source: `docs/TEST-SPEC.md` at tag `pre-simplification` (107 cases). Reconciled last, against the finished PoR. ## Findings Two behaviors were tested but not required; both are now PoR rows: - FUND-3, FUND-5, FUND-6, FUND-7 (keyboard tab order, visible focus ring, 320 px reflow) → `APP-60` - FUND-24 (no secret material in logs) → `APP-65` ## Superseded cases to purge on migration - UI-1, UIE-9, UIE-10 — four knobs (edge offset, feather) → two controls - V-3, API-8 — shared validation module, version hash, 412 - C2-2 — `previous_response_id` / per-slab thread - C1-1 — "inventory photos at 1024" → clean processed photos - C2-4 — prompt file edits without restart → prompts live in the DB - TV-6, TV-7, E2E-5 — 80 percent fill / 1600 px → 90 percent / 800 px - UIE-1, E2E-4 — manual override of computed fields → read-only ## Case map FUND - FUND-1..4, 8..11 — test conventions → dropped (test practice, not requirements) - FUND-3, 5, 6, 7 — accessibility → APP-60 - FUND-12, 13, 16 — SQLite constraints/migrations → dropped (engineering practice) - FUND-14 — WAL stale reads → dropped (engineering practice) - FUND-15 — illegal status transitions rejected → APP-5 - FUND-17 — fresh nonce, tamper fails → SETTINGS-25 - FUND-18 — ciphertext absent from GET → SETTINGS-75 - FUND-19 — missing key refuses startup → SETTINGS-25 - FUND-20 — Basic auth app passwords, HTTPS → SETTINGS-15 - FUND-21 — 401/400/404 mapped → APP-50 - FUND-22 — pre-create SKU lookup, race → PUBLISH-15 - FUND-23 — timeouts/network errors graceful, no stack → PUBLISH-30, PUBLISH-35 - FUND-24 — secrets redacted in logs → APP-65 - FUND-25 — HTTPS, health via proxy, port collision → OPS-5, OPS-15, OPS-20 TV - TV-1..TV-10 → QUALITY-55..QUALITY-100 (TV-6/TV-7 numeric values superseded) Validation - V-1 — SKU charset → REVIEW-45 - V-2 — title/description limits → REVIEW-50 - V-3 — module hash / 412 → dropped AES / health / draft - AES-1 → QUALITY-125, SETTINGS-75 - AES-2 → SETTINGS-25 - H-1 → APP-45 - D-1 → API contract, APP-5 Gate C / Woo - GC-1 → PUBLISH-10; GC-2 → PUBLISH-15; GC-3 → SETTINGS-40; GC-4 → SETTINGS-85; GC-5 → SETTINGS-10 - W-1 → PUBLISH-25; W-2 → PUBLISH-15; W-3 → SETTINGS-55; W-4 → SETTINGS-40; W-5 → PUBLISH-30 Inference - INF-1 → METADATA-75, QUALITY-20 - INF-2, INF-3 → SETTINGS-45 (mode is kept) - INF-4 → SETTINGS-45 UI (capture) - UI-1 → superseded CAPTURE-40 - UI-2 → CAPTURE-50, CAPTURE-55, CAPTURE-165 - UI-3 → CAPTURE-60, CAPTURE-65 - UI-4 → CAPTURE-70, CAPTURE-80, CAPTURE-85, CAPTURE-90 - UI-5 → REVIEW-5, REVIEW-20 Ops - OPS-1 → APP-45; OPS-2 → OPS-15; OPS-3 → SETTINGS-40, SETTINGS-65, APP-45; OPS-4 → OPS-30; OPS-5 → OPS-35 API - API-1 → APP-20; API-2 → APP-40; API-3 → SETTINGS-75; API-4 → METADATA-35, METADATA-115; API-5 → METADATA-45; API-6 → REVIEW-5; API-7 → SETTINGS-50, SETTINGS-55; API-8 → dropped; API-9 → API contract; API-10 → SETTINGS-80 - TAX-1 → SETTINGS-60; TAX-2 → METADATA-5; TAX-3 → SETTINGS-60 UI end-to-end - UIE-1 → superseded REVIEW-30, REVIEW-40 - UIE-2 → METADATA-45, REVIEW-20 - UIE-3 → PUBLISH-15; UIE-4 → PUBLISH-20; UIE-5 → PUBLISH-25; UIE-6 → PUBLISH-30 - UIE-7 → METADATA-70, METADATA-110 - UIE-8 → SETTINGS-5, SETTINGS-15, SETTINGS-20, SETTINGS-30, SETTINGS-35, SETTINGS-65 - UIE-9, UIE-10 → superseded CAPTURE-40, CAPTURE-45, CAPTURE-145 Calls - C1-1 → superseded METADATA-35 (clean processed photos) - C1-2, C1-3 → METADATA-45, REVIEW-5 - C2-1 → METADATA-55, METADATA-60 - C2-2 → superseded (thread work out) - C2-3 → METADATA-65 - C2-4 → METADATA-66, METADATA-105 - OFF-1 → QUALITY-20; OFF-2 → SETTINGS-45 Instrumentation - INS-1 → APP-45; INS-2 → APP-55; INS-3 → METADATA-66; INS-4 → PUBLISH-30 E2E - E2E-1..3 → QUALITY-115 - E2E-4 → superseded REVIEW-30, REVIEW-40 - E2E-5 → superseded CAPTURE-100, CAPTURE-105 ## Test harness (contract detail) Harness layout, allowed result values, evidence rules, and the Gitea-issue bug log are engineering practice. They belong in `docs/contracts/TEST-SPEC.md`, not the PoR.