Kill sheet / 7 checks every time, 8 more on trigger

Reviewing code that no human wrote. You still own it.

Machine-written bugs arrive well-formatted, well-commented and idiomatic, and your smell tests were trained on human mistakes, which look wrong. So every check below replaces reading with something mechanical. Each unchecked line is a survivor.

Seven checks, about five minutes. Everything else is escalation — switch to full audit to see it, each item labelled with the condition that triggers it.

Two stances — if you generated this yourself, every upstream fix is yours to make before opening the PR: split the diff, rerun the session for what it skipped, tighten the prompt. If someone handed it to you, the same findings become requests — absorbing them yourself is how the author never learns what their tooling drops.

Set it up once — anything here you run twice by hand should become a gate: types that make invalid states unrepresentable, property and integration tests in CI, a mutation-score gate on changed paths, and a shared prompt config that caps what arrives — minimal diff, no speculative abstraction, uncertain APIs flagged, and a closing list of assumptions and stubs. Repo work, not per-review work.

00

Before you start reading

Four preconditions. A no on any of them means the review can't reach a real verdict, and the fix belongs upstream of you rather than in your comments.

Standing rule — leave the line-level nitpicks alone. Linters and the model already handle style, and every comment you spend there is attention not spent where tools can't reach. And when reading can't settle a question, run that one path rather than debating it in comments.

01

Hunt for what isn't there

Absence is invisible when reading — you can't notice a line that was never written, or a convention the model didn't know to follow. Every check here replaces reading with something mechanical.

Standing rule — read the end of a long generated file harder than the start. Dilution shows up as drift: error handling careful in the first handler and perfunctory by the eighth, validation that quietly stops appearing, stubs marked "similar to above".

02

Make the tests prove themselves

Ignore the model's own verdict on its tests. "These are thorough" and "these are only for coverage" are both guesses, and neither is evidence.

  • Stryker JS/TS · C#mutmut Pythoncosmic-ray PythonPIT JVMcargo-mutants Rustinfection PHPgo-mutesting Go

Standing rule — manual testing never substitutes for a test. It doesn't run tomorrow, when someone else edits this.

03

Attack the happy path

A menu, not a list — pick the one or two lines that describe this code and ignore the rest. A pure function has no concurrency; a CRUD endpoint has no float precision. Each one names an assumption the happy path depends on and never states.

  • Toxiproxy latency, dropsWireMock slow / emptyTestcontainers real, killable DBgo test -raceThreadSanitizer
0/0killed
— survivors remaining