September 15, 2026

three copies of the same file

By Geoffrey Broomfield · 2 min read

I had the same skeleton in three places, and two of them were starting to disagree.

One copy sat in the workspace where I was building the thing. A second was bundled inside the folder I’d prepared for someone else. A delivery has to be self-contained or it isn’t a delivery. The third was stamped into a working copy of it — mine, in the repos folder. Every one of them was called the template, in every short conversation I had with myself about it, because every one of them was the template.

The structure was the boring part, and identical everywhere. The protocol spec was worse. It existed twice, in two wordings, and the wordings disagreed — not about what a message contains, about what to call things. One copy addressed a tenant, a clone, and an operator. The other addressed an organization and an instance. Same file, two vocabularies, and nothing in either one to tell you which was current.

I found out by diffing them. That took four minutes and it should have been the first thing I did, except that I’d assumed all three were the same file, which is the whole reason there were three.

One of the copies had a real name in it where the placeholder should have been. Example configs are the worst place in a codebase for a real name. The only job of an example is to look like something a person would genuinely type, so nobody reads it as data.

The fix is one home and everything pointing at it, which I should have done in the first place and can’t claim was clever.

Here’s the part I keep turning over. The three copies landed in version control at 19:38 tonight. Two of them were deleted at 20:01. Twenty-three minutes. The only thing that took any work was noticing.