diff --git a/.github/scripts/recover-demo-runtime.sh b/.github/scripts/recover-demo-runtime.sh index 5ca75b5a0..0ea231c76 100755 --- a/.github/scripts/recover-demo-runtime.sh +++ b/.github/scripts/recover-demo-runtime.sh @@ -101,6 +101,7 @@ runtime_profile_matches() { sudo grep -Fxq "PULSE_MOCK_K8S_NODES=${MOCK_K8S_NODES}" /etc/pulse/.env && sudo grep -Fxq "PULSE_MOCK_K8S_PODS=${MOCK_K8S_PODS}" /etc/pulse/.env && sudo grep -Fxq "PULSE_MOCK_K8S_DEPLOYMENTS=${MOCK_K8S_DEPLOYMENTS}" /etc/pulse/.env && + sudo grep -Fxq "PULSE_MOCK_SEED_METRICS_STORE=false" /etc/pulse/.env && sudo grep -Fxq "PULSE_MOCK_TRENDS_SEED_DURATION=${MOCK_SEED_DURATION}" /etc/pulse/.env && sudo grep -Fxq "PULSE_MOCK_UPDATE_INTERVAL=${MOCK_UPDATE_INTERVAL}" /etc/pulse/.env } @@ -277,6 +278,10 @@ set_env_value PULSE_MOCK_K8S_CLUSTERS "$MOCK_K8S_CLUSTERS" set_env_value PULSE_MOCK_K8S_NODES "$MOCK_K8S_NODES" set_env_value PULSE_MOCK_K8S_PODS "$MOCK_K8S_PODS" set_env_value PULSE_MOCK_K8S_DEPLOYMENTS "$MOCK_K8S_DEPLOYMENTS" +# Persistent mock-store backfill is reserved for the isolated local-dev data +# directory. The governed demo already has persistent runtime data, so a stale +# opt-in here can turn startup into an unbounded SQLite backfill. +set_env_value PULSE_MOCK_SEED_METRICS_STORE false set_env_value PULSE_MOCK_TRENDS_SEED_DURATION "$MOCK_SEED_DURATION" set_env_value PULSE_MOCK_UPDATE_INTERVAL "$MOCK_UPDATE_INTERVAL" sudo chown pulse:pulse /etc/pulse/.env diff --git a/.github/workflows/update-demo-server.yml b/.github/workflows/update-demo-server.yml index b3da98796..72eaa472d 100644 --- a/.github/workflows/update-demo-server.yml +++ b/.github/workflows/update-demo-server.yml @@ -674,6 +674,9 @@ jobs: set_env_value PULSE_MOCK_K8S_DEPLOYMENTS "$MOCK_K8S_DEPLOYMENTS" set_env_value PULSE_MOCK_RANDOM_METRICS true set_env_value PULSE_MOCK_STOPPED_PERCENT 6 + # Never carry the isolated local-dev metrics-store opt-in onto the + # persistent public demo data directory. + set_env_value PULSE_MOCK_SEED_METRICS_STORE false set_env_value PULSE_MOCK_TRENDS_SEED_DURATION "$MOCK_SEED_DURATION" set_env_value PULSE_MOCK_UPDATE_INTERVAL "$MOCK_UPDATE_INTERVAL" diff --git a/docs/release-control/v6/internal/subsystems/deployment-installability.md b/docs/release-control/v6/internal/subsystems/deployment-installability.md index 9c3ad72a2..5bd5e6687 100644 --- a/docs/release-control/v6/internal/subsystems/deployment-installability.md +++ b/docs/release-control/v6/internal/subsystems/deployment-installability.md @@ -2037,6 +2037,10 @@ when it carries an explicit `mockLargeEstateStartupReady` marker earned by that complete startup and browser proof. The eager-history and update-cohort source markers remain necessary but are not sufficient. Runtimes without the explicit proof marker use the governed 8-node, two-hour-seed legacy-bounded profile. +Both normal convergence and recovery force +`PULSE_MOCK_SEED_METRICS_STORE=false`: persistent mock-store backfill is an +isolated local-development opt-in, and carrying it into the public demo can +block startup while its existing metrics database is synchronously backfilled. Failed stable-demo recovery must also retain bounded, redacted service evidence: structured systemd state, bounded process metadata, and only startup- or health-relevant recent journal lines. Diagnostics run after compensation-safe diff --git a/scripts/installtests/build_release_assets_test.go b/scripts/installtests/build_release_assets_test.go index 4277f1d4b..c79bb6060 100644 --- a/scripts/installtests/build_release_assets_test.go +++ b/scripts/installtests/build_release_assets_test.go @@ -1867,6 +1867,7 @@ func TestUpdateDemoWorkflowUsesGovernedNetworkPath(t *testing.T) { `set_env_value PULSE_MOCK_LXCS_PER_NODE "$MOCK_LXCS_PER_NODE"`, `set_env_value PULSE_MOCK_DOCKER_HOSTS "$MOCK_DOCKER_HOSTS"`, `set_env_value PULSE_MOCK_K8S_PODS "$MOCK_K8S_PODS"`, + `set_env_value PULSE_MOCK_SEED_METRICS_STORE false`, `set_env_value PULSE_MOCK_TRENDS_SEED_DURATION "$MOCK_SEED_DURATION"`, `set_env_value PULSE_MOCK_UPDATE_INTERVAL "$MOCK_UPDATE_INTERVAL"`, `ensure_demo_fixture_entitlement`, diff --git a/scripts/release_control/release_promotion_policy_test.py b/scripts/release_control/release_promotion_policy_test.py index a45a12078..2deb6e9aa 100644 --- a/scripts/release_control/release_promotion_policy_test.py +++ b/scripts/release_control/release_promotion_policy_test.py @@ -1961,6 +1961,7 @@ class ReleasePromotionPolicyTest(unittest.TestCase): self.assertIn("set_env_value DEMO_MODE true", demo) self.assertIn("set_env_value PULSE_MOCK_MODE true", demo) self.assertIn('set_env_value PULSE_MOCK_NODES "$MOCK_NODES"', demo) + self.assertIn("set_env_value PULSE_MOCK_SEED_METRICS_STORE false", demo) self.assertIn('set_env_value PULSE_MOCK_TRENDS_SEED_DURATION "$MOCK_SEED_DURATION"', demo) self.assertIn('set_env_value PULSE_MOCK_UPDATE_INTERVAL "$MOCK_UPDATE_INTERVAL"', demo) self.assertIn("ensure_demo_fixture_entitlement", demo) @@ -2112,6 +2113,8 @@ class ReleasePromotionPolicyTest(unittest.TestCase): self.assertIn('set_env_value PULSE_MOCK_K8S_NODES "$MOCK_K8S_NODES"', recovery) self.assertIn('set_env_value PULSE_MOCK_K8S_PODS "$MOCK_K8S_PODS"', recovery) self.assertIn('set_env_value PULSE_MOCK_K8S_DEPLOYMENTS "$MOCK_K8S_DEPLOYMENTS"', recovery) + self.assertIn("set_env_value PULSE_MOCK_SEED_METRICS_STORE false", recovery) + self.assertIn('grep -Fxq "PULSE_MOCK_SEED_METRICS_STORE=false"', recovery) self.assertIn('set_env_value PULSE_MOCK_TRENDS_SEED_DURATION "$MOCK_SEED_DURATION"', recovery) self.assertIn('set_env_value PULSE_MOCK_UPDATE_INTERVAL "$MOCK_UPDATE_INTERVAL"', recovery) self.assertIn('sudo systemctl restart "$SERVICE_NAME"', recovery)