Refs #1. Blocks #6 — rule IDs cannot be surfaced from a mapping that does not reconcile.
Status: diagnosed 2026-08-20, not started.
Verified: 12 of 14 books reconcile exactly. Two do not, and the mismatch is bidirectional in both.
Not verified: which specific bullets lack IDs and which IDs are orphaned. The sweep counted; it did not diff line-by-line. The first task on this issue is that diff.
The central fact
| Book |
Section |
Traceability IDs |
Released bullets |
Delta |
implementing-domain-driven-design |
Decision rules |
18 |
19 |
1 bullet has no ID |
implementing-domain-driven-design |
Trigger rules |
12 |
10 |
2 IDs are orphaned |
refactoring-guru |
Decision rules |
24 |
24 |
OK |
refactoring-guru |
Trigger rules |
20 |
14 |
6 IDs are orphaned |
Orphaned IDs mean rules were removed from mini.md without updating traceability.md — exactly the drift PROCESS.md "Traceability Rules" exists to prevent.
These are the only content-level defects found anywhere in the corpus. Everything else that failed a check is mechanical (line endings, symlinks) or absent (NOTICE, self-governance files).
Goal
Every released mini rule maps to exactly one M* id, and every M* id maps to exactly one released rule, in all 14 books.
Decisions (settled 2026-08-20)
| # |
Decision |
Rationale |
| 1 |
Diff before editing — enumerate the unmapped bullets and orphaned IDs explicitly, and post them as a comment on this issue before any file changes |
The counts say that it is broken, not what is broken. Editing on a count is guessing. |
| 2 |
An orphaned ID is retired, never renumbered |
PROCESS.md treats IDs as stable references. Renumbering silently invalidates every external citation. Record as retired (rule removed <date>). |
| 3 |
An unmapped bullet gets the next unused id, not a gap-filling one |
Same reason. implementing-domain-driven-design currently tops out at M28, so the new one is M29. |
| 4 |
This is a book-specific miss, not a process bug |
PROCESS.md already required reconciliation; the process is correct and was not followed. Per its own "Process vs Book Diagnosis" section, that means fix the books and do not amend PROCESS.md. |
Acceptance
Reproduction
# per book: count unique `M\d+` in _rule-workbench/<book>/traceability.md,
# split by the "Decision rules:" / "Trigger rules:" subsections,
# and compare against "- " bullets under the matching H2 in <book>/<book>.mini.md
The sweep script that produced the table above is attached to #5.
Refs #1. Blocks #6 — rule IDs cannot be surfaced from a mapping that does not reconcile.
The central fact
implementing-domain-driven-designimplementing-domain-driven-designrefactoring-gururefactoring-guruOrphaned IDs mean rules were removed from
mini.mdwithout updatingtraceability.md— exactly the driftPROCESS.md"Traceability Rules" exists to prevent.These are the only content-level defects found anywhere in the corpus. Everything else that failed a check is mechanical (line endings, symlinks) or absent (NOTICE, self-governance files).
Goal
Every released
minirule maps to exactly oneM*id, and everyM*id maps to exactly one released rule, in all 14 books.Decisions (settled 2026-08-20)
PROCESS.mdtreats IDs as stable references. Renumbering silently invalidates every external citation. Record asretired (rule removed <date>).implementing-domain-driven-designcurrently tops out atM28, so the new one isM29.book-specific miss, not aprocess bugPROCESS.mdalready required reconciliation; the process is correct and was not followed. Per its own "Process vs Book Diagnosis" section, that means fix the books and do not amendPROCESS.md.Acceptance
rules_lint.pychecks 1 and 2 catch a reintroduced mismatch0004 — Rule IDs are stable references: orphans retire, they never renumberReproduction
The sweep script that produced the table above is attached to #5.