Skip to content

D13's decision table is short one input class — carry the correction at a milestone #54

Description

@guycorbaz

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 taskepics.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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions