A coding agent can produce code and the tests that check it in the same pass. That pairing is the risk: tests written from the same prompt as the implementation tend to confirm that code ran, not that it returned the right answer. Reviewers are told to ask whether an added test would fail if the behavior it names breaks, and to reject weak assertions such as checking that a value is merely defined in the SpecStory review checklist. Google's review guidance makes the same point plainly: tests do not test themselves, and a human must ensure that the tests are valid in Google's review guide.
Mutation testing turns that question into a measurement. The tool injects small faults into production code and runs the existing tests against each one. If a test fails, the mutant is killed; if every test passes, the mutant survived, which means no assertion noticed the change per Augment Code's guide. The technique "does not test the software directly, but rather the tests," as researchers behind the Callisto operator study put it, quoted in the same guide. Meta applied LLM-based mutation testing across Facebook, Instagram and WhatsApp, and privacy engineers accepted 73% of the generated tests per Augment Code's guide.
The gap shows up in numbers. One team asked a generative assistant to write tests for a Python module: 12 tests passed and coverage reached about 85%, but the mutation kill rate was 57.3%. After human refinement the suite grew to 33 tests, reached 100% coverage and an 80.4% kill rate per Nimble Approach's writeup. That is the case for a mutation gate.
The case against running it everywhere is cost. In Bitcoin Core, a full weekly run took over 30 hours on their setup, partly because some functional tests take over a minute each, so 20 mutants can cost at least 20 minutes per the Bitcoin Core incremental testing discussion. A gate that slow is not a gate. It is a queue.
The decision rule that follows: mutation testing is a review aid, not a second test suite. Spend the mutant budget where a wrong assertion would hurt, and let the rest of the repository wait for the scheduled run.



