
Our skill packs rebuild themselves every morning. The daily verifiers were green and had been green all week. Then we counted the agents on the page members actually read: nineteen. There were twenty-two. The artifact was flawless and every sentence describing it was wrong.
Count the Thing Before You Describe It
We run a personal-brand programme for Sigrun’s members. Every member gets a score, a private dashboard, and a downloadable team of AI agents. A scheduled job rebuilds that pack every morning, harvests what each run learned back into the skill files, republishes the zip, and verifies it.
On Monday it was in excellent shape. Three new agents had shipped that week. Eleven more had absorbed 51 lessons from real client work. The zip on the server matched the zip on disk byte for byte. Every verifier passed.
The line at the top of every member’s dashboard read: “Your Agent Library is NINETEEN agents.”
Find Every Copy, Not the One You Noticed
The count was not stored once. It was typed, separately, into five places — each correct on the day it was written, none able to notice the library had grown past it.

The job whose entire purpose was to announce these changes had the same disease in its worst form. It carried a hand-typed list of news items and a hard-coded date string, TODAY_H = "20 Jul 2026". That is not a script. It is a document somebody has to edit before every run — and it had gone unedited for two weeks while the thing it describes was rebuilt every single morning.
Point Your Guards at Something Outside Themselves
Here is the part worth stealing, because we had already anticipated this. The weekly publisher carried an assertion that no two visible news items may claim different library counts — written in July after a near-miss that almost showed a hundred dashboards two different totals on one screen.
It passed. Twice over, for two separate reasons. First, it matched one phrasing: it looked for “Agent Library is N agents”, and the worst offender read “arranges all nineteen into six departments” — same claim, different sentence, invisible to the pattern. Second, and this is the one that generalises: all three stale claims agreed with each other.
The rule. A guard that compares a system to itself cannot see consistent error. Consistency with yourself is not evidence — it is the failure mode. Guards have to terminate at something outside the system they are guarding. Ours now reads the manifest and fails on any count that is not today’s, in any phrasing, spelled or numeric.
Two days earlier we had found the identical shape somewhere else: a mirrored copy of the pack sat thirteen files behind while its weekly report truthfully said “you’re already on the latest” — because it compared the source against its own snapshot rather than against the clock. Different system, same mistake.
Derive the List, Don’t Maintain It
Every count now comes from the manifest the builder regenerates from its own run-order list on each run: the dashboard roster, the “Agent N of M” header, the prose on the members-only page, the head-count in the news.
The news generator has no list to edit at all. Each Monday it diffs the artifact against itself in time — today’s pack zip versus the dated backup from seven days ago, which is what a new agent actually is: a file in one and not the other. It reads why each skill changed from the markers the harvester leaves inside the shipped file, so the reason comes from what members received rather than from a log claiming what was sent. And it retires expired totals by rewriting the claim, never the history: “Your Agent Library is now NINETEEN agents. Two joined this week” becomes “Two joined this week.” The event was true on its date. Only the total expired.
Eighteen tests hold it, half of them RED cases asserting the thing refuses: an unknown flag exits without writing, a missing baseline fails rather than reporting “nothing changed”, a skill that was merely re-dated produces no news, a skill missing from the manifest is a hard error instead of a quiet miscount. One caught a real defect within a minute of being written — the number-to-word table started at ten, because the library was already at twenty-two and nothing smaller could “possibly” come up. Which is precisely the reasoning that produced every hard-coded count we had spent the morning removing.
Distrust a Red Line on a Green System
The verifier written to confirm all this failed three times before it was right, and all three were the checker’s fault, not the site’s. It looked for the encrypted payload under the wrong tag name. It flagged the word “Coaching” as a member-data leak — it is our partner’s own navigation menu, “My Coaching Philosophy”, on every page of her site. And it asserted “the library lists 22 agents” against an anonymous fetch of a password-gated page, then against the outer shell of a page that ships its whole body inside a base64 iframe. Both times it read zero and cried failure about a perfectly healthy page.
A checker that fires on correct behaviour is worse than no checker. Ship three false reds on a green system and the next person learns to skim past red. Before believing a failure, reproduce what the checker claims to have read — and when a surface is gated or encoded, the check has to unlock it and decode it, or it is asserting against a login form and calling that a result.
Re-run the Pipeline, Not the Step
Rebuilding the bundle made the published zip stale by two bytes. Republishing the zip made the public pack directory stale, because that directory is written by two further scripts that run after the republisher. Only the directory verifier caught it.
When you re-run one stage of a pipeline by hand, you have re-run one stage of a pipeline by hand. Everything downstream is now describing the state you just replaced.
Count the Cost
One session. The work was diagnosis and judgment, which does not parallelise well, so there was no subagent fan-out beyond a single read-only sweep to inventory every surface that prints a count. Token figures are approximate.
Take the Rule, Not the Fix
Three things here generalise past our stack. The pipeline that maintains an artifact and the copy that describes it decay at different rates, and usually only one of them has a test — we had hash manifests, coverage gates, three daily verifiers and a link-graph checker guarding the pack, and not one of them looked at a sentence. Guards must terminate outside themselves, or they certify consistent error as health. And a number about an artifact belongs to the artifact — on every surface that prints one, not just the surface you happened to check.
This is the loop behind The System: the agents that do the work also write down what broke, so the next run starts smarter. The same loop caught skill-pack pages that linked to nothing inside weeks of green reports, and it is why our skill packs change most days. The format of this write-up follows our meta article standard.
The same packs we run our own business on, free to download and install — rebuilt most days, because every run writes back what it learned.

