The Architect
Everything That Broke This Month Was a Copy That Drifted
An agent that vanished from ten repos, documentation that denied our own automation existed, and a profile link nobody updated. Three different failures, one cause.
I went back through a month of commits across everything we run, looking for the fixes that took the longest to find. Not the biggest fixes. The slowest to notice.
Nearly all of them had the same cause. Something existed in more than one place, and the places stopped agreeing.
The agent that disappeared from ten repos
We use one small agent to close out a working session: check for unpushed work, push it, update notes. On 28 August I found that this one agent definition existed as three different variants across ten repositories. Six copies had no end-of-session mode at all, so saying "end session" in those repos did nothing. Nobody had noticed, because nothing failed. It simply did not act.
The fix was obvious: pick the most complete version, mark it as the source of truth, and resync every copy from it. Done in an afternoon.
Six days later the agent stopped appearing entirely. Every sibling agent in the same folder loaded fine. This one did not show up in the list, in any repo that carried the fixed copy.
The cause was a byte-order mark, an invisible character at the very start of the file, which broke the frontmatter that the tooling reads to discover agents. It arrived with the resync, most likely from a default file-writing behaviour in PowerShell. We stripped it from all ten copies on 3 September.
The uncomfortable part is what the incident shows. The drift fix did not cause the problem, but the copying did. One bad byte, pushed to ten places at once, failed ten times at once.
The documentation that said we had no automation
On 28 August I also went looking for gaps in our automation roadmap, and found that our own documentation said no Slack layer existed yet. It described one as planned, not built.
That was wrong. Ten scheduled cloud routines had been running for weeks, posting to six Slack channels, several writing results back into the repository. They had been created directly through a scheduling tool, never written up, and the docs never caught up with them.
A few days later an audit found five more stale files. One was a launch checklist for a go-live date more than a month in the past. Another contradicted itself about the status of a tool we use.
None of these documents was careless when written. They were accurate on the day. The reality moved and the copy stayed put.
The fix that changes how we write facts down
For values that change over time, such as targets, fees and billing cadence, we stopped overwriting. We now keep an append-only fact log: when a value changes, the old one is marked superseded rather than deleted, and the history stays readable. The idea is borrowed from temporal knowledge graphs like Graphiti.
The trigger was a review that found the same number recorded in two places, disagreeing. We also wrote down an ownership rule: the log is canonical, and the database column is a one-time import, not a live mirror. Two sources are only safe if one of them is explicitly the boss.
The same problem, in what crawlers read
This is not only an internal issue. On our own sites, the same brand appeared in three hand-copied lists: the structured data, the llms.txt file, and the social links. One of them still held an outdated profile link. Nobody was wrong on purpose. Three copies had simply drifted.
We moved to one registry that feeds all three, and gave each entity a canonical identifier so that every schema block points at the same node instead of re-declaring a bare name. That is what JSON-LD node identifiers exist for, and it is what lets a crawler read several pages as one connected entity rather than four things that happen to share a name. If you are working on how AI systems represent you, the llms.txt format is worth reading with the same question in mind: is this the only place this fact lives?
What we do now
- One owner per fact. Every value that appears twice has a named canonical home. Every other appearance is generated or linked, never retyped.
- Copies are checked, not trusted. A resync that touches ten places gets verified in one of them before it goes to the rest.
- Documentation gets audited against reality on a schedule, not when someone is already confused.
- Silence is not proof of health. The broken agent produced no error. We only found it by looking for something that should have happened and did not.
If your business has a price, a positioning line, a phone number or an offer that lives in more than one place, it is drifting right now. The question is only whether you find out from an audit or from a customer.
Find out where your marketing architecture is breaking down.
