Skip to content
andrew.dunn.dev

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.