diff --git a/src/Web/StellaOps.Web/src/app/features/dashboard-v3/dashboard-v3.component.ts b/src/Web/StellaOps.Web/src/app/features/dashboard-v3/dashboard-v3.component.ts index b56ade6b1..9f1383dc2 100644 --- a/src/Web/StellaOps.Web/src/app/features/dashboard-v3/dashboard-v3.component.ts +++ b/src/Web/StellaOps.Web/src/app/features/dashboard-v3/dashboard-v3.component.ts @@ -1,8 +1,8 @@ /** - * Dashboard V3 - Mission Board (3-column redesign) + * Dashboard V3 - Mission Board (single-column layout) * Sprint: SPRINT_20260315_005_FE_dashboard_3col_real_api * - * Layout: CSS Grid with security posture (1/3) | environments + actions (2/3) + * Layout: Single-column flow — Pipeline, Env badges, Posture row (3-up), Risk table, Health bar, Quick links * Data: Real API calls to vulnerability stats, advisory source status, and context store. */ @@ -67,6 +67,16 @@ interface AdvisoryFeedSummary { loaded: boolean; } +interface PendingAction { + id: string; + title: string; + description: string; + count: number; + type: 'approval' | 'deployment' | 'gate' | 'evidence'; + icon: string; + route: string; +} + @Component({ selector: 'app-dashboard-v3', standalone: true, @@ -89,8 +99,27 @@ interface AdvisoryFeedSummary { - @if (hasNoEnvironments()) { - + @if (!contextReady()) { + +
Unified pipeline view — versions, deployments, hotfixes, and approvals.
+No releases found
+Create a new release or adjust your filters.
+| Release | +Stage | +Gates | +Risk | +Evidence | +Status | +Decisions | +
|---|---|---|---|---|---|---|
|
+
+ {{ r.name }}
+ {{ r.version }}
+
+ {{ r.lane === 'hotfix' ? 'Hotfix' : 'Standard' }}
+
+ {{ r.digest | slice:0:19 }}
+
+ |
+
+ + {{ r.environment }} + {{ r.region }} + | + ++ + {{ r.gateStatus | uppercase }} + @if (r.gateBlockingCount > 0) { + {{ r.gateBlockingCount }} + } + + | + ++ + {{ r.riskTier | uppercase }} + + | + ++ + {{ r.evidencePosture === 'verified' ? 'Verified' : r.evidencePosture === 'partial' ? 'Partial' : 'Missing' }} + + | + ++ + {{ formatStatus(r.status) }} + + | + +
+
+ @if (r.status === 'ready' && r.gateStatus === 'pass') {
+
+ }
+ @if (r.gatePendingApprovals > 0) {
+
+
+ Approve ({{ r.gatePendingApprovals }})
+
+ }
+ @if (r.gateStatus === 'block') {
+
+
+ Review Gates
+
+ }
+ @if (r.evidencePosture === 'partial' || r.evidencePosture === 'missing') {
+
+
+ View Evidence
+
+ }
+ @if (r.status === 'deploying' && r.deploymentProgress !== null) {
+
+
+
+
+ {{ r.deploymentProgress }}%
+
+ }
+ @if (r.status === 'deployed' && r.gateStatus === 'pass') {
+
+
+ Promote
+
+ }
+
+ |
+