Soften AI intelligence coverage copy

This commit is contained in:
rcourtman
2026-03-19 18:15:58 +00:00
parent c43dc60d46
commit eecfcce79b
4 changed files with 17 additions and 2 deletions
@@ -77,6 +77,7 @@ Own canonical runtime payload shapes between backend and frontend.
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
and the derived signal coverage block beneath it, so the summary page keeps the timeline and learned-correlation story primary rather than presenting the supporting counts as a separate 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
and the `/api/ai/intelligence/changes` route plus `internal/api/contract_test.go`, so the canonical recent-changes endpoint stays on the same intelligence facade and contract snapshot instead of bypassing the shared timeline source
@@ -115,6 +115,9 @@ surface instead of being rebuilt in each caller.
The Patrol page also now renders the canonical intelligence summary card
through the governed AI client and store, so the visible page summary and the
resource/timeline sections stay aligned on the same shared backend slice.
That same summary card now keeps the learning block framed as derived signal
coverage beneath the timeline and learned-correlation sections, so the page
does not present the supporting counts as the main intelligence story.
That Patrol summary card now also includes the canonical data-governance
posture snapshot from the shared AI summary payload, so the visible page can
show the same sensitivity, routing, and redaction distribution that the
+7 -1
View File
@@ -1281,11 +1281,17 @@ export function AIIntelligence() {
<div class="space-y-4">
<div class="rounded-md border border-border-subtle bg-base p-4">
<div class="flex items-center justify-between gap-2">
<h3 class="text-sm font-semibold text-base-content">Learning signals</h3>
<h3 class="text-sm font-semibold text-base-content">
Derived signal coverage
</h3>
<span class="text-xs text-muted">
{summary().learning.resources_with_baselines} baselined
</span>
</div>
<p class="mt-1 text-xs text-muted">
Coverage from baselines, knowledge, patterns, learned correlations,
incidents, and predictions.
</p>
<dl class="mt-3 grid grid-cols-2 gap-2 text-sm">
<div class="rounded-md bg-surface px-3 py-2">
@@ -596,7 +596,12 @@ describe('AIIntelligence entitlement gating', () => {
expect(
screen.getByRole('link', { name: 'Open related resource agent-1 in Infrastructure' }),
).toHaveAttribute('href', '/infrastructure?resource=agent-1');
expect(screen.getByText('Learning signals')).toBeInTheDocument();
expect(screen.getByText('Derived signal coverage')).toBeInTheDocument();
expect(
screen.getByText(
/Coverage from baselines, knowledge, patterns, learned correlations, incidents, and predictions\./,
),
).toBeInTheDocument();
expect(screen.getByText('Data Governance')).toBeInTheDocument();
expect(screen.getByText('4 governed resources')).toBeInTheDocument();
expect(screen.getByText('Public')).toBeInTheDocument();