I spent an afternoon reading every rule file I’d written for Claude in this repo. I opened the folder expecting to add things. I ended up deleting most of what was there.
The drift
Rules rot when they're copies
When I first set up Claude for this project, I did the obvious thing. I wrote down everything. Component props. Token names. Folder layouts. Route patterns. Every useful thing I could think of, pasted into a rule file so the model would know where to look.
Then I built things. Renamed a component. Moved a folder. Added a token. Refactored a chart config. Small stuff. None of it made me open the rule files—because I was working on the site, not on my instructions for Claude.
A few months in, the rules were fiction. Helpful fiction sometimes. Harmful fiction other times. Claude would read a rule, act on it, and land on something that no longer existed.
The audit
Three files. Same rule. None of them agreed.
I went through every file with one question—is this information, or is it a pointer to information?
Multiple files carried overlapping instructions about the same topic—and they’d started to disagree in subtle ways. Component interfaces already lived in the Astro files. Token names already lived in tokens.scss. Routes already lived in the filesystem. The rule files had frozen all of it in time the moment I typed it out.
The codebase was a living source of truth. The rules were a dead photocopy of it. And because the model can’t tell the difference between the two, both looked equally authoritative when it read them.
The rewrite
Pointers, not copies
The new rule for writing rules is short. If the information already lives somewhere in the repo, the rule file points at it. If it doesn’t—a taste call, a workflow step, a principle—the rule file holds it.
So CLAUDE.md now says things like for any visual decision, read .claude/rules/sinphony.md. And sinphony.md says things like for tokens, read src/styles/tokens.scss. Every file got shorter. Every claim is either a pointer or a principle. Nothing duplicates the codebase.
The rules stopped rotting—because there’s nothing left to rot.