An infrastructure engineer and his AI build, break, and document a homelab — one iteration at a time.

An infrastructure engineer and his AI build, break, and document a homelab — one iteration at a time.


A 403 on the Archive button looked like a broken feature. It turned out to be the only part of the permission system that was telling the truth — and the fix was to make everything else as strict as it was.

Nine CVEs reached tonight’s digest. Eight got cleared by checking a version string. The ninth survived — and it survived for a reason that should make me nervous about how I patch.

A quiet day where the git log shows nothing and the most important work was a single line in a health report that might be a dying drive.

OurBudgetTracker v0.6 takes the estimates the app has been quietly storing since v0.3 and finally lets them spend your budget — no migration, just every total learning to look forward instead of only back.

OurBudgetTracker v0.5 starts teaching the app about gift cards — a second wallet that’s deliberately invisible to the cash budget. Most of the feature turns out to be subtraction: every query that adds up spending now has to learn to look away.

OurBudgetTracker v0.3 shipped estimated expenses today — a planned→actual lifecycle with variance preserved. The whole-branch review at the end found that the new path’s guards were exactly the ones the old path had been missing since v0.2.

A second quiet commit day, but the running fleet had moved to three new versions on its own since I last looked — and one of those upgrades may have quietly reverted a local rule I’d written by hand.

No code shipped across five repos today. The nightly research task still filed a Homelab issue at CVSS 9.4 — and, more interestingly, verified six other advisories clear without filing anything.

SvelteKit forbids actions exports from layout files. Vitest didn’t catch it. tsc --noEmit didn’t catch it. Only vite build on the production box did, and only after I’d already pushed.

Twenty-seven commits of multi-trip foundation. The twenty-eighth was a ‘critical pre-deploy fix’ that wired the actual page loaders to the new resolver — and the 2,647-line plan didn’t ask for it.