diff --git a/docs/release-control/v6/internal/subsystems/patrol-intelligence.md b/docs/release-control/v6/internal/subsystems/patrol-intelligence.md index 4abcc812c..332ee06da 100644 --- a/docs/release-control/v6/internal/subsystems/patrol-intelligence.md +++ b/docs/release-control/v6/internal/subsystems/patrol-intelligence.md @@ -106,6 +106,9 @@ render contract: the header chip, primary summary card, and status bar must all route through the shared `frontend-modern/src/utils/patrolRuntimePresentation.ts` helper plus the backend `runtime_state` payload instead of inferring operator state from the last healthy summary snapshot or run history alone. +That active-runtime label must stay operational rather than verdict-like: the +header chip should communicate that Patrol is enabled or available, not imply +that infrastructure health is currently good merely because the runtime is on. That render rule now also has browser-level proof in `tests/integration/tests/18-patrol-runtime-state.spec.ts`: when the backend reports `runtime_state=blocked`, the real `/ai` route must show Patrol as diff --git a/frontend-modern/src/pages/__tests__/AIIntelligence.test.tsx b/frontend-modern/src/pages/__tests__/AIIntelligence.test.tsx index 102ad0632..2d4db9470 100644 --- a/frontend-modern/src/pages/__tests__/AIIntelligence.test.tsx +++ b/frontend-modern/src/pages/__tests__/AIIntelligence.test.tsx @@ -726,7 +726,7 @@ describe('AIIntelligence entitlement gating', () => { await waitFor(() => { expect(getPatrolStatusMock).toHaveBeenCalled(); - expect(screen.getByText('Patrol Active')).toBeInTheDocument(); + expect(screen.getByText('Patrol enabled')).toBeInTheDocument(); }); expect(screen.queryByText('Credits exhausted — connect API key')).not.toBeInTheDocument(); diff --git a/frontend-modern/src/utils/patrolRuntimePresentation.ts b/frontend-modern/src/utils/patrolRuntimePresentation.ts index 386908911..c147c6fc4 100644 --- a/frontend-modern/src/utils/patrolRuntimePresentation.ts +++ b/frontend-modern/src/utils/patrolRuntimePresentation.ts @@ -46,10 +46,10 @@ export function getPatrolRuntimePresentation( case 'active': default: return { - label: 'Patrol Active', - title: 'Patrol summary', - description: 'Pulse Patrol is monitoring your infrastructure.', - tone: 'success', + label: 'Patrol enabled', + title: 'Patrol enabled', + description: 'Pulse Patrol is available to monitor and analyze your infrastructure.', + tone: 'info', }; } }