Sodalis
Scores 1,883 contacts by decayed interaction history, dedupes them, and syncs to iCloud behind four guards. One of them refuses to archive more than 25% of the book in a single pass.
dustinholden.com
Homelab, side projects, and the debugging in between. Every post here carries a number, a path, or a command. That includes the ones where I got it wrong first.
Latest
A --remove-source-files move across disks hit a tree of hardlinks, deleted one of two names, kept every byte where it was, and wrote a second full copy. Here's the tell, and the repair.
Read articleWriting
22 local one-shots at a single coding task produced one behavioral pass that didn't reproduce. My static grader couldn't separate the pass from the failures, and that turned out to matter more.
My DNS resolver rate-limited the whole house as one client Build logApp Store downloads took 10+ minutes on Wi-Fi and one minute on cellular. Two AdGuard Home defaults gave every device on the subnet a shared 20 qps budget, and the dropped queries never showed up in the log.
95% of my tokens were the same context, resent Build log835.3M of 879.2M tokens across 3,823 requests were cache reads. I was paying for the search over and over, not for the answer.
Launch day proves nothing EssayThree of my own systems, measured six months after they shipped. The only property that survived is whether the thing fails loudly when it drifts.
1,688 of my 1,883 contacts are dead weight Project noteSodalis scores contacts by decayed interaction history and archives the ones nothing touches. Most of the work went into four guards that stop it eating my address book.
Projects
Scores 1,883 contacts by decayed interaction history, dedupes them, and syncs to iCloud behind four guards. One of them refuses to archive more than 25% of the book in a single pass.
Household automation on the mac mini. The OpenClaw runtime it deployed to /opt/hog is torn down. 22 files in the repo still describe it as if it were running, which is the part I have to pay down.
117 alert rules, a daily digest that reports state instead of edges, and an ongoing argument with every component that can fail without saying so.
A personal assistant that keeps useful state over time. Gated on one measurement: 95% of agent tokens are replayed context, so the design question is what never enters it.
About
I run a small homelab and a handful of side projects, and I write down what breaks. Mostly I care whether I can still explain a system six months later. If I can’t, I’ll mis-operate it eventually.
More about me