Skip to content
andrew.dunn.dev

I'm Andrew Dunn and here you'll find me documenting my explorations through life, analytical computing, and creative computing, exploring ways to make that work accessible to a wider audience.

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.

Built in the dunn.dev estate

Estate · active

Cairn

A 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.

Hosted on GitLab

Contribution · active

glab api

glab api, the raw request command in GitLab's command-line client: --field decodes JSON arrays and objects, bracketed names reach the API as the query parameters they spell, --paginate follows the Link URL as given, and mr create recognizes a title already marked Draft.

Built at GitLab

Project · active

switchyard

A ladder of Jenkins pipelines on a Java and Maven app, each converted to GitLab CI/CD at GitLab Public Sector, with a guide that puts every Jenkins construct beside the GitLab primitive that carries it and a rehearsal track for converting live.

Built in the dunn.dev estate

Project · active

varve

A 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.

Built at GitLab

Project · active

egress

A 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.

Hosted on GitLab

Project · active

Evidence Factory

A 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.