a-test-fails-when-the-code-is-wrong — The suites that guard critical predicates are shown to fail when those predicates are wrong
Declared critical predicates carry a scheduled mutation run with published survivors, and the compatibility analyzer's algebraic invariants are property tests.
PLANNED 0 of 3 issues done
- ready
- 3
- blocked
- 0
- active
- 0
- verify
- 0
- done
- 0
- cancelled
- 0
Problem
docs/COVERAGE.md (\"What this is not, yet\") states that coverage proves a line ran, not that a test would fail if the line were wrong. No mutation run exists (no cargo-mutants anywhere in the tree), and the release compatibility analyzer (src/release/compat.rs, 33 tests) has no property test, while 8 other modules use proptest. Proposed in ADR 0190 (Mutation testing is scheduled evidence over declared critical predicates, never a gate on every change) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c113#16, chatgpt-majordomus:c139#5, chatgpt-majordomus:c158#10, chatgpt-majordomus:c158#20, chatgpt-majordomus:c293#2, chatgpt-majordomus:c111#6.
Outcome
Declared critical predicates carry a scheduled mutation run with published survivors, and the compatibility analyzer's algebraic invariants are property tests.
Current state
Verified on master 707a04c on 2026-10-18. proptest is a dev-dependency (Cargo.toml:87), used in mesh/cooperation, mesh/journal, mesh/protocol, mesh/state, deploy, served, integration and economics/stats. There is no mutation tooling.
Desired state
I3120 and I3121 land. docs/COVERAGE.md names which subsystems are mutation-tested and how often.
Scope
- apps/majordomus-cli/src/release/compat.rs
- .github/workflows
- .ai/repo/ci/gates.yaml
- docs/COVERAGE.md
Out of scope
- A blocking mutation gate on every pull request
- Mutation of shell libraries
Acceptance criteria
- A mutation run over the declared critical modules is recorded on a named revision and its survivors are listed
- Compatibility properties hold under proptest in the lib suite
Validation
- majordomus plan validate
Risks
- A mutation run is expensive on the one-at-a-time CI pool (memory: ci-pool-runs-one-validate-at-a-time); schedule it outside the validate pool or offload it.
Issues
Each one is an execution contract with its own acceptance criteria, validation command and required evidence. The wave column is the layer of the dependency graph it sits in.
| issue | status | wave | depends on | title |
|---|---|---|---|---|
| I3120 | READY | 0 | — | A scheduled mutation run over the declared critical predicates records its survivors as evidence |
| I3121 | READY | 0 | — | The release compatibility analyzer's invariants hold under property tests |
| I3309 | READY | 0 | — | A fix finishes completed only with a named regression case that fails on the task's base and passes on its head |
The graph
flowchart LR
I3120["I3120<br/>A scheduled mutation run over the declared critical predicates records its survivors as evidence"]:::ready
I3121["I3121<br/>The release compatibility analyzer's invariants hold under property tests"]:::ready
I3309["I3309<br/>A fix finishes completed only with a named regression case that fails on the task's base and passes on its head"]:::ready
classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2pxLinked from this diagram (3)
Canonical record: .ai/repo/project/milestones/a-test-fails-when-the-code-is-wrong.yaml. Read it back with majordomus plan show a-test-fails-when-the-code-is-wrong.