One Act, One Record
Been working on something and decided it would be prudent to write a few things down for both posterity and provenance. Or maybe to present at my insanity defense trial. Who knows?
The fact is that I'm making a governed local AI system (in this case I think of AI as "Agentic Intelligence"). The two key words are "governed" and "local."
I AM using outside help in the form of ChatGPT, Claude Code, and Codex. But the design is mine. They help code and refine ideas (and sometimes talk me off a ledge).
The itch
This system is supposed to log every change that is significant. By that I mean changes to core structure, code, governance, and even the local librAIry (see what I did there?) All of this was captured in something I've taken to calling "Hansard" which is a word that is used to describe the canonical record of an existing system we have: Congresses and Parliaments. I thought it fitting and, as I write more postlets, you'll probably come to see why (if you haven't figured it out already).
The problem is that code commits were a leak I continued to let drip and only recently plugged it. By that point I didn't just have one repo. I had TWO. The core agent and my LibrAIry (see Andrej Karpathy's wiki concept... thank you Andrej!).
Two wrong answers
So I came up with two options and, like all seemingly simple and obvious fixes they both turned out to be the wrongiest wrong.
The first was full automation. Post-commit hooks would auto write the Hansard entry itself. Simple right? Systems have been doing this for more than half a century. But I rejected it. Why? Because the point is governed human involvement. This would just be a mirror of a git log that nobody really vouched for, unless you consider git commit notes to be 'vouched' and I don't.
So that was out.
Next, I thought: "Why not do it per item?" Simple as well. Mirrors what I've been doing already and added bonus of not having to code/design a new path.
Also wrong.
I tend to work in bursts, so a "workday" on my little hobby could mean five, or more, commits per "day" which means I would drop that system like a bad habit and be right back where I was by the end of the week.
Claude and I had a bit of a discussion about it and Claude suggested the first one. I pointed out that maybe a little manual intervention would be a good thing and that is what eventually led to what I will call the "best available solution at the time."
The best available solution at the time
Programs do deterministic bookkeeping that is often 'authorized' with a single act. A Save. A Publish. A Post.
So we copied that.
A post-commit hook with no LLM in the loop appends a sha/repo/subject/parsed ticket ID to a "Pending Queue" file.
In my UI, there's a "GOV" governance button that will list what's waiting to be written to the Hansard.
Voila! We have the single act and no file by file madness.
Two details that mattered
There were two things that ended up mattering a lot more than I expected, though.
- Hansard, by design, is append only. Entries are never edited or deleted and corrections reference OLD ones so that the record of being wrong and needing a change is part of the official system record. So...
- Dismissal of a change needs a reason. For commits, those reasons turned out to be really good 'notes to future me.' And in the sister queue, where the AI proposes its own actions for my confirmation, dismissal reasons get fed back into the AI's context. So my "no" has a "because" and the system remembers both.
This makes rejections themselves a communications channel.
A bottleneck, on purpose
As with every decision, there's a tradeoff. I am now a bottleneck.
But it's on purpose.
If I stop confirming the queue will back up and the audit log starts to look like one of the receipts I get after a day in a computer store: long and depressingly uplifting.
That receipt, though, is always there and gives me a "hey knucklehead, you haven't looked at this yet" instead of the system silently deleting what could be great context.
What the pattern has taught me is that anywhere a machine can prepare and a human should vouch, it should be queued for consideration. One act. One record.