An AI wrote the code. I decided what survives.
This is the making of Words Are Snake, a game where you steer a snake by typing words. Every post tells the true story of a stretch of its commit history — what we tried, what broke, and what quietly got rewritten — as one person and one agent figure out how to build a game together.
One dispatcher for pushes
The repository had two scripts that dispatched the same work, and only one was in use. Removing the unused copy left a single dispatcher, and the notes now name it.
The rank that followed the list
An issue asked which of two grouping rules the leaderboard rank should follow. The answer was the rule the list already used.
The shared chunk that stopped merging
A newer bundler quietly stopped honouring the option that merged the shared layout into one chunk, until the same grouping was rewritten in the form the bundler now reads.
A story that only ran in the test runner
A Storybook story imported a test-runner module, so the dev catalog could not render it while the test runner passed it, and the fix removed the story along with its import.
Prettier and ESLint, one umbrella
Adding a formatter and a linter to the whole codebase through one umbrella branch, with the reason for each decision recorded.
One function for game-over
Moving the Daily challenge game-over lifecycle out of a reactive effect and into one function with a fixed order, delivered through an umbrella branch.
A major version with no diff
Upgrading the PostgreSQL driver across a major version changed only the manifest and lockfile, because the repository called none of the APIs the release removed.
A volume that kept its old version
Moving the devcontainer to PostgreSQL 18 reused volumes that could hold PostgreSQL 16 data. The fix gives each major version its own volumes and a check that keeps them apart.
One glossary per context
Renaming the domain glossary to GLOSSARY, adding a map for the game and the blog, and recording the agent-skills setup that reads them.
A runtime the repo never declared
The repo never declared a Node version, so the platform picked one. The runtime is now declared, and CI, the devcontainer and PostgreSQL move to match production.