diff --git a/api/openapi.yaml b/api/openapi.yaml index 677c5d23..b1aa7292 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -1101,6 +1101,14 @@ paths: - name: actor_type in: query schema: {type: string} + - name: resource_type + in: query + description: Filter to events whose resource_type matches (e.g. "host"). Pair with resource_id for a single resource's audit trail. + schema: {type: string} + - name: resource_id + in: query + description: Filter to events whose resource_id matches (e.g. a host UUID). Typically paired with resource_type. + schema: {type: string} - name: since in: query schema: {type: string, format: date-time} @@ -4673,9 +4681,15 @@ components: id: {type: string, format: uuid} correlation_id: {type: string} action: {type: string} + # Server-rendered human-readable sentence for the event + # (" ", e.g. "alice@example.com created a host"), + # built from action + actor_label + actor_type. Lets every audit + # surface show a sentence instead of the raw dotted action code. + message: {type: string} severity: {type: string} actor_type: {type: string} actor_id: {type: string, nullable: true} + actor_label: {type: string, nullable: true} resource_type: {type: string, nullable: true} resource_id: {type: string, nullable: true} occurred_at: {type: string, format: date-time} diff --git a/frontend/src/api/schema.d.ts b/frontend/src/api/schema.d.ts index b07313a8..505ef931 100644 --- a/frontend/src/api/schema.d.ts +++ b/frontend/src/api/schema.d.ts @@ -3102,9 +3102,11 @@ export interface components { id: string; correlation_id: string; action: string; + message?: string; severity?: string; actor_type: string; actor_id?: string | null; + actor_label?: string | null; resource_type?: string | null; resource_id?: string | null; /** Format: date-time */ @@ -5621,6 +5623,10 @@ export interface operations { action?: string; correlation_id?: string; actor_type?: string; + /** @description Filter to events whose resource_type matches (e.g. "host"). Pair with resource_id for a single resource's audit trail. */ + resource_type?: string; + /** @description Filter to events whose resource_id matches (e.g. a host UUID). Typically paired with resource_type. */ + resource_id?: string; since?: string; until?: string; cursor?: string; diff --git a/frontend/src/pages/HostDetailPage.tsx b/frontend/src/pages/HostDetailPage.tsx index cab3796c..3d912df4 100644 --- a/frontend/src/pages/HostDetailPage.tsx +++ b/frontend/src/pages/HostDetailPage.tsx @@ -182,15 +182,13 @@ const TAB_ORDER: { id: TabId; label: string; icon: LucideIcon }[] = [ // Backend subsystem that populates each tab when it lands. Surfaces // inside the per-tab empty state so operators know what's deferred. const TAB_BACKEND_SUBSYSTEM: Record< - Exclude, + Exclude, string > = { packages: 'Server Intelligence collection — installed-package inventory deferred (BACKLOG).', services: 'Server Intelligence collection — running services inventory deferred (BACKLOG).', users: 'Server Intelligence collection — user accounts inventory deferred (BACKLOG).', network: 'Server Intelligence collection — interfaces and firewall rules deferred (BACKLOG).', - audit_log: - 'Audit query API — host-scoped audit feed deferred to the unified /activity page (BACKLOG).', terminal: 'Web terminal — SSH-in-browser deferred; use a host-side SSH client in the meantime.', }; @@ -488,6 +486,8 @@ export function HostDetailPage() { ) : activeTab === 'activity' ? ( + ) : activeTab === 'audit_log' ? ( + ) : ( )} @@ -2675,6 +2675,137 @@ function HostActivityTab({ hostId }: { hostId: string }) { ); } +// AuditLogItem mirrors the api.AuditEvent envelope returned by +// GET /api/v1/audit/events. `message` is the server-rendered readable +// sentence (" "); we never show the raw action code. +interface AuditLogItem { + id: string; + action: string; + message?: string; + actor_label?: string | null; + occurred_at: string; +} + +// HostAuditLogTab is the host-scoped forensic audit trail: audit events +// whose resource is this host (resource_type=host, resource_id=hostId), +// rendered with the server's readable message. Distinct from the Activity +// tab (operational feed) — this is the "who did what to this host" record. +// Gated on audit:read. Spec frontend-host-detail. +function HostAuditLogTab({ hostId }: { hostId: string }) { + const canRead = useAuthStore((s) => s.hasPermission('audit:read')); + const q = useInfiniteQuery({ + queryKey: ['host', hostId, 'audit'], + initialPageParam: undefined as string | undefined, + enabled: !!hostId && canRead, + queryFn: async ({ pageParam }) => { + const { data, error, response } = await api.GET('/api/v1/audit/events', { + params: { + query: { + resource_type: 'host', + resource_id: hostId, + limit: 50, + ...(pageParam ? { cursor: pageParam } : {}), + }, + }, + }); + if (error || !response.ok) { + throw new Error(apiErrorMessage(error, `Failed to load audit log (${response.status})`)); + } + return data as unknown as { items: AuditLogItem[]; next_cursor?: string | null }; + }, + getNextPageParam: (last) => last.next_cursor ?? undefined, + }); + + if (!canRead) { + return ( + + + + ); + } + + const items = q.data?.pages.flatMap((p) => p.items ?? []) ?? []; + + return ( + + {q.isLoading ? ( +
Loading…
+ ) : q.isError ? ( +
+ {apiErrorMessage(q.error, 'Failed to load audit log')}{' '} + +
+ ) : items.length === 0 ? ( + + ) : ( + <> +
    + {items.map((it) => ( +
  1. + +
    + {it.message || it.action} +
    +
    + {relativeTime(it.occurred_at)} +
    +
  2. + ))} +
+ {q.hasNextPage ? ( + + ) : null} + + )} +
+ ); +} + // activitySeverityColors maps the closed severity enum onto the // existing OW color tokens. function activitySeverityColors(s: ActivitySeverity): { fg: string; dot: string } { diff --git a/frontend/tests/pages/host-detail-compliance-tab.test.tsx b/frontend/tests/pages/host-detail-compliance-tab.test.tsx index 8def2862..7c3d454b 100644 --- a/frontend/tests/pages/host-detail-compliance-tab.test.tsx +++ b/frontend/tests/pages/host-detail-compliance-tab.test.tsx @@ -156,9 +156,9 @@ describe('frontend-host-compliance-tab — structural', () => { expect(PAGE_SRC).toContain('", + "Exclude", ); }); diff --git a/frontend/tests/pages/host-detail-shell.test.ts b/frontend/tests/pages/host-detail-shell.test.ts index 6090701b..c32db0dd 100644 --- a/frontend/tests/pages/host-detail-shell.test.ts +++ b/frontend/tests/pages/host-detail-shell.test.ts @@ -490,7 +490,7 @@ describe('frontend-host-detail v1.6.0 — per-host credential management + recon expect(PAGE_SRC).toMatch(/activeTab === 'activity' \? \(\s*/); + expect(PAGE_SRC).toMatch(/Exclude]*\| 'activity'[^>]*>/); // Paged host-scoped feed via useInfiniteQuery with cursor pagination. expect(PAGE_SRC).toContain('useInfiniteQuery'); expect(PAGE_SRC).toMatch(/getNextPageParam:\s*\(last\)\s*=>\s*last\.next_cursor/); @@ -499,7 +499,22 @@ describe('frontend-host-detail v1.6.0 — per-host credential management + recon expect(PAGE_SRC).toContain('HOST_ACTIVITY_SOURCES'); expect(PAGE_SRC).toMatch(/hasNextPage/); expect(PAGE_SRC).toMatch(/Load more/); - // The Audit log tab remains a stub. - expect(PAGE_SRC).toMatch(/audit_log:\s*\n?\s*'Audit query API/); + }); + + // @ac AC-44 + test('frontend-host-detail/AC-44 — Audit log tab is live (HostAuditLogTab), host-scoped + readable', () => { + expect(PAGE_SRC).toContain('function HostAuditLogTab'); + expect(PAGE_SRC).toMatch(/activeTab === 'audit_log' \? \(\s*/, + ); + // Host-scoped audit query + readable server message + audit:read gate. + expect(PAGE_SRC).toContain("'/api/v1/audit/events'"); + expect(PAGE_SRC).toMatch(/resource_type:\s*'host'/); + expect(PAGE_SRC).toMatch(/resource_id:\s*hostId/); + expect(PAGE_SRC).toMatch(/it\.message \|\| it\.action/); + expect(PAGE_SRC).toMatch(/hasPermission\('audit:read'\)/); }); }); diff --git a/internal/activity/format.go b/internal/activity/format.go index da165b4f..6a2d9ad6 100644 --- a/internal/activity/format.go +++ b/internal/activity/format.go @@ -54,11 +54,11 @@ func formatIntelligence(eventCode string, detail []byte) (title, summary string) return title, intelSummary(detail) } -// formatAudit renders an audit row as " ". The actor is +// FormatAudit renders an audit row as " ". The actor is // the recorded actor_label, falling back to a readable actor_type. The raw // resource_id (a UUID) is intentionally NOT placed in the title; the // resource_type provides lightweight context in the summary. -func formatAudit(action, actorLabel, actorType, resourceType string) (title, summary string) { +func FormatAudit(action, actorLabel, actorType, resourceType string) (title, summary string) { actor := strings.TrimSpace(actorLabel) if actor == "" { actor = actorWord(actorType) diff --git a/internal/activity/format_test.go b/internal/activity/format_test.go index 8ba70d50..18097d6a 100644 --- a/internal/activity/format_test.go +++ b/internal/activity/format_test.go @@ -45,7 +45,7 @@ func TestFormatters_HumanReadable(t *testing.T) { } // --- audit --- - title, summary = formatAudit("host.created", "alice@example.com", "user", "host") + title, summary = FormatAudit("host.created", "alice@example.com", "user", "host") if title != "alice@example.com created a host" { t.Errorf("audit title = %q", title) } @@ -53,7 +53,7 @@ func TestFormatters_HumanReadable(t *testing.T) { t.Errorf("audit summary = %q, want Host", summary) } // actor_label empty -> readable actor_type; no UUID anywhere. - title, _ = formatAudit("authz.permission.denied", "", "system", "") + title, _ = FormatAudit("authz.permission.denied", "", "system", "") if title != "System was denied permission" { t.Errorf("audit fallback title = %q", title) } @@ -75,7 +75,7 @@ func TestFormatters_GracefulFallback(t *testing.T) { } // Unknown audit action. - title, _ = formatAudit("widget.frobnicated", "bob", "user", "") + title, _ = FormatAudit("widget.frobnicated", "bob", "user", "") if containsDot(title) { t.Errorf("audit title %q still contains a raw dotted code", title) } diff --git a/internal/activity/service.go b/internal/activity/service.go index 32223824..27f4ebf4 100644 --- a/internal/activity/service.go +++ b/internal/activity/service.go @@ -334,7 +334,7 @@ func (s *Service) queryUnion(ctx context.Context, f Filter, includeAlerts, inclu case SourceIntelligence: r.Title, r.Summary = formatIntelligence(code, detail) case SourceAudit: - r.Title, r.Summary = formatAudit(code, ctxA, ctxB, ctxC) + r.Title, r.Summary = FormatAudit(code, ctxA, ctxB, ctxC) } out = append(out, r) } diff --git a/internal/server/api/server.gen.go b/internal/server/api/server.gen.go index a48a047b..5a1ddfbb 100644 --- a/internal/server/api/server.gen.go +++ b/internal/server/api/server.gen.go @@ -1297,10 +1297,12 @@ type ApiTokenList struct { type AuditEvent struct { Action string `json:"action"` ActorId *string `json:"actor_id,omitempty"` + ActorLabel *string `json:"actor_label,omitempty"` ActorType string `json:"actor_type"` CorrelationId string `json:"correlation_id"` Detail *map[string]interface{} `json:"detail,omitempty"` Id openapi_types.UUID `json:"id"` + Message *string `json:"message,omitempty"` OccurredAt time.Time `json:"occurred_at"` RecordedAt *time.Time `json:"recorded_at,omitempty"` Redactions *[]string `json:"redactions,omitempty"` @@ -3031,13 +3033,19 @@ type GetAlertsParamsSeverity string // GetAuditEventsParams defines parameters for GetAuditEvents. type GetAuditEventsParams struct { - Action *string `form:"action,omitempty" json:"action,omitempty"` - CorrelationId *string `form:"correlation_id,omitempty" json:"correlation_id,omitempty"` - ActorType *string `form:"actor_type,omitempty" json:"actor_type,omitempty"` - Since *time.Time `form:"since,omitempty" json:"since,omitempty"` - Until *time.Time `form:"until,omitempty" json:"until,omitempty"` - Cursor *string `form:"cursor,omitempty" json:"cursor,omitempty"` - Limit *int `form:"limit,omitempty" json:"limit,omitempty"` + Action *string `form:"action,omitempty" json:"action,omitempty"` + CorrelationId *string `form:"correlation_id,omitempty" json:"correlation_id,omitempty"` + ActorType *string `form:"actor_type,omitempty" json:"actor_type,omitempty"` + + // ResourceType Filter to events whose resource_type matches (e.g. "host"). Pair with resource_id for a single resource's audit trail. + ResourceType *string `form:"resource_type,omitempty" json:"resource_type,omitempty"` + + // ResourceId Filter to events whose resource_id matches (e.g. a host UUID). Typically paired with resource_type. + ResourceId *string `form:"resource_id,omitempty" json:"resource_id,omitempty"` + Since *time.Time `form:"since,omitempty" json:"since,omitempty"` + Until *time.Time `form:"until,omitempty" json:"until,omitempty"` + Cursor *string `form:"cursor,omitempty" json:"cursor,omitempty"` + Limit *int `form:"limit,omitempty" json:"limit,omitempty"` } // GetAuthSSOCallbackParams defines parameters for GetAuthSSOCallback. @@ -5073,6 +5081,32 @@ func (siw *ServerInterfaceWrapper) GetAuditEvents(w http.ResponseWriter, r *http return } + // ------------- Optional query parameter "resource_type" ------------- + + err = runtime.BindQueryParameterWithOptions("form", true, false, "resource_type", r.URL.Query(), ¶ms.ResourceType, runtime.BindQueryParameterOptions{Type: "string", Format: ""}) + if err != nil { + var requiredError *runtime.RequiredParameterError + if errors.As(err, &requiredError) { + siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "resource_type"}) + } else { + siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "resource_type", Err: err}) + } + return + } + + // ------------- Optional query parameter "resource_id" ------------- + + err = runtime.BindQueryParameterWithOptions("form", true, false, "resource_id", r.URL.Query(), ¶ms.ResourceId, runtime.BindQueryParameterOptions{Type: "string", Format: ""}) + if err != nil { + var requiredError *runtime.RequiredParameterError + if errors.As(err, &requiredError) { + siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "resource_id"}) + } else { + siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "resource_id", Err: err}) + } + return + } + // ------------- Optional query parameter "since" ------------- err = runtime.BindQueryParameterWithOptions("form", true, false, "since", r.URL.Query(), ¶ms.Since, runtime.BindQueryParameterOptions{Type: "string", Format: "date-time"}) @@ -9090,459 +9124,461 @@ var swaggerSpec = []string{ "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", + "cpLaFlgg+c3Z2R9H//749/8DAAD//w==", } // decodeSpec returns the embedded OpenAPI spec as raw JSON bytes, diff --git a/internal/server/api_audit_query_test.go b/internal/server/api_audit_query_test.go index 5ad03672..e0cd9682 100644 --- a/internal/server/api_audit_query_test.go +++ b/internal/server/api_audit_query_test.go @@ -1,4 +1,6 @@ // @spec api-audit-events-query +// +// AC-12 added v1.2.0: TestAPI_AuditEvents_MessageAndResourceFilter package server @@ -14,6 +16,7 @@ import ( "github.com/Hanalyx/openwatch/internal/audit" "github.com/Hanalyx/openwatch/internal/auth" "github.com/Hanalyx/openwatch/internal/correlation" + "github.com/google/uuid" "github.com/jackc/pgx/v5/pgxpool" ) @@ -370,3 +373,83 @@ func TestAPI_AuditEvents_RequiresAuditRead(t *testing.T) { } }) } + +// @ac AC-12 +// api-audit-events-query/AC-12 (v1.2.0): each item carries a readable +// `message` built by activity.FormatAudit, plus actor_label; and the +// resource_type/resource_id filters scope to one resource's audit trail. +func TestAPI_AuditEvents_MessageAndResourceFilter(t *testing.T) { + t.Run("api-audit-events-query/AC-12", func(t *testing.T) { + url, pool := freshAPIServer(t) + ctx := context.Background() + hostA := uuid.Must(uuid.NewV7()).String() + hostB := uuid.Must(uuid.NewV7()).String() + // Seed two host.created events for different resource_ids. + for _, res := range []string{hostA, hostB} { + id := uuid.Must(uuid.NewV7()) + if _, err := pool.Exec(ctx, + `INSERT INTO audit_events + (id, correlation_id, actor_type, actor_label, action, + resource_type, resource_id, severity, occurred_at) + VALUES ($1,'corr-msg','user','alice@example.com','host.created','host',$2,'info',now())`, + id, res); err != nil { + t.Fatalf("seed audit event: %v", err) + } + } + + // Unfiltered: the message is the readable sentence, not the raw code. + all := getAuditPage(t, url, "") + var sawReadable bool + for _, it := range all { + if it.Action == "host.created" { + if it.Message != "alice@example.com created a host" { + t.Errorf("message = %q, want %q", it.Message, "alice@example.com created a host") + } + if it.Message == it.Action { + t.Errorf("message is the raw action code %q", it.Action) + } + if it.ActorLabel != "alice@example.com" { + t.Errorf("actor_label = %q, want alice@example.com", it.ActorLabel) + } + sawReadable = true + } + } + if !sawReadable { + t.Fatal("no host.created event found in unfiltered list") + } + + // resource filter scopes to hostA only. + scoped := getAuditPage(t, url, "?resource_type=host&resource_id="+hostA) + if len(scoped) == 0 { + t.Fatal("resource-filtered list is empty; want hostA's event") + } + for _, it := range scoped { + if it.ResourceID != hostA { + t.Errorf("resource_id = %q, want only %q (hostB leaked)", it.ResourceID, hostA) + } + } + }) +} + +type auditItem struct { + Action string `json:"action"` + Message string `json:"message"` + ActorLabel string `json:"actor_label"` + ResourceID string `json:"resource_id"` +} + +func getAuditPage(t *testing.T, url, query string) []auditItem { + t.Helper() + resp := doReq(t, asRole(t, "GET", url+"/api/v1/audit/events"+query, auth.RoleAuditor, nil)) + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + t.Fatalf("status = %d, want 200", resp.StatusCode) + } + var page struct { + Items []auditItem `json:"items"` + } + if err := json.NewDecoder(resp.Body).Decode(&page); err != nil { + t.Fatalf("decode: %v", err) + } + return page.Items +} diff --git a/internal/server/handlers.go b/internal/server/handlers.go index 75e23ade..42f79349 100644 --- a/internal/server/handlers.go +++ b/internal/server/handlers.go @@ -432,7 +432,7 @@ func (h *handlers) GetAuditEvents(w http.ResponseWriter, r *http.Request, params func (h *handlers) queryEvents(ctx context.Context, p api.GetAuditEventsParams, limit int32) ([]api.AuditEvent, error) { q := ` SELECT id, correlation_id, action, severity, - actor_type, actor_id, resource_type, resource_id, + actor_type, actor_id, actor_label, resource_type, resource_id, occurred_at, recorded_at, detail, redactions FROM audit_events WHERE 1=1 @@ -454,6 +454,12 @@ WHERE 1=1 if p.ActorType != nil && *p.ActorType != "" { addArg("actor_type = $N", *p.ActorType) } + if p.ResourceType != nil && *p.ResourceType != "" { + addArg("resource_type = $N", *p.ResourceType) + } + if p.ResourceId != nil && *p.ResourceId != "" { + addArg("resource_id = $N", *p.ResourceId) + } if p.Since != nil { addArg("occurred_at >= $N", *p.Since) } @@ -482,6 +488,7 @@ WHERE 1=1 id uuid.UUID severity *string actorID *string + actorLabel *string resourceType *string resourceID *string detailBytes []byte @@ -489,7 +496,7 @@ WHERE 1=1 ) if err := rows.Scan( &id, &ev.CorrelationId, &ev.Action, &severity, - &ev.ActorType, &actorID, &resourceType, &resourceID, + &ev.ActorType, &actorID, &actorLabel, &resourceType, &resourceID, &ev.OccurredAt, &ev.RecordedAt, &detailBytes, &redactions, ); err != nil { return nil, err @@ -497,8 +504,21 @@ WHERE 1=1 ev.Id = id ev.Severity = severity ev.ActorId = actorID + ev.ActorLabel = actorLabel ev.ResourceType = resourceType ev.ResourceId = resourceID + // Server-rendered readable sentence so every audit surface shows + // " " instead of the raw dotted action code. Reuses + // the same formatter the activity feed's audit leg uses. + al, rt := "", "" + if actorLabel != nil { + al = *actorLabel + } + if resourceType != nil { + rt = *resourceType + } + msg, _ := activity.FormatAudit(ev.Action, al, ev.ActorType, rt) + ev.Message = &msg if len(detailBytes) > 0 { var d map[string]interface{} if err := json.Unmarshal(detailBytes, &d); err == nil { diff --git a/specs/api/audit-events-query.spec.yaml b/specs/api/audit-events-query.spec.yaml index 6276f3fd..63189cca 100644 --- a/specs/api/audit-events-query.spec.yaml +++ b/specs/api/audit-events-query.spec.yaml @@ -1,7 +1,7 @@ spec: id: api-audit-events-query title: Audit events list endpoint - version: "1.1.0" + version: "1.2.0" status: approved tier: 2 @@ -51,6 +51,10 @@ spec: description: GET /audit/events MUST require the audit:read permission. The audit trail is security-sensitive (actor ids, IPs, resource ids, action detail); an anonymous caller MUST receive 401 auth.required and an authenticated-but-unauthorized caller 403 and MUST NOT receive any events. Enforcement is via auth.EnforcePermission(AuditRead) as the first statement of the handler, matching every sibling data handler. type: security enforcement: error + - id: C-07 + description: 'v1.2.0 — Each item MUST include a server-rendered human-readable `message` (" ", e.g. "alice@example.com created a host"), built from action + actor_label + actor_type via the shared activity.FormatAudit formatter (the same one the activity feed audit leg uses, so the wording is consistent and a new action code never surfaces as a raw dotted enum). The item MUST also expose actor_label. The endpoint MUST accept optional resource_type and resource_id query filters (ANDed with the existing filters) so a caller can fetch one resource''s audit trail (e.g. a single host''s lifecycle events)' + type: technical + enforcement: error acceptance_criteria: - id: AC-01 @@ -90,3 +94,7 @@ spec: description: GET /audit/events with no session/credential (anonymous) returns 401 auth.required and no event body — the deny path runs before any query. A caller holding audit:read returns 200. (A role lacking audit:read is denied by the same auth.EnforcePermission mechanism, covered generically by system-rbac.) priority: critical references_constraints: [C-06] + - id: AC-12 + description: 'v1.2.0 — For a seeded audit event with action=host.created, actor_label="alice@example.com", resource_type="host", resource_id=, GET /audit/events returns that item with message="alice@example.com created a host" and actor_label="alice@example.com". GET /audit/events?resource_type=host&resource_id= returns only events for that resource (the seeded one present; an event for a different resource_id absent). The message is never the raw dotted action code.' + priority: high + references_constraints: [C-07] diff --git a/specs/frontend/host-detail.spec.yaml b/specs/frontend/host-detail.spec.yaml index 5454b65c..cbc1531a 100644 --- a/specs/frontend/host-detail.spec.yaml +++ b/specs/frontend/host-detail.spec.yaml @@ -1,7 +1,7 @@ spec: id: frontend-host-detail title: Host Detail page layout, behavior, and empty-state contracts - version: "1.7.0" + version: "1.8.0" status: approved tier: 2 @@ -70,7 +70,7 @@ spec: type: technical enforcement: error - id: C-04 - description: 'Tabs row MUST render all 10 prototype tabs in order: Overview, Compliance, Packages, Services, Users, Network, Audit log, Activity, Remediation, Terminal. Tabs whose backend subsystem is still deferred render an empty-state stub that NAMES the subsystem. v1.3.0: Compliance is live (frontend-host-compliance-tab) and the TAB_BACKEND_SUBSYSTEM stub registry no longer carries a compliance entry; Packages / Services / Users / Network are live per frontend-host-detail-inventory-tabs. v1.7.0: Activity is live (mounts HostActivityTab, the host-scoped /api/v1/activity feed) and is likewise removed from the TAB_BACKEND_SUBSYSTEM stub registry. The Audit log tab remains a stub (host-scoped audit by resource is a follow-up)' + description: 'Tabs row MUST render all 10 prototype tabs in order: Overview, Compliance, Packages, Services, Users, Network, Audit log, Activity, Remediation, Terminal. Tabs whose backend subsystem is still deferred render an empty-state stub that NAMES the subsystem. v1.3.0: Compliance is live (frontend-host-compliance-tab) and the TAB_BACKEND_SUBSYSTEM stub registry no longer carries a compliance entry; Packages / Services / Users / Network are live per frontend-host-detail-inventory-tabs. v1.7.0: Activity is live (mounts HostActivityTab, the host-scoped /api/v1/activity feed) and is removed from the TAB_BACKEND_SUBSYSTEM stub registry. v1.8.0: Audit log is live too (mounts HostAuditLogTab, the host-scoped forensic audit trail via GET /api/v1/audit/events filtered to resource_type=host and resource_id=hostId) and is likewise removed from the stub registry' type: technical enforcement: error - id: C-05 @@ -255,6 +255,10 @@ spec: priority: high references_constraints: [C-11, C-12] - id: AC-43 - description: 'v1.7.0 source-inspection - the Activity tab mounts HostActivityTab (not TabStub): it is removed from the TAB_BACKEND_SUBSYSTEM stub registry, and the tab render switch routes activeTab === "activity" to . HostActivityTab pages GET /api/v1/activity?host_id=X via useInfiniteQuery (cursor pagination, getNextPageParam from next_cursor), renders rows with the shared ActivityRow, exposes source filter chips (All / Monitoring / Compliance / Intelligence / Alert) that drive the source query param, shows a Load more control gated on hasNextPage, and renders loading / error+Retry / "No activity yet" empty states. The Audit log tab still renders TabStub.' + description: 'v1.7.0 source-inspection - the Activity tab mounts HostActivityTab (not TabStub): it is removed from the TAB_BACKEND_SUBSYSTEM stub registry, and the tab render switch routes activeTab === "activity" to . HostActivityTab pages GET /api/v1/activity?host_id=X via useInfiniteQuery (cursor pagination, getNextPageParam from next_cursor), renders rows with the shared ActivityRow, exposes source filter chips (All / Monitoring / Compliance / Intelligence / Alert) that drive the source query param, shows a Load more control gated on hasNextPage, and renders loading / error+Retry / "No activity yet" empty states.' + priority: high + references_constraints: [C-04] + - id: AC-44 + description: 'v1.8.0 source-inspection - the Audit log tab mounts HostAuditLogTab (not TabStub): audit_log is removed from the TAB_BACKEND_SUBSYSTEM stub registry, and the render switch routes activeTab === "audit_log" to . HostAuditLogTab pages GET /api/v1/audit/events with resource_type="host" + resource_id=hostId via useInfiniteQuery, renders each row with the server-rendered readable message (it.message, never the raw it.action alone), is gated on useAuthStore hasPermission("audit:read") (rendering an "Audit log not available" empty state otherwise), and shows loading / error+Retry / "No audit events yet" / Load more states.' priority: high references_constraints: [C-04]