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:
@@ -40,7 +40,8 @@ public sealed class VulnerabilitiesController : ControllerBase
|
||||
Total: total,
|
||||
Page: normalizedPage,
|
||||
PageSize: normalizedPageSize,
|
||||
HasMore: offset + items.Length < total));
|
||||
HasMore: offset + items.Length < total,
|
||||
IsDemo: true));
|
||||
}
|
||||
|
||||
[HttpGet("status")]
|
||||
@@ -70,7 +71,8 @@ public sealed class VulnerabilitiesController : ControllerBase
|
||||
},
|
||||
WithExceptions: all.Count(item => item.HasException),
|
||||
CriticalOpen: all.Count(item => item.Severity == "critical" && item.Status == "open"),
|
||||
ComputedAt: FixedComputedAt.ToString("O")));
|
||||
ComputedAt: FixedComputedAt.ToString("O"),
|
||||
IsDemo: true));
|
||||
}
|
||||
|
||||
[HttpGet("{vulnId}")]
|
||||
@@ -131,7 +133,8 @@ public sealed record ScannerVulnerabilitiesResponseDto(
|
||||
int Total,
|
||||
int Page,
|
||||
int PageSize,
|
||||
bool HasMore);
|
||||
bool HasMore,
|
||||
bool IsDemo = false);
|
||||
|
||||
public sealed record ScannerVulnerabilityStatsDto(
|
||||
int Total,
|
||||
@@ -139,7 +142,8 @@ public sealed record ScannerVulnerabilityStatsDto(
|
||||
IReadOnlyDictionary<string, int> ByStatus,
|
||||
int WithExceptions,
|
||||
int CriticalOpen,
|
||||
string ComputedAt);
|
||||
string ComputedAt,
|
||||
bool IsDemo = false);
|
||||
|
||||
public sealed record ScannerVulnerabilityDto(
|
||||
string VulnId,
|
||||
|
||||
Reference in New Issue
Block a user