916c963663
1. Poll loop now fully converges with the DB: updated site configs are refreshed via UpdateSiteConfig, and sites removed from the DB are evicted from liveState. Previously the loop only added new sites — config edits via apply were ignored until restart, and pruned sites kept being checked and alerting. 2. Push monitors now record check history on each heartbeat via recordCheck. Previously RecordHeartbeat updated state but never wrote to check_history — push uptime % and sparklines were empty. 3. Groups record a synthetic check per evaluation tick so they get uptime history and sparklines instead of blank displays.