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:
@@ -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);
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -26,7 +26,8 @@ public static class QuotaCompatibilityEndpoints
|
||||
consumption = BuildConsumptionMetrics(now),
|
||||
tenantCount = 3,
|
||||
activeAlerts = 1,
|
||||
recentViolations = 4
|
||||
recentViolations = 4,
|
||||
isDemo = true
|
||||
});
|
||||
})
|
||||
.WithName("QuotaCompatibility.GetDashboard");
|
||||
|
||||
Reference in New Issue
Block a user