diff --git a/.github/workflows/release-dry-run.yml b/.github/workflows/release-dry-run.yml index ccf4be8eb5..2a56cdf103 100644 --- a/.github/workflows/release-dry-run.yml +++ b/.github/workflows/release-dry-run.yml @@ -61,7 +61,7 @@ permissions: jobs: build_release_candidate: name: Build Immutable Release Candidate - if: ${{ github.event_name == 'workflow_dispatch' }} + if: ${{ inputs.version != '' }} permissions: contents: read uses: ./.github/workflows/build-release-candidate.yml diff --git a/docs/release-control/v6/internal/subsystems/deployment-installability.md b/docs/release-control/v6/internal/subsystems/deployment-installability.md index e0f1522e44..14e7612e5e 100644 --- a/docs/release-control/v6/internal/subsystems/deployment-installability.md +++ b/docs/release-control/v6/internal/subsystems/deployment-installability.md @@ -330,6 +330,10 @@ TLS floor in the dynamic config. of downloading the complete release packet again. Historical repair and release-edit validation may use the full-download fallback because those paths do not have a same-run candidate manifest. + A manually dispatched release rehearsal must activate the same signed + candidate build whenever its required `version` input is non-empty. + Scheduled watchdog rehearsals omit that input and must skip candidate + signing while retaining the non-publish policy and integration checks. Release-facing agent-paradigm blurbs under `docs/releases/` must describe `pulse-mcp` as a generic MCP adapter for MCP-speaking clients, not a client-specific release artifact, and full-surface token guidance must come diff --git a/scripts/release_control/release_promotion_policy_test.py b/scripts/release_control/release_promotion_policy_test.py index b465cb2e94..ae18d73170 100644 --- a/scripts/release_control/release_promotion_policy_test.py +++ b/scripts/release_control/release_promotion_policy_test.py @@ -484,6 +484,9 @@ class ReleasePromotionPolicyTest(unittest.TestCase): self.assertIn("rc-to-ga-promotion-readiness-rehearsal-.md", template) self.assertIn(promotion_metadata_envelope(), normalize_ws(template)) self.assertIn("rc-to-ga-rehearsal-summary", workflow) + self.assertIn("build_release_candidate:", workflow) + self.assertIn("if: ${{ inputs.version != '' }}", workflow) + self.assertNotIn("if: ${{ github.event_name == 'workflow_dispatch' }}", workflow) self.assertIn("record_rc_to_ga_rehearsal.py --run-id ${{ github.run_id }}", workflow) self.assertIn("rc-to-ga-promotion-readiness-rehearsal-.md", workflow) self.assertIn("control_plane.py --branch-for-version", workflow)