diff --git a/.github/scripts/resolve-demo-runtime-profile.sh b/.github/scripts/resolve-demo-runtime-profile.sh index 790a7695be..fb5ad14163 100755 --- a/.github/scripts/resolve-demo-runtime-profile.sh +++ b/.github/scripts/resolve-demo-runtime-profile.sh @@ -14,9 +14,12 @@ git rev-parse -q --verify "${TAG_REF}^{commit}" >/dev/null || { # Reusable workflows execute from the caller revision, while the installed # binary comes from TAG_REF. The large-estate profile is safe only when that -# exact runtime implements both required scaling boundaries. +# exact runtime implements both scaling boundaries and carries an explicit +# startup-readiness marker earned by the complete governed profile. Source +# structure alone is not proof that health becomes responsive at that scale. if git grep -q 'mockEagerHistoryPVEGuestLimit' "${TAG_REF}" -- internal/monitoring/mock_metrics_history.go && \ - git grep -q 'UpdateMetricCohort' "${TAG_REF}" -- internal/mock/integration.go; then + git grep -q 'UpdateMetricCohort' "${TAG_REF}" -- internal/mock/integration.go && \ + git grep -q 'mockLargeEstateStartupReady' "${TAG_REF}" -- internal/monitoring/mock_metrics_history.go; then PROFILE="large-estate" MOCK_NODES=50 MOCK_VMS_PER_NODE=10 diff --git a/docs/release-control/v6/internal/subsystems/deployment-installability.md b/docs/release-control/v6/internal/subsystems/deployment-installability.md index 75af16cd6c..08e1e682d2 100644 --- a/docs/release-control/v6/internal/subsystems/deployment-installability.md +++ b/docs/release-control/v6/internal/subsystems/deployment-installability.md @@ -2023,6 +2023,21 @@ release-note screenshots referenced by the validated body, and reject every unreferenced asset. Recovery remains activation-only and may not rebuild or replace the qualified candidate. +Activation recovery run `33227705135` published stable `v6.4.0` and bound +customer convergence to run `33227719830`. Docker aliases, Helm Pages, and the +paid-runtime broker converged, but the stable demo's large-estate restore left +the v6.4.0 process unresponsive and the public health endpoint unavailable. +The convergence owner was cancelled after the restore exceeded its bounded +health window; its global promotion lease released successfully. Dedicated +demo recovery run `33228777096` reproduced the failure with the exact installed +binary and unit, preserved the Relay process, restored the prior runtime +configuration, and compensated by stopping only `pulse.service`. A tagged +runtime may therefore enter the 50-node, 48-hour-seed public demo profile only +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. + The preceding `v6.4.0-rc.8` qualification attempt used exact source SHA `bac7e5d9526d76a6b4e34738511b07609dda80ed`. Release run `33128595650` passed preparation, frontend bundle, Windows installer smoke, release smoke, diff --git a/scripts/installtests/build_release_assets_test.go b/scripts/installtests/build_release_assets_test.go index c567586ee6..4277f1d4b6 100644 --- a/scripts/installtests/build_release_assets_test.go +++ b/scripts/installtests/build_release_assets_test.go @@ -1839,6 +1839,7 @@ func TestUpdateDemoWorkflowUsesGovernedNetworkPath(t *testing.T) { `Resolve target-compatible demo runtime profile`, `git grep -q 'mockEagerHistoryPVEGuestLimit'`, `git grep -q 'UpdateMetricCohort'`, + `git grep -q 'mockLargeEstateStartupReady'`, `PROFILE="large-estate"`, `MOCK_NODES=50`, `MOCK_VMS_PER_NODE=10`, diff --git a/scripts/release_control/release_promotion_policy_test.py b/scripts/release_control/release_promotion_policy_test.py index a874db4d5d..37832d20ab 100644 --- a/scripts/release_control/release_promotion_policy_test.py +++ b/scripts/release_control/release_promotion_policy_test.py @@ -1943,6 +1943,7 @@ class ReleasePromotionPolicyTest(unittest.TestCase): self.assertIn("Resolve target-compatible demo runtime profile", demo) self.assertIn("mockEagerHistoryPVEGuestLimit", demo_profile) self.assertIn("UpdateMetricCohort", demo_profile) + self.assertIn("mockLargeEstateStartupReady", demo_profile) self.assertIn('PROFILE="legacy-bounded"', demo_profile) self.assertIn("MOCK_NODES=8", demo_profile) self.assertIn("MOCK_VMS_PER_NODE=6", demo_profile)