From df606ee81a930d218ea6c5babf03a402df09c6e7 Mon Sep 17 00:00:00 2001 From: "courtmanr@gmail.com" Date: Tue, 11 Aug 2026 14:29:57 +0100 Subject: [PATCH] Describe External Probes server-side alerting accurately --- docs/release-control/v6/internal/subsystems/cloud-paid.md | 5 +++++ internal/api/contract_test.go | 2 +- pkg/licensing/self_hosted_feature_catalog.go | 2 +- pkg/licensing/upgrade_test.go | 1 + 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/release-control/v6/internal/subsystems/cloud-paid.md b/docs/release-control/v6/internal/subsystems/cloud-paid.md index db473aa78..4f266a564 100644 --- a/docs/release-control/v6/internal/subsystems/cloud-paid.md +++ b/docs/release-control/v6/internal/subsystems/cloud-paid.md @@ -133,6 +133,11 @@ scheduled report cadence/delivery, generated output retention, and the `white_label` entitlement gate. This keeps provider-hosted MSP Stripe-free and avoids a cloud-control-plane report data path across clients. +The self-hosted External Probes offer is an agent-originated availability +contract: an agent outside the monitored site performs the check and reports +its result to Pulse, while Pulse remains the alerting authority. Commercial +copy must not imply that the external agent independently sends alerts. + ## Canonical Files 1. `pkg/licensing/features.go` diff --git a/internal/api/contract_test.go b/internal/api/contract_test.go index b3a3dbafc..0c9349569 100644 --- a/internal/api/contract_test.go +++ b/internal/api/contract_test.go @@ -7708,7 +7708,7 @@ func TestContract_SelfHostedCommunityEntitlementsJSONSnapshot(t *testing.T) { {"key":"ai_alerts","reason":"Upgrade to Pro so Patrol can investigate issues instead of handing you a stack of symptoms.","action_url":"https://pulserelay.pro/pricing?utm_source=pulse\u0026utm_medium=app\u0026utm_campaign=upgrade\u0026feature=ai_alerts"}, {"key":"rbac","reason":"Upgrade to Pro when more than one operator needs safe access boundaries around infrastructure changes.","action_url":"https://pulserelay.pro/pricing?utm_source=pulse\u0026utm_medium=app\u0026utm_campaign=upgrade\u0026feature=rbac"}, {"key":"agent_profiles","reason":"Upgrade to Pro to standardize agent behavior across systems without reconfiguring every install by hand.","action_url":"https://pulserelay.pro/pricing?utm_source=pulse\u0026utm_medium=app\u0026utm_campaign=upgrade\u0026feature=agent_profiles"}, - {"key":"external_probe","reason":"Upgrade to Pro to run availability checks from a probe outside the monitored site, with independent alerting.","action_url":"https://pulserelay.pro/pricing?utm_source=pulse\u0026utm_medium=app\u0026utm_campaign=upgrade\u0026feature=external_probe"},{"key":"audit_logging","reason":"Upgrade to Pro to keep a trustworthy action trail for incident review, accountability, and compliance.","action_url":"https://pulserelay.pro/pricing?utm_source=pulse\u0026utm_medium=app\u0026utm_campaign=upgrade\u0026feature=audit_logging"}, + {"key":"external_probe","reason":"Upgrade to Pro to run availability checks from an agent outside the monitored site and report the results back to Pulse for alerting.","action_url":"https://pulserelay.pro/pricing?utm_source=pulse\u0026utm_medium=app\u0026utm_campaign=upgrade\u0026feature=external_probe"},{"key":"audit_logging","reason":"Upgrade to Pro to keep a trustworthy action trail for incident review, accountability, and compliance.","action_url":"https://pulserelay.pro/pricing?utm_source=pulse\u0026utm_medium=app\u0026utm_campaign=upgrade\u0026feature=audit_logging"}, {"key":"advanced_reporting","reason":"Upgrade to Pro to turn live infrastructure state into shareable reports without manual screenshot work.","action_url":"https://pulserelay.pro/pricing?utm_source=pulse\u0026utm_medium=app\u0026utm_campaign=upgrade\u0026feature=advanced_reporting"} ], "tier":"free", diff --git a/pkg/licensing/self_hosted_feature_catalog.go b/pkg/licensing/self_hosted_feature_catalog.go index 7bbe12c7a..caaf663d8 100644 --- a/pkg/licensing/self_hosted_feature_catalog.go +++ b/pkg/licensing/self_hosted_feature_catalog.go @@ -265,7 +265,7 @@ var featureMetadataCatalog = map[string]FeatureMetadata{ Relay: SelfHostedFeatureRoleHidden, Pro: SelfHostedFeatureRoleIncludedExtra, }, - UpgradeReason: "Upgrade to Pro to run availability checks from a probe outside the monitored site, with independent alerting.", + UpgradeReason: "Upgrade to Pro to run availability checks from an agent outside the monitored site and report the results back to Pulse for alerting.", UpgradePriority: 7, }, FeatureMultiUser: { diff --git a/pkg/licensing/upgrade_test.go b/pkg/licensing/upgrade_test.go index 4adfb8cab..7b36a6e60 100644 --- a/pkg/licensing/upgrade_test.go +++ b/pkg/licensing/upgrade_test.go @@ -97,6 +97,7 @@ func TestOperatorOutcomeUpgradeReasonsRemainCanonical(t *testing.T) { FeatureLongTermMetrics: "Get Relay for 14 days of history, or Pro for 90 days, so you can see what changed before and after an incident.", FeatureAIAlerts: "Upgrade to Pro so Patrol can investigate issues instead of handing you a stack of symptoms.", FeatureAIAutoFix: "Upgrade to Pro so Patrol can investigate issues, apply safe fixes within Patrol mode, and verify the result.", + FeatureExternalProbe: "Upgrade to Pro to run availability checks from an agent outside the monitored site and report the results back to Pulse for alerting.", } for _, entry := range UpgradeReasonMatrix {