Mutation gate: why one probe was not enough
The gate proved an assertion bites. It could not prove the file fails. Toggle a test file's shape below and watch the two probes disagree.
Build a security test file
What the gate sees
Probe A — early exit
ORK_MUTATE_INDEX flips the verdict; expect_decision exits 0 / 87 from inside itself. Fast, sed-free. Never returns to the file.
Probe B — no-exit
ORK_MUTATE_NOEXIT adopts the inverted expectation and lets the file finish, so the file's own gate decides the exit code.
Verdict matrix
| file shape | probe A | probe B | gate verdict |
|---|---|---|---|
| live hook + real gate | DETECTED | file exits 1 | CAN FAIL |
| live hook + || true | DETECTED | file exits 0 | SWALLOWED ← the hole |
| live hook + exit 0 | DETECTED | file exits 0 | SWALLOWED |
| dead hook path | ERROR | — | HOOK ERROR |
ERROR is never a pass. A hook that cannot be reached differs from both the original and the inverted expectation, so a naive comparison would score the flip as “detected” for a file whose hook was deleted — the exact blindness the gate exists to end.