diff --git a/.github/scripts/recover-demo-runtime.sh b/.github/scripts/recover-demo-runtime.sh index 13b266ec1d..132c5cf48f 100755 --- a/.github/scripts/recover-demo-runtime.sh +++ b/.github/scripts/recover-demo-runtime.sh @@ -32,6 +32,10 @@ HISTORY_BACKUP_ARCHIVE="" DEMO_HISTORY_PATHS=( ai_incidents.json ai_incidents.json.tmp + alerts/alert-history.json + alerts/alert-history.backup.json + alerts/alert-history.json.imported + alerts/alert-history.backup.json.imported alerts/events.db alerts/events.db-shm alerts/events.db-wal @@ -348,7 +352,8 @@ sudo chmod 600 /etc/pulse/.env # operational memory. A failed 50-node bootstrap can leave thousands of # lifecycle events whose v6.4 replay queues one serialized incident save per # event before HTTP opens. Back up and clear only those fixed demo-history -# files; compensation restores them if the bounded profile still fails. +# files, including the retired JSON sources that repopulate a cleared event +# log; compensation restores them if the bounded profile still fails. clear_demo_operational_history sudo systemctl restart "$SERVICE_NAME" diff --git a/docs/release-control/v6/internal/subsystems/deployment-installability.md b/docs/release-control/v6/internal/subsystems/deployment-installability.md index 0a244f738e..f55ac5d014 100644 --- a/docs/release-control/v6/internal/subsystems/deployment-installability.md +++ b/docs/release-control/v6/internal/subsystems/deployment-installability.md @@ -2054,7 +2054,9 @@ left more than 5,000 `IncidentStore.saveAsync` goroutines contending on one persistence mutex while durable mock alert lifecycle events were replayed. Stable-demo recovery therefore archives and clears only the fixed generated demo operational-memory files (`ai_incidents.json` and `alerts/events.db` plus -SQLite sidecars) before restart. A failed bounded restart restores that archive; +SQLite sidecars), together with the fixed retired `alert-history` JSON recovery +sources that otherwise repopulate the cleared event log, before restart. A +failed bounded restart restores that archive; success discards it. Customer configuration, active-alert recovery state, metrics history, the binary, unit, and Relay remain outside this reset. diff --git a/scripts/release_control/release_promotion_policy_test.py b/scripts/release_control/release_promotion_policy_test.py index d8e3c8e005..fe3a1cfd72 100644 --- a/scripts/release_control/release_promotion_policy_test.py +++ b/scripts/release_control/release_promotion_policy_test.py @@ -2128,6 +2128,8 @@ class ReleasePromotionPolicyTest(unittest.TestCase): self.assertIn("clear_demo_operational_history", recovery) self.assertIn("restore_demo_operational_history", recovery) self.assertIn("alerts/events.db", recovery) + self.assertIn("alerts/alert-history.json.imported", recovery) + self.assertIn("alerts/alert-history.backup.json.imported", recovery) self.assertIn("ai_incidents.json", recovery) self.assertIn("demo-operational-history.tar", recovery) self.assertNotIn('rm -f "/etc/pulse/', recovery)