NOTES.
Field notes from a one-person shop. Posted when there is something worth posting — process, design, the occasional Easter egg. Receipts at the bottom of every page.
- 01
The heartbeat
My merge gate went 52 minutes without merging anything, and nothing said so. By morning the heartbeat my agents built to catch stalls like that had fooled itself twice with one git check, on branches that had no work on them yet.
gamesai-agentsverificationprocessDATE2026-10-05READ7 MINSLUG/the-heartbeat - 02
When the test is the bug
Over one weekend, the failures my game's merge gate reported kept turning out to be the tests or the test machine rather than the code. The work became telling the two apart without learning to ignore red.
gamesgodotai-agentsverificationDATE2026-10-05READ7 MINSLUG/when-the-test-is-the-bug - 03
Fifty-six models faced backwards
Most of the AI-generated 3D models my pipeline had stalled on were built exactly as asked. A rotation setting Blender silently ignored had left them facing the wrong way, a review script that found the word 'boar' inside 'keyboard' misjudged what some of them were, and nobody had looked at the rest again.
gamesgodotai-agentsverificationDATE2026-10-05READ8 MINSLUG/fifty-six-models-faced-backwards - 04
The harness was the slow part
A local model looked too slow and too lost to work on its own, so I measured what it was being fed. On every turn it read about 30,000 tokens of instructions written for a different model, and every task started in the wrong folder.
aiprocessverificationgamesDATE2026-09-29READ5 MINSLUG/the-harness-was-the-slow-part - 05
The contract came first
My game's clouds went from painted puffs to a volume you can fly through in one evening. The part worth writing about is what happened first: after three weeks of water detail that vanished while every test passed, the rules for what the clouds must show were committed before a single pixel changed, and the first build failed them on four counts.
gamesgodotverificationtestingDATE2026-09-24READ9 MINSLUG/the-contract-came-first - 06
Where the ripples went
Three weeks of making the water in my game look real were mostly a search for detail the math already had and the screen never showed. Twice the culprit was the same one-line mistake, and once the fix was to draw less.
gamesgodotverificationtestingDATE2026-09-23READ8 MINSLUG/where-the-ripples-went - 07
Nothing merges on its own word
I let my coding agent run up to sixteen other coding agents at once against one game for a day and a half, and told it nothing merges without a rerun of its own tests, before and after. Three separate times, something passed every test it had and simply was not on screen when anyone looked.
gamesgodotai-agentsverificationDATE2026-09-21READ7 MINSLUG/nothing-merges-on-its-own-word - 08
The probe that refuses to run
A game built with an agent stays honest because 260 probes and 30 capture rigs judge it, and because the runner they go through knows when it is not allowed to run.
gamestestingprocessaiDATE2026-09-14READ6 MINSLUG/the-probe-that-refuses-to-run - 09
The crash was in the quit
One probe in my game's test suite passed and then died on the way out, almost every time, and I had taught the runner to forgive it. The bug was a third-party queue that runs its leftovers inside a destructor, after the physics world they need is already gone.
gamesgodotdebugverificationDATE2026-09-14READ5 MINSLUG/the-crash-was-in-the-quit - 10
No river runs uphill
The planet under my survival game is one JSON entry. Everything wet on it — rivers, lakes, the coast, the mill — falls out of a single rule: water goes downhill, and only downhill.
gamesgodotalgorithmverificationDATE2026-09-14READ8 MINSLUG/no-river-runs-uphill - 11
The loop is the product
I built the v0 loop in a day — live preview, forked versions, design tokens, export into real repos — then swapped three different engines into it. The loop barely noticed.
ownershipaiprocessDATE2026-08-22READ5 MINSLUG/the-loop-is-the-product - 12
The second voice
I asked my coding agent why I was hearing it twice. It traced its own process tree, discovered it had no terminal window, and found the second voice was itself.
aiinfrastructureprocessDATE2026-08-20READ4 MINSLUG/the-second-voice - 13
Half a step early
Every timestamp my video QA tool reported was off by the same half-interval, and the test I wrote to protect the contract was protecting the bug. Two AI reviews argued about it; a forty-line probe settled it.
aitestingverificationDATE2026-08-20READ5 MINSLUG/half-a-step-early - 14
The law shipped first
Seventeen days after the EU began requiring labels on synthetic audio, I shipped twenty-six unlabeled AI narrations. Nothing in my pipeline objected. So I built the thing that objects.
aicomplianceprocessDATE2026-08-20READ4 MINSLUG/the-law-shipped-first - 15
Where the tokens go
The plugin's benchmark was honest. It still lost me a thousand dollars. The bill was never about output.
aiinfrastructureprocessDATE2026-08-19READ5 MINSLUG/where-the-tokens-go - 16
Twelve pentagons
You cannot tile a sphere with hexagons alone. The twelve exceptions are not a bug to hide — they are the shape of the thing.
gamesalgorithmgodotDATE2026-07-13READ6 MINSLUG/twelve-pentagons - 17
The hand is not the board
Everyone assumes the poker hands form on adjacent hexes. They do not. Getting that wrong would have welded the rules to the geometry forever.
gamesarchitecturealgorithmDATE2026-07-13READ5 MINSLUG/the-hand-is-not-the-board - 18
I see no rain
Every line of logic was correct. Both feature flags were right. Three hundred checks passed. The player saw nothing at all.
gamestestinggodotglitchyDATE2026-07-13READ5 MINSLUG/i-see-no-rain - 19
The threads you cannot have
Godot's web export wants SharedArrayBuffer. SharedArrayBuffer wants headers your static host will not give you. There is a way out, and it costs you threads.
gamesfrontenddistributiongodotDATE2026-07-13READ5 MINSLUG/the-threads-you-cannot-have - 20
Tenancy at the database line
Multi-tenant isolation belongs in the database, not the application. One forgotten WHERE clause should not be able to leak another org's data.
saasbackendsecurityDATE2026-06-24READ4 MINSLUG/tenancy-at-the-database-line - 21
Two cards, no cloud
Image-to-video diffusion as a daily driver, run on consumer GPUs at home — where the trick is keeping the gaming card out of the lane.
aiinfrastructureownershipDATE2026-06-24READ3 MINSLUG/two-cards-no-cloud - 22
Local-first by default
Running everything on hardware I own is not frugality. It is a design choice that changes what I am willing to build.
ownershipaiinfrastructureDATE2026-06-24READ3 MINSLUG/local-first-by-default - 23
Functional core, thin bridge
The pattern under a chess engine, a casino, and two smart-glasses apps: keep the rules pure and push every side effect to the edge.
architectureprocesstestingDATE2026-06-24READ4 MINSLUG/functional-core-thin-bridge - 24
The opponent thinks on another thread
A chess AI that searches a tree deep enough to matter, without ever freezing the board it is playing on.
gamesalgorithmsconcurrencyDATE2026-06-24READ3 MINSLUG/thinks-on-another-thread - 25
Forty panels, one function
An ops dashboard that runs as my wallpaper and never reflows on a data tick — because placing the panels is a pure function, not a hand-built layout.
frontenddesignsystemsDATE2026-06-24READ4 MINSLUG/forty-panels-one-function - 26
The swarm on your face
Agent status and a push-to-talk assistant on a pair of smart glasses — which works because the glasses are the last inch, not the logic.
hardwareaidesignDATE2026-06-24READ3 MINSLUG/swarm-on-your-face - 27
One zoom, no seam
A game that runs from one deckhand mining ore by hand up to an empire of fleets, with no loading screen between the scales.
gamesdesignsystemsDATE2026-06-24READ4 MINSLUG/one-zoom-no-seam - 28
Owning the IP line
Shipping a game on Steam means owning every name in it. The discipline that guarantees that is a written bible and a quarantine.
ownershipgamesprocessDATE2026-06-24READ3 MINSLUG/owning-the-ip-line - 29
One line, one soundtrack
An audio-generation tool with three front doors, where the one that matters is the door a game build walks through to get a file path back.
pipelinearchitectureownershipDATE2026-06-24READ3 MINSLUG/one-line-one-soundtrack - 30
Replacing the home screen
A launcher and a game that read as one product, because they share the same storage and the score shows up with no sync plumbing at all.
androidownershipdesignDATE2026-06-24READ3 MINSLUG/replacing-the-home-screen - 31
The hive reported false-done
An AI swarm told me a game shipped. The game did not exist. The only status that counts is the one the repository agrees with.
aiprocessverificationDATE2026-06-15READ4 MINSLUG/hive-false-done - 32
A swarm that builds games
The interesting part of an agent swarm is not that it writes code. It is what happens between a one-line request and a playable app on my phone.
aiprocessDATE2026-06-15READ4 MINSLUG/swarm-that-builds-games - 33
A roguelike on your face
Building a full Balatro for smart glasses, where the display is 576 by 288 pixels of monochrome and the only input is a tap.
designprocessDATE2026-06-15READ3 MINSLUG/roguelike-on-your-face - 34
Theming as a product
Most sites have a theme. This one has six, each a different layout — here is the architecture that keeps that from becoming a maintenance swamp.
designprocessDATE2026-06-15READ3 MINSLUG/theming-as-a-product - 35
A store of my own
Making small games was never the hard part. Getting them onto the phone was — so the app store shipped first, and a week of games followed.
ownershipprocessdistributionDATE2026-06-14READ3 MINSLUG/a-store-of-my-own - 36
Pair-designing with a stubborn senior
What it feels like to design a site with a tool that refuses to write code until it has interviewed you.
designaiprocessDATE2026-05-07READ5 MINSLUG/built-with-impeccable - 37
The combination lock on the title screen
A match-three game with a hidden layer underneath. The seven cartridge sprites are an input device, not decoration.
glitchydesigneaster-eggsDATE2026-05-07READ5 MINSLUG/jazzy-secrets - 38
Eighteen sections, one guild
A guild site is supposed to be a forum and a calendar. We built eighteen surfaces because the work demanded it.
freedomguardsscopeownershipDATE2026-04-30READ6 MINSLUG/freedomguards-rebuild - 39
Loud on purpose
Why this site looks like a transmission instead of a product page.
designprocessDATE2026-05-06READ3 MINSLUG/loud-on-purpose - 40
Swarms that ship
Three rules for running a small army of AI agents end-to-end without burning the house down.
aiprocessDATE2026-04-22READ4 MINSLUG/swarms-that-ship