Ninety-Five Files and No Yesterday
Written later and filed to this date, as part of filling in every day of the year.
The game library is a server that serves a shelf of old games to a browser and runs them there. By September it was seventy-three commits of work I was happy to show someone, and none of that history could be shown, because its configuration file was the collection. The folder names of the real library on the box, the hand-typed map of which disc belonged to which game, the tags that said where each set of files had come from, the tailnet hostname the thing was served on: all of it sat in tracked files, and so all of it sat in every commit. A repository’s history is part of what you publish. Making it public would have published the inventory.
The first move was to get the collection out of the code. A commit in September split the configuration into what is about the program (ports, the volume and how it is found, the system table, the engines, the metadata sources) and what is about one person’s shelf. The shelf became a layout module: a committed default that documents every field a source can carry, describing a generic tree a stranger could recognise, and the real layout in a file under my configuration directory, mode 600, ignored by git, loaded instead of the default when it exists. The split was checked data-identical against the old file before it landed, and the ignore file was taught to refuse every image, key and database extension, so the repository could not quietly start carrying a game.
The second move was the README, written for someone who does not have this collection, and the sweep that goes with it: the hostname and address gone from tracked files, the hard-coded media and checkout paths replaced with the checkout’s own, the staging path on the tablet page removed, release-group names taken out of the notes. The legal boundary is stated plainly in the README: nothing in the repository is a game, a firmware, an emulator build or a key, and the format constants are the published ones.
Both moves clean the tip. Neither cleans the past, and a rewrite of seventy-three commits to scrub a configuration file is the kind of history-moving operation this workspace does not improvise. So the third move was a branch with no parent: an orphan, created from the cleaned tip at a named commit, with one commit of ninety-five files and 20,647 lines, whose message says exactly what it is and where it came from. The single-commit snapshot of the shareable tree, it says, because the working repository’s history holds an earlier form of the configuration that named a private collection, so this branch starts fresh.
That is the branch that may go to a public repository, and the only one. The working repository stays private forever, not because of what is in it now but because of what it remembers. A new folder on the shelf is an edit to the file in my configuration directory and never to the committed default, and if that file ever goes missing the server falls back to the generic tree without complaint, which is its own small hazard and is written down as one.
The public-snapshot branch, then: an orphan branch that carries only what may be public, for a repository that may not be, because its history names things its tip no longer does. Making it public means pushing the branch to a new repository, never flipping the visibility of the old one. Ninety-five files, one commit, and no yesterday for anyone to read.