<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Volodymyr</title>
    <description>The latest articles on DEV Community by Volodymyr (@volodymyrkubiria).</description>
    <link>https://dev.to/volodymyrkubiria</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4080251%2Fab000687-c842-421c-901f-649d693b7e5c.jpg</url>
      <title>DEV Community: Volodymyr</title>
      <link>https://dev.to/volodymyrkubiria</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/volodymyrkubiria"/>
    <language>en</language>
    <item>
      <title>A Detector That Only Ever Says "Clean" Proves Nothing</title>
      <dc:creator>Volodymyr</dc:creator>
      <pubDate>Sun, 16 Aug 2026 17:09:09 +0000</pubDate>
      <link>https://dev.to/volodymyrkubiria/a-detector-that-only-ever-says-clean-proves-nothing-mii</link>
      <guid>https://dev.to/volodymyrkubiria/a-detector-that-only-ever-says-clean-proves-nothing-mii</guid>
      <description>&lt;p&gt;A few days ago I asked my agent to count how many of my tooling scripts carry a self-test. It grepped and answered: 12 of 13.&lt;/p&gt;

&lt;p&gt;The number was wrong. One script labels its control &lt;code&gt;НЕГАТИВНИЙ КОНТРОЛЬ&lt;/code&gt; — uppercase — and the probe's regex was lowercase with no &lt;code&gt;-i&lt;/code&gt; flag. The real answer was 13 of 13.&lt;/p&gt;

&lt;p&gt;A probe written to find blind detectors was blind. It returned a clean, specific, entirely plausible number, and nothing in its output hinted that it had missed anything. I caught it only because the total felt one short and I opened the file by hand.&lt;/p&gt;

&lt;p&gt;That is the whole problem, and it took ninety seconds to demonstrate on myself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The detectors are multiplying
&lt;/h2&gt;

&lt;p&gt;If you work with a coding agent, you are accumulating detectors far faster than you notice. Not tests — &lt;em&gt;detectors&lt;/em&gt;. Pre-commit hooks. Custom lint rules. Audit scripts. "Check that no doc references a deleted file." "Check that every rule in the project has an actual mechanism behind it." "Check that the test count claimed in this commit message matches reality."&lt;/p&gt;

&lt;p&gt;They cost one sentence to request, so you request them constantly. I have 29 in a single project. They run on every commit and they almost always print nothing, which is exactly what you want them to print.&lt;/p&gt;

&lt;p&gt;And there is the trap:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A detector that found nothing and a detector that cannot see produce byte-identical output.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Silence is the success state. Silence is also the total-failure state. You cannot tell them apart by looking — and the longer a detector stays quiet, the more you trust it, which is precisely backwards. A broken detector is silent &lt;em&gt;more&lt;/em&gt; reliably than a working one.&lt;/p&gt;

&lt;p&gt;Test suites have a defence against this. &lt;a href="https://en.wikipedia.org/wiki/Mutation_testing" rel="noopener noreferrer"&gt;Mutation testing&lt;/a&gt; perturbs your production code, re-runs the suite, and reports any mutant that survived — a change nothing caught. It exists because you can reach 100% line coverage with tests that assert nothing at all.&lt;/p&gt;

&lt;p&gt;But mutation testing points at &lt;em&gt;suites&lt;/em&gt;, in CI, over application code. Nobody mutation-tests the 200-line script their agent wrote on Tuesday to check something about their docs. And the guardrail tooling that grew up around LLM coding — pre-call and post-call interceptors — is built to &lt;a href="https://www.arthur.ai/blog/best-practices-for-building-agents-guardrails" rel="noopener noreferrer"&gt;stop the model from doing something dangerous&lt;/a&gt;, not to prove that a bespoke checker can still see.&lt;/p&gt;

&lt;p&gt;So the fastest-growing category of quality machinery in your repo is the one with no soundness check at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lab science solved this in the 1800s
&lt;/h2&gt;

&lt;p&gt;Every assay ships with controls. A &lt;a href="https://www.nist.gov/glossary-term/36651" rel="noopener noreferrer"&gt;negative control&lt;/a&gt; is the assay run with everything &lt;em&gt;except&lt;/em&gt; the sample: no signal is expected, and if a signal shows up, the run is contaminated and its results are void. A positive control is the mirror — a known-present sample that &lt;strong&gt;must&lt;/strong&gt; produce a signal. If it doesn't, the instrument is dead, and every clean reading it gave you today means nothing.&lt;/p&gt;

&lt;p&gt;The translation to software is direct. Give every detector a &lt;code&gt;--self-test&lt;/code&gt; flag. Behind it, paired controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;positive&lt;/strong&gt; — a case the detector exists to catch. It must fire.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;vacuum&lt;/strong&gt; — an invented case that resembles a real one but isn't. It must stay silent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run the controls before trusting the report. If any control fails, the tool does not print a verdict at all. It prints that it is unsound.&lt;/p&gt;

&lt;p&gt;Here is the real thing, trimmed, from a tool that audits whether every rule in my project has an enforcement mechanism behind it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// A detector that only ever says "clean" proves nothing.&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;selfTest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ok&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="nx"&gt;bad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;got&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;want&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;got&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;want&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;ok&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bad&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;: got &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;got&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, want &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;want&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Can it still read its inputs at all?&lt;/span&gt;
  &lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sources · routing table found&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sources · test classes parsed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;testClasses&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Positive: a rule that IS in the table must resolve.&lt;/span&gt;
  &lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;positive · slug fully in table&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nf"&gt;slugHit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;norm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;smart-design&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;full&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Vacuum: a rule that exists nowhere must resolve to nothing.&lt;/span&gt;
  &lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;negative · absent slug&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nf"&gt;slugHit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;norm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;zzz-nonexistent-rule&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;null&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Vacuum: an invented filename must not be accepted as a witness.&lt;/span&gt;
  &lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rules-witness · vacuum — invented file is not&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;S&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rulesTests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;no-such-file.test.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;false&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bad&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;
    &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;❌ DETECTOR UNSOUND — do not trust its report&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;✅ controls pass — detector may be trusted for this run&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;bad&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look at the last line. The tool never claims the codebase is clean. It claims that &lt;em&gt;for this run, its own verdict is worth reading&lt;/em&gt;. Those are different statements, and keeping them apart is most of the value.&lt;/p&gt;

&lt;h2&gt;
  
  
  The trap inside the fix
&lt;/h2&gt;

&lt;p&gt;Controls go blind too. This is where it stops being trivial.&lt;/p&gt;

&lt;p&gt;One of my audits reads a corpus of documentation and reports &lt;strong&gt;orphans&lt;/strong&gt; — guards that exist in code but that no document explains. It needed a positive control: some token guaranteed to be present, so that a &lt;code&gt;false&lt;/code&gt; would mean "the reader is broken," not "this guard is undocumented."&lt;/p&gt;

&lt;p&gt;The first control I wrote picked a guard that, as it turned out, genuinely &lt;em&gt;was&lt;/em&gt; undocumented. So it returned &lt;code&gt;false&lt;/code&gt;. And &lt;code&gt;false&lt;/code&gt; there is indistinguishable from a completely broken corpus reader. A control designed to prove the reader worked would have quietly certified a reader that had stopped reading.&lt;/p&gt;

&lt;p&gt;The comment in that file now reads:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Positive control for the orphan check: EtalonChainGuardTest is the best-explained&lt;/span&gt;
&lt;span class="c1"&gt;// guard in the project (6 memory files + 5 docs). If the corpus is being read at all,&lt;/span&gt;
&lt;span class="c1"&gt;// this token is present — so a `false` here means the reader is broken, not that the&lt;/span&gt;
&lt;span class="c1"&gt;// guard is an orphan. (An earlier control used a guard that is in fact undocumented,&lt;/span&gt;
&lt;span class="c1"&gt;// which would have made a broken reader look correct.)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The rule I took from it: &lt;strong&gt;anchor a positive control to the most redundantly-present fact you have&lt;/strong&gt;, never to a convenient example. If the anchor is marginal, its absence is ambiguous — and an ambiguous control is not a control.&lt;/p&gt;

&lt;h3&gt;
  
  
  There is a floor below that one
&lt;/h3&gt;

&lt;p&gt;I found it the day after publishing these tools as &lt;a href="https://github.com/VolodymyrKubiria/negative-control" rel="noopener noreferrer"&gt;a public repository&lt;/a&gt;, in the one script that grades all the others.&lt;/p&gt;

&lt;p&gt;That harness has a mutation mode: it blinds a hook on purpose and requires every positive case to go silent. A green run means the controls are capable of failing. I ran it and got a flawless score for two of three hooks — and the score meant nothing. The mutation expression replaced the &lt;em&gt;first&lt;/em&gt; line of a multi-line pipeline and orphaned its continuations, so the mutant no longer parsed. Bash never started the hook. Every case "went silent" for a reason that has nothing to do with blindness, and the report concluded: &lt;em&gt;every EXPECT went silent — these controls can actually fail.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The harness already carried a control for this family. It refuses a mutation that changes nothing, on the grounds that such a mutation looks identical to one that worked. That control ran, and passed: the file &lt;em&gt;had&lt;/em&gt; changed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Changed and still executable are two different questions&lt;/strong&gt;, and only the second one makes the silence mean what the report says it means. One line separates them — run the mutant through &lt;code&gt;bash -n&lt;/code&gt; before grading anything. It is now control ⑨, with a paired control ⑨b, because a parse check that rejected every mutant would have passed ⑨ alone.&lt;/p&gt;

&lt;p&gt;I keep relearning the same shape. The detector is a hypothesis about the subject; the control is a hypothesis about the detector; and the thing that runs the controls is a hypothesis nobody had written down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Copy it in ten minutes
&lt;/h2&gt;

&lt;p&gt;Minimum viable version, any language:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add a &lt;code&gt;--self-test&lt;/code&gt; flag that runs before anything else and exits non-zero on failure.&lt;/li&gt;
&lt;li&gt;For every rule the detector enforces, write &lt;strong&gt;two&lt;/strong&gt; fixtures: one that must trip it, one that looks similar and must not.&lt;/li&gt;
&lt;li&gt;Add at least one &lt;strong&gt;input-parse&lt;/strong&gt; control — assert that what you're reading is non-empty and shaped as expected. Most silent blindness isn't subtle logic error; it's a path that moved, and now you're matching against an empty string.&lt;/li&gt;
&lt;li&gt;Anchor positive controls to the most redundant, least removable fact available.&lt;/li&gt;
&lt;li&gt;On any control failure, print &lt;strong&gt;"unsound — do not trust this report"&lt;/strong&gt; and refuse to emit a verdict. Never a partial one.&lt;/li&gt;
&lt;li&gt;Every time the detector is wrong in real use, don't just fix it — turn that exact case into control #N+1.&lt;/li&gt;
&lt;li&gt;If any control works by breaking the thing it grades, assert the broken version still runs. &lt;em&gt;Changed&lt;/em&gt; and &lt;em&gt;still working enough to be measured&lt;/em&gt; are different questions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 6 is where it compounds. My detectors' control lists now read like a diary of every way each one has previously been wrong. That list is the actual asset; the detector is just the thing it's attached to.&lt;/p&gt;

&lt;p&gt;If you would rather start from working code than from a list, the same practice is packaged in &lt;a href="https://github.com/VolodymyrKubiria/negative-control" rel="noopener noreferrer"&gt;&lt;strong&gt;negative-control&lt;/strong&gt;&lt;/a&gt; — MIT, three bash hooks plus two harness scripts and one &lt;code&gt;.mjs&lt;/code&gt;, no install. The snippets above are from a private project; the repository holds generalized copies, each with its own controls. &lt;code&gt;bash scripts/probe.sh --all&lt;/code&gt; runs them, and &lt;code&gt;--mutate&lt;/code&gt; blinds a guard on purpose so you can watch its controls catch it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this is not
&lt;/h2&gt;

&lt;p&gt;It is not a replacement for tests. It is not mutation testing — mutation perturbs the &lt;em&gt;subject&lt;/em&gt; to grade the &lt;em&gt;checker&lt;/em&gt;, which is stronger and considerably more expensive. Self-tests with controls perturb nothing. They just refuse to let a checker report until it has shown, on fixed fixtures, that it can still tell signal from noise.&lt;/p&gt;

&lt;p&gt;Nor does it escape the regress. Who controls the controls? Nothing does. The controls are hand-written fixtures and they can rot right alongside the code. What the practice buys is a floor, not certainty: a detector without controls can be blind from birth and never say so, while a detector with controls has to survive a named list of things it must catch and must ignore — and when one of those breaks, it breaks loudly instead of printing a reassuring nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers, measured rather than remembered
&lt;/h2&gt;

&lt;p&gt;In a solo-built production Android app — 73,411 lines of Kotlin, 1,683 unit tests, all measured 2026-08-16:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;29&lt;/strong&gt; custom tooling scripts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;15&lt;/strong&gt; carry a &lt;code&gt;--self-test&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;15 of those 15&lt;/strong&gt; carry at least one explicit vacuum control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fourteen tools have none. They are the ones I trust least, which is the correct amount.&lt;/p&gt;

&lt;p&gt;The opening anecdote counted 13 of 13. That was a few days earlier, and two more tools have grown controls since — which is precisely why every number here carries a date and none of them is worth repeating without one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limits, stated plainly.&lt;/strong&gt; These counts come from grepping my own repository — the same method that was wrong in the opening anecdote before I checked it by hand. I haven't surveyed how common the practice is elsewhere; my impression that it's rare comes from searching, not from reading other people's code, and absence from a search result is not absence from the world. And a passing control suite proves only that the detector could see &lt;em&gt;at the moment the controls ran&lt;/em&gt;, on the fixtures it was handed. Nothing beyond that.&lt;/p&gt;

&lt;p&gt;Which is still a great deal more than green.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you have a checker in your pipeline that has been quietly green for six months, run the experiment: hand it something it should catch. Five minutes, and the result is always interesting.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>devops</category>
      <category>testing</category>
      <category>claude</category>
    </item>
  </channel>
</rss>
