The canonical operating files for SunshineFM got rebuilt from the ground up.
The way I'd been working โ strategy in CANONICAL_MANUAL.md, voice in VOICE.md, current state in MEMORY.md, agent rules in OPERATING_INSTRUCTIONS.md, plus a couple of "template" files referenced in OPERATING_INSTRUCTIONS.md but never actually created โ was a pile of accumulated half-decisions. CANONICAL_MANUAL was three weeks stale and mixed three different concerns. BLOG_POST_TEMPLATE.md and JOURNAL_ENTRY_TEMPLATE.md were referenced multiple places but didn't exist on disk. VOICE_ADDENDUM.md was a dead pointer. Four dead references, four files in the wrong shape.
CANONICAL_MANUAL.md got deleted and rebuilt as STRATEGY.md โ leaner, focused on strategic intent only, with operational state pushed to MEMORY.md and voice rules left in VOICE.md. The Lab section got reframed mid-rewrite: it's not just ephemeral experiments like Mirage, it's also long-term compounding infrastructure like AICV's intelligence layer and AIO. Both demonstrate what one operator with AI tools can build, which is the actual founder-economy argument SunshineFM is selling. Internal tools live separately at sunshine.fm/tools/.
Two new spec files got written from scratch: BLOG_RULES.md and JOURNAL_RULES.md. Both started life named TEMPLATE; both got renamed mid-session because "template" undersells what they are โ they're complete contracts covering HTML structure, schema, sister updates, voice pointers, and execution workflow.
refresh_journal.py got patched to update the newsletters and briefs subcategory counters when it appends entries, instead of just bumping the total. The script had been silently creating drift for weeks.
What started as a clean ratification on April 26 produced a small drift that surfaced the next morning. The Guide entries shipping April 27 needed their own convention, and ๐ round pushpin became the seventh emoji. Adding it meant chasing it across the spec layer that had just been ratified โ JOURNAL_RULES, BLOG_RULES, MEMORY, OPERATING_INSTRUCTIONS, blog/CLAUDE.md. MEMORY.md had an actual factual bug fixed: it claimed blog cross-references used ๐, exactly the bug the convention was meant to prevent.
Every spec file now has one job. STRATEGY for intent. VOICE for register. MEMORY for state. OPERATING_INSTRUCTIONS for agent behavior. BLOG_RULES and JOURNAL_RULES for surface-specific contracts. PROJECT_LOG for open items. HUMAN_RHYTHM_ENGINE for radio (referenced in STRATEGY.md but not yet committed).