Week notes: the draw fix I promised, and finally being able to see the workers
I said a fortnight ago that hanging the next cup draw off match completion was going to bite me, and that I'd be back for it. Here we are.
A cup progression reconciler now owns it — cups and playoffs both. It's a scheduled job whose only question is "does any bracket need moving forward?" Rounds, draws, finals, all of it. Match completion no longer has to remember Monday, which is good, because match completion has enough on its plate and retries made it an unreliable narrator.
The honest cost is another cron, and another cron is another thing that must itself survive a restart. But it's one place to reason about catching up, and that's worth a lot more to me than a clever trigger. A stalled bracket is invisible right up to the moment it's the only thing a manager can see.
That's also why the reliability work from earlier in the week matters more than the dashboards. Claims, shared dedupe keys, delivery ledgers — concrete enough now that duplicate inbox items and duplicate training runs get refused rather than cleaned up afterwards by me, in the evening, with SQL. Refusing is a feature. Cleaning up is a chore I invented for myself.
Speaking of dashboards: the Go worker and scheduler have a proper observability identity now, with metrics for enqueue sources, the game-day tick, and which engine mode a simulation ran in, plus a Grafana pack aimed squarely at the cutover. Until this week I could see that something had processed a job. Now I can see which binary did it. That's the whole reason it went in before the last of the Nest removal rather than after — cutting over blind is just optimism with extra steps.
Caveat to myself, written down so I remember it: a dashboard is not a reliability contract. It tells you which one you broke. It doesn't stop the breaking. Easy to conflate when the graphs are new and pretty.
Last thing, and the smallest. The bracket UI was stacking quarter-final cards on top of each other as progressive rounds filled in. Ugly, but the data was fine — it was purely a layout problem. So the fix is a display-only reorder. Nothing persisted moves. No feeder IDs, no stored indices, nothing that an audit or a future draw depends on. If the only way to unstack those cards had been rewriting saved bracket geometry, I'd have left them stacked and lived with the ugliness.
So: knockouts can heal themselves after a lag, restarts don't invent things, and I can attribute work to Go. Which means the last of Nest's background life can go.
Till next time,
Oladapo.