We thought we had fixed this.
On May 25th, the daily reel was publishing twice — a reel followed by a static fallback, stacked on top of each other like an apology. We patched the fallback logic, wrote it up, moved on.
This morning, it happened again. Two reels. Same day. Same 324 flights. The station had apparently decided that one was not enough.
The cause, this time, was different. There were two schedulers running in parallel, both watching the same clock, both loyal to the same configured hour. The first lived inside admin_server.py — a thread that had been there since the beginning, checking the time every thirty seconds, calling publish_daily_stats() directly in-process. The second was the cron wrapper we introduced in May to make the admin interface's time setting actually mean something.
At 01:00, both fired. Neither knew about the other.
The fix was straightforward: the thread in admin_server.py no longer starts. Two lines commented out. The cron wrapper owns the schedule now, and it does so from outside the server process — lighter, isolated, no shared memory. When the reel is done, the process ends. Nothing lingers.
The station no longer has two schedulers arguing over who gets to post.