1. Counting in the wrong place
A report said "zero of 131 runs carry this field". Ten of them did. The query had looked in one location; the field was in another.
Why the tests missed it: The number was produced correctly. It answered a slightly different question from the one being asked, and nothing in the output says so.
How to catch it: Before trusting a count, open one record the count says is missing and look for the thing yourself.
2. The field is there, the content is not
"67 of 69 records carry what this needs" was true of the field and not its contents. 18 were empty, so only 49 would yield anything.
Why the tests missed it: A check for "does this key exist" passes on an empty value. So does a test built on the same assumption.
How to catch it: Count the values, not the keys. Print three real examples before quoting a total.
3. Evidence read backwards
A mechanism was called unreliable because 75 of 94 measured runs arrived without it. Those 75 runs predated the mechanism existing.
Why the tests missed it: The data was real. The dates were never compared, so "not deployed yet" was read as "does not work". A whole design was then built to work around a problem that had never been measured.
How to catch it: Put the date of the change next to the date of the data. If the data is older, it cannot judge the change.
4. A risk copied from a comment
A design review was built around the claim that a function could stop a run. Reading the function showed it had no such outcome. The claim came from a neighbouring comment.
Why the tests missed it: Comments go stale and code does not read its own comments. An AI summarising a file weighs both the same.
How to catch it: When a decision rests on what a function does, read the function, not the text near it.
5. A command nobody ran
A setup command handed to users could not run at all. It was found by running it, not by reading it.
Why the tests missed it: A command can look correct, match the documentation, and still fail on a real machine. Reading cannot catch that. Running can.
How to catch it: Run every command you publish, exactly as a user would paste it, on a clean machine if you can.
6. Tests that share the author’s belief
All 640 tests passed. A copy button, a config writer and an agreement check all had tests. Then a screenshot of the finished page showed a missing space in a sentence, on every section, for every user.
Why the tests missed it: The tests were written from the same understanding as the code, so they checked what that understanding predicted. No test asked what the sentence looked like on screen.
How to catch it: Look at the rendered result. A screenshot of the real page catches a class of mistake no unit test will.
7. A safer change that removed a safety property
A config-file writer was made safer by replacing an overwrite-in-place with an atomic swap. It was correct, reasoned and tested. It also removed a protection nobody had written down: the old path failed on files it could not read, and the new one did not. A config the tool could never see could now be replaced, while it printed "success".
Why the tests missed it: The protection was accidental, so no test or comment recorded it. Changing the code removed something that was never known to be there.
How to catch it: When you replace a working path, list what the old one refused to do, not only what it did.
8. The warning that did not stop the repeat
A comment in the file said two fields had already been written and silently dropped before reaching the stored record. Two new fields were then added. They were silently dropped too. Three times, in a file that carries a warning about it.
Why the tests missed it: A documented failure mode only helps if something makes you look at the documentation at the moment you are repeating it.
How to catch it: After writing data, read a row back out of the database. That is how all three were found.