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 in place overwrite 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 same mistake twice in one evening
The file that saves a run copies it one field at a time, so a new field that is not listed there is silently left out of every saved record. A new field was lost this way. Later that evening a second new field was lost the same way, in the same file.
Why the tests missed it: Nothing failed. The code that wrote the field worked and the code that saved the record worked. The field was simply not on the list, and no test read the saved record back.
How to catch it: After writing data, read a row back out of the database. That is how both were found. Then add a test that fails if the field goes missing.