Skip to content
andrew.dunn.dev

All content

TitleDescriptionDateReadSectionTags
RepresentationSee, with your own key, how the same question about the Apollo 11 SysML v2 model changes in tokens, cost and correctness as the representation changes.2026-09-15lessonsaillmsysml
The Key in the Wrong KeyringWe 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.2026-09-14~23 minwritinglinuxbootcsecure-boot
Operationalizing Ontology with Language ModelsProjects 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.2026-09-09~20 minwritingaiharnessteaching
OntologyOperationalize an ontology with a language model. Give the agent a small model of the kitchen instead of a list of what is in it, so the answers stop wobbling from one session or model to the next, and check that model with a script, because it is only worth having once something checks it.2026-08-26lessonsaiharnessclaude-code
The Flywheel and the MeterDocumented 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.2026-08-14~13 minwritingai-harnessopen-modelsai-economics
The Other Half of the CorpusThe 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.2026-08-07~11 minwritingragretrievalai-harness
When Retrieval Is Not the QuestionWhat 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.2026-08-07~7 minwritingretrievalknowledge-managementai-harness
varveA local record lake over agent-session transcripts. Normalizes Claude Code, pi, and opencode session records into Parquet partitions and queries them with DuckDB. Files are canonical, the engine is disposable, and nothing leaves the machine.2026-08-07~3 minprojectsduckdbparquetsql
July 2026 LinksCurated links from July 2026.2026-07-31~6 minlinkslinkscollecting
egressA public, versioned catalog of every outbound connection a self-managed GitLab instance can make, built for administrators who have to write the firewall and allowlist rules for a controlled-egress or air-gapped environment.2026-07-21~3 minprojectsair-gapcontrolled-egressegress
Evidence FactoryA worked demonstration of running a continuous ATO evidence pipeline for NIST 800-53 controls entirely inside GitLab: a policy plane injects a conformance stage no repository can edit, a released CI/CD Catalog runs the checks, and one Python driver turns each result into a merge gate and a control posture.2026-07-21~3 minprojectscicontainersgitlab
CairnA sealed bootc estate: db-signed UKI boot under keys from an offline ceremony, composefs-pinned root, TPM2 unlock bound to a signed PCR11 policy. Images promote only after booting for real in CI.2026-07-19~4 minprojectsinfrastructurehomelablinux
gitlab-contributionVendors GitLab's official AI-agent skills for Claude Code at a pinned commit, plus one authored skill for contributing to GitLab projects without a GitLab Development Kit.2026-07-09~3 minprojectsgitlabllmai-harness
Service-to-Service Routing in Rootless PodmanPart 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.2026-07-02~14 minwritinghomelabpodmancontainers
bulkheadLeast-privilege self-managed GitLab CI runners on a fixed set of AlmaLinux hosts: rootless Podman for ordinary jobs, ephemeral libvirt VMs for jobs that need root, and the cgroups v1 versus v2 trap that decides which release to build on.2026-07-01~4 minprojectspodmancontainersself-managed
June 2026 LinksCurated links from June 2026.2026-06-30~6 minlinkslinkscollecting
gitlab-simulationA Claude Code plugin that provisions ephemeral self-managed GitLab instances on Google Compute Engine, so an LLM agent can reproduce airgap, Duo Agent Platform, Geo, and license-gated cases that never surface on SaaS, without touching production.2026-06-26~3 minprojectsgitlabself-managedsimulation
Network Plane Isolation in Rootless PodmanTwo 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.2026-06-10~7 minwritinghomelabpodmancontainers
Painless Bit-Perfect from Navidrome to a StreamerNotes 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.2026-05-08~4 minwritingaudioupnpdebugging
bairnPersonal photo archive for households whose nursery or preschool uses Famly. Pulls images and videos to disk with full EXIF and XMP metadata embedded into each file. Optional Immich upload for households that already self-host one.2026-05-08~2 minprojectsgofamlyhousehold
A Progressive Vendor Stance for the Agent-Native FutureI 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.2026-05-07~20 minwritingbairngoreverse-engineering
Enabling Editors to Use Git Without KnowingMost 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.2026-05-06~14 minwritingcmscloudflare-workersstatic-sites
PatinateRender Strava activity into stylized heatmap posters and inline SVG. A single Rust binary keeps a SQLite activity cache, draws it over an OpenStreetMap basemap in one of four baked-in themes, trims every track inside a privacy circle before render, and can strip identifying attributes on the way out. The patina builds where you ride often: overlapping low-alpha strokes accumulate into brighter color the way actual patina builds on metal.2026-05-06~1 minprojectscyclingvisualizationrust
Sveltia Identity TranslatorTranslated-identity proxy for Sveltia CMS. Editors authenticate against your IdP; a single bot does the API calls; commits attribute correctly via git's author/committer split.2026-05-06~2 minprojectscmsauthcloudflare-workers
April 2026 LinksCurated links from April 2026.2026-04-30~5 minlinkslinkscollecting
jigAn agent-shape harness that points a real agent at a real CLI and counts what happens: a battery declared in agent-shape.toml, a headless runtime spawned against the fixture, and an LLM judge scoring the transcript on a 4-point scale whose top mark is a first command that was real and worked. A companion check guards the rubric against drift in the tool's own help output.2026-04-24~4 minprojectsaitestingagent
The Larder LessonA scrollytelling lesson that builds a small AI harness around meal planning in Claude Code. An applied companion to the AI harnesses series.2026-04-19~2 minwritingaiharnessteaching
LarderBuild a small assistant for dinner out of one agent and a folder of plain files, and learn the shape that transfers to most of the other things you keep doing by hand: when the answer is wrong, correct the file, not the answer.2026-04-19lessonsaiharnessclaude-code
kitA tool-registry manager that resolved developer tool versions across git-based TOML registries, generated mise configuration from the result, and verified every install against a per-tool trust tier, from cosign down to a bare checksum. Three CI pipelines proposed and gated the bumps until mise covered the same ground.2026-04-06~6 minprojectstoolingregistryrust
Inference on a ScheduleA 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.2026-04-05~9 minwritingaiinfrastructurearchitecture
runeA Rust CLI that treated a git repository as the canonical home for an agent's skills, subagents, and rules, syncing them into each project's .claude directory behind a content-hash lockfile and a write hook that surfaced drift in the same turn as the edit. Retired once the portable SKILL.md layout made most of what it did a directory of markdown and a symlink.2026-04-05~4 minprojectsaiagentregistry
The Hunt for LeverageOn test frameworks that tell agents what to do next, and the design patterns that make LLM-generated tests actually correct.2026-04-04~11 minwritingaisoftware-engineeringtesting
manifoldAn API-only adoption profiler for self-managed GitLab: it reads activity through the REST API and renders a dashboard of adoption gaps and the enablement action that closes each one, entirely inside a customer's own network.2026-04-03~3 minprojectsgitlabgoanalytics
March 2026 LinksCurated links from March 2026.2026-03-31~2 minlinkslinkscollecting
Get LampOn dark software factories, where they work, where they might not, and a tool we built to explore the gap.2026-03-29~8 minwritingaisoftware-engineeringtooling
Building Bootc Images from ScratchThe 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.2026-03-27~19 minwritinglinuxcontainersbootc
muxrHarness session multiplexer for AI coding workflows. Owns the harness/campaign/session/segment address across tmux, the filesystem, and your AI runtime so a rename stays coherent in all three.2026-03-27~5 minprojectsaitmuxharness
Kernel Modules as Multi-Stage Container BuildsA 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.2026-03-25~13 minwritinglinuxcontainersbootc
AI Harnesses Are For EveryoneA 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.2026-03-24~16 minwritingaiharnessworkflow
LLM-Mediated ExperimentationGiving an LLM access to a real test bench transformed a year-old debugging effort. The root cause was not what anyone thought.2026-03-24~9 minwritingaidebugginginfrastructure
Go Architecture for LLM-Maintained CodebasesStructural choices in a Go project built mostly by LLMs: making wrong code fail to compile rather than fail code review.2026-03-15~9 minwritinggoaisoftware-engineering
kebnfConverts the OMG's KeBNF text for KerML and SysML v2 into ANTLR4 and tree-sitter grammars from one AST, all 640 rules, recording the metamodel annotations it strips. A mechanically faithful tree-sitter emitter timed out parsing a one-line file; inlining shared prefix keywords took it to 0.15ms and cut LR conflicts from 335+ to 199.2026-03-10~3 minprojectsgrammarsysmlrust
sysmlA single Rust binary that parses SysML v2 models into a queryable knowledge graph, exposed through a clap CLI for humans and CI and a stdio MCP server for agents, both over the same core. The open question is whether the CLI is the cheaper transport for an agent, and I have not measured it yet.2026-03-10~4 minprojectssysmlaimcp
sysml-benchAn evaluation harness asking whether giving a tool-augmented LLM more tools actually helps it answer questions about a SysML v2 engineering model. 88 tasks scored per field against published schemas, run across four tool sets and six public corpora, with a pre-registered replication whose frozen hypothesis did not survive the independent corpus.2026-03-10~5 minprojectssysmlaibenchmarking
On Building a Complicated Foot GunDeploying a home server with immutable infrastructure tooling: what the pipeline tested, what it didn't, and what broke anyway.2026-03-09~15 minwritinghomelabbootcselinux
synthesistA Rust CLI that records the process governing a body of code (what was planned, what was agreed, what phase the work is in) as an append-only claim graph an agent can query instead of inferring from a diff. Workflow state is a per-asserter JSON-LD log read back through a disposable index, under a phase machine that forbids every write until a human approves the plan.2026-03-08~4 minprojectsaiorchestrationrust
Rootless Podman Pods Leak Subordinate UIDsRootless Podman pods leak subordinate UIDs onto the host filesystem. The pod abstraction was the constraint, and named networks fix it completely.2026-03-07~11 minwritinghomelabpodmancontainers
Back to ComposableOn why the agent tooling ecosystem is rediscovering the Unix shell, and why MCP is starting to look like Maven.2026-03-05~14 minwritingaitoolingworkflow
Meeting Notes RAGA RAG pipeline for searching customer meeting notes: embedding, vector search, and synthesis without a SaaS intermediary.2026-03-03~17 minwritingragvector-searchbenchmarking
February 2026 LinksCurated links from February 2026.2026-02-28~10 minlinkslinkscollecting
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.2026-02-23~13 minwritingaiworkflowsoftware-engineering
PinboardKen Burns-style video generator that composites photos as vintage Polaroid snapshots on panoramic backgrounds, with smooth camera movement and music.2026-02-22~2 minprojectsvideotoolingopen-source
PlaybillTOML-driven video program assembler: title cards, intros, episode pass-throughs, and credits rendered into a single concatenated video with fade-to-black transitions.2026-02-22~3 minprojectsvideotoolingopen-source
Birthday at the TheaterAlasdair turned three and we threw him a party at the theater, which required splicing together TV episodes, phone-recorded introductions, and Ken Burns effects on Route 66 maps.2026-02-18~19 minlifevideotoolingopen-source
A Reading Roadmap for My KidsA dragnet pass at chapter books worth reading aloud, organized by age. Built to share and update as we go.2026-02-15~32 minwritingreadingparenting
Self InventoryBetween 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?2026-02-15~7 minwritingaiworkflowidentity
Things I Want to BuildA 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.2026-02-15~2 minwritingprojectswishlist
Harness ExplorerStatic analysis for the AGENTS.md, CLAUDE.md, and skills files that define how an agent behaves in a codebase. A single Go binary follows their references into a knowledge graph, scores it for redundancy, contradiction, and information density, and ranks where the next hour of harness editing saves the most tokens; whether that ranking approximates what matters is untested, since no calibration dataset exists.2026-02-07~3 minprojectsaitooling
ImmutableFROM-scratch Fedora bootc images with source-built, MOK-signed ZFS and NVIDIA kernel modules. A homelab on an earned, verifiable supply chain.2025-11-01~4 minprojectsinfrastructurehomelablinux
July 2022 LinksCurated links from July 2022.2022-07-31~3 minlinkslinkscollecting
May 2022 LinksCurated links from May 2022.2022-05-31~7 minlinkslinkscollecting
April 2022 LinksCurated links from April 2022.2022-04-30~3 minlinkslinkscollecting
March 2022 LinksCurated links from March 2022.2022-03-31~3 minlinkslinkscollecting
February 2020 LinksCurated links from February 2020.2020-02-29~2 minlinkslinkscollecting
January 2020 LinksCurated links from January 2020.2020-01-31~9 minlinkslinkscollecting
May 2019 LinksCurated links from May 2019.2019-05-31~8 minlinkslinkscollecting
October 2018 LinksCurated links from October 2018.2018-10-31~13 minlinkslinkscollecting
September 2018 LinksCurated links from September 2018.2018-09-30~7 minlinkslinkscollecting
August 2018 LinksCurated links from August 2018.2018-08-31~4 minlinkslinkscollecting
July 2018 LinksCurated links from July 2018.2018-07-31~4 minlinkslinkscollecting
Iceland and the United KingdomThree weeks across Iceland, Scotland, and England. Waterfalls, geothermal lagoons, the best Thai food we've ever eaten, and sneaker waves at Reynisfjara.2016-09-01~55 minlifetripicelandscotland
Travel PlanningHow we planned the 2016 Iceland, Scotland, and England trip: flights, logistics, and the pleasure of planning months in advance.2016-09-01~12 minlifetripplanning
Las VegasThings to do in Las Vegas that don't involve gambling or sitting poolside: the Hoover Dam, Red Rock Canyon, and the strip from a distance.2016-07-01~6 minlifetriplas-vegasnevada