diff --git a/docs/release-control/v6/internal/subsystems/deployment-installability.md b/docs/release-control/v6/internal/subsystems/deployment-installability.md index b22a055f9..3cc01339e 100644 --- a/docs/release-control/v6/internal/subsystems/deployment-installability.md +++ b/docs/release-control/v6/internal/subsystems/deployment-installability.md @@ -145,11 +145,11 @@ server-side update execution surfaces. The same guide must treat bounded monitored-system, guest, or child-resource volume caps after self-hosted v6 activation or migration as regressions, not as upgrade outcomes or paid-plan differentiators. - Release notes and changelog packets under `docs/releases/` must follow the - same rule when they mention licensing: historical RC context may be - preserved, but current self-hosted v6 guidance must not present - monitored-system volume, child-resource volume, or trial eligibility as the - active paid model. + Release notes, changelog packets, and operator support packets under + `docs/releases/` must follow the same rule when they mention licensing: + historical RC context may be preserved, but current self-hosted v6 guidance + must not present monitored-system volume, child-resource volume, guest + capacity, or trial eligibility as the active paid model. The active prerelease cut must keep the repo-root `VERSION` file aligned with the current RC packet itself: when the governed line moves from `rc.1` to `rc.2` or later, the staged release-notes packet, changelog packet, and diff --git a/docs/releases/V6_RC2_OPERATOR_SUPPORT_PACK_DRAFT.md b/docs/releases/V6_RC2_OPERATOR_SUPPORT_PACK_DRAFT.md index 953489a73..f97144e7c 100644 --- a/docs/releases/V6_RC2_OPERATOR_SUPPORT_PACK_DRAFT.md +++ b/docs/releases/V6_RC2_OPERATOR_SUPPORT_PACK_DRAFT.md @@ -54,8 +54,8 @@ Use this cohort breakdown: - Legacy recurring monthly or annual subscribers from v5 or earlier who were already active before the public v6 pricing cutover: - keep the current recurring price and uncapped monitored-system plus guest - capacity while the subscription remains continuously active. + keep the current recurring price plus uncapped self-hosted monitoring and + child-resource volume while the subscription remains continuously active. - Existing lifetime customers: remain permanently valid and uncapped. - Legacy paid v5 licenses migrated into v6 outside the recurring grandfathered diff --git a/docs/releases/V6_RC_OPERATOR_SUPPORT_PACK.md b/docs/releases/V6_RC_OPERATOR_SUPPORT_PACK.md index 333f92f0f..fe57b9186 100644 --- a/docs/releases/V6_RC_OPERATOR_SUPPORT_PACK.md +++ b/docs/releases/V6_RC_OPERATOR_SUPPORT_PACK.md @@ -64,8 +64,8 @@ Use this cohort breakdown: - Legacy recurring monthly or annual subscribers from v5 or earlier who were already active before the public v6 pricing cutover: - keep the current recurring price and uncapped monitored-system plus guest - capacity while the subscription remains continuously active. + keep the current recurring price plus uncapped self-hosted monitoring and + child-resource volume while the subscription remains continuously active. - Existing lifetime customers: remain permanently valid and uncapped. - Legacy paid v5 licenses migrated into v6 outside the recurring grandfathered diff --git a/scripts/release_control/release_promotion_policy_test.py b/scripts/release_control/release_promotion_policy_test.py index e5f8a0649..6516fc0c7 100644 --- a/scripts/release_control/release_promotion_policy_test.py +++ b/scripts/release_control/release_promotion_policy_test.py @@ -134,6 +134,22 @@ class ReleasePromotionPolicyTest(unittest.TestCase): self.assertIn("docs/releases/V6_CHANGELOG_RC2_DRAFT.md", release_index) self.assertIn("docs/releases/V6_RC2_OPERATOR_SUPPORT_PACK_DRAFT.md", release_index) + def test_operator_support_packs_keep_free_first_paid_continuity_wording(self) -> None: + for rel in ( + "docs/releases/V6_RC_OPERATOR_SUPPORT_PACK.md", + "docs/releases/V6_RC2_OPERATOR_SUPPORT_PACK_DRAFT.md", + ): + with self.subTest(rel=rel): + support_pack = read(rel) + self.assertIn( + "current recurring price plus uncapped self-hosted monitoring and", + support_pack, + ) + self.assertIn("child-resource volume while the subscription remains continuously active", support_pack) + self.assertNotIn("uncapped monitored-system plus guest", support_pack) + self.assertNotIn("uncapped monitored-system and guest capacity", support_pack) + self.assertNotIn("guest-capacity continuity", support_pack) + def test_rc1_changelog_keeps_current_free_first_licensing_posture(self) -> None: changelog = read("docs/releases/V6_CHANGELOG_RC1.md") normalized = normalize_ws(changelog)