Lock grandfathering to pre-cutover subscribers

This commit is contained in:
rcourtman 2026-04-15 09:16:07 +01:00
parent 4651433809
commit 34784c9b9b
5 changed files with 28 additions and 31 deletions

View file

@ -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

View file

@ -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:

View file

@ -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"
]
}
]
}

View file

@ -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?

View file

@ -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",