Sync & last-good
Each enabled source is fetched on a schedule (and can be force-synced by admins). A source is not required to succeed every wave.
Statuses
- Active โ last fetch produced a usable pack
- Stale โ fetch failed or converted empty; previous by-source file is still served
- Error โ no last-good file to keep
Combined epg.xml includes stale last-good packs so one dead origin does not
wipe that platform out of the guide. Programmes in a stale pack age until the origin recovers.
HTTP 304
If the origin says Not Modified, we keep the local pack. That is success, not a skip of the source.