Writing

September 2026
The Key in the Wrong Keyring
We wanted to sign everything for cairn in CI, including a key for kernel modules, and reached into shim's part of the boot chain without asking first.

September 2026
Operationalizing Ontology with Language Models
Projects co-written with language models grow semi-structured data that drifts. An ontology is one approach to consistency I wanted to investigate: what one is, how to run a program over it, what that buys, and the small experiment I designed to find out.

August 2026
The Flywheel and the Meter
Documented open models and pricing pain arrived in the same season, and I wanted to know whether the alignment is real or a rhyme. Building a flywheel to read my own usage, finding two moats where the argument assumed one, and a license question that answered itself while I wrote.

August 2026
The Other Half of the Corpus
The benchmark I built in the last post measured my imagination, not my work. Your history is two corpora, artifacts and transcripts, and I had never indexed the second one.

August 2026
When Retrieval Is Not the Question
What replaced the retrieval pipeline on the artifact side: a decay report that runs without a query, a fact lane for questions with one right answer, and disagreement surfaced rather than resolved.

July 2026
Service-to-Service Routing in Rootless Podman
Part one isolated the network planes. The sequel: if every service is in its own plane, how do they talk? The answer is FQDN-everywhere through one always-available local router. Getting there meant a hunt through link-local host access, an SSRF guard that rejected it, pasta's --map-guest-addr, and a careful reading of what podman upstream has actually decided. Plus an epilogue: what happened when the pattern met the whole fleet, and the upstream patch that lets the workaround retire.

June 2026
Network Plane Isolation in Rootless Podman
Two podman networks alone don't segment traffic in rootless mode, and isolate=true silently fails when netavark uses its iptables backend (the default on Fedora 43 and earlier) thanks to an iptables-nft bug. The root cause, the fix, and how Fedora 44 made it disappear.

May 2026
Painless Bit-Perfect from Navidrome to a Streamer
Notes from getting a self-hosted music library to play bit-perfect on a network streamer, why the record player is not always the right answer with little kids around, and the small debug package for the closed-source iOS client that was the gap.

May 2026
A Progressive Vendor Stance for the Agent-Native Future
I emailed Famly support in September 2024 asking for a parent-side data export feature. They couldn't commit it to product (a small SaaS has to chase revenue features), but they pointed me at their API and left me an architecturally accessible position to build the integration myself. Twenty months later, with an AI harness on my side, bairn shipped. That stance is the right one for a world where users will increasingly act through agents.

May 2026
Enabling Editors to Use Git Without Knowing
Most static-site CMSes make editors learn Git. They shouldn't have to. A small Cloudflare Worker called sveltia-identity-translator lets editors save changes through their existing Workspace identity, while git history attributes correctly.

April 2026
The Larder Lesson
A scrollytelling lesson that builds a small AI harness around meal planning in Claude Code. An applied companion to the AI harnesses series.

April 2026
Inference on a Schedule
A nightly CI pipeline that mixes Python and a language model to keep a static site's activity data fresh. The interesting part was discovering which 10% of the work actually needed a model.

April 2026
The Hunt for Leverage
On test frameworks that tell agents what to do next, and the design patterns that make LLM-generated tests actually correct.

March 2026
Get Lamp
On dark software factories, where they work, where they might not, and a tool we built to explore the gap.

March 2026
Building Bootc Images from Scratch
The upstream Fedora bootc images ship 523 packages. We built one with 255 from scratch using dnf --installroot and a Containerfile. No rpm-ostree, no treefile, no inheritance.

March 2026
Kernel Modules as Multi-Stage Container Builds
A pattern for building ZFS and NVIDIA kernel modules in multi-stage container builds for bootc immutable images. No DKMS, no gcc, no kernel-devel in your production OS.

March 2026
AI Harnesses Are For Everyone
A harness is a set of files that turns a stateless AI model into a persistent collaborator. The major labs are racing to move inference closer to your work. Here's how to meet them halfway.

March 2026
LLM-Mediated Experimentation
Giving an LLM access to a real test bench transformed a year-old debugging effort. The root cause was not what anyone thought.

March 2026
Go Architecture for LLM-Maintained Codebases
Structural choices in a Go project built mostly by LLMs: making wrong code fail to compile rather than fail code review.

March 2026
On Building a Complicated Foot Gun
Deploying a home server with immutable infrastructure tooling: what the pipeline tested, what it didn't, and what broke anyway.

March 2026
Rootless Podman Pods Leak Subordinate UIDs
Rootless Podman pods leak subordinate UIDs onto the host filesystem. The pod abstraction was the constraint, and named networks fix it completely.

March 2026
Back to Composable
On why the agent tooling ecosystem is rediscovering the Unix shell, and why MCP is starting to look like Maven.

March 2026
Meeting Notes RAG
A RAG pipeline for searching customer meeting notes: embedding, vector search, and synthesis without a SaaS intermediary.

February 2026
The Merge Request as {Friction, Leverage}
The merge request is both the thing slowing teams down and the thing keeping them safe. That tension is real and worth sitting with.

February 2026
A Reading Roadmap for My Kids
A dragnet pass at chapter books worth reading aloud, organized by age. Built to share and update as we go.

February 2026
Self Inventory
Between dropping off the kids and my first meeting I built a scrollytelling analysis platform. What does that mean for the skills I spent years developing?

February 2026
Things I Want to Build
A running list of things I've wanted to build over the years but failed to because they required far more time and attention than I was capable of historically.