From fa680da8dd0a41cb76704acc4eca22fc8ce42c4b Mon Sep 17 00:00:00 2001 From: rcourtman Date: Mon, 23 Mar 2026 21:56:17 +0000 Subject: [PATCH] Canonicalize monitored-system commercial copy --- .../v6/internal/subsystems/agent-lifecycle.md | 4 ++++ .../v6/internal/subsystems/cloud-paid.md | 8 +++++++- .../v6/internal/subsystems/frontend-primitives.md | 4 ++++ .../MonitoredSystemDefinitionDisclosure.test.tsx | 6 +++--- .../Settings/InfrastructureWorkspace.tsx | 4 ++-- .../src/components/Settings/ProLicensePanel.tsx | 2 +- .../__tests__/InfrastructureWorkspace.test.tsx | 2 +- .../__tests__/MonitoredSystemLedgerPanel.test.tsx | 6 +++--- .../Settings/__tests__/ProLicensePanel.test.tsx | 2 +- .../__tests__/settingsArchitecture.test.ts | 15 +++++++++++++++ .../src/components/Settings/settingsHeaderMeta.ts | 6 +++--- .../src/pages/__tests__/PricingV6.test.tsx | 2 +- frontend-modern/src/utils/selfHostedPlans.ts | 6 +++--- 13 files changed, 48 insertions(+), 19 deletions(-) diff --git a/docs/release-control/v6/internal/subsystems/agent-lifecycle.md b/docs/release-control/v6/internal/subsystems/agent-lifecycle.md index e77aa5634..cd315eed3 100644 --- a/docs/release-control/v6/internal/subsystems/agent-lifecycle.md +++ b/docs/release-control/v6/internal/subsystems/agent-lifecycle.md @@ -224,6 +224,10 @@ show the counted monitored systems coming from agent-backed infrastructure, but the shared API helper must expose the canonical unified-resource grouping explanation instead of rebuilding count reasons from install or registration state. +Lifecycle-adjacent workspace copy must also keep the same commercial framing: +infrastructure operations may point operators to Pulse Pro for billing, but it +must describe that boundary in monitored-system, plan-limit, and license-status +terms rather than reviving legacy agent-allocation language. That same boundary now also assumes canonical resource payloads preserve shared facet totals through `facetCounts`, so the resource list and detail surfaces can keep row summaries aligned without re-inferring totals from diff --git a/docs/release-control/v6/internal/subsystems/cloud-paid.md b/docs/release-control/v6/internal/subsystems/cloud-paid.md index 15df27cb4..22de86891 100644 --- a/docs/release-control/v6/internal/subsystems/cloud-paid.md +++ b/docs/release-control/v6/internal/subsystems/cloud-paid.md @@ -328,7 +328,13 @@ instead of redefining retail plan facts or counted-unit policy locally. That same counted-unit boundary also owns the disclosure rule for retail copy: default billing and pricing surfaces should use concise monitored-system copy, while the full counted-unit definition appears only behind explicit disclosure -such as `What counts?` instead of sitting as always-visible explanatory chrome. +such as `View counting rules` instead of sitting as always-visible explanatory +chrome. +Those same billing-facing surfaces must also describe the commercial contract in +customer terms: monitored systems, plan limits, subscription status, and +license status. They must not revive legacy `installed-agent` wording or vague +internal nouns like `allocation` once the monitored-system billing model is the +canonical product truth. The self-hosted pricing page should therefore stay focused on plan cards, upgrade paths, and the comparison table rather than rendering a separate counted-unit explainer card beneath the tier grid. diff --git a/docs/release-control/v6/internal/subsystems/frontend-primitives.md b/docs/release-control/v6/internal/subsystems/frontend-primitives.md index 0aaade136..16d8aae34 100644 --- a/docs/release-control/v6/internal/subsystems/frontend-primitives.md +++ b/docs/release-control/v6/internal/subsystems/frontend-primitives.md @@ -668,6 +668,10 @@ shared banner or shared settings shell is explaining self-hosted plan caps, the operator-facing commercial term must follow the monitored-system model even if explicit legacy-v5 compatibility helpers still decode older alias fields at import boundaries. +That same settings-shell framing must stay in customer language. Shared headers +and descriptions should talk about monitored-system limits, plan limits, and +subscription or license status instead of reviving legacy `installed-agent` +terms or vague internal nouns like `allocation`. That banner boundary now also owns the canonical monitored-system naming surface directly: the shared warning component path and exported symbol are `MonitoredSystemLimitWarningBanner`, and future work may not reintroduce an diff --git a/frontend-modern/src/components/Commercial/__tests__/MonitoredSystemDefinitionDisclosure.test.tsx b/frontend-modern/src/components/Commercial/__tests__/MonitoredSystemDefinitionDisclosure.test.tsx index 2447515b1..381948826 100644 --- a/frontend-modern/src/components/Commercial/__tests__/MonitoredSystemDefinitionDisclosure.test.tsx +++ b/frontend-modern/src/components/Commercial/__tests__/MonitoredSystemDefinitionDisclosure.test.tsx @@ -10,7 +10,7 @@ describe('MonitoredSystemDefinitionDisclosure', () => { )); expect(screen.getByText('Billing is based on monitored systems.')).toBeInTheDocument(); - expect(screen.getByRole('button', { name: 'What counts?' })).toHaveAttribute( + expect(screen.getByRole('button', { name: 'View counting rules' })).toHaveAttribute( 'aria-expanded', 'false', ); @@ -18,9 +18,9 @@ describe('MonitoredSystemDefinitionDisclosure', () => { screen.queryByText(/a monitored system is a top-level machine or cluster/i), ).not.toBeInTheDocument(); - fireEvent.click(screen.getByRole('button', { name: 'What counts?' })); + fireEvent.click(screen.getByRole('button', { name: 'View counting rules' })); - expect(screen.getByRole('button', { name: 'Hide details' })).toHaveAttribute( + expect(screen.getByRole('button', { name: 'Hide counting rules' })).toHaveAttribute( 'aria-expanded', 'true', ); diff --git a/frontend-modern/src/components/Settings/InfrastructureWorkspace.tsx b/frontend-modern/src/components/Settings/InfrastructureWorkspace.tsx index ce5019b3d..87d02684e 100644 --- a/frontend-modern/src/components/Settings/InfrastructureWorkspace.tsx +++ b/frontend-modern/src/components/Settings/InfrastructureWorkspace.tsx @@ -33,8 +33,8 @@ export const InfrastructureWorkspace: Component = connections, and control which infrastructure surfaces are actively reporting.

- Billing, installed-agent allocation, and Pulse Pro entitlement state live in Pulse - Pro, not here. + Billing, monitored-system limits, and Pulse Pro license status live in Pulse Pro, + not here.

diff --git a/frontend-modern/src/components/Settings/ProLicensePanel.tsx b/frontend-modern/src/components/Settings/ProLicensePanel.tsx index d172a4b69..528e98584 100644 --- a/frontend-modern/src/components/Settings/ProLicensePanel.tsx +++ b/frontend-modern/src/components/Settings/ProLicensePanel.tsx @@ -15,7 +15,7 @@ export const ProLicensePanel: Component = () => {
} action={