Two Inits, Sixteen Minutes Apart
Written later and filed to this date, as part of filling in every day of the year.
At one minute to four on a Wednesday afternoon in January, a repository called game got its first commit, and the commit was the game. Eighty-six files, thirty-five thousand lines, subject line init. There is no diff to read, only an arrival: an entity-component-system whose systems run in a fixed order each frame, fourteen weapons, nine scenes, achievements, a codex, a music manager, a permanent-upgrade tree eleven hundred lines long, and a two-hundred-line guide for the coding agent that had built most of it, which already says what to run and what is not configured yet. The game existed before its history did. The commit is where the history starts, and it starts with everything.
The second init
Sixteen minutes later, a second commit, subject line init commit. A hundred and twenty-four files this time, and almost none of them code: a deploy workflow for the code host’s static pages, four fonts in two weights, seventy-seven icon sources and the script that packs them into an atlas, five sound effects, a tracker-module player ported to JavaScript, and twenty-six tracker modules for it to play. The first init was the game as it ran on my disk. The second was everything the game needed to run on a disk that was not mine.
That is the natural order for a repository that starts late. The code is what you have been working on; the assets and the workflow are what you discover you need the moment you decide the thing should exist somewhere else. The two subjects say as much. The first is an init, a beginning. The second is an init commit, the beginning as a thing to be pushed.
One character
Eight minutes after that, a two-line commit: file path fix. Both lines remove a leading slash. The page loaded the music player from /lib/, and the music catalogue built track paths starting with /music/; afterwards they are lib/ and music/. The bundler already knew the game would live under a subpath on the code host, and it rewrote every import it could see. These two it could not see: one a plain script tag in the HTML, the other a string built at run time. Served from the root, the slash is harmless. Served from a folder, it points at a file that is not there.
One character is the whole distance between runs here and runs there, and it is the kind of fix that cannot be found from inside the project, only by loading the page from where it will be served.
A thumb
Thirty-five minutes later, the first feature committed in the repository’s life: touch controls. A hundred and seventy-five lines for a virtual joystick that spawns where a finger lands, follows it, and vanishes on release, drawn at forty percent opacity so the arena shows through. The input system takes it ahead of the keyboard: if the joystick reports a direction, use it; otherwise fall back to the arrows and WASD. In the same commit the default playlist went from one track to all twenty-six, and the buttons on the settings screen moved apart, from eighty pixels between them to a hundred and forty.
Read the four commits as one hour and the shape is plain. Nothing in the first hour of the game’s history touched the game. It got a deploy pipeline, it lost two slashes, and it got a thumb. The repository was not created to version the code, which had done without a history for however long thirty-five thousand lines take. It was created because the game was about to leave the machine and be played in a hand, and leaving requires a history.
What the workflow was watching
The deploy workflow in the second init runs on every push to a branch called main. The branch the four commits sit on is called master. The workflow and the branch were in the same tree from the second commit on, sixteen minutes into the hour, and nothing in the hour read one against the other. A joystick was easier to notice than a name.