diff --git a/docs/PULSE_PRO.md b/docs/PULSE_PRO.md index 22a9fdcf9d..7851b3bcf7 100644 --- a/docs/PULSE_PRO.md +++ b/docs/PULSE_PRO.md @@ -58,7 +58,7 @@ Runtime rules: - Deduplication follows canonical unified-resource identity rather than transport-specific state. Migration policy: -- Existing active recurring v5 customers keep their grandfathered recurring price and uncapped monitored-system and guest capacity until cancellation. +- Legacy recurring Pulse Pro subscriptions already active before the public v6 pricing cutover keep their grandfathered recurring price and uncapped monitored-system and guest capacity until cancellation. - Existing free users above the new Community cap are not hard-broken on rollout day. - During grace, existing monitoring keeps working. - During grace, only new counted-system additions are blocked until the user removes systems or upgrades. @@ -67,13 +67,13 @@ Migration policy: | Customer cohort | What happens in v6 | Pricing and capacity outcome | |---|---|---| -| Existing active recurring subscriber from a v5 or earlier Pulse Pro monthly/annual plan | The install can migrate into the v6 activation model without forcing a repurchase. | The existing recurring price stays in place and monitored-system plus guest capacity remain uncapped while the subscription remains continuously active. | +| Legacy recurring subscriber from a v5 or earlier Pulse Pro monthly/annual plan, already active before the public v6 pricing cutover | The install can migrate into the v6 activation model without forcing a repurchase. | The existing recurring price stays in place and monitored-system plus guest capacity remain uncapped while the subscription remains continuously active. | | Existing lifetime license holder | The license remains valid through the v6 licensing transition. | Lifetime remains permanently valid and monitored-system plus guest capacity stay uncapped. | | Former recurring subscriber who already canceled or later lapses/cancels | A later return is treated as a new paid purchase, not as a grandfathered renewal. | The old grandfathered price and uncapped capacity do not resume automatically; current public v6 pricing and caps apply. | | New self-hosted v6 purchase | The purchase uses the current Relay / Pro / Pro+ self-hosted plans. | Current public v6 monitored-system and guest caps apply. | Support rule: -- If a currently active recurring subscriber or a lifetime customer sees a bounded monitored-system or guest cap in v6, treat it as a bug rather than as intended policy. +- If a grandfathered recurring subscriber covered by the pre-cutover legacy policy, or a lifetime customer, sees a bounded monitored-system or guest cap in v6, treat it as a bug rather than as intended policy. ## Feature Matrix diff --git a/docs/UPGRADE_v6.md b/docs/UPGRADE_v6.md index 2efde58ad5..c3a81f210b 100644 --- a/docs/UPGRADE_v6.md +++ b/docs/UPGRADE_v6.md @@ -131,18 +131,18 @@ Pulse v6 uses the activation/grant model for active licensing, but it can migrat - a Pulse v6 activation key, or - a valid Pulse v5 Pro/Lifetime license key, which Pulse will try to exchange automatically - If the exchange service cannot complete the migration, retry from the v6 license panel or use the self-serve retrieval flow to fetch the current v6 activation key. Email is only a backup copy of that key. -- Existing active recurring v5 customers keep their grandfathered recurring price and uncapped monitored-system and guest capacity until cancellation. If they cancel and later return, current v6 pricing and limits apply. +- Legacy recurring Pulse Pro subscriptions already active before the public v6 pricing cutover keep their grandfathered recurring price and uncapped monitored-system and guest capacity until cancellation. If they cancel and later return, current v6 pricing and limits apply. #### Paid Upgrade Truth Table When an existing paid user asks what changes for them specifically, use this rule set: -- Existing active recurring Pulse Pro subscribers from v5 or earlier keep their current recurring price and uncapped monitored-system plus guest capacity while the subscription remains continuously active. +- Legacy recurring Pulse Pro subscriptions from v5 or earlier that were already active before the public v6 pricing cutover keep their current recurring price and uncapped monitored-system plus guest capacity while the subscription remains continuously active. - Existing lifetime customers remain permanently valid and uncapped. - Former recurring customers who already canceled, or who cancel and later return, do not resume the old grandfathered pricing or uncapped capacity automatically; they re-enter on current public v6 pricing and limits. - New self-hosted v6 purchases use the current Relay / Pro / Pro+ plan caps. -If an active recurring subscriber or lifetime customer sees a new monitored-system or guest cap after moving to v6, treat that as a regression, not as expected upgrade behavior. +If a grandfathered recurring subscriber covered by the pre-cutover legacy policy, or a lifetime customer, sees a new monitored-system or guest cap after moving to v6, treat that as a regression, not as expected upgrade behavior. Practical recommendation: diff --git a/docs/release-control/v6/internal/status.json b/docs/release-control/v6/internal/status.json index cc846ec0fe..4b93a00d0b 100644 --- a/docs/release-control/v6/internal/status.json +++ b/docs/release-control/v6/internal/status.json @@ -4236,22 +4236,6 @@ "subsystem_ids": [ "patrol-intelligence" ] - }, - { - "id": "legacy-grandfathering-eligibility-cutoff", - "summary": "Commercial migration still needs an explicit eligibility cutoff for uncapped grandfathered recurring continuity: decide whether only subscriptions already active before the public v6 pricing cutover qualify, or whether subscriptions started during the RC/current-v5 checkout window also qualify, and keep public pricing copy from implying the broader interpretation until that policy is explicitly decided.", - "owner": "project-owner", - "blocking_level": "release-ready", - "status": "open", - "opened_at": "2026-04-15", - "lane_ids": [ - "L2", - "L3", - "L9" - ], - "subsystem_ids": [ - "cloud-paid" - ] } ], "source_of_truth_file": "docs/release-control/v6/internal/SOURCE_OF_TRUTH.md", @@ -4411,7 +4395,7 @@ }, { "id": "v5-pro-price-grandfathering", - "summary": "Paid Pulse Pro v5 recurring customers keep their existing recurring price plus uncapped monitored-system and guest capacity through the v6 pricing change until they cancel; renewals must preserve that grandfathered state, while any return after cancellation re-enters on current v6 pricing and limits.", + "summary": "Legacy recurring Pulse Pro subscriptions already active before the public v6 pricing cutover keep their existing recurring price plus uncapped monitored-system and guest capacity through the v6 pricing change until they cancel; renewals must preserve that grandfathered state, while any return after cancellation re-enters on current v6 pricing and limits.", "kind": "pricing", "decided_at": "2026-03-12", "subsystem_ids": [ @@ -4687,6 +4671,20 @@ "L9", "L12" ] + }, + { + "id": "legacy-grandfathering-eligibility-cutoff", + "summary": "Uncapped grandfathered recurring continuity applies only to legacy recurring Pulse Pro subscriptions that were already active before the public v6 pricing cutover; public pricing and checkout copy must not imply that brand-new pre-cutover purchases automatically qualify for that legacy continuity.", + "kind": "pricing", + "decided_at": "2026-04-15", + "subsystem_ids": [ + "cloud-paid" + ], + "lane_ids": [ + "L2", + "L3", + "L9" + ] } ] } diff --git a/docs/releases/V6_RC_OPERATOR_SUPPORT_PACK.md b/docs/releases/V6_RC_OPERATOR_SUPPORT_PACK.md index d0bc1fd06e..93bdf60688 100644 --- a/docs/releases/V6_RC_OPERATOR_SUPPORT_PACK.md +++ b/docs/releases/V6_RC_OPERATOR_SUPPORT_PACK.md @@ -62,7 +62,8 @@ license panel using the existing key. Use this cohort breakdown: -- Existing active recurring monthly or annual subscribers from v5 or earlier: +- 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. - Existing lifetime customers: @@ -73,9 +74,9 @@ Use this cohort breakdown: - New self-hosted v6 purchasers: take the current Relay / Pro / Pro+ caps. -If a currently active recurring subscriber or a lifetime customer sees a -bounded monitored-system or guest cap in v6, treat that as a product bug, not -as intended policy. +If a grandfathered recurring subscriber covered by the pre-cutover legacy +policy, or a lifetime customer, sees a bounded monitored-system or guest cap +in v6, treat that as a product bug, not as intended policy. ### Will old bookmarks and familiar v5 pages still work? diff --git a/scripts/release_control/subsystem_lookup_test.py b/scripts/release_control/subsystem_lookup_test.py index 031759bbfa..daaa0a0808 100644 --- a/scripts/release_control/subsystem_lookup_test.py +++ b/scripts/release_control/subsystem_lookup_test.py @@ -4385,10 +4385,7 @@ class SubsystemLookupTest(unittest.TestCase): ) lane_context = match["lane_context"] self.assertEqual(lane_context["lane_id"], "L3") - self.assertEqual( - {decision["id"] for decision in lane_context["open_decisions"]}, - {"legacy-grandfathering-eligibility-cutoff"}, - ) + self.assertEqual(lane_context["open_decisions"], []) self.assertEqual( {gate["id"] for gate in lane_context["release_gates"]}, { @@ -4415,6 +4412,7 @@ class SubsystemLookupTest(unittest.TestCase): { "cloud-msp-price-id-propagation", "cloud-msp-stripe-prices", + "legacy-grandfathering-eligibility-cutoff", "stable-release-promotion-model", "stripe-mapping-contract-lock", "trial-authority-saas-controlled",