The Repository Graveyard Just Lost a Tenant
Every developer I know keeps a graveyard. Mine lives under ~/src. Until recently its most distinguished resident was an Arkanoid clone I started in 2014, a game that was born dead. It never compiled for anyone but me. It never shipped. It never earned a README. It had a paddle, a ball, four levels, and the smell of a side project abandoned the week reality resumed. Twelve years in the freezer. The first commit of its resurrection says, with more honesty than I usually put in commit messages, “Rescue operation done.”
Last week I sat down with an AI agent and we finished it. Not “got it compiling”. Finished. Ported from SFML to SDL3, a roadmap of twenty-nine items burned down to zero, a hundred-odd tests, valgrind clean, and a CI pipeline that builds artifacts for Linux on two architectures and for Windows. That’s more distribution engineering than the game ever had while it was alive. It took an afternoon. Somewhere in the middle I thought the thing that brought me here: if this is what an afternoon buys now, the graveyard was never about the projects. It was about the price of digging.
The economics of abandonment
Let’s be precise about why the graveyard exists. The folklore says laziness, or the shiny-object disease of our trade. That’s unkind and, worse, wrong.
A side project dies when the cost of resuming it exceeds the nostalgia available to pay for it. Resuming is expensive. You have to rebuild a mental model you no longer have, of code written by a person you no longer are, on top of dependencies that drifted for a decade. My game was welded to a version of SFML that my current distribution treats as a historical curiosity. The real cost of touching it, before adding a single feature, was a full migration across frameworks. That’s not a weekend. That’s a month of evenings, paid in advance, non-refundable, with no guarantee that the person who finishes the migration still cares about the game.
So we do the rational thing. We archive. We say someday. The repository stops being a project and becomes a headstone with a .git directory. We visit the way people visit real graves: briefly, guiltily, without a shovel.
One afternoon, itemized
Here is what the exhumation looked like, because the details matter more than the sentiment.
The agent read the SFML code and produced an SDL3 port that kept the architecture: a small engine facade, the game states on top. It didn’t rewrite it into something fashionable. Then we worked through a roadmap the way you would with a tireless colleague: ball physics with proper swept collisions, a bitmap font, menus, a pause that no longer quits the application, scoring with a persisted high score, six new levels, screen shake, particles, gamepad support, music that behaves like game music. I playtested; it fixed. I objected (the mouse is cheating, the ball tunnels through the paddle, the jingle gets cut off) and the objections became commits with tests.
The division of labour was clear. Every decision that made the game mine crossed my desk: what a capsule does, how scoring works, that a paddle catching the ball at the last instant should feel generous. What never crossed my desk again was the digging. The thousand shovelfuls of migration, boilerplate, test fixtures, CMake and CI YAML that used to stand between nostalgia and a running build.
Is it perfect? No. There are a couple of bugs in the corners and I’ll find more. But it builds, it ships, and it has artifacts, plural, per platform. The game that was born dead now has better release hygiene than some things I have been paid to maintain. I will not be examining that any further in public.
The objection
I can hear it already, delivered with the weary confidence of a man explaining the tides: it is just a probability network. Glorified autocomplete. A statistical parrot with a marketing department. There is a kind of engineer who has decided that no output of such a machine can be real work.
The premise is correct. It is a network of probabilities. I concede the mechanism entirely. What I don’t concede is that the mechanism settles the question. The ball doesn’t care who wrote the collision code. It bounces or it doesn’t. Valgrind doesn’t care either. Judging the work by where it came from instead of whether it passes is not rigor. It is theology.
The interesting question was never what is it? The interesting question is what does it change? What it changes, measured in my own graveyard, is the price of resurrection: from a month of evenings to an afternoon of conversation.
What stays in the graveyard
The graveyard doesn’t disappear, and I’d distrust anyone who told you it does. Some projects died because they deserved to. The idea was thin, the itch got scratched elsewhere, the person who started them doesn’t exist anymore. No tooling resurrects a motive.
And many of the dead were never meant to ship. You started the toy database, the raytracer, the interpreter to understand how one works, and owning one was never the aim. Once you understood, finishing was beside the point, like staying in the lecture after the exam. The repository was never the deliverable. The understanding was, and it shipped on schedule, to an audience of one. Those projects are finished, whatever the commit log says.
But there is another population in there, and I suspect it is larger than we admit: projects that died because resuming them got too expensive, while the reason to build them stayed. The game you still think about in the shower. The tool you rewrite badly at every job because the good version is buried under a dead toolchain. Those were never dead. They were priced out. When the price of digging collapses, what stays in the graveyard is what chose to stay.
Twelve years is a long time to keep a headstone polished. If you have one of those repositories, and you do, perhaps stop visiting it empty-handed.
Bring a shovel. They are free now.