mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-10-14 00:00:30 +00:00
6eee5a1641
The reducer core became the authoritative transition state for every per-observation family in the Phase 2 cutovers; the manager's tracking maps (offlineConfirmations, offlineRecoveryConfirmations, nodeOfflineCount, connectionDegradedCount, dockerOfflineCount, dockerStateConfirm, pendingAlerts) had been reduced to write-only mirrors. This deletes them, per the plan's retirement list (docs/ALERT_ENGINE_EVOLUTION.md). Hygiene the maps' cleanup loops used to provide moves into the core: - reducer.PruneStalePending reaps pending runs whose resource stopped being observed (Cleanup at 10 minutes, cleanupStaleMaps at the stale threshold) — previously the pendingAlerts age sweep. - Docker container cleanup drops core pending runs for containers no longer in the seen set (reducer.PendingResourceIDs + DropPendingForResource) — previously the dockerStateConfirm loops. - HandleHostOnline / HandleDockerHostOnline apply a healthy observation to the core so an in-flight offline confirmation run ends — previously a map delete. Two real gaps surfaced by the test conversion, fixed at the root: - Config-change auto-resolution removed alerts without mirroring the forget into the core, leaving the incident firing after a policy disabled it. - Intent pending state created by evaluateIntentNoLock carried no ResourceID/ResourceType/TrackingKey, so per-resource clears (guest suppression) could not match it. Guest node-move migration no longer re-keys pending runs: a move restarts an in-flight pending run (firing continuity still comes from alert adoption). Deliberate simplification, noted in the helper. Tests convert their map seeds and asserts to the core seams (testCoreConfirmations / testCoreRecoveryCount / testCoreHasIncident / testCoreIsPending, direct ApplyDiscrete seeding); assertions that only tested the deleted maps' bookkeeping are removed.