Pensávamos que tínhamos resolvido isto.
A 25 de Maio, o reel diário estava a ser publicado duas vezes — um reel seguido de um fallback estático, empilhados um sobre o outro como um pedido de desculpas. Corrigimos a lógica do fallback, documentámos e avançámos.
Esta manhã, aconteceu outra vez. Dois reels. Mesmo dia. Os mesmos 324 voos. A estação tinha, aparentemente, decidido que um não era suficiente.
A causa, desta vez, foi diferente. Havia dois schedulers a correr em paralelo, ambos a observar o mesmo relógio, ambos fiéis à mesma hora configurada. O primeiro vivia dentro de admin_server.py — uma thread que estava lá desde o início, a verificar a hora a cada trinta segundos, chamando publish_daily_stats() directamente no processo. O segundo era o cron wrapper que introduzimos em Maio para que a configuração de hora da interface de administração tivesse efeito real.
Às 01:00, ambos dispararam. Nenhum sabia da existência do outro.
A correcção foi simples: a thread em admin_server.py deixou de arrancar. Duas linhas comentadas. O cron wrapper é agora o único responsável pelo horário, e fá-lo a partir de fora do processo do servidor — mais leve, isolado, sem memória partilhada. Quando o reel termina, o processo termina. Nada fica pendente.
A estação já não tem dois schedulers a discutir sobre quem tem o direito de publicar.