Module T4·F40Neill's Vibe · Tier 4 · Operating the Machine~8 min

The same fact lived in three files. Now they disagree.

You wrote it down to remember it. You wrote it down three times — and the copies quietly drifted apart. Now you don't know which one is true. One fact needs one home.

01 · the scene

"Which one is right?" The same fact, in three files, no longer agreeing.

The operator kept memory in plain text files — a CLAUDE.md (the AI's standing house rules, read at the start of every chat), a LOGS.md (a running diary of what got done), and a project notes page. A simple fact — which database the pending tasks actually live in — got written into all three, on different days, by a tired hand. Months later the three copies said three different things. The AI read one, "remembered" from another, and confidently acted on a third. None of them was obviously stale, because all three looked equally authoritative. There was no error message — just a quiet fork in the truth. Nobody dual-wrote on purpose. They just wrote the fact down wherever felt handy, twice.

Here's where that leads, for real: this same system once asserted three times from memory that "Allison has no corpus" — while a 57,160-chunk search vault sat untouched in a sibling folder the whole time. The map in its head had drifted from the truth on disk, and it never thought to look.

grep "pending tasks" across the project files
# one fact -- "where do pending tasks live?" -- written into three files:
grep -rn "pending tasks" .
CLAUDE.md:14: pending tasks -> Notion "My Tasks" DB (8389f7b4-...)
LOGS.md:88: moved pending tasks into the new "Claude Code Pending" DB
notes/storage.md:3: pending tasks -> still in the old pending-tomorrow.md cache
# three answers. all look official. which one does the AI trust at 11pm?
Neill51% · the terrain

"I thought writing it down MORE places meant I'd never lose it. Backwards. Every extra copy was one more thing that could go stale without telling me. When the three didn't match, the AI didn't pick the right one — it picked whichever it happened to read first, and acted like that was gospel. I'd created three sources of truth, which is the same as having none."

Claude49% · the execution

"Honest version: when a fact lives in two places, I can't tell which is current — both look authoritative, neither carries a timestamp that overrides the other. So I'll read one, half-remember another, and assert the merge as fact. The fix was never 'write more carefully.' It was: give each fact exactly one home, so there's nothing to disagree with. One home can be wrong. Three homes can quietly contradict each other — and that's worse, because now there's no source of truth at all."

02 · the why

Two copies of a fact don't add safety. They add drift.

A fact you store once has one state: right or wrong, and you can fix it in one place. A fact you store twice has a third state nobody wants — disagreement. You update one copy and forget the other, and now the two slowly pull apart with no alarm. This is called drift, and it's silent by design: nothing crashes when two files merely differ. The AI makes it worse, because a fresh session starts amnesiac and reasons from whichever copy it read — it can't smell that another file says something else. The cure isn't discipline ("I'll keep them in sync"); discipline decays under pressure, same as any unenforced rule. The cure is structural: decide, once, where each kind of thing lives, and never write it anywhere else. One concept, one home. Then "which is right?" has only one possible answer, because there's only one place to look.

☉

One home

source of truth

Each kind of fact gets exactly one place it lives. Specs in one store, the daily log in another, tasks in a third. You always know where to look.

⇅

The drift

two copies disagree

Write the same fact twice and the copies pull apart silently. No crash, no warning — just two "truths" that no longer match, and an AI that picks one at random.

⊗

The cache

read-only, regenerated

A copy a tool makes automatically (e.g. a generated list). Read it, never hand-edit it — your edit is erased on the next regen. Fix the source, not the copy.

The model: think of one fact like one set of house keys. With one hook by the door, "where are the keys?" always has an answer. Put a copy on the kitchen counter and another in a coat pocket, and the day they don't match you can't trust any of them — you've lost time chasing a fact you thought you'd made safer by duplicating. A spare key isn't a backup of the truth; it's a second thing that can be wrong. One fact, one home isn't about tidiness — it's the only arrangement where the question "which is right?" can't be answered two ways.

03 · predict it

You assign each fact a home. Predict what happens to the duplicate.

Coming up, you'll draw a storage-ownership map: a one-page table that says, for each kind of fact, exactly one place it lives. Suppose "where pending tasks live" is now assigned ONE home — the tasks database. A week later you update that fact (you moved databases) in its one home. The old copy you used to keep in LOGS.md is gone. What happens the next time the AI needs to know where tasks live?

Not quite — A, B, and D all treat a second copy as a safety net. It isn't; it's a second thing that can go stale without telling you (that's the drift you just watched). A backup of code is fine — git keeps versions on purpose. A second hand-maintained copy of a fact is just a future contradiction. What does removing the duplicate do to the question "which is right?"
That's the prediction to hold. With one home, there is nothing to contradict the answer — the AI reads the single source and gets the current truth. The duplicate wasn't a backup; it was the only thing that could drift. Remove it and the disagreement becomes structurally impossible. You'll build exactly this map at the end and watch a duplicate get caught.
04 · the walkthrough

Turning "wherever felt handy" into one home per fact.

list the KINDS of fact
step 1Name the categories you keep, not individual notes: durable decisions, the daily log, pending tasks, code, bug patterns, secrets, generated caches. Each kind is a row.
assign ONE home per row
step 2Give each row exactly one home. Decisions to one store, the running log to another, tasks to a tasks database, code to git. The picks matter less than the rule: one row, one home.
mark the read-only caches
step 3Flag any home that a tool generates automatically as read-only. You read it; you never hand-edit it. Its real source is the row it was generated from — fix that instead.
grep for duplicates
step 4Verify by searching for a fact across all your files. If it appears in two homes, one is a future contradiction — delete the copy that isn't its assigned home. Test the map; don't trust it.
05 · prove it · gate

Teach it back to unlock the payoff.

Same rule as always: answer it right, or the module isn't done.

Carry the idea to a new fact. Your AI keeps citing the wrong deploy URL — because the URL is written in the README, in a comment in the deploy script, and in a memory note, and the three don't match. Which move actually fixes it, instead of papering over it?
// apply the principle to an unseen fact · one correct answer unlocks Module T4·F40
That's still living with duplicates. A keeps three copies and bets on discipline — which decays, and is exactly how they drifted in the first place. B adds a fourth home (now four things can disagree). D throws away the fact entirely, so there's no source of truth at all. Which option leaves the fact in exactly one place?
That's the transfer. Same shape as the pending-tasks fork: collapse the fact to one home, delete the other copies, point everything else at that single source. Now "which URL is right?" has one answer because there's one place to look. Keeping three in sync (A) bets on discipline that decays; a master note (B) is just a fourth thing to drift; deleting it (D) leaves no truth at all. One concept, one source of truth — don't dual-write; don't hand-edit caches. Module unlocked. ↓
the durable idea

A fact in two places isn't backed up — it's set up to drift. Give every kind of fact exactly one home, point everything else at it, and "which is right?" can only ever be answered one way.

06 · factory payoff
⊘ locked — pass the teach-back to claim this piece of the machine

Your own storage-ownership map — one fact, one home.

A one-page STORAGE-MAP.md template you fill in for your project: a table with one row per kind of fact and exactly one home each, an anti-pattern list (the duplications that bite), and a five-step audit you run to catch a fact that snuck into two places. Drop it at the top of your project so every future session — yours or the AI's — starts from one agreed map of where things live, instead of guessing. Plus storage-audit.sh: a tiny, dependency-free script you run any time to grep your own files for a fact you suspect is duplicated — it lists every file the phrase appears in, so a second home shows up the instant it exists. This is the exact discipline that lets a non-coder run a 30-app fleet on plain files an AI can read: the workflow only became the asset once every fact had one home and the AI stopped having to guess which copy was true. Pick the homes once; let the map and the script keep them honest.

▶ now catch a duplicate — don't trust the map

Don't take "one home" on faith — prove a second home gets caught. In a throwaway folder, write the same fact into two files, then run the audit and watch it surface both:

break it on purpose — one fact, two files, audited
# 1. write the SAME fact into two different files (a duplicate, on purpose)
echo 'deploy_url=https://app.example.com' > README.md
echo 'deploy_url=https://OLD.example.com' > notes.md
# 2. audit for that fact -- the script lists every home it found:
bash storage-audit.sh deploy_url
! 'deploy_url' lives in 2 files -- that is a duplicate, not a backup:
README.md:1: deploy_url=https://app.example.com
notes.md:1: deploy_url=https://OLD.example.com
# two homes, two different values -> exactly the drift you came here to kill.

See two files listed for one fact → that's a duplicate waiting to drift; pick its one home and delete the other. See one file → that fact has a single source of truth. The difference between a fact and a trustworthy fact is exactly this: you can grep for how many homes it has.

✓ Module T4·F40 complete