Sidebar 5-group restructure + demo data badges + audit emission infrastructure

Sprint 4 — Sidebar restructure (S4-T01+T02):
  5 groups: Release Control, Security, Operations, Audit & Evidence, Setup & Admin
  Groups 4+5 collapsed by default for new users
  Operations extracted from Release Control into own group
  Audit extracted from Security into own group
  groupOrder and resolveMenuGroupLabel updated
  Approvals badge moved to section-level

Sprint 2 — Demo data badges (S2-T04+T05):
  Backend: isDemo=true on all compatibility/seed responses in
    PackAdapterEndpoints, QuotaCompatibilityEndpoints, VulnerabilitiesController
  Frontend: "(Demo)" badges on Usage & Limits page quotas
  Frontend: "(Demo)" badges on triage artifact list when seed data
  New PlatformItemResponse/PlatformListResponse with IsDemo field

Sprint 6 — Audit emission infrastructure (S6-T01+T02):
  New shared library: src/__Libraries/StellaOps.Audit.Emission/
    - AuditActionAttribute: [AuditAction("module", "action")] endpoint tag
    - AuditActionFilter: IEndpointFilter that auto-emits UnifiedAuditEvent
    - HttpAuditEventEmitter: POSTs to Timeline /api/v1/audit/ingest
    - Single-line DI: services.AddAuditEmission(configuration)
  Timeline service: POST /api/v1/audit/ingest ingestion endpoint
    - IngestAuditEventStore: 10k-event ring buffer
    - CompositeUnifiedAuditEventProvider: merges HTTP-polled + ingested
  Documentation: docs/modules/audit/AUDIT_EMISSION_GUIDE.md

Angular build: 0 errors. .NET builds: 0 errors.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
master
2026-03-16 14:48:18 +02:00
parent 66d53f1505
commit 189171c594
25 changed files with 1295 additions and 121 deletions

View File

@@ -9,7 +9,8 @@ public sealed record PlatformItemResponse<T>(
DateTimeOffset DataAsOf,
bool Cached,
int CacheTtlSeconds,
T Item);
T Item,
bool IsDemo = false);
public sealed record PlatformListResponse<T>(
string TenantId,
@@ -21,4 +22,5 @@ public sealed record PlatformListResponse<T>(
int Count,
int? Limit = null,
int? Offset = null,
string? Query = null);
string? Query = null,
bool IsDemo = false);

View File

@@ -36,7 +36,8 @@ public static class PackAdapterEndpoints
SnapshotAt,
Cached: false,
CacheTtlSeconds: 0,
payload));
payload,
IsDemo: true));
})
.WithTags("Dashboard")
.WithName("GetDashboardSummary")
@@ -64,7 +65,8 @@ public static class PackAdapterEndpoints
SnapshotAt,
Cached: false,
CacheTtlSeconds: 0,
payload));
payload,
IsDemo: true));
})
.WithName("GetDataIntegritySummary")
.WithSummary("Pack v2 data-integrity card summary.")
@@ -86,7 +88,8 @@ public static class PackAdapterEndpoints
SnapshotAt,
Cached: false,
CacheTtlSeconds: 0,
payload));
payload,
IsDemo: true));
})
.WithName("GetDataIntegrityReport")
.WithSummary("Pack v2 nightly data-integrity report projection.")
@@ -109,7 +112,8 @@ public static class PackAdapterEndpoints
Cached: false,
CacheTtlSeconds: 0,
feeds,
feeds.Count));
feeds.Count,
IsDemo: true));
})
.WithName("GetFeedsFreshness")
.WithSummary("Pack v2 advisory/feed freshness projection.")
@@ -131,7 +135,8 @@ public static class PackAdapterEndpoints
SnapshotAt,
Cached: false,
CacheTtlSeconds: 0,
payload));
payload,
IsDemo: true));
})
.WithName("GetScanPipelineHealth")
.WithSummary("Pack v2 scan-pipeline health projection.")
@@ -153,7 +158,8 @@ public static class PackAdapterEndpoints
SnapshotAt,
Cached: false,
CacheTtlSeconds: 0,
payload));
payload,
IsDemo: true));
})
.WithName("GetReachabilityIngestHealth")
.WithSummary("Pack v2 reachability ingest health projection.")
@@ -245,7 +251,8 @@ public static class PackAdapterEndpoints
SnapshotAt,
Cached: false,
CacheTtlSeconds: 0,
payload));
payload,
IsDemo: true));
})
.WithName("GetAdministrationTrustSigning")
.WithSummary("Pack v2 administration A6 trust and signing projection.")
@@ -673,7 +680,8 @@ public static class PackAdapterEndpoints
SnapshotAt,
Cached: false,
CacheTtlSeconds: 0,
payload));
payload,
IsDemo: true));
}
private static bool TryResolveContext(

View File

@@ -26,7 +26,8 @@ public static class QuotaCompatibilityEndpoints
consumption = BuildConsumptionMetrics(now),
tenantCount = 3,
activeAlerts = 1,
recentViolations = 4
recentViolations = 4,
isDemo = true
});
})
.WithName("QuotaCompatibility.GetDashboard");