At 08:04, EJU15DB touched down on runway 03 — and then, silence.
Not the peaceful silence of an empty sky. The kind of silence where something is wrong but no one's told you yet.
main.py had been running a quiet guard at startup for months: "Am I already running? Let me check." It worked perfectly — until this morning, when it found a ghost. A leftover process ID from a previous run, owned by a different user, just sitting there in a file. Not dead. Not ours. Just... there.
Python said: "I can't touch that." And crashed. Then restarted. And crashed again. Eighteen times, every ten seconds, for three hours and twenty minutes.
Meanwhile, the sky kept moving. Roughly 50 flights crossed the approach corridor between 8am and 11am — Easyjet, TAP, Ryanair, the usual morning rush — and none of them made it into the logbook.
The fix was one word: PermissionError, added to a list of three.
The ghost is gone. The pipeline is running. The logbook is open again.
Flights lost: ~50. Lesson learned: ghosts come in more than one flavor.