Shipped the changelog apprentice
A post-commit hook hands every commit to Claude Opus 4.7. Most get skipped. The ones that ship write themselves into five surfaces.
The page you're reading maintains itself now. A post-commit hook fires after every commit I make. It runs scripts/changelog.ts --auto, which hands the diff to Claude Opus 4.7 along with my last three published entries and an excerpt of the Axioms essay for voice calibration, and asks the model to decide whether this commit warrants an entry. Most don't. When one does, the model drafts the entry in my register, auto-publishes it to content/docs/changelog/, and creates a follow-up commit tagged to prevent the hook from firing on its own output.
Five downstream surfaces consume published entries from one source: this MDX page, /feed.json and /feed.xml, all three /llms.txt variants, a new get_recent_activity MCP tool at /api/mcp, and the chatbot's system prompt at /api/chat. One generator, five readers, all deterministic. The chatbot can now answer "what's Fardin worked on recently?" with real data instead of guessing from static content.
Same day, I rewrote the prompts and the anchor entries and backfilled four historical entries — the portfolio elevation, the essays drop, the AI-native skeleton, the redesign day. The apprentice's first month of drafts calibrate against writing I actually want to read.
The goal was never to automate my voice. It was to automate the archaeology — reading diffs, remembering what shipped, deciding what's worth noting — so I can stay in the writing seat without having to run a script or maintain a file.
Cleaned up sidebar redundancy sitewide
Every folder in the docs used to render twice in the sidebar — once as the parent, once as the index child. Fixed it everywhere at once.
Shipped the Mat
BJJ documentation area under the Body wing. Volume 01 of Brian Glick's "Only Way Out" transcribed verbatim. Graph-native schema — positions as nodes, moves as edges.