RUL-034 — Every spec packet's Definition of Done is five items

Ruling

Mohamed, 2026-10-06, during SPEC-110 packet S1, verbatim: "do not forget annotations, rtm, documentation, wiki update and 90% code coverage", then, same session: "it should br the definition of done for all specs".

A packet that implements any part of any spec is DONE only when all five hold, in the same ship as the code:

  1. Annotations — every added or changed function, class and test carries @traces("REQ-…") citing only ids the spec defines (RUL-013). Working code with no citation is a traceability defect the packet closes.
  2. RTM — the evidence-graded requirements traceability matrix is regenerated after the code lands (scripts/generate_rtm_evidence.py; scripts/trace_intel.py untraced-reqs scoped to the spec), the packet's ids move to an implemented-and-tested proof class, and the before/after untraced count is reported.
  3. Documentation — the spec's checklists/requirements.md rows flip in the same commit as the code (with the test module path); the affected docs/ page and any plans/ design document whose status the packet changes (DESIGNED → BUILT) are updated.
  4. Wiki update — the knowledge-wiki project page for the subsystem gains the packet summary (what changed, where, test module, commit sha) and is shipped through the wiki's own ship gate.
  5. Coverage — ≥90% line coverage for every source file the packet creates or modifies, real tests only, residuals quantified when a file legitimately cannot reach it (the pre-existing AGENTS.md rule).

Builder briefs list the five under DONE WHEN; a reviewer verdict of GO requires evidence for each; a packet plan's ship log carries them as columns.

Evidence

Measured in SPEC-110 on 2026-10-06 (plans/spec-110-completion-plan.md §0, orchestrata-ultimate 5ced47c7e): REQ-110-006 and REQ-110-011 have working code with no @traces citation; code cites REQ-110-050 and REQ-110-085, ids the spec does not define; REQ-110-140 was marked [x] COMPLETE while scripts/codemod.py never reads --auto-start and never constructs CodemodClient; the §15 observability design was built in parts and never documented as wired. Each is a packet that was called done with one of the five missing. The written DoD (AGENTS.md) named only coverage.

Enforcement

Mechanism (RUL-014)

Judgment-only at recording time. Candidate gates, each a follow-up packet: scripts/trace_intel.py untraced-reqs scoped to the packet's spec as a ship-time check (items 1–2); scripts/coverage_ratchet.py (item 5, exists today); a ship-time check that the spec checklist and the wiki project page changed in the same ship (items 3–4). When one lands, its row in the index moves from none (judgment) to the gate and this section names the commit.

Verification