Deleting the safety net
Writing the Go workers took a couple of weeks. Deleting the Nest ones took considerably longer to talk myself into.
They worked, is the thing. Every processor and cron in there had been correct for months, and the whole time I was porting them I was quietly telling myself I'd keep them around — just for a bit, just until I'm sure. Which is exactly the reasoning that leaves you with two runtimes that both believe they own the clock.
So once Go had run the tick on staging long enough that I'd stopped checking on it every morning, they went. Processors, cron producers, and the domain services that only ever existed to be called by a processor. Gone rather than commented out. The role assertions now say API-only out loud, so a misconfigured environment can't accidentally wake up a consumer that shouldn't exist, and the docs and Compose defaults were updated to match instead of describing a setup nobody runs.
There was also a small archaeology pass. Orphan schedule residue, processor-only methods with no callers left — the sort of thing that survives a migration because deleting it felt presumptuous at the time. Each one is a second heartbeat waiting for a config mistake to give it a reason to beat.
What Nest is now: the public /v1 surface. It answers managers, it reads data, it enqueues work. dugout-worker and dugout-scheduler are the only processes that consume any of it. That's a sentence I can say to a future version of myself without a diagram, which was most of the point — when you're one person working with agents and a lot of context switching, a crisp mental model of who owns what is worth more than the convenience it costs.
And it does cost convenience. Running the game locally now means starting the worker and the scheduler as well as the API, so "just spin it up" got two commands longer. I thought about keeping one or two lightweight crons in the API for exactly that reason. But a light cron becomes a heavy cron on the day it actually matters, and then I'm back to two clocks with none of the honesty.
I also didn't wait for every last accepted divergence between the two implementations to be closed first. Staging had already made the argument. Holding the deletion hostage to perfection would have left the ownership story half-told for weeks while the risk sat there in the config.
Nest is a door. Feels much better to build against.