The gap, measured
architecture.md's D13 gives the verdict algebra as a six-row table over the verdict set (architecture.md:967-974). Enumerated over the presence of each verdict, that table leaves exactly one input class with no row:
≥1 Opposes, with no Decisive, no Supports and no Disqualifying.
It is not "only Neutral / nothing" (there IS an Opposes), it is not "Supports AND Opposes" (there is no Supports), and every remaining row requires a Decisive.
The eight combinations of (Decisive, Supports, Opposes) that survive Disqualifying = absent:
Decisive |
Supports |
Opposes |
D13 row |
| ✔ |
✔ |
✔ |
:971 |
| ✔ |
✔ |
✗ |
:970 |
| ✔ |
✗ |
✔ |
:971 |
| ✔ |
✗ |
✗ |
:970 |
| ✗ |
✔ |
✔ |
:973 |
| ✗ |
✔ |
✗ |
:972 |
| ✗ |
✗ |
✔ |
NONE |
| ✗ |
✗ |
✗ |
:974 |
Re-derived independently five times: at story 5.4's contexting, by both of its fresh-context validation agents, by its code review's Edge Case Hunter (16-way enumeration), and again at story 5.4b's contexting.
The arbitration, already taken and already implemented
Guy's call, 2026-07-29: that class concludes Abstained { AbsenceOfProof }. Nothing argues FOR the merge, so there is no merge to refuse, and D13 deliberately reserves the refusal-that-names-a-rule for Disqualifying.
Story 5.4b implements it in crates/opencmdb-core/src/identity/cascade.rs's decide, in an arm explicitly labelled as the arbitration and citing no architecture line — because there is none to cite. A match on the presence tuple makes a missing class an error[E0004] rather than a silent fallthrough (measured: deleting the arm gives error[E0004]: non-exhaustive patterns: (false, false, false, true) not covered).
What this issue is for
The correction to D13's own table body in architecture.md is a MILESTONE edit, never a story task — epics.md:1461 says so in the acceptance criterion that created story 5.4b. A story that patched a locked decision document would be exactly the drift the register exists to prevent.
So this issue carries the promise. At the next milestone:
Until then the authority is the code and its doc: decide's rustdoc carries the full enumeration so a reader can re-derive the gap rather than trust it.
Related
The gap, measured
architecture.md's D13 gives the verdict algebra as a six-row table over the verdict set (architecture.md:967-974). Enumerated over the presence of each verdict, that table leaves exactly one input class with no row:It is not "only
Neutral/ nothing" (there IS anOpposes), it is not "SupportsANDOpposes" (there is noSupports), and every remaining row requires aDecisive.The eight combinations of
(Decisive, Supports, Opposes)that surviveDisqualifying = absent:DecisiveSupportsOpposes:971:970:971:970:973:972:974Re-derived independently five times: at story 5.4's contexting, by both of its fresh-context validation agents, by its code review's Edge Case Hunter (16-way enumeration), and again at story 5.4b's contexting.
The arbitration, already taken and already implemented
Guy's call, 2026-07-29: that class concludes
Abstained { AbsenceOfProof }. Nothing argues FOR the merge, so there is no merge to refuse, and D13 deliberately reserves the refusal-that-names-a-rule forDisqualifying.Story 5.4b implements it in
crates/opencmdb-core/src/identity/cascade.rs'sdecide, in an arm explicitly labelled as the arbitration and citing no architecture line — because there is none to cite. Amatchon the presence tuple makes a missing class anerror[E0004]rather than a silent fallthrough (measured: deleting the arm giveserror[E0004]: non-exhaustive patterns: (false, false, false, true) not covered).What this issue is for
The correction to D13's own table body in
architecture.mdis a MILESTONE edit, never a story task —epics.md:1461says so in the acceptance criterion that created story 5.4b. A story that patched a locked decision document would be exactly the drift the register exists to prevent.So this issue carries the promise. At the next milestone:
architecture.md:967-974, or restate the existing rows so the class is coveredarchitecture-views.mdin the same pass (itssourceSha256is already stale — issue architecture-views.md is STALE: regenerate at the next milestone (drift measured: 2 commits, 59 insertions) #50)Until then the authority is the code and its doc:
decide's rustdoc carries the full enumeration so a reader can re-derive the gap rather than trust it.Related
architecture-views.mdstaleness, the other milestone-owned documentation debt_bmad-output/implementation-artifacts/5-4b-verdict-algebra-and-float-gate.md), AC3