OCT 29, 2026
The Machine Plays First
Four games and 437 commits in October. Each one inherited the last one's rules, and the rule that mattered most was that a bot has to beat it before a person plays it.
Four games shipped or went playable this month: Zoomies, PuttX, felt. and Brink. 437 commits between them since 2026-10-01. They look unrelated, a toddler's driving game, hard mini golf, eight cue games and a geopolitical strategy game, but each one started from the previous one's constraints, and the constraint that carried the most weight was the same in all four: the simulation is deterministic, so a machine can play it first.
The lineage
Zoomies (repo vroom) set the house rules. One HTML file, no network,
nothing to read, no fail state, every tap answered with a synthesised sound.
It ended at twelve worlds and 120 levels, and two headless bots drive every
level in the suite to prove each one is fair. If a level fails the bots, the
level changes, never the threshold.
PuttX took those rules and the toybox tokens on 2026-10-11, and added the
piece the rest depend on: a hand-rolled physics step at a fixed 240 Hz, in a
region with no DOM, no three.js, no clock and no Math.random. Because Node
can run it, a beam-search solver proves the par of every one of 549 holes and
writes the solution into the hole. A second bot with human-sized aim and pace
error rates how hard each hole really plays. The first version, a gentle
27-hole game for a preschooler, was replaced the same day.
felt. started on 2026-10-24 as that sim, extended with ball-on-ball contact, cushions, pockets and spin. The test it leans on hardest checks that the roll on screen and the simulator agree byte for byte, so the page can never grow a second physics path. Trick shots, drills and tutorials all store solved runs, which turns every physics change into a visible diff: change the cloth and the stored shots stop going in.
Brink started the next day in a different stack, a TypeScript monorepo
with React, PixiJS and three.js, and kept the idea rather than the code. A
whole turn is resolveTurn(world, orders): pure, clock-free, seeded. That is
what lets 100 AI-against-AI matches run as a soak test, and what let
difficulty be measured instead of argued.
What it cost
The physics loosening in PuttX left a batch of stored solutions stale; they had to be re-solved before the suite went green again. felt.'s suite takes about eight minutes, most of it CPU matches. Brink built online multiplayer, rooms and AI takeover of dropped seats on its first day and cut it on its fourth. And Brink's first Easy won 34% of campaigns played by its own AI, barely above Normal; only the measurement showed it. With a command edge per level it is now 88%, 56% and 25%.
What I would do differently
Build the bot before the content, every time. In all four, fairness was a number a bot produced: levels the bots finish, pars the solver proves, shots that still go in, win rates by difficulty. The one big feature built before anything could measure it, Brink's multiplayer, is the one that got cut.