SHOAL STATION · ONLINE
Λ
Laconian Engineeringhomelab · systems · signal
← back to log
2026-04-19· 4 min read

Controlled Burn

Four builds, one backlog, one week. Drift went from idea to container. WFSRA's database finally has a history. This blog grew a diary. And the post you're reading almost wrote itself.

metahomelabworkflowbuilds

Four builds moved. One backlog moved. None of them stayed broken. That is rarer than it sounds.


Drift shipped

Zero to running container in a day. Commits a584d92 and c213ecb, April 16.

The trick was a Prisma migration that landed the full domain model before a single page got written. 20260416122057_init. With the schema right, the routes were plumbing — fields, form, POST, store. There is no cleverness to invent.

Drift is a life-trajectory tracker. Pick the dimensions you care about, check in daily, watch where you're drifting. Radar and trend charts, correlations across dimensions, weekly digest, time capsule, share page, alerts, export. All dockerized. v2.0.0.

I wrote about .gitignore and the twenty-two findings earlier this week — the shape of that shipping day, the review that caught what I would have shipped otherwise. This is the one-line postscript: it's running.


WFSRA caught up to itself

WFSRA has been in production for months without a single version-controlled migration. The schema ran. The schema changed. Nobody wrote it down.

Alembic baseline landed April 14: eb488d375c56_baseline_v1_3_2_schema.py. The v1.3.2 schema, the one the database has been executing, is now a file on disk. Changes to it will flow through a migration instead of through vibes.

April 15: the test suite and CI went in together. GitHub Actions. pytest with real fixtures and a conftest.py that sets up a throwaway database per run. vitest on the frontend. Coverage across auth, members, payments, health, dashboard. OpenAPI spec generated from the live routes — backend/openapi.yaml, 734 lines.

Spec first, tests second, features third. That is the v2.0.0 build sequence. I am applying it retroactively, because the app is in prod already and I would rather catch up than keep accumulating.

Some discipline you get on day one. Some you get by catching up. Both count.


This blog grew a diary

v0.4.0 shipped the diary surface: /diary, /diary/[slug], src/lib/diary.ts, a nav update. The first entry went up Saturday.

It was supposed to go up Friday. Automatically.

The scheduler that was supposed to draft it hit a collision with an unrelated task, and a message appeared in the drafting engineer's session claiming I had authorized a ship. I had not. The engineer held. I wrote the entry by hand and approved it directly, and the automation fix went on the list for this week.

Writing the post you're reading was the next dependency in that chain. Last week the automation failed on its first try. This week it ran — a brief landed, an engineer picked it up, and this draft came out of it. I'm reading it now. If you're reading it too, the recursion is working.

Also this week: the post about the dotfile that almost shipped almost did not ship. The first draft had AI-scaffolding tells — the rhetorical hedges, the "the goal is not X, it is Y" construction, the workshop cadence. The review agent flagged it. Commit 2d046d9 replaced the draft with a rewrite in a voice that sounds like a person. A post about an artifact that nearly did not exist nearly did not exist itself. I am aware of the joke.

ShoalBar was lying. The header said v0.1.0. The site was on v0.4.0. Three releases of a hardcoded string nobody updated. The fix is a two-word diff. The embarrassment is the rest of it — I had looked at the number every day and stopped reading what it said. Same bug as .gitignore, different object.


Mission Control — v3.1.0 and a scar

v3.1.0 went in on April 18. Multi-agent chat, attachments, approvals, export, a workbench surface roughed in. 40 files. 4,857 insertions. A real jump.

The next day, a remediation commit: mutex ordering, cancel-terminality on long-running tasks, an auth check that was not actually checking, a disclosure that was not actually disclosing. Four bugs found within 24 hours of ship, fixed within 48. The velocity on a new surface usually cashes out against correctness later. Early remediation is the cheaper half of that trade.


Alembic gave WFSRA a database history. GitHub Actions gave its tests a home. The diary surface gave this blog a format. ShoalBar finally shows the number on the tin. Drift exists. ENT shipped nothing but a backlog pass — which for a project this mature usually means it is doing what it should.

Version drift is entropy. This week was a controlled burn.