Skip to content

I3120 — A scheduled mutation run over the declared critical predicates records its survivors as evidence

Declare the critical predicates once in .ai/repo/ci (mesh trust and protocol, guard judge, evidence freshness, finish vacuous-verify, release compatibility). Run cargo-mutants over those files on a schedule or an offload host. Record the run (killed, survived, timeout per mutant) through the existing ledger path, and list the survivors in docs/COVERAGE.md's evidence section.

READY wave 0 · p2 · deep-work profile · parallel safe

Part of a-test-fails-when-the-code-is-wrong — The suites that guard critical predicates are shown to fail when those predicates are wrong.

Ready. Every dependency is done, so majordomus plan start I3120 will be accepted.

Objective

Declare the critical predicates once in .ai/repo/ci (mesh trust and protocol, guard judge, evidence freshness, finish vacuous-verify, release compatibility). Run cargo-mutants over those files on a schedule or an offload host. Record the run (killed, survived, timeout per mutant) through the existing ledger path, and list the survivors in docs/COVERAGE.md's evidence section.

Why

The owner asked for mutation testing of critical subsystems on 2026-09-11 (c113#16), 2026-09-16 (c158#10, \"coverage theatre\"), and again on 2026-10-17 (c293#2). docs/COVERAGE.md states that the gate does no mutation testing or fault injection. 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:c087#1.

Current state

No mutation tooling in the tree. Adversarial suites exist for the mesh (proptest in mesh/*).

Desired state

One scheduled job, its declaration in gates.yaml (not in every plan), and survivors visible with the revision.

Scope

  • .ai/repo/ci/gates.yaml
  • .github/workflows
  • docs/COVERAGE.md
  • docs/CLAIMS.yaml
  • .ai/repo/project/intents
  • scripts/ci/evidence-collect
  • scripts/ci/claim-proof-check
  • .ai/repo/evidence/ledger.json
  • test/fixtures/coverage
  • .ai/repo/adrs/0190-mutation-testing-is-scheduled-evidence-over-declared-critical-pr.md

Out of scope

  • Blocking pull requests on mutation score
  • Shell mutation

Dependencies

None. This issue is a root of the graph.

Acceptance criteria

  • A recorded run on a named revision lists every mutant of the declared files with its outcome
  • A deliberately weakened predicate in a fixture crate shows as a survivor
  • docs/CLAIMS.yaml gains claim critical-predicates-are-mutated citing the mutation_run_recorded record, and intent criterion critical-predicates-mutated is rebound to that claim
  • The mutation run is started by one command that .ai/repo/ci/gates.yaml declares; a hand run on an offload host records the same execution shape as the scheduled one

Validation

  • scripts/ci/claim-proof-check
  • majordomus plan validate

Evidence required

  • mutation_run_recorded

Evidence

None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.

Timeline

started
—
verified
—
completed
—

Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.

Canonical record: .ai/repo/project/issues/I3120.yaml. Read it back with majordomus plan show I3120.

Searches the titles and descriptions of every page this site publishes.