Writing
Notes on infrastructure, tooling, and shipping with a boring stack.
2026
-
Testless against hono: the receipts
I ran testless against honojs/hono’s real commit history. Two fixes selected 12 of 2,684 tests and 39 of 2,681. A third selected 47%, and I’m not hiding that one.
-
adeptability learns to publish, automate, and admit what it drops
adeptability 1.4 to 1.9: publishing skill libraries, composing agents into scheduled loops, and admitting when a harness drops a file.
-
I got tired of CI re-running tests nobody doubted
testless: a Rust CLI that reads a git diff, walks a static call graph across TypeScript, Go, and Rust, and prints the exact tests a change impacts.
-
Cloning a repo runs code, and your hook manager is fine with that
hookguard splits git hook install from execution: hooks auto-install on clone, but nothing runs until you accept the exact commands, keyed to their content.
-
No backend, but a real database
How I shipped a client-side app with SQL persistence, product analytics, and live external data, without operating a single server. The architecture behind Scrolls Buddy.
-
Author once, run in every agent: how we share AI skills at Echo
At Echo we use Claude Code, Cursor, and Codex. adeptability lets us author a coding skill once and render it into all three, not three drifting copies.
2020
-
TypeScript unions and discriminating unions
Model application state with TypeScript union types, and why a literal discriminant field is what makes narrowing them safe.
-
Dockerizing a NestJS app and debugging it in VS Code
Package a NestJS app into a Docker image, run it with Compose, and attach the VS Code debugger to the process inside the container.