A kill rule that expires is not a kill rule
I wrote a kill rule for a paid-path test. Zero orders landed. The card expired into an archive and the dashboard still said ACTIVE.
On 2026-08-20 I approved a 14-day paid-path test. The pre-written rule was simple. Zero paid orders by 2026-09-03 and the sizing desk stops being the active Builder that day. One or more paid orders and we hold to the 2026-10-15 review. A paid order means money received.
Short answer: the date passed with 0 paid orders. The card expired into an archive folder. The dashboard still said ACTIVE. A loop can close every mechanical step and still produce no verdict. Canonical URL: https://bmdpat.com/blog/kill-rule-that-expires-is-not-a-kill-rule-2026

What did the test measure?
Stripe showed 0 subscriptions and $0 MRR. Checkout starts sat at 0. Affiliate commission events sat at 0. The verification report the card demanded was never written.
That last line matters. The test can prove nobody paid. It cannot prove the checkout worked, because nobody drove the three paid paths in a browser under the test. Absence of payment is not proof of a broken button. It is still 0 paid orders, and the rule scored on money received.
What did the vault do on the date?
On 2026-09-03 the kill rule fired. On 2026-09-04 a TTL sweep moved the card to an expired archive. Nothing in the daily log or the holdco page recorded that the rule had fired. The row stayed ACTIVE.
I reaffirmed the date on 2026-08-21: stands as written, no clock restart. The system's answer to that rule was to file it as expired.
A TTL sweep is an archiver. It is not a writer of verdicts. Expiry and firing are not the same event. I treated them as the same event, and that is why a GREEN-looking loop produced no decision.
Why does this match the software-factory critique?
PostHog asked on 2026-08-11 whether software factories can actually work. Dex Horthy at HumanLayer had just argued that better agent loops do not fix a deeper gap. Models get rewarded when tests pass. They do not get rewarded for a design that still holds six months later. His team tried lights-off work in July 2025. Horthy says they chose a manual rewrite in November 2025.
I am not reciting that essay. I already ran a smaller version of the same failure. My checks asked whether the expected artifact existed. They did not ask who writes the verdict when the date hits. The card looked handled. The Builder slot looked live. Both were false.
This is the same class as an agent batch that wrote 126 empty pages while every schema check passed. Structure is not substance. A closed loop is not a scored kill.
What rule do I use now?
A kill rule needs four things in the same place, before the date:
- The condition, in numbers a stranger can check.
- The date.
- The file that will hold the verdict.
- The named writer of that file. Not a sweep. A writer.
If any of those four is missing, you do not have a kill rule. You have a reminder that an archive folder will swallow.
I now poll dated gates from a commitments file so a date cannot lapse the way this one did. That is a fix for the watcher. It is not a fix for taste. Someone still has to write the verdict and live with it.
The same line holds for model promotion. Running is not the same as earning the job. A date passing is not the same as a decision.
Accompanying prompt
What the prompt does: It checks whether a dated kill rule can actually fire, or whether an archive step will swallow it.
Copy/paste this prompt:
Copy-ready prompt
Paste the exact block into your coding agent.
No article chrome, no footnotes, no formatting drift.
This prompt and every other one we publish live in the free prompt library.
Copy the block above.
If you want the next receipts from this fleet, the list is here: https://bmdpat.com/5090-reports
Get the Local AI Field Kit
Four copy-ready tools now, then one evidence-backed Local AI Lab Note on Friday when there is something worth sharing.
Try the free agent run check firstGet the requested artifact now, then at most one evidence-backed Local AI Lab Note on Friday when there is something worth sharing. One-click unsubscribe. No sponsored placements. Privacy.
Patrick Hughes
I build BMD and publish measured AI runs, failure reports, and reusable checks. Nashville, Tennessee.
More writing
- 5 min
Why Your Local Model Fits and Still Fails at Long Context
A local model can load and still run out of memory at longer context. Compare two controlled loads, inspect cache logs, and test the real workload.
- 6 min
My agent wrote 126 empty pages and every gate passed
One commit wrote 130 knowledge pages. 126 were the same four sentences with the title swapped. Schema checks, link checks and orphan checks all passed.
- 4 min
Your AI Agent Says "Done." Make It Prove It.
AI agents report work as done that they never did. Make every completion a falsifiable claim a script can verify before you trust it.
- 5 min
Agent Memory: Test the Answer After a Correction
Our agent-memory replay checks words in a file. I show what that proves, what it misses, and how to test whether an expert correction changes an answer.
- 5 min
3 Tests Before a GGUF Quant Runs Your Coding Agent
A GGUF file fitting in VRAM does not prove it can run your coding agent. Use this local acceptance test for tools, patches, and repeat runs.