01aa4c52c3
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/.
Coverage ledger
Provenance for every requirement in docs/REQUIREMENTS.md. One row per source atom.
Kept under .audit/ on purpose, so it is not part of the docs/ structure contract.
tools/check_coverage.py reads every *.md in this directory except this file.
Row format
| Source | Atom | Requirement | Disposition | PoR ID | Rationale |
- Source — where the atom came from, prefixed by kind:
tag:TEST-SPEC,tag:OPENAPI,prd,cur:CREATE,issue:#5,audit:14. - Atom — the stable key inside that source, e.g.
H-1,settings-PUT-reject. - Requirement — a short restatement, enough to recognise it.
- Disposition — one of the values below.
- PoR ID — the
docs/REQUIREMENTS.mdID(s), comma-separated.—when none. - Rationale — required for everything that is not plain
ported.
Dispositions
| Value | Meaning | PoR ID | Rationale |
|---|---|---|---|
ported |
fully represented by the cited row(s) | required | optional |
duplicate |
same rule as another atom | optional | required |
new |
PoR row with no source atom; a reconciliation decision | required | required |
superseded |
replaced by a later source or decision | optional | required |
deferred |
intentionally out of current scope | optional | required |
dropped |
deliberately discarded | — |
required |
gap |
not represented, not deliberately dropped: an open hole | — |
required |
gap is the finding. It is the thing this ledger exists to surface.
Checks
Forward (always):
- Every row has six well-formed columns and a known disposition.
- A
(Source, Atom)pair is unique across the ledger. portedandnewcite at least one defined requirement ID; every cited ID resolves.droppedandgapcarry no ID and a non-empty rationale.- Every non-
portedrow carries a non-empty rationale.
Reverse (--strict only, once coverage is complete):
- Every ID in
docs/REQUIREMENTS.mdis claimed by at least one atom, or isnew. - No
gaprows remain.
Run
python tools/check_coverage.py
python tools/check_coverage.py --strict
python tools/check_coverage.py --ledger-dir <path> # for negative tests