A query asked for thirty days of records and returned thirty-one distinct days — no extra data, just a clock. The rows were stamped in UTC while the query ran in Central time, so the instrument invented a day.
Inside a single 90-day window that closed on 2026-08-20, we recorded twenty separate occasions on which the measuring tool, and not the system it was pointed at, was the thing that was wrong. Every one is dated, sourced to an audit written at the time, and caught the same way: a reading was checked against something other than itself. Two earlier posts set this up — Marketing Dashboards Lie by Default. We Caught Ours Doing It. on auditable dashboards, and We Measured Our Own Rot — Then Built a System That Fixes Itself on health checked by a machine on every run. This series points both at the checking machinery.
The argument is narrow and it is the whole point: most bad marketing decisions we see are made on sound judgement applied to a reading nobody validated. A green test suite, an HTTP 204, an empty table, a zero on a dashboard — each read as a fact about the world when it was a fact about the instrument.
The two lines this series is built on
A precondition that is always false is worse than no precondition, because it gets believed once.
That is the expensive one: a check that can only ever return false does not get ignored, it gets believed once, at the moment it matters, by someone with no reason to doubt it. No check leaves a known gap; a permanently false one closes it on paper.
A zero from an unvalidated instrument is void.
That is the operating rule. Void, not suspicious — it carries no information in either direction until the instrument has been shown able to return something else.
Establish, Validate, Cross-Read
The standing rule is validate the instrument, then believe the reading, and part six builds it into a six-check discipline under that name. This post runs on three steps, each with a worked example from the twenty.
1. Establish that the instrument can return a different answer. A push-notification validate endpoint returned an empty device list, and a check built on it reported that our alerts were going nowhere. Re-run against a group that was demonstrably delivering, it returned the same empty list, and an infrastructure finding became an instrument artifact.
2. Validate on the surface that validates, not the one that accepts. Between 2026-06-09 and 2026-08-02 our pipeline database recorded eight successful HTTP 204 responses from GA4's Measurement Protocol, against zero of the target event across 90 days. The collection endpoint answers 204 to payloads it discards; the debug endpoint names the invalid value, and only the first was in the shipping path — The 204 That Lied has the diagnosis.
3. Cross-read against an independent surface before acting. In a daily lead series live-read on 2026-08-17 for an HVAC contractor, the campaign metrics view reported zero Local Services leads for 2026-08-14 while the lead resource returned a row. Only reading both shows which surface to trust.
The five families
Silent success — a success code is a receipt for transport, never for a write (part two: 10, 12, 16). Empty answers that cannot say why — an empty result and a broken query are indistinguishable (part three: 3, 11, 17, 18, 20). The log that does not log — vendor surfaces have scope boundaries nobody documents (part four: 1, 9, 13, 14, 15). The number that is a different number — the population, formula or window moved under the number (part five: 2, 7, 8, 19). Private copies of a shared contract — one rule reimplemented in several places drifts independently in each (part six).
They are ordered by how cheaply they are found: the first two yield to one more question put to the instrument, the last three only to comparing it against something outside itself.
The twenty
Sixteen were catalogued through 2026-08-11; instances 17 to 20 came out of a gap-closure pass on 2026-08-20 — a register of instrument failures that was itself incomplete, which is why it carries a date and not a claim of completeness.
| # | Instrument | What it said | What was true |
|---|---|---|---|
| 1 | Ad platform change-event log | no change was made | conversion-action edits are not covered |
| 2 | Present-key count on a lead field | 68 charged leads in July | 49 — the format omits false; 39% over |
| 3 | Search Console searchAppearance | zero rows, all four properties | instrument failure, not a signal |
| 4 | Profile reader's field mask | the listing is certified | stored no category data — certifying what it cannot see |
| 5 | A human screenshot | "categories verified live" | the field was an affirmative empty list |
| 6 | Profile snapshot API | verified, four categories | returns the owner-submitted copy; one category unapproved |
| 7 | Search-term report | a junk-traffic rate for the account | covers 30.2% of spend |
| 8 | Campaign metrics view | zero Local Services leads, 2026-08-14 | the lead resource returns a row |
| 9 | Edge deployment list | the worker is three commits behind | byte-for-byte identical — it prints oldest-first |
| 10 | 391, then 503 passing tests | the integration works | it never wrote anything |
| 11 | Push-notification validate endpoint | zero devices — alerts go nowhere | always empty for a group key; the group was delivering |
| 12 | An audit log | no rows — no new leads arrived | every enrolment failed; the line fired only on success |
| 13 | A CRM's paged aggregation | signed and installed = 0 | unstable sort, 797 records on one import timestamp |
| 14 | A CRM's published API docs | one webhook topic name | the live catalogue uses another name |
| 15 | Pagination parameter stepped by 1 | 925 rows | 61 unique — an item index, not a page index |
| 16 | GA4 Measurement Protocol | HTTP 204, success | payload discarded on a lowercase enum |
| 17 | A phone system's call log | totalPages: 1, 1,000 records for a month | truncated at the page cap; it covered 16 days |
| 18 | Message store with no date floor | 3, 1, 5 and 0 messages in four mailboxes | 200 each |
| 19 | An answer-rate formula | the assistant answered the call | a human answered and talked for 251 seconds |
| 20 | A scheduled monitoring task | exit 0, "window complete" | a healthy monitor watching nothing |
None of this is a vendor complaint: several of the worst rows are our own code and tests, and one ran on our own site for 90 days.
What would prove this wrong
- A dated re-audit finding that in most of the twenty the underlying system was the defect and the instrument reported it correctly. Then this is a series about ordinary bugs wearing a flattering frame.
- A validation pass across the same window that produced no disagreements. If cross-reading every instrument against an independent surface agreed every time, the discipline is ceremony and should be dropped.
- Any instance where the instrument did label its own drop and we missed it. That row leaves the set, because the failure was ours. We expect at least one.
- A concentration in one vendor. These span an ad platform, a search console, an analytics product, a CRM, a phone system, a message store, an edge command line and our own tests. If most prove to sit under one roof, this is procurement rather than measurement.
Ask what your instrument returns when it should refuse
One number in your reporting outweighs the rest. Find out what its instrument returns when fed something it should reject — same run, same endpoint. If nobody can tell you, the number is not evidence yet. It becomes evidence the day somebody watches that check say no.
Get the kit, not just the theory.
We'll send the build checklist behind this post — and the next pillar when it ships. One email, no drip sequence. Unsubscribe in one click.