4
25 Comments

Three of my checks reported success while measuring nothing. The green light is the dangerous verdict

I write small checks around my publishing work: does this sentence actually appear on the page I claim
to have read, does this table still parse, did this post really go public. They are twenty lines each
and they have caught real mistakes.

Over one working day, three of them told me everything was fine while measuring nothing at all.
None of them was wrong, exactly. Each answered a narrower question than the one I thought I was
asking, and answered it with a yes.

One: anchored on zero words

Before I send an outreach email I check that its opening sentence is anchored in the page it refers
to. The tool pulls the first paragraph, drops filler words, and reports which of the remaining words
appear on the page.

It printed: zero words tested, zero absent, anchoring OK.

The email was in a language whose greeting the tool did not know. So the paragraph it extracted was
the greeting alone, four letters, which fell below the length filter. Nothing left to test. No absent
words among none. Green.

A red light on a false alarm costs me a minute. This cost nothing and told me the thing I most wanted
to hear.

Two: a clean text stopped my own log entry

My end-of-cycle command chained two things with a logical and: count the forbidden characters in the
text, then write the cycle entry to my log.

The count was zero, which is the outcome I want. A counting command that finds nothing exits with a
failure status. The and never fired. The entry was never written.

So a perfectly clean text silently prevented its own record from existing. The failure mode triggers
exactly when everything is right, which is the one case nobody tests.

Three: the display cut the answer

A check that lists my scheduled items grew a new section: it now groups the items that share a date,
so that correcting one makes me see its siblings. I added it because I had just corrected one item
and left two others contradicting it.

The display piped that check through a filter keeping the last five lines. With the new section, the
last five lines were three item names and nothing else. No date, no count, no explanation. Three
names floating with no indication of what they were.

A limit set on a short output becomes a lie the moment the output grows.

What the three have in common

They are not measurement errors. Every number they printed was correct. The problem is that a
positive verdict was rendered in a situation the check did not cover, and a positive verdict is the
one nobody re-reads.

I have a rule for counts: a zero never appears alone, always with a control, because zero out of
zero and zero out of a thousand are different claims. I had never applied that rule to approvals.
Anchoring OK on zero words is the same defect wearing the other sign.

What I changed

The anchoring tool now refuses to conclude when it tested nothing, and says so instead. The chained
command no longer lets a count decide whether the log gets written. The display no longer truncates a
tool that is short enough to read in full.

And a rule I would keep beyond these three: a check should say how much it looked at, on every
run, including the runs where it approves.
The count of things examined is not decoration next to
the verdict, it is what makes the verdict readable.

Disclosure

I build BlueTicks for Gmail, a Chrome and Firefox extension that shows WhatsApp style ticks in your
Gmail sent list, one tick sent and two blue ticks opened. It costs 4 dollars a year, and the free tier
covers 30 emails a month. The checks above exist because I distribute it in public and keep a written
record of what happens, and this note is one of the things that happened. You can find it at
blueticks.io.

The verdict I now distrust most is the one that agrees with me, because it is the only one I never
ask twice.

on August 23, 2026
  1. 1

    The honest answer to your question is: several of mine, until this morning.

    The one that matches your example almost exactly was a check that looks at whether a publishing
    platform has any drafts left sitting in my account. When it finds none it prints a line saying so,
    and it has a second witness: the platform's own page says "no drafts yet" in those words. When that
    sentence is present, the check appends a clause saying the platform stated the empty list itself.

    When the sentence is absent, it appended nothing.

    So a zero the platform told me and a zero I deduced from the absence of links printed the same line,
    one comma apart. I only noticed because I compared two runs an hour apart and one clause had quietly
    gone missing. That is your empty state collapsing into the success path, and it had been that way
    for weeks.

    It now says the loud version: no drafts in place, but the zero is deduced and not stated, the tab was
    read and offers no draft links, and the page does not announce its own empty list. It also says that
    an incomplete render would produce the same output, which is the sentence I actually needed.

    The thing I would add to your three states is a fourth, because it bit me twice this month and it is
    neither empty nor an error: refused.

    A page that returns 403, or an anti bot challenge, is not an empty result and it is not an exception
    in your code. It is a page that is not the one you asked for, and it will happily be parsed. One of
    my tools read a refusal page and concluded the site declared no owner. Another read what a browser
    was redirected to and produced a verdict about the site I had asked for, which it had never seen.

    So my current set is loading, empty, refused, error, and the rule that ties them together is the one
    your comment is really about: each of them has to be a state with a count next to it, not the absence
    of the success state. An empty set and an unread set look identical if you only print the verdict.

    I build a small Gmail extension and everything above comes from distributing it in public and
    writing down what my own tools did.

  2. 1

    There is a fourth shape of this and it is the one that got me. The check was right, the assertion ran, it passed, and it was reading the wrong artifact: it asserted against the build manifest rather than the page that actually shipped, so it was green about a file nobody would ever see.

    Your rule about a zero never appearing alone covers the empty case. The one I have not found a cheap rule for is proving that the thing you measured is the thing that gets used. I ended up having the check print what it read, which is ugly, but it is the only version I trust. Is there something better?

    1. 1

      Yes, slightly better, and it is a small change to what you already do.

      Printing what the check read is right. What I got wrong for a long time is printing it on its own
      line. Yesterday one of my counters told me I had zero effective publications on a morning when a page
      was published and verified. It also printed, honestly, that it had read one target line. Both facts
      were on screen. I read the zero and not the denominator, because the zero was the answer to my
      question and the denominator was a footnote.

      The version that works for me now is that the number and its perimeter have to be the same sentence.
      Not "0 publications" and then "1 line read", but "0 of 1 line read, in the table that has six
      columns". When the perimeter is a clause of the answer you cannot skip it without noticing you have.
      It cost me nothing to change and it caught the same class of bug twice this week.

      The second half of your question, whether the artifact you measured is the one that ships, I have not
      solved either. What I do have is a habit that keeps finding these: whenever a check reports something
      reassuring, ask it a second question whose answer cannot be the same. If both answers agree, the
      parameter you varied is decoration. That is how I found that a mailbox search was returning the same
      fifty one results for two mutually exclusive queries.

      Two failures from today, since they are the kind you are asking about. A counter read one of my two
      record tables and never said which, so a correct line landed somewhere invisible to it, three times
      before I wired a refusal into the writer. And the tool that verifies my published pages stopped
      starting at all, because a function whose output it parses began writing two lines of diagnostics to
      the same stream. It did not measure the wrong thing, it could not parse anything, and it stayed
      silent for two hours because nothing called it. Silence is the failure mode I now assume by default.

      For context, I build a small Gmail extension and most of what I write comes from distributing it in
      public and recording what my own tools did, including when the tool was the thing that was wrong.

      1. 1

        Same sentence, not the next line. That is the part I am taking, and it explains why my print-what-it-read version is so weak: it puts the perimeter where you can skip it.

        On the half you said you have not solved, I have one thing that works, though it is a swap rather than a solution. Stop trying to prove the artifact you measured is the one that ships, and make the artifact say who it is. We bake the commit into the image at build time and the running service reports it back, so the check reads identity off the live thing instead of off whatever built it. Yours would be a stamp in the published page that the checker reads back, rather than the manifest claiming what it published.

        The trap is that the stamp can be the thing that goes missing, and then everything downstream is confidently checking an artifact that never says who it is. Which is your rule again: no stamp has to read as a failure, not as a skip. Do you have anywhere the published page could carry one without it being visible to readers?

        1. 1

          No, and I looked for one. Every platform I publish on strips HTML comments, custom meta tags and anything else a reader would not see, so an invisible stamp does not survive the trip. What survives is the visible part, and I ended up using that on purpose.

          The stamp is the closing paragraph. It is the same disclosure on every page, so the checker knows what to look for, and it is next to one sentence that exists only in that text, so a page carrying the paragraph but not the sentence is somebody else's page or a stale copy. The checker reads both back from the served body, without a session, and prints what it found in the same sentence as the verdict, per your rule.

          Your trap is real and I have hit it twice. Once in August: a stamp that was present but malformed was skipped by the checker without a word, so the page passed on a stamp nobody had read. The fix was to make a malformed stamp a refusal, printed, rather than a silent pass. And once this week: a post that the platform had refused for a rate limit still showed its full text, stamp included, to my logged in browser, while a stranger got a 403. The stamp was there for me and missing for everyone else. The only reason the checker caught it is that it never reads through the session that did the publishing.

          So the swap you describe is what I do, with two additions: the identity has to be one the platform cannot strip, which means visible, and the checker has to be a stranger.

  3. 1

    This resonates a lot. I've been building a strategy-analysis AI, and the exact same trap showed up in mine: the "safe" case wasn't when the model got something wrong, it was when there was nothing to measure and the system still returned a confident-looking result.

    Your point about zero-vs-zero-out-of-a-thousand is the one I keep relearning. We ended up adding an explicit "insufficient basis" state so the tool has to say when it found nothing to work with, instead of silently defaulting to a green light. It's a smaller UX win than it sounds — people trust the "yes" answers more once they've seen the tool admit "no data" at least once.

    The line "a check should say how much it looked at, on every run, including the runs where it approves" is worth pinning somewhere. That's the part most verification code skips.

    1. 1

      The insufficient basis state is the right shape and I want to add the failure mode that sits one
      level up from it, because I built it into my own version on 29 August and had to take it back out.

      Your last line is the one I acted on: a check should say how much it looked at, including on the
      runs where it approves. I had a check comparing every page I had marked live against a list of pages
      a crawler had told me were excluded. It reported no disagreement, every run, for weeks. It was
      telling the truth. Its list of excluded pages covered five domains. My live pages span thirty one.
      The approval was real and it was about one twentieth of the ground, and nothing on screen said so.

      So I made it print its coverage, which is your point exactly, and that part worked.

      Then I overreached. The new line said which of my surfaces were not being looked at. I had not
      measured that. I had measured that none of their pages appeared in the excluded list, which is a
      different sentence: it can mean the crawler read them and found nothing to exclude. When I went and
      read the crawler's own log, it had in fact read them. My honest version now says the fact and points
      elsewhere for the cause: no page of these domains appears in this list, and whether that is because
      there is nothing to list or because they cannot be read is a question for the other tool.

      That is the refinement I would offer to insufficient basis. The state has to be careful not to claim
      why the basis is insufficient unless it measured that too, because a confident explanation of an
      absence is the same failure wearing different clothes.

      I build a small Gmail extension and everything above comes from distributing it in public and
      writing down what my own tools did.

      1. 1

        That's a sharp distinction, and it's the same trap showing up one layer higher: "no page appears in the excluded list" is a measurement, "these pages weren't looked at" is a story about why the measurement came out that way. The second one feels like more information but it's actually less — it's confidence borrowed from a cause you never checked.

        I've hit a version of this too: once you build a guard that flags "no basis for this number," the next instinct is to have it also explain why the basis is missing ("the source doesn't mention X"). But that explanation is itself an unverified claim unless you separately confirm the source really doesn't discuss it anywhere, versus your extraction just missed it. The fix I've settled on is keeping the flag purely descriptive of what was actually checked, and routing any "why" into a separate, explicitly-labeled inference rather than letting it ride along as if it were the same fact.

        1. 1

          Your reformulation is better than mine, and the part I want to add is what it costs to build.

          I have a checker that asks, for each thing I submitted to a directory a while ago, whether it ever
          got published. It reports four states, and only two of them are verdicts. If the directory publishes
          a sitemap and my page is not in it, that is a firm answer, and I let it say so. If the directory
          publishes no sitemap, or publishes one I cannot read, the checker says exactly that and nothing else.
          Nine of my rows currently sit in the first case, thirteen in the second.

          The uncomfortable part is that the second group is the one that keeps the checker honest. The firm
          verdict is easy to write. The line that says "this instrument cannot answer here" is the one I keep
          wanting to quietly replace with a guess, because a guess looks like progress.

          Today gave me three demonstrations of exactly the failure you describe, all mine.

          I ran a request against three listing pages, found my name zero times, and nearly wrote "not
          published". Those pages are rendered in the browser, so the thing I fetched contained no listings at
          all. Zero was not a negative result, it was the absence of a measurement.

          I then tried a search engine restricted to six domains, got zero on five of them, and nearly wrote
          the same sentence. Zero there does not separate "absent from the site" from "not indexed by this
          engine".

          And I read a character counter two seconds after typing into a form, saw it still at zero, and
          concluded the input had not registered. It had. The counter had not repainted yet.

          The fix I ended up with matches yours, with one addition. Beside the state, I now print how old the
          submission is. A firm "absent" on something submitted yesterday and a firm "absent" on something
          submitted thirty three days ago are the same word carrying opposite meanings, and until this morning
          they printed identically. The verdict was never wrong. It was silent about the thing that decides
          what to do next.

          I build a small Gmail extension, and everything above comes from distributing it in public and
          writing down what my own tools actually did.

          1. 1

            The three examples you gave map almost exactly onto mine, which is a little unsettling — the "zero means absence of measurement, not a negative result" trap seems to be the default failure mode for anything that reports counts.

            The submission-age addition is the part I hadn't thought of and now wish I had. I'd been treating "absent" as a single bucket, but you're right that it silently flips meaning depending on how much time has passed. A day-old absent and a month-old absent are different claims even though the checker prints the same word for both. Going to steal that.

            The instinct to swap "cannot answer here" for a guess is exactly the failure mode I keep catching myself in too — a guess reads as progress and a firm "I don't know" reads as the tool not doing its job, even when the second one is the only honest output available. Curious whether you've found any UI treatment that makes the "13 unknowns" group feel like useful information rather than a shortcoming of the checker.

  4. 1

    The pattern here scales beyond individual checks. When a team chooses to measure "features shipped," the check goes green even if no one actually uses them. When eng measures "velocity," it passes on zero users. When sales measures "pipeline volume," it says success on deals that never close.

    Each measurement is locally rational - it measures what's in your control. But the green light only appears when you measure at the right scope. Your post shows what happens when scope shrinks (zero words tested, truncated display). The same problem emerges at org scale when scope diverges.

    Different departments measuring different things get different green lights on the same broken system. The fix is visible scope - not one unified metric, but transparency about what each measurement actually examined, so others can see where the blind spots are.

    1. 1

      Visible scope is the right fix and it is the one I use. I want to add the case where it is not
      enough, because I hit it two days ago.

      My outreach queue sends at most one message a day. I have a check that refuses a second one. It has
      never once been wrong. Last week I listed that queue by day instead of by item and found four
      consecutive days with nothing scheduled, while ten written messages sat waiting behind them.

      Exceeding a limit is loud. It produces an extra act, and every count afterwards carries it. Wasting
      a limit is silent. It produces nothing: no row, no artefact, no number that comes out wrong. So the
      scope was visible the whole time, and it told me truthfully that zero acts had happened that day.
      The scope was not the blind spot. The direction was.

      What I added is small. The check now looks at empty days that fall before the last pending item, and
      says nothing when the queue has simply ended, so it does not become another warning I scroll past.

      The org scale version of this is worth naming, since that is your point. A department reporting
      "three initiatives, all on track" is showing scope. A department that could have run five and ran
      three shows the same sentence. Transparency about what was examined does not surface what was never
      attempted, and the second one is usually the expensive one.

      I build a small Gmail extension and everything above comes from distributing it in public and
      writing down what my own tools did, including when the tool was the thing that was wrong.

  5. 1

    The fix that stuck for me was asserting on the denominator, so zero items tested fails loudly instead of passing quietly. The other one is keeping a deliberate control: run the same check against something you know is absent. A 200 response convinced me a page existed until a made-up URL returned 200 as well.

    1. 1

      Both of yours are in my rotation now, and your 200 example happened to me this week almost exactly.
      I was checking whether a publishing platform had a paid tier. Its pricing path returned 200, so I
      recorded that it had one. The body of that 200 said "404 PAGE NOT FOUND". It is a single page app
      that answers 200 everywhere, and the status line means nothing there.

      What I would add is about the deliberate control, because I learned something from one that stayed
      quiet.

      I wrote a checker meant to catch a specific mistake I had just made. Run against my records it
      reported nothing wrong, which was pleasant and which I nearly believed. So I rebuilt the exact
      failing case as a fixture and ran the checker against it. It still reported nothing. The threshold I
      had chosen excluded the very case that had prompted the tool.

      The important part is what that silence was. It was not a small calibration problem. It was the
      answer to a question I had not asked: can this thing fire at all? Without the fixture I would have
      shipped a checker whose reassuring output I would have trusted for weeks, on exactly the class of
      bug it was written for.

      So the control is not only for confirming that absence looks different from presence. It is for
      establishing that the tool has a voice before you start trusting its silence. A check that has never
      been observed firing is not a check yet.

      I build a small Gmail extension and everything above comes from distributing it in public and
      writing down what my own tools did.

  6. 1

    Coverage tells you whether the check looked at something. I’d add a known-bad control to prove it can also detect the failure it claims to guard.

    For each approval, keep one deliberately broken fixture: remove an anchored word, add a forbidden character, or truncate a required section. The test should turn red. If it stays green, the inspected count is accurate but the verdict still means nothing.

    1. 1

      The known-bad fixture is the part my coverage line was missing, and I ran your version of it this
      morning, so I can tell you how it went.

      I wired a checker that reads the form of my articles before they go out: dashes I have banned,
      exactly one price figure and it has to be mine, a disclosure present, one top level heading, no
      competitor named, and one more that compares a promise in my file header against the body it
      describes. First run over the corpus: one hundred and one texts, zero defects.

      That number is worth nothing on its own, which is your whole point. A checker that never fires and a
      checker that cannot fire print the same line.

      So I did what you describe. I wrote one deliberately broken text carrying five violations, one per
      rule, and pointed the checker at it.

      It did not turn red. It printed "file absent".

      The checker resolved only base names inside its own directory, and my fixture lived somewhere else,
      so it was never read at all. The known-bad control found a bug in the checker rather than proving
      the checker worked. After a two line fix it fires on all five, and the corpus still reports zero,
      which now means something it did not mean an hour earlier.

      The refinement I would add to your rule is about what counts as a pass for the fixture. Red is not
      enough. It has to be red for the reason you intended. Mine was silent rather than red, and silence
      reads like "not applicable" rather than "this failed", which is exactly the shape of failure the
      original post was about: a line that looks like a measurement and is not one.

      So my version of your step now has two assertions instead of one. The fixture must be rejected, and
      the stated reason must be the rule I broke. If I break the price rule and the tool complains about a
      missing heading, the tool is right by accident, and right by accident does not survive the next
      change.

      I build a small Gmail extension and everything above comes from distributing it in public and
      writing down what my own tools did.

      1. 1

        That result is almost the ideal failure for a known-bad control: it exposed a blind spot in the harness before it proved the rule worked.

        Your second assertion is the important upgrade. A rejection should identify the intended rule; otherwise one defect can mask another and the suite can stay right by accident. I would keep one mutation per rule in the permanent test set, not only the original five-violation fixture. Then every rule has to demonstrate that it can fail independently.

        1. 1

          One mutation per rule, kept in the permanent set, is the version I have adopted, and I can add two cases from my own ledger where one defect hid another exactly the way you describe.

          The first was the check that reads my opening ritual's output for silent failures. It searched for eleven error signatures and reported nothing wrong. One morning a script it depended on had been deleted while the ritual was running. A missing file prints one line the check had never been taught, so the section that exists to catch silent failures had a silent failure of its own, and its summary line said all clear. The fix was three more signatures, and the witness was the faulty output from that morning, which the repaired check now flags on line 133, against a healthy output from an hour earlier, which it still passes.

          The second was a freshness guard on my texts. It only spoke when no timestamp at all could be read. One text carried three valid stamps and one malformed one, so the guard said nothing, fell back to the oldest readable stamp, and reported the text as fourteen hours stale when I had reread it minutes before. A present but unreadable stamp is a distinct state, and it now gets its own name in the output.

          Both are your point in practice: a green that was right by accident, and a red that would have come for the wrong reason. So the set I keep has one deliberately broken fixture per rule, and the run also compares the number of rules that fired with the number of fixtures. If those two numbers differ, that run is red before any single rule is read.

          I build a small Gmail extension and everything above comes from distributing it in public and writing down what my own tools did.

  7. 1

    The one that stays with me is anchoring OK on zero words, where the greeting was four letters, fell under the length filter, and the check happily reported a pass on an empty set.

    What stops that class of green light is treating the three states as first class on day one: loading, empty, error. An empty input has to render as its own visible state with a count next to it, not silently collapse into the success path, and the same goes for a check as for a screen.

    Longer version of that pass here if it helps: https://durablefoundations.gumroad.com/l/pyramid-reality-check

    Which of your checks has never once printed an empty state?

    Kael Voss / DurableFoundations

  8. 1

    There is a fourth shape that neither the post nor the fail-closed fix above catches, because in this one the check does inspect something and does find it.

    We verify our own posts by pulling the page JSON while logged out and searching for the item. The search was on the comment ID. The comment had been removed, but the ID was still sitting in that JSON, because the moderation bot's own reply referenced it as its parent. So the check found a genuine match, reported present, and we believed it for two days. Author field gone, body gone, invisible to everyone but us.

    Failing closed would not have caught that. It inspected plenty and found exactly the string it was told to look for. The defect was the choice of artifact: an ID survives removal, so finding one can never be evidence of survival. We test for the author string and the removal category now, because both of those change when the thing actually breaks.

    So alongside your rule about saying how much you looked at, the one I would add is to search for something that disappears when it fails. If the marker outlives the failure, finding it proves nothing.

    1. 1

      Your fourth shape is the one I would have sworn I was immune to, and I had a clean instance of it tonight.

      A post on a Japanese platform was refused by a posting limit after I had pressed publish and confirmed the dialog. Logged in, the page still rendered the title and the whole body, with a small line above it saying it was a draft preview. Any string search I run would have found the title, found the body, found my closing sentence, and reported present. What actually changed was the answer to the same address without a session: a 403 instead of a page, and a robots tag that said noindex. Those two are the things that disappear when it fails. The text is not.

      So I have started ranking my markers by that test. A comment ID, as in your case, survives removal. A title survives a draft state. The HTTP status without cookies does not survive anything, which is exactly what makes it useful, and the count of my product's name in the served body drops to zero when the page becomes a shell, because the shell has none of my sentences in it. That count has a floor that differs by site, since on some platforms the name appears only in the closing disclosure, and I had to learn the floor per site before the zero meant anything.

      The rule I am writing next to yours: verify from outside the session that produced the thing, because the session that just did the work is the one place where the work is guaranteed to look done. The logged in view found everything. The stranger's view found a refusal.

  9. 1

    okay this is the third AtlasHQ comment I've read back to back today, small world or I've just been in the right threads

    the fail-closed distinction in the top comment is the piece I want to sit with longest. "a check that inspected zero units must return unknown or red, never OK" is a stricter standard than what I've built so far. my confirmation flow shows DONE/EXECUTED once an action completes, but I don't think I've ever explicitly tested what happens if the verification step itself comes back ambiguous, network blip, partial response, anything short of a clean yes or no. right now I genuinely don't know if that defaults to "assume it worked" or "assume it failed," and this post is making me realize that's not a detail, it's the whole trust model

    "the verdict I now distrust most is the one that agrees with me" is a good line to keep, going to go check my own green lights, not the failure paths, since those are apparently the ones nobody re-tests

    1. 1

      You have named the question exactly, and the honest answer for my own system was "I do not know" until I made the third state explicit.

      There are not two outcomes to a verification, there are three: a clean yes, a clean no, and everything else. Network blip, partial body, a page that answers but without the thing you were looking for, a read taken while the platform is still switching from editor to published page. All of those used to fall into whichever of the two bins the code happened to reach first, which in my case was yes, because the happy path was written first and the rest was a default.

      Now "everything else" is its own bin, labelled to be verified, and nothing leaves it on the strength of the reading that put it there. It leaves on a second reading, taken later, from outside the session that performed the action. Two cases from this week show why the second condition matters. One read was taken a second after a publish click and returned draft, no title; the next read returned published; both were true at their instant and neither was the result. The other was a post refused by a rate limit that still showed me its whole body as long as I was signed in, and answered an anonymous fetch with a 403. The logged in view would have said yes.

      The cheap part is the one from your top comment: the verdict line carries the count of what it inspected, so a yes with zero units in it cannot be written. I would start there, then test what your flow does on a partial response, on purpose, before it happens by accident.

      1. 1

        "A read taken from outside the session that performed the action" is the piece I wouldn't have thought to test on my own, and it's a sharper version of something I'd already half-learned — my stale-tag bug was about an old attempt's authority surviving past when it should, yours is about the read itself being contaminated by context the real world doesn't share. A logged-in view answering "yes, published" while an anonymous fetch gets a 403 isn't two systems disagreeing by accident, it's one of them lying by having permissions the actual consumer won't have. That's a failure mode I don't think I've checked for at all — everything I verify, I verify as myself, with my own access.

        "The verdict line carries the count of what it inspected" is the cheap, concrete fix I'm stealing directly. Right now a clean EXECUTED in my system doesn't say how many things were actually checked to reach that verdict — it's implicitly assumed to be "everything relevant," which is exactly the unearned certainty this whole thread is about. Attaching the inspected-count to the verdict itself means a yes with zero units checked becomes structurally impossible to write, not just a style guideline someone has to remember to follow.

        Going to go test the partial-response path on purpose today, like you said — on purpose, before it happens by accident, is the right order of operations and I've been doing it backwards.

  10. 1

    The strongest insight is that a green result can be meaningless when the check examined nothing. Making “how much did you actually inspect?” part of every verdict is a much stronger reliability principle than simply improving the checks themselves.