From 381d7f50a59aaff412d7a9f94d7b0b4a902dcd95 Mon Sep 17 00:00:00 2001 From: rcourtman Date: Wed, 29 Apr 2026 18:35:23 +0100 Subject: [PATCH] Document paid feature proof map --- docs/PULSE_PRO.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/PULSE_PRO.md b/docs/PULSE_PRO.md index 422848e83a..73b399a9c8 100644 --- a/docs/PULSE_PRO.md +++ b/docs/PULSE_PRO.md @@ -111,6 +111,19 @@ into first-class product surfaces: - `scheduled remediations` - `execution audit trail` +## Paid Feature Proof Map + +Use this map before adding or changing public Pulse Pro/Relay copy. A feature is safe to sell only +when the claim has a runtime gate, presentation copy, and at least one regression proof. + +| Claim | Runtime source | Regression proof | +|---|---|---| +| Self-hosted monitoring is not sold by monitored-system or child-resource volume. | `pkg/licensing/features.go` and `pkg/licensing/entitlement_payload.go` normalize self-hosted limits to the current no-volume-gate policy. | `pkg/licensing/grant_claims_contract_test.go`, `pkg/licensing/activation_types_test.go`, and `internal/api/licensing_handlers_auto_migrate_test.go` prove self-hosted paid/legacy continuity does not surface monitored-system caps. | +| Relay includes secure remote web access, Pulse Mobile pairing, push notifications, and 14-day history. | `pkg/licensing/features.go` grants `relay`, `mobile_app`, `push_notifications`, and `long_term_metrics` to Relay with `TierHistoryDays[relay] == 14`; relay onboarding/settings routes are gated behind Relay. | `pkg/licensing/features_test.go`, `pkg/licensing/entitlement_payload_test.go`, `internal/api/relay_sso_license_gating_test.go`, and `frontend-modern/src/components/Settings/__tests__/RelaySettingsPanel.runtime.test.tsx`. | +| Pro includes alert-triggered root-cause analysis and safe remediation workflows. | `internal/api/ai_handlers.go` gates alert-triggered analysis behind `ai_alerts` and remediation/autonomy behind `ai_autofix`; `internal/ai/service.go` enforces the same capabilities in service-level paths. | `pkg/licensing/features_test.go`, `internal/api/router_routes_ai_execute_stream_test.go`, `internal/api/ai_intelligence_handlers_remediation_more_test.go`, and `frontend-modern/src/pages/__tests__/AIIntelligence.test.tsx`. | +| Pro includes 90-day history. | `pkg/licensing/features.go` sets `TierHistoryDays[pro] == 90`; `pkg/licensing/entitlement_payload.go` emits `max_history_days`; `frontend-modern/src/stores/license.ts` and `frontend-modern/src/components/shared/useHistoryChartState.ts` lock ranges above the entitlement. | `pkg/licensing/features_test.go`, `pkg/licensing/entitlement_payload_test.go`, and `frontend-modern/src/stores/__tests__/license.test.ts`. | +| Pro includes business/admin extras: Advanced SSO, RBAC, audit logging, reporting, and agent profiles. | Router and settings gates use `advanced_sso`, `rbac`, `audit_logging`, `advanced_reporting`, and `agent_profiles`; audit capture is SQLite-backed in `pkg/server/server.go` and `pkg/audit/sqlite_factory.go`, while query/export remains license-gated. | `internal/api/security_regression_test.go`, `internal/api/sso_handlers_crud_test.go`, `internal/api/rbac_lifecycle_test.go`, `pkg/reporting/catalog_test.go`, and `frontend-modern/src/components/Settings/__tests__/settingsNavigation.integration.test.tsx`. | + ## Feature Matrix Legend: