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:
2026-09-18 21:02:06 -07:00
parent a8cc2f7596
commit 01aa4c52c3
53 changed files with 3186 additions and 817 deletions
@@ -0,0 +1,183 @@
# Migration TODOs — source docs
- Date: 2026-09-18
- Branch: `docs/clean-main`
- Purpose: edits deferred until Phase 2 step 3, when the capability and contract docs are
migrated into `docs/capabilities/` and `docs/contracts/`, made branch-neutral, and
converted to cite requirement IDs.
- Rule: these docs are not edited now. `REQUIREMENTS.md` is the only normative text and is
already correct for everything below.
## CAPTURE.md
1. Line 16, "Length of the slab is aligned with the long side of the picture" — ruled dead.
Remove.
2. Lines 128–129, the `kind=inventory` role label — discarded. The "first inventory photo is
the measurement reference" half is `CAPTURE-115`; keep it as a citation, drop the label.
3. Line 140, editor/storefront alpha presentation — discarded.
4. The sensitivity mapping (line 69) and display/source-pixels rule (lines 58–62) are now
`CAPTURE-41` and `CAPTURE-141`; cite them instead of restating.
5. Line 82 busy mark ("more than a fraction of a second"; as-built is 300 ms) — ruled a
nit, not a requirement. Leave as design prose or drop.
## CREATE.md
1. Grade cardinality: change "1 or more" to 1 in all three places (attributes table,
ready set, data shape). Ruling: Grade is exactly one.
2. `fig-*` cardinality: change "1 or more / required" to optional in the tags table and the
ready set. Ruling: tags optional; the Figure attribute is at least one.
3. Ready-set images: change "at least one inventory PNG" to two (clean calibration plus its
dimension-overlay copy). Ruling: `REVIEW-5` is the PoR.
4. Remove "cap at 5 images" from the create sequence.
5. Remove "user typed widths/sqft/bdft wins"; the calculated fields are read-only.
6. Fix the Call 2 line so the model writes the title/description and the deterministic
template is the fallback, not the assembler.
## CONTENT-WOO.md
1. Em dash in the title template and example → hyphen.
2. "Templates (always on)" and "templates inject those numbers after the prose comes back" →
template is the fallback only; the model writes when Call 2 runs.
3. `fig-*` "1+ required" and the ready set including `fig-*` tags → tags optional.
4. "≤5 inventory photos" → no cap; drop the "only `kind=inventory`" clause.
5. The empty `attributes` element shape is the known deferred decision; keep the placeholder.
## PHOTOS.md
No changes. Overlay legibility and arrow/text drawing detail were ruled design, not
requirements.
## TEST-SPEC.md (→ `docs/contracts/TEST-SPEC.md`)
1. Migrate and cite requirement IDs; drop the pre-ID source-doc references.
2. Purge superseded cases: UI-1, UIE-9, UIE-10 (four knobs); V-3, API-8 (validation module);
C2-2 (`previous_response_id` / thread); C1-1 (image source); C2-4 (prompt files); TV-6, TV-7,
E2E-5 (80 percent / 1600 px); UIE-1, E2E-4 (computed override).
3. Add cases for the two new rows: `APP-60` (keyboard, focus ring, 320 px reflow) and `APP-65`
(no secret material in logs).
## IMPL-PLAN.md (retired)
1. Retire `docs/IMPL-PLAN.md`. Phases and Gates A/B/C are superseded by `MILESTONES.md` plus the
PoR; acceptance and test obligations are QUALITY rows.
2. Superseded: four knobs; "1–5 photos"; 80 percent / 1600 px; calculated-field override; portable
context and the stateful probe; prompt files.
## ARCHITECTURE.md
1. §1, §2, §4 "four knobs" including Edge offset and Feather — controls are exactly Sheet and
Sensitivity (`CAPTURE-40`).
2. §2 "1–5 photos" — one or more (`CAPTURE-25`).
3. §6.3 ready set requires 1+ `fig-*` tag and 1+ grade — tags are optional and grade is exactly
one (`METADATA-30`, `METADATA-15`).
4. §8/§9 shared validation module, `validation_hash`, 412, stateful/stateless mode, and
per-slab thread — ruled cut 2026-09-18; thread work is out of the MVP and test-inference no
longer returns mode.
5. Retire `docs/ARCHITECTURE.md`: its testable rules are APP/CAPTURE/SETTINGS rows, and the
topology is covered by those plus `deploy/`.
6. §3.4 Call 1 image input "all originals downscaled to 1024" → clean processed photos
(`METADATA-35`).
## UX.md (→ `docs/contracts/UX.md`) and UX-DESIGN.md (retired)
1. Migrate `docs/UX.md` to `docs/contracts/UX.md`: branch-neutral, cite requirement IDs, do not
restate rules.
2. Retire `docs/UX-DESIGN.md` (non-normative). Fold the "AI" badge, first-run card, separate
Title/Description screen, and error-state copy into the UX contract.
3. Superseded in UX.md: four knobs → two; "1 to 5 photos" → no cap; "no calibration photos" → the
calibration photo exists; 80 percent / 1600 px → 90 percent / 800 px; calculated-field override
path → read-only; grade 1+ → exactly one; `fig-*` 1+ → optional; "templates always run" →
template fallback; "title/short/description not required to reach ready" → required
(`REVIEW-10`); `short_title` → `short_description`.
## TECH-SPEC-PIPELINE.md (retired)
1. Retire `docs/TECH-SPEC-PIPELINE.md`. Its deterministic rules are CAPTURE; its ten vectors are
QUALITY. Fold any wanted algorithm detail into the CAPTURE capability doc.
2. Superseded: 80 percent fill and the 1600 px floor → 90 percent and 800 px; four knobs → two;
the auto-dimension overlay is no longer v1.5 (it shipped).
## PROMPTS.md (→ `docs/contracts/PROMPTS.md`)
1. Prompts move from server text files to the database with all revisions (`METADATA-105`): drop
the read-only mount, host-editing, and reset-to-default script.
2. Remove `previous_response_id`, the portable-context machinery, and the shared-validation rules
from the Call 2 inputs.
3. "1–5 inventory photos" → no cap (`CAPTURE-25`).
4. Example title uses an em dash and a multiplication sign → hyphen separator; snap `short_title`
to `short_description`.
## DEPLOYMENT.md (retired)
1. Retire `docs/DEPLOYMENT.md`. Its testable rules are OPS/SETTINGS; its operational facts live in
`deploy/` (`INVENTORY.md`, `docker-compose.yml`, `Caddyfile.fragment`, `RELEASE-PROCESS.md`).
2. Fold any still-useful prose into `deploy/` (the deploy README is the natural home).
3. Repoint the UAT-PRACTICE references from `docs/DEPLOYMENT.md` §1/§3/§5/§8 to `deploy/`.
4. Superseded: `output_px_min 1600` → 800 px floor (`CAPTURE-105`); "prompt files live in git and
need no backup" → prompts live in the DB with all revisions (GAP-8).
## DATA-MODEL.md (→ `docs/contracts/DATA-MODEL.md`)
1. Grade "1+" → exactly one; `fig_tag_ids` "1+" → optional.
2. `output_px_min 1600` and `fill_target 0.80` → 800 px floor and 90 percent fill.
3. "Only inventory photos. Calibration photos do not exist." → the calibration photo exists; other
batch photos are visual inventory only (`CAPTURE-115`).
4. "No hard deletes for slabs (audit)" → the local slab row is deleted on successful create
(`PUBLISH-25`).
5. Remove `inference_thread_id`; thread work is out of the MVP.
6. Prompt files: replace the bind-mounted text files with prompts stored in the DB, all revisions
(PoR row pending the PROMPTS walk).
7. `short_title` → `short_description` (Woo canonical).
## OPENAPI.md (→ `docs/contracts/API.md`)
1. Field name `short_title` → `short_description` (Woo canonical). Applies to the schema, read
model, Call 2 result, and examples.
2. `fill_target 0.80` and `output_px_min 1600` → 90 percent fill and an 800 px floor
(`CAPTURE-100`, `CAPTURE-105`).
3. Remove the validation module endpoint, `validation_hash`, and the 412 path (ruled cut).
4. Remove `previous_response_id`, the per-slab thread, and `mode` from test-inference; Call 2 is
a fresh full-context call.
5. Grade cardinality "1+" → exactly one; `fig-*` "1+" → optional.
6. The taxonomy-sync example key `synced_at` should be `taxonomy_last_sync_at`.
7. Call 1 image input for infer-taxon: original photos → clean processed photos (`METADATA-35`).
## PRODUCT.md
1. Line 19, "One or more `fig-*` tags" — tags are optional per `METADATA-30`. Change to
optional.
2. Line 23, "Measured values feed title and description templates" — template is the fallback;
the model writes when Call 2 runs. Cite `METADATA-60`, `METADATA-70`, `METADATA-80`. Same
conflict in the decision-rights table, line 37 ("Templates from listing facts").
3. Line 20, "short title" — stale wording; the field is `short_description` (`REVIEW-10`).
4. Branch-neutral: line 1 "Milestone status on `m3-ds`", and line 66 "behavior ... taken from
`main`". Remove branch names.
5. Line 25, umbrella term "Woo attributes" → "Woo Slab Taxonomy" (see cross-cutting rename).
## README.md
1. Branch-neutral: line 1 title "Docs map (branch `m3-ds`)" and line 44 "copied into
`docs/CREATE.md` from `main`". Remove branch names.
2. Line 39, umbrella "Woo attributes" → "Woo Slab Taxonomy" (see cross-cutting rename).
## UAT-PRACTICE.md
1. Line 100, "four knobs: Sheet, Sensitivity, Edge offset, Feather" — controls are exactly Sheet
and Sensitivity; Edge offset and Feather are removed (`CAPTURE-40`).
2. Line 97, "1 to 5 photos" — no cap; `CAPTURE-25` is one or more.
3. Line 122, "at least one figure, at least one grade" — grade is exactly one (`METADATA-15`).
4. Line 126, "`fig-*` tags. Pick at least one." — tags are optional (`METADATA-30`).
5. Branch-neutral: line 14 "On branch `m3-ds`". Stale refs to `docs/DEPLOYMENT.md`, `docs/UX.md`,
`docs/TECH-SPEC-PIPELINE.md`, `docs/IMPL-PLAN.md` in the "where each rule lives" table.
## Cross-cutting: "Woo Slab Taxonomy" rename
Ruling 2026-09-18: the umbrella package term is **Woo Slab Taxonomy**; canonical Woo
attributes (the five) keep the name.
- Rename umbrella occurrences: `AGENTS.md:48`, `PRODUCT.md:25`, `CREATE.md:7`, `CREATE.md:34`,
`CREATE.md:50` (heading), `CREATE.md:261`, `CREATE.md:397`, `README.md:39`.
- Keep "Woo attributes" where it means the canonical five: `CREATE.md:61`,
`CONTENT-WOO.md:121`.
- Give the term one glossary home in the step-3 contract docs; make PRODUCT/AGENTS reference
it instead of redefining.