Skip to content
andrew.dunn.dev

All content

TitleDescriptionDateReadSectionTags
glab apiglab 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.2026-10-13~3 minprojectsgitlabglabcli
switchyardA 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.2026-10-08~3 minprojectsgitlabjenkinsci
RepresentationSee how the same question about the Apollo 11 SysML v2 model changes in tokens, cost and correctness as the representation changes, over recorded runs or live with your own key.2026-09-15guidesaillmsysml
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 that three sizes of model give the same correct answer, and check the kitchen model with a script, because it is only worth having once something checks it.2026-08-26guidesaiharnessclaude-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~4 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-contributionA Claude Code plugin for contributing to GitLab projects, above all the gitlab-org/gitlab monorepo, from a machine with no GitLab Development Kit: a no-GDK contribution spine beside GitLab's own agent skills vendored at a pinned commit, until the spine merged into gitlab-simulation.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 for GitLab team members: file issues and merge requests against GitLab without a GDK, and reproduce self-managed GitLab on throwaway cloud VMs that delete themselves, so a change is proven on a customer's install before a maintainer sees it.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
kanikoA pipeline-driven build of the Chainguard kaniko fork for GitLab Runner: six images per release, compiled in UBI9 and shipped from scratch, in standard and FIPS 140-3 crypto, each cosign-signed with a CycloneDX SBOM, SLSA v1.0 provenance and an OpenVEX document attached.2026-05-13~3 minprojectsgitlabcontainerssupply-chain
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
bairnCopies a child's photos and videos out of a Famly nursery feed onto the household's own disk, with the post, the educator and the time written into each photo as EXIF and XMP. Optional upload to a self-hosted Immich.2026-05-08~3 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~16 minwritingcmscloudflare-workersstatic-sites
PatinateRender Strava rides over an OpenStreetMap basemap as a themed SVG plate. One Rust binary syncs activities into a SQLite cache, clips every track inside a salted hidden zone before the renderer sees it, and strips identifying attributes on the way out. Overlapping low-alpha strokes accumulate into brighter colour where you ride often, the way patina builds on metal.2026-05-06~3 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~3 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~3 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-19guidesaiharnessclaude-code
posternRoutes events from Azure Event Grid, GCP Pub/Sub, AWS SQS, Kafka and any CloudEvents producer to GitLab pipeline triggers: one container, YAML routes, variables extracted from the payload, no database.2026-04-09~3 minprojectsgitlabgocloudevents
kitA tool-registry manager that resolved developer tool versions across git-based TOML registries, generated mise configuration from the result, verified every install, and ran the bumps through CI: a scheduled sense, a rules-first respond with cheap model inference for the edge cases, and a merge gate that re-checked every checksum.2026-04-06~3 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 command-line tool that managed an agent's skills, subagents and rules the way a package manager manages packages: a git registry as the source, a synced copy under each project's .claude directory, a lockfile naming what was installed, and a hook that reported drift as it happened.2026-04-05~3 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
muxrSession multiplexer for AI coding work, written in Rust over tmux. It owns the <repo>/<campaign> address across the tmux session, the campaign files on disk and the runtime's conversation, with a resume engine that snapshots a session and brings it back.2026-03-27~3 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
yotoshelfA self-hosted tool for making Yoto Make Your Own audio cards: record in a browser tab, draft and voice stories, print labels, publish through go-yoto, a dependency-free Go client with a dated ledger of how the API really behaves.2026-03-14~3 minprojectsgoyotohousehold
kebnfConverts the OMG's KeBNF text for KerML and SysML v2 into ANTLR4 and tree-sitter grammars from one parsed AST, recording the metamodel binding it strips to a per-rule mapping file. The tree-sitter backend writes definition and usage rules with their prefix keywords inlined, so GLR can resolve the grammar.2026-03-10~3 minprojectsgrammarsysmlrust
sysmlA Rust toolkit that parses SysML v2 models into a knowledge graph and serves it to people, CI and language-model agents through one core: a clap CLI, a feature-gated MCP server and a skill file that teaches an agent the CLI. A study instrument for how an agent can work a large model without reading it whole.2026-03-10~3 minprojectssysmlaimcp
sysml-benchAn evaluation harness that measures whether giving a tool-augmented LLM more tools helps it answer questions about a SysML v2 model: typed tasks scored per field against published schemas, four tool sets called through a command line, public corpora of several sizes, and a pre-registered replication on an independent corpus.2026-03-10~3 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 halts the agent at an agree step until a human approves the plan.2026-03-08~3 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~3 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