This article comes with a free Claude skill
The rule this story ends with is packaged as denominator-rule – one small file you drop into Claude Code so your own assistant works this way too. It is public domain: copy it, change it, no attribution and no permission needed. How to install it is at the end of this article.
The check was green. It had been green for weeks. It was also, in a narrow sense, telling the truth: it had found no problems.
It had found no problems because it had looked at no files.
A path had changed underneath it. The glob it used to find things to inspect now matched nothing, so it inspected nothing, found nothing wrong with nothing, and reported success. Every part of that chain behaved correctly. The only thing that was wrong was the sentence it printed, and the sentence it printed was the only part anybody read.
The thing that makes this hard
The failure is not that the check broke. Checks break all the time and you notice, because they go red and someone comes to fix them.
The failure is that it broke into the reassuring state. A check that dies loudly costs you an afternoon. A check that dies quietly costs you the thing it was watching, for however long nobody looks – and the greener it stays, the more you trust it, and the less likely anyone is to look.
I have now hit this in four different disguises, and I want to name them because they do not look alike from the inside:
- An empty population. The check ran, found nothing to check, and reported no problems.
- A wrong boundary. It examined one folder and I read the result as if it covered the codebase.
- A wrong predicate. The detector recognised one spelling of the thing it was looking for, so everything written the other way was invisible to it.
- Use versus mention. It counted a file that quoted a dangerous call as if the file made that call, which inflated the count in the direction that felt responsible.
Different bugs. Same shape: the number was fine, and the population behind the number was not what I thought it was.
The rule
A green light must be able to state its denominator.
Not “did anything fail” but “how many things did you examine, and out of what.” A check that cannot name the population it looked at is decoration. And the instant you make it print that number, all four disguises above become visible, because “0 files examined” reads very differently from “no problems found” while being the same event.
Three parts, and the third is the one people skip:
- Enumerate from the real boundary, described in the question’s own words. Not “every file in this folder” but “every script that can write to the database.” Those are different sets and only one of them is the answer.
- Report the count, always, including when it passes. The number is the check. The verdict is an opinion about the number.
- Fail closed on empty. Zero items examined is a fault, never a pass. If the check cannot find its subjects, it does not know they are fine; it knows nothing.
The correction that taught me the most
I once reported a leak closed across a population of 7. Then I found the real boundary was 43 and corrected it. Then I found it was 49 and corrected it again.
Three confident numbers in one afternoon, each an improvement on the last, each wrong. And the reason I kept stopping too early is worth saying plainly: a real improvement is emotionally indistinguishable from a complete one. Widening the set felt like finishing. It felt like finishing all three times.
So there is a corollary I now apply mechanically, because judgement demonstrably does not fire here: when you widen a denominator, assume the widened one is still too narrow, and look one level further out before you assert anything. Check whether the detector recognises more than one spelling. Ask what a file that mentions the thing without doing it would score. Then say the number with its method attached, so the next person can attack the method instead of inheriting the number.
And one direction this does not go
There is a trap on the other side that I nearly walked into, and it is worth flagging because it wears this rule’s clothes.
Enumerating a population is a claim about what you have not checked. Being wrong makes you humbler. But if the output of your enumeration is a list of things that get to skip a check – an allow-list, an exemption – then being wrong hands out access, silently.
I once classified every script in a directory and auto-exempted the ones that looked harmless. The list included the probe whose entire job was to prove the exemption mechanism still worked. Same instinct, opposite consequence.
So: enumerate the whole set, always. But when the result is an exemption, decide each member one at a time with its own reason, and ask two questions before you ship it. Is the test of this guard in the list? And does every entry have a specific reason, or do two hundred entries share one? A shared justification across two hundred entries means nobody decided any of them.
Get the skill
Everything above is generic. None of it is about rats, and none of it is specific to this site. So the rule is also published on its own as a Claude skill: a single Markdown file that an AI coding assistant reads and applies when the situation comes up.
The file: denominator-rule/SKILL.md
Or take the whole set:
git clone https://github.com/blonderoofrat/agent-skills
Installing it in Claude Code. Copy the skill’s folder into one of these, so the file ends up at .../skills/denominator-rule/SKILL.md:
~/.claude/skills/(available in every project on your machine)your-project/.claude/skills/(that one project only)
Claude reads it at the start of the next session and applies it when what you are doing matches the description at the top of the file. You can also ask for it by name.
Using a different assistant? The file is plain Markdown with a two-line header. Paste the body into whatever system prompt, rules file or instructions file your tool uses. Nothing in the rule itself is Claude-specific.
Licence: CC0, public domain. Copy it, adapt it, ship it in commercial work, no attribution required. These are deliberately frozen snapshots rather than a maintained project, so if one is wrong for your situation, change it. That is easier than asking us to.
Part of Notes from building this site: articles about working practices that exist because something here went wrong first. The rule above is also published on its own, as a free public-domain instruction file for AI coding assistants — the denominator-rule skill, in blonderoofrat/agent-skills on GitHub.
Filed under News about this site




