mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-10-14 08:10:26 +00:00
2dc2b72759
The retirement scoped by docs/ALERT_ENGINE_EVOLUTION.md: with an event log enabled, GetAlertHistory and GetAlertHistorySince serve the projection from the log's lifecycle snapshots; the JSON snapshot file stops being written and is renamed to *.imported after a one-time migration. The #1693 class — fire/resolve churn rewriting the JSON file and deleting history — cannot recur against an append-only store. Migration: on the first EnableEventLog with a JSON history file present, every entry is written synchronously into the log as a history_imported event (ImportEvents bypasses the droppable append buffer — losing an entry to a full buffer would silently lose user data), then the files retire to *.imported as backups. The file's presence is the migration marker, so the import is idempotent and a failed import leaves the JSON authoritative for the next attempt. History retention (30 days) sits inside log retention (90 days), so no entry can be pruned out from under the migration. Clearing history keeps the log append-only: the clear is a history_cleared tombstone and the projection ignores lifecycle events that precede it. One deliberate difference from the JSON behavior: still-active alerts reappear in history immediately after a clear — they are current state, not cleared history. The in-memory history manager remains as the fallback read model for managers without an event log, and the parity suite now reads it directly so it keeps characterizing the projection instead of comparing the projection with itself.