mutation-testinglisted
Install: claude install-skill vmobifystudio/app-dev-team
# Mutation testing
`defect-hunting` §3 says a new rule is not done until you have watched it fail, in three steps. That
instruction was followed by hand, when someone remembered. On 2026-07-29 the suite read
**385 passed, 0 failed** while containing a `grep -E` with a PCRE lookahead (a syntax error, stderr
to `/dev/null`, `|| ok` every time), two doctor assertions that a demoted gate could not turn red,
and a hook that stood down in exactly the incident it was written for.
**A green suite is evidence only to the extent its assertions can go red.** `scripts/mutate.sh` is
that, executable.
## Running it
```sh
sh scripts/mutate.sh # all 16 catalogued mutations (~1 min each — the whole suite runs)
sh scripts/mutate.sh --list # the catalogue, plus what it cannot test and why
sh scripts/mutate.sh --only M04 # one mutation, while you iterate on an assertion
sh scripts/mutate.sh --sample 4 # what CI runs on every PR
```
Exit `0` all caught · `1` something SURVIVED · `2` could not run (baseline not green, anchor drifted).
Three verdicts matter:
- **CAUGHT (n assertions)** — the gate bites.
- **SURVIVED** — the gate can be deleted and the suite stays green. **That is a hole**, and it is a
finding at the same severity as the bug the gate was supposed to catch.
- **CAUGHT, but NOT by the assertion written for it** — some unrelated assertion noticed. Not a hole
today; the named guard is decorative, and the next refactor that touches the unrelated