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 shapeprobe Aprobe Bgate verdict
live hook + real gateDETECTEDfile exits 1CAN FAIL
live hook + || trueDETECTEDfile exits 0SWALLOWED ← the hole
live hook + exit 0DETECTEDfile exits 0SWALLOWED
dead hook pathERRORHOOK 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.