Make Patrol active label neutral

Patrol runtime presentation now uses an operational active-state label so the header chip reads as enabled/available status rather than a hidden health verdict.
This commit is contained in:
rcourtman 2026-03-25 12:28:12 +00:00
parent a884b8da17
commit f9fc8203fa
3 changed files with 8 additions and 5 deletions

View file

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

View file

@ -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();

View file

@ -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',
};
}
}