Extract patrol intelligence surface

This commit is contained in:
rcourtman
2026-03-20 16:33:06 +00:00
parent d10aedd419
commit dc7dbbb48b
6 changed files with 1596 additions and 1555 deletions
@@ -78,7 +78,7 @@ Own canonical runtime payload shapes between backend and frontend.
4. Route unified resource sensitivity, routing, and `aiSafeSummary` payload changes through `internal/api/resources.go`, `internal/api/contract_test.go`, and the canonical frontend resource consumer proofs together; resource governance metadata must not ship as an API-only or frontend-only heuristic
5. Route unified-resource action, lifecycle, and export audit reads through `internal/api/activity_audit_handlers.go`, `internal/api/router_routes_licensing.go`, and `internal/api/contract_test.go` together so the control-plane execution trail stays on a governed API contract instead of a store-only shape
6. Route dedicated unified-resource timeline and facet-bundle reads through `frontend-modern/src/api/resources.ts`, `internal/api/resources.go`, and `internal/api/contract_test.go` together so the backend facet contract and the frontend client stay aligned on one timeline-first surface, while capability and relationship detail stays backend-owned for AI correlation and change detection
7. Route canonical AI intelligence summary and resource-intelligence reads through `frontend-modern/src/api/ai.ts`, `frontend-modern/src/stores/aiIntelligence.ts`, `frontend-modern/src/pages/AIIntelligence.tsx`, `internal/api/ai_handlers.go`, and `internal/api/contract_test.go` together so the summary card, store state, and backend payload stay aligned on one governed surface, including the canonical recent-changes slice
7. Route canonical AI intelligence summary and resource-intelligence reads through `frontend-modern/src/api/ai.ts`, `frontend-modern/src/stores/aiIntelligence.ts`, `frontend-modern/src/features/patrol/PatrolIntelligenceSurface.tsx`, `frontend-modern/src/pages/AIIntelligence.tsx`, `internal/api/ai_handlers.go`, and `internal/api/contract_test.go` together so the summary card, store state, route shell, and backend payload stay aligned on one governed surface, including the canonical recent-changes slice
while keeping the learning counters backend-only coverage, so the summary page keeps Patrol health and findings primary and renders timeline, correlation, and policy-posture data as secondary investigation context rather than as a separate headline product metric
and the shared `frontend-modern/src/components/Infrastructure/ResourceChangeSummary.tsx` card, so canonical recent-change timelines stay rendered through one governed frontend card instead of separate page-local list loops
and the shared `frontend-modern/src/utils/resourceChangePresentation.ts` formatter used by the summary page and resource drawer, so canonical change wording does not drift across surfaces
@@ -15,26 +15,27 @@
## Purpose
Own the Patrol intelligence page, its local state orchestration, findings and
approval presentation, run-history rendering, and Patrol-specific presentation
helpers.
Own the Patrol intelligence route shell, feature surface, local state
orchestration, findings and approval presentation, run-history rendering, and
Patrol-specific presentation helpers.
## Canonical Files
1. `frontend-modern/src/pages/AIIntelligence.tsx`
2. `frontend-modern/src/stores/aiIntelligence.ts`
3. `frontend-modern/src/types/aiIntelligence.ts`
4. `frontend-modern/src/components/AI/FindingsPanel.tsx`
5. `frontend-modern/src/components/Brand/PulsePatrolLogo.tsx`
6. `frontend-modern/src/components/patrol/`
7. `frontend-modern/src/utils/aiFindingPresentation.ts`
8. `frontend-modern/src/utils/approvalRiskPresentation.ts`
9. `frontend-modern/src/utils/findingAlertIdentity.ts`
10. `frontend-modern/src/utils/patrolEmptyStatePresentation.ts`
11. `frontend-modern/src/utils/patrolFormat.ts`
12. `frontend-modern/src/utils/patrolRunPresentation.ts`
13. `frontend-modern/src/utils/patrolSummaryPresentation.ts`
14. `frontend-modern/src/utils/textPresentation.ts`
1. `frontend-modern/src/features/patrol/PatrolIntelligenceSurface.tsx`
2. `frontend-modern/src/pages/AIIntelligence.tsx`
3. `frontend-modern/src/stores/aiIntelligence.ts`
4. `frontend-modern/src/types/aiIntelligence.ts`
5. `frontend-modern/src/components/AI/FindingsPanel.tsx`
6. `frontend-modern/src/components/Brand/PulsePatrolLogo.tsx`
7. `frontend-modern/src/components/patrol/`
8. `frontend-modern/src/utils/aiFindingPresentation.ts`
9. `frontend-modern/src/utils/approvalRiskPresentation.ts`
10. `frontend-modern/src/utils/findingAlertIdentity.ts`
11. `frontend-modern/src/utils/patrolEmptyStatePresentation.ts`
12. `frontend-modern/src/utils/patrolFormat.ts`
13. `frontend-modern/src/utils/patrolRunPresentation.ts`
14. `frontend-modern/src/utils/patrolSummaryPresentation.ts`
15. `frontend-modern/src/utils/textPresentation.ts`
## Shared Boundaries
@@ -42,7 +43,7 @@ helpers.
## Extension Points
1. Add or change Patrol page orchestration through `frontend-modern/src/pages/AIIntelligence.tsx` and `frontend-modern/src/stores/aiIntelligence.ts`
1. Add or change Patrol page orchestration through `frontend-modern/src/features/patrol/PatrolIntelligenceSurface.tsx`, keep `frontend-modern/src/pages/AIIntelligence.tsx` as the route shell, and update `frontend-modern/src/stores/aiIntelligence.ts` together
2. Add or change Patrol findings, approvals, investigation, or run-history presentation through `frontend-modern/src/components/AI/FindingsPanel.tsx` and `frontend-modern/src/components/patrol/`
3. Keep Patrol and chat identifier-label presentation aligned through the shared `frontend-modern/src/utils/textPresentation.ts`
4. Keep Patrol and chat stream-matching / mention dedupe aligned through the shared `frontend-modern/src/utils/chatIdentifiers.ts`
@@ -68,6 +69,12 @@ surface for Patrol intelligence. This contract now owns that orchestration and
presentation boundary while leaving shared transport and payload-shape
ownership in the governed AI runtime and API contract surfaces.
The route file `frontend-modern/src/pages/AIIntelligence.tsx` is now also a
thin shell that delegates to the feature-owned
`frontend-modern/src/features/patrol/PatrolIntelligenceSurface.tsx`, so Patrol
runtime state and presentation no longer accumulate directly in the route
component itself.
Patrol finding state must now also consume the canonical camelCase
`alertIdentifier` field and pending-approval expiry metadata end to end.
Frontend Patrol helpers may not keep shadow `alert_identifier` fallbacks or