# Stella Ops UI Structure - Part 3: Triage, Policy & Ops Screens --- ## 1. TRIAGE SECTION ### 1.1 Artifact Workspace **Route:** `/triage/artifacts` **Component:** `TriageArtifactsComponent` **Location:** `src/app/features/triage/triage-artifacts.component.ts` ``` ┌────────────────────────────────────────────────────────────────────────────────┐ │ ARTIFACT WORKSPACE │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌──────────────────────────────────────────────────────────────────────────┐ │ │ │ [Search artifacts...] [Registry ▼] [Status ▼] [Risk Level ▼] │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ ARTIFACTS LIST ─────────────────────────────────────────────────────────┐ │ │ │ Image Name │ Tag │ Risk │ Findings │ VEX │ Actions │ │ │ ├────────────────────────┼──────────┼───────┼──────────┼────────┼─────────┤ │ │ │ registry/app-svc │ v1.2.3 │ 🔴 │ 45 │ 3 │ [→] │ │ │ │ registry/api-gateway │ latest │ 🟠 │ 23 │ 1 │ [→] │ │ │ │ registry/worker │ 2.0.0 │ 🟢 │ 5 │ 5 │ [→] │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────────────────────────────────┘ ``` --- ### 1.2 Artifact Detail / Triage Workspace **Route:** `/triage/artifacts/:artifactId` **Component:** `TriageWorkspaceComponent` **Location:** `src/app/features/triage/triage-workspace.component.ts` ``` ┌────────────────────────────────────────────────────────────────────────────────┐ │ TRIAGE WORKSPACE: registry/app-svc:v1.2.3 │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─────────────────────────────────────────────────────────────────────────────┐│ │ │ [Findings] [Components] [VEX Decisions] [Attestations] [Evidence] [History]││ │ └─────────────────────────────────────────────────────────────────────────────┘│ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ ARTIFACT INFO ─────────────────────────────────────────────────────────────┐│ │ │ Digest: sha256:abc123... │ Created: 2024-01-15 │ Size: 245MB ││ │ │ Risk Score: 78 (High) │ Total CVEs: 45 │ Exceptions: 3 ││ │ └─────────────────────────────────────────────────────────────────────────────┘│ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ TRIAGE ACTIONS ─────────────────────────────────────────────────────────┐ │ │ │ Selected: 5 findings │ │ │ │ [Create VEX] [Add Exception] [Request Review] [Export Evidence] │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ FINDINGS LIST ──────────────────────────────────────────────────────────┐ │ │ │ ☐ │ Sev │ CVE │ Component │ Status │ VEX │ Except │ │ │ ├───┼─────┼───────────────┼────────────────┼───────────┼─────────┼────────┤ │ │ │ ☑ │ 🔴 │ CVE-2024-1234 │ log4j@2.14.1 │ Open │ │ │ │ │ │ ☑ │ 🔴 │ CVE-2024-5678 │ spring@5.2.1 │ Triaged │ ⚑ │ │ │ │ │ ☐ │ 🟠 │ CVE-2024-9012 │ jackson@2.9 │ Excepted │ │ ✓ │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────────────────────────────────┘ ``` #### Related Components: - `TriageAttestationDetailModalComponent` - `VexDecisionModalComponent` - Components in `src/app/features/triage/components/` --- ### 1.3 Exception Queue **Route:** `/exceptions` **Component:** `TriageArtifactsComponent` (reused) **Location:** `src/app/features/triage/triage-artifacts.component.ts` --- ### 1.4 Audit Bundles **Route:** `/triage/audit-bundles` **Component:** `TriageAuditBundlesComponent` **Location:** `src/app/features/triage/triage-audit-bundles.component.ts` **Create Route:** `/triage/audit-bundles/new` **Component:** `TriageAuditBundleNewComponent` ``` ┌────────────────────────────────────────────────────────────────────────────────┐ │ AUDIT BUNDLES │ ├────────────────────────────────────────────────────────────────────────────────┤ │ [Search bundles...] [Status ▼] [Date Range] [+ New Bundle] │ ├────────────────────────────────────────────────────────────────────────────────┤ │ │ Bundle ID │ Created │ Artifacts │ Status │ Signed │ Actions │ │ │ ├────────────────┼──────────────┼───────────┼───────────┼─────────┼─────────┤ │ │ │ AUDIT-2024-001 │ 2024-01-15 │ 12 │ Complete │ ✓ │ [↓] [→] │ │ │ │ AUDIT-2024-002 │ 2024-01-14 │ 8 │ Pending │ │ [→] │ │ │ │ AUDIT-2024-003 │ 2024-01-13 │ 25 │ Complete │ ✓ │ [↓] [→] │ │ └────────────────────────────────────────────────────────────────────────────────┘ ``` --- ### 1.5 Risk Dashboard **Route:** `/risk` **Component:** `RiskDashboardComponent` **Location:** `src/app/features/risk/risk-dashboard.component.ts` ``` ┌────────────────────────────────────────────────────────────────────────────────┐ │ RISK PROFILES │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ RISK OVERVIEW ──────────────────────────────────────────────────────────┐ │ │ │ ┌───────────────┐ │ │ │ │ / 72 \ Overall Risk Score │ │ │ │ │ ↓ 3% from │ ────────────────────────────────────────────────│ │ │ │ \ last week / • Critical Findings: 12 │ │ │ │ └───────────────┘ • High Findings: 45 │ │ │ │ • Active Exceptions: 23 │ │ │ │ • Compliance Gaps: 5 │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ RISK BY ARTIFACT ───────────────────────────────────────────────────────┐ │ │ │ Artifact │ Score │ Trend │ Critical │ High │ Exceptions │ │ │ ├──────────────────┼───────┼────────┼──────────┼──────┼───────────────────┤ │ │ │ app-svc │ 85 │ ↑ +5 │ 5 │ 12 │ 3 │ │ │ │ api-gateway │ 62 │ ↓ -8 │ 2 │ 8 │ 2 │ │ │ │ worker │ 35 │ = 0 │ 0 │ 3 │ 1 │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ ├─ RISK DRIFT ───────────────────────────────────────────────────────────────────┤ │ │ [Time-series chart showing risk score changes over time] │ │ │ │ 100 ┤ │ │ │ │ 75 ┤ ╭──╮ ╭───── │ │ │ │ 50 ┤ ╭───╯ ╰────╯ │ │ │ │ 25 ┤──╯ │ │ │ │ 0 └──────────────────────────────────────────────────────────── │ │ │ │ Jan Feb Mar Apr May Jun │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────────────────────────────────┘ ``` --- ## 2. POLICY SECTION ### 2.1 Policy Studio - Workspace **Route:** `/policy-studio/packs` **Component:** `PolicyWorkspaceComponent` **Location:** `src/app/features/policy-studio/workspace/policy-workspace.component.ts` **Required Scope:** `policy:read` ``` ┌────────────────────────────────────────────────────────────────────────────────┐ │ POLICY STUDIO │ ├────────────────────────────────────────────────────────────────────────────────┤ │ [+ New Pack] [Search packs...] [Status ▼] [Environment ▼] │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ POLICY PACKS ───────────────────────────────────────────────────────────┐ │ │ │ Pack Name │ Version │ Status │ Envs │ Rules │ Actions │ │ │ ├────────────────────┼─────────┼───────────┼───────────┼───────┼──────────┤ │ │ │ security-baseline │ v2.3.0 │ Active │ Prod,Stg │ 45 │ [Edit] │ │ │ │ compliance-pci │ v1.0.0 │ Draft │ - │ 23 │ [Edit] │ │ │ │ internal-standards │ v3.1.0 │ Pending │ Dev │ 67 │ [Review] │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────────────────────────────────┘ ``` --- ### 2.2 Policy Editor **Route:** `/policy-studio/packs/:packId/editor` **Component:** `PolicyEditorComponent` **Location:** `src/app/features/policy-studio/editor/policy-editor.component.ts` **Required Scope:** `policy:author` ``` ┌────────────────────────────────────────────────────────────────────────────────┐ │ POLICY EDITOR: security-baseline v2.3.0 │ ├────────────────────────────────────────────────────────────────────────────────┤ │ [Editor] [YAML] [Simulate] [Approvals] [Rules] [Dashboard] │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─────────────────────────────┬────────────────────────────────────────────┐ │ │ │ RULES TREE │ RULE DETAILS │ │ │ │ ───────────── │ ───────────────────────────────────────── │ │ │ │ ▼ vulnerability-gates │ Rule: block-critical-cves │ │ │ │ ├── block-critical-cves │ ────────────────────────────────────────── │ │ │ │ ├── warn-high-cves │ Description: │ │ │ │ └── require-fix-path │ Block artifacts with critical CVEs │ │ │ │ ▼ compliance-checks │ │ │ │ │ ├── require-sbom │ Condition: │ │ │ │ ├── verify-signatures │ cvss_score >= 9.0 AND status == "open" │ │ │ │ └── check-licenses │ │ │ │ │ ▼ quality-gates │ Action: BLOCK │ │ │ │ ├── test-coverage │ Message: "Critical CVE detected..." │ │ │ │ └── code-review │ │ │ │ │ │ [Edit Rule] [Test Rule] [Delete] │ │ │ └─────────────────────────────┴────────────────────────────────────────────┘ │ ├─ ACTIONS ──────────────────────────────────────────────────────────────────────┤ │ [Save Draft] [Validate] [Submit for Review] [History] │ └────────────────────────────────────────────────────────────────────────────────┘ ``` --- ### 2.3 Policy YAML Editor **Route:** `/policy-studio/packs/:packId/yaml` **Component:** `PolicyYamlEditorComponent` **Location:** `src/app/features/policy-studio/yaml/policy-yaml-editor.component.ts` **Required Scope:** `policy:author` --- ### 2.4 Policy Simulation **Route:** `/policy-studio/packs/:packId/simulate` **Component:** `PolicySimulationComponent` **Location:** `src/app/features/policy-studio/simulation/policy-simulation.component.ts` **Required Scope:** `policy:simulate` ``` ┌────────────────────────────────────────────────────────────────────────────────┐ │ POLICY SIMULATION: security-baseline v2.3.0 │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ INPUT ──────────────────────────────────────────────────────────────────┐ │ │ │ Artifact: [Select artifact... ▼] Environment: [Staging ▼] │ │ │ │ [Run Simulation] │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ SIMULATION RESULTS ─────────────────────────────────────────────────────┐ │ │ │ Overall Verdict: 🔴 BLOCKED │ │ │ │ ─────────────────────────────────────────────────────────────────────── │ │ │ │ Rule │ Result │ Details │ │ │ │ ────────────────────────┼──────────┼────────────────────────────────────│ │ │ │ block-critical-cves │ 🔴 BLOCK │ 3 critical CVEs found │ │ │ │ warn-high-cves │ 🟡 WARN │ 12 high CVEs found │ │ │ │ require-sbom │ 🟢 PASS │ SBOM present and valid │ │ │ │ verify-signatures │ 🟢 PASS │ Valid signature from trusted key │ │ │ │ check-licenses │ 🟡 WARN │ GPL-3.0 detected in 2 components │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ ├─ EXPLAIN ──────────────────────────────────────────────────────────────────────┤ │ │ [AI-powered explanation of simulation results] │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────────────────────────────────┘ ``` --- ### 2.5 Policy Approvals **Route:** `/policy-studio/packs/:packId/approvals` **Component:** `PolicyApprovalsComponent` **Location:** `src/app/features/policy-studio/approvals/policy-approvals.component.ts` **Required Scope:** `policy:review` OR `policy:approve` --- ### 2.6 Policy Rule Builder **Route:** `/policy-studio/packs/:packId/rules` **Component:** `PolicyRuleBuilderComponent` **Location:** `src/app/features/policy-studio/rule-builder/policy-rule-builder.component.ts` **Required Scope:** `policy:author` --- ### 2.7 Policy Explain **Route:** `/policy-studio/packs/:packId/explain/:runId` **Component:** `PolicyExplainComponent` **Location:** `src/app/features/policy-studio/explain/policy-explain.component.ts` **Required Scope:** `policy:read` --- ### 2.8 Policy Dashboard **Route:** `/policy-studio/packs/:packId/dashboard` **Component:** `PolicyDashboardComponent` **Location:** `src/app/features/policy-studio/dashboard/policy-dashboard.component.ts` **Required Scope:** `policy:read` --- ### 2.9 Orchestrator Dashboard **Route:** `/orchestrator` **Component:** `OrchestratorDashboardComponent` **Location:** `src/app/features/orchestrator/orchestrator-dashboard.component.ts` **Required Scope:** `orch:read` ``` ┌────────────────────────────────────────────────────────────────────────────────┐ │ ORCHESTRATOR DASHBOARD │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ SUMMARY ────────────────────────────────────────────────────────────────┐ │ │ │ Running: 5 │ Queued: 12 │ Completed: 1,234 │ Failed: 23 │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ ├────────────────────────────────────────────────────────────────────────────────┤ │ [Search jobs...] [Type ▼] [Status ▼] [Date Range] │ ├────────────────────────────────────────────────────────────────────────────────┤ │ │ Job ID │ Type │ Artifact │ Status │ Started │ Action│ │ │ ├─────────────┼─────────────┼────────────────┼──────────┼───────────┼───────┤ │ │ │ JOB-12345 │ Scan │ app-svc:v1.2.3 │ Running │ 2m ago │ [→] │ │ │ │ JOB-12344 │ Policy │ api-gw:latest │ Complete │ 5m ago │ [→] │ │ │ │ JOB-12343 │ Reachability│ worker:2.0.0 │ Failed │ 10m ago │ [↻] │ │ │ │ JOB-12342 │ Export │ bundle-001 │ Complete │ 15m ago │ [↓] │ │ └────────────────────────────────────────────────────────────────────────────────┘ ``` --- ### 2.10 Orchestrator Jobs **Route:** `/orchestrator/jobs` **Component:** `OrchestratorJobsComponent` **Location:** `src/app/features/orchestrator/orchestrator-jobs.component.ts` **Required Scope:** `orch:read` --- ### 2.11 Orchestrator Job Detail **Route:** `/orchestrator/jobs/:jobId` **Component:** `OrchestratorJobDetailComponent` **Location:** `src/app/features/orchestrator/orchestrator-job-detail.component.ts` **Required Scope:** `orch:read` --- ### 2.12 Orchestrator Quotas **Route:** `/orchestrator/quotas` **Component:** `OrchestratorQuotasComponent` **Location:** `src/app/features/orchestrator/orchestrator-quotas.component.ts` **Required Scope:** `orch:operator` --- ## 3. OPS SECTION ### 3.1 SBOM Sources **Route:** `/sbom-sources` **Location:** `src/app/features/sbom-sources/` **Sub-routes:** | Path | Component | Title | |---|---|---| | `/sbom-sources` | `SourcesListComponent` | SBOM Sources | | `/sbom-sources/new` | `SourceWizardComponent` | Create SBOM Source | | `/sbom-sources/:id` | `SourceDetailComponent` | Source Details | | `/sbom-sources/:id/edit` | `SourceWizardComponent` | Edit Source | ``` ┌────────────────────────────────────────────────────────────────────────────────┐ │ SBOM SOURCES │ ├────────────────────────────────────────────────────────────────────────────────┤ │ [+ New Source] [Search sources...] [Type ▼] [Status ▼] │ ├────────────────────────────────────────────────────────────────────────────────┤ │ │ Source Name │ Type │ URL │ Status │ Last Sync │ │ │ ├─────────────────┼───────────┼──────────────────────┼─────────┼────────────┤ │ │ │ docker-hub │ Registry │ registry.docker.io │ 🟢 OK │ 2m ago │ │ │ │ github-actions │ CI │ github.com/org │ 🟢 OK │ 5m ago │ │ │ │ gitlab-ci │ CI │ gitlab.company.com │ 🟡 Warn │ 1h ago │ │ │ │ local-registry │ Registry │ registry.local:5000 │ 🔴 Error│ 2d ago │ │ └────────────────────────────────────────────────────────────────────────────────┘ ``` --- ### 3.2 Quota Dashboard **Route:** `/ops/quotas` **Location:** `src/app/features/quota-dashboard/` **Sub-routes:** | Path | Component | |---|---| | `/ops/quotas` | `QuotaDashboardComponent` | | `/ops/quotas/tenants` | `TenantQuotaTableComponent` | | `/ops/quotas/tenants/:tenantId` | `TenantQuotaDetailComponent` | | `/ops/quotas/throttle` | `ThrottleContextComponent` | | `/ops/quotas/alerts` | `QuotaAlertConfigComponent` | | `/ops/quotas/forecast` | `QuotaForecastComponent` | | `/ops/quotas/reports` | `QuotaReportExportComponent` | ``` ┌────────────────────────────────────────────────────────────────────────────────┐ │ QUOTA DASHBOARD │ ├──────────────────┬─────────────────────────────────────────────────────────────┤ │ NAVIGATION │ QUOTA OVERVIEW │ │ ───────────── │ ───────────────────────────────────────────────────────── │ │ [Overview] │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │ [Tenant Usage] │ │ Scan Quota │ │ API Calls │ │ Storage │ │ │ [Throttle] │ │ 67% used │ │ 45% used │ │ 82% used │ │ │ [Forecast] │ │ ████░░ │ │ ███░░░ │ │ █████░ │ │ │ [Alert Config] │ └────────────┘ └────────────┘ └────────────┘ │ │ [Reports] │ │ │ │ ┌─ QUOTA TRENDS ─────────────────────────────────────────┐│ │ │ │ [Time-series chart] ││ │ │ └─────────────────────────────────────────────────────────┘│ │ │ │ │ │ ┌─ ALERTS ────────────────────────────────────────────────┐│ │ │ │ ⚠ Storage quota at 82% - forecast exhaustion in 14 days││ │ │ │ ⚠ Tenant "prod-team" exceeded scan rate limit ││ │ │ └─────────────────────────────────────────────────────────┘│ └──────────────────┴─────────────────────────────────────────────────────────────┘ ``` --- ### 3.3 Dead-Letter Queue **Route:** `/ops/orchestrator/dead-letter` **Location:** `src/app/features/deadletter/` **Sub-routes:** | Path | Component | |---|---| | `/ops/orchestrator/dead-letter` | Dashboard | | `/ops/orchestrator/dead-letter/queue` | Queue Browser | ``` ┌────────────────────────────────────────────────────────────────────────────────┐ │ DEAD-LETTER QUEUE │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ QUEUE STATS ────────────────────────────────────────────────────────────┐ │ │ │ Total: 23 │ Retryable: 18 │ Permanent: 5 │ Oldest: 2 days │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ ├────────────────────────────────────────────────────────────────────────────────┤ │ [Search...] [Error Type ▼] [Job Type ▼] [Retry All] [Purge Permanent] │ ├────────────────────────────────────────────────────────────────────────────────┤ │ │ Job ID │ Type │ Error │ Retries │ Actions │ │ │ ├─────────────┼───────────┼──────────────────────┼─────────┼───────────────┤ │ │ │ JOB-ERR-001 │ Scan │ Timeout connecting...│ 3/5 │ [↻] [🗑] [→] │ │ │ │ JOB-ERR-002 │ Export │ Out of memory │ 5/5 │ [🗑] [→] │ │ │ │ JOB-ERR-003 │ Policy │ Invalid policy pack │ 2/5 │ [↻] [🗑] [→] │ │ └────────────────────────────────────────────────────────────────────────────────┘ ``` --- ### 3.4 SLO Monitoring **Route:** `/ops/orchestrator/slo` **Location:** `src/app/features/slo-monitoring/` **Sub-routes:** | Path | Component | |---|---| | `/ops/orchestrator/slo` | Dashboard | | `/ops/orchestrator/slo/alerts` | Alerts | | `/ops/orchestrator/slo/definitions` | Definitions | ``` ┌────────────────────────────────────────────────────────────────────────────────┐ │ SLO MONITORING │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ SLO STATUS ─────────────────────────────────────────────────────────────┐ │ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ │ │ Scan Latency │ │ API Availability│ │ Policy Eval │ │ │ │ │ │ Target: < 30s │ │ Target: 99.9% │ │ Target: < 100ms │ │ │ │ │ │ Current: 28s │ │ Current: 99.95% │ │ Current: 85ms │ │ │ │ │ │ 🟢 HEALTHY │ │ 🟢 HEALTHY │ │ 🟢 HEALTHY │ │ │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ BURN RATE ──────────────────────────────────────────────────────────────┐ │ │ │ SLO Name │ Budget │ Burned │ Rate │ Status │ TTL │ │ │ │ ─────────────────┼────────┼────────┼─────────┼──────────┼──────────────│ │ │ │ Scan Latency │ 0.1% │ 0.02% │ 0.5x │ 🟢 Safe │ 45 days │ │ │ │ API Availability │ 0.1% │ 0.05% │ 1.2x │ 🟡 Watch │ 18 days │ │ │ │ Policy Eval │ 0.1% │ 0.01% │ 0.2x │ 🟢 Safe │ 90+ days │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────────────────────────────────┘ ``` --- ### 3.5 Platform Health **Route:** `/ops/health` **Location:** `src/app/features/platform-health/` **Sub-routes:** | Path | Component | |---|---| | `/ops/health` | `PlatformHealthDashboardComponent` | | `/ops/health/services/:serviceName` | `ServiceDetailComponent` | | `/ops/health/incidents` | `IncidentTimelineComponent` | ``` ┌────────────────────────────────────────────────────────────────────────────────┐ │ PLATFORM HEALTH DASHBOARD │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ SERVICE STATUS ─────────────────────────────────────────────────────────┐ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ │ │ Scanner │ │ Policy │ │ Authority│ │ VEX Hub │ │ Evidence │ │ │ │ │ │ 🟢 OK │ │ 🟢 OK │ │ 🟢 OK │ │ 🟡 Warn │ │ 🟢 OK │ │ │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ │ │ Scheduler│ │ Graph │ │ Integrat.│ │ Notifier │ │ Telemetry│ │ │ │ │ │ 🟢 OK │ │ 🟢 OK │ │ 🔴 Error │ │ 🟢 OK │ │ 🟢 OK │ │ │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ DEPENDENCIES ───────────────────────────────────────────────────────────┐ │ │ │ PostgreSQL: 🟢 │ Redis: 🟢 │ RabbitMQ: 🟢 │ S3: 🟢 │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ RECENT INCIDENTS ───────────────────────────────────────────────────────┐ │ │ │ Time │ Service │ Severity │ Status │ Duration │ │ │ │ 10:23 UTC │ Integrations │ 🔴 High │ Active │ 15m (ongoing) │ │ │ │ 09:45 UTC │ VEX Hub │ 🟡 Medium │ Resolved │ 8m │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────────────────────────────────┘ ``` --- ### 3.6 Feed Mirror & AirGap **Route:** `/ops/feeds` **Location:** `src/app/features/feed-mirror/` **Sub-routes:** | Path | Component | |---|---| | `/ops/feeds` | `FeedMirrorDashboardComponent` | | `/ops/feeds/mirror/:mirrorId` | `MirrorDetailComponent` | | `/ops/feeds/airgap/import` | `AirgapImportComponent` | | `/ops/feeds/airgap/export` | `AirgapExportComponent` | | `/ops/feeds/version-locks` | `VersionLockComponent` | ``` ┌────────────────────────────────────────────────────────────────────────────────┐ │ FEED MIRROR & AIRGAP OPERATIONS │ ├────────────────────────────────────────────────────────────────────────────────┤ │ [Dashboard] [Import Bundle] [Export Bundle] [Version Locks] │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ FEED STATUS ────────────────────────────────────────────────────────────┐ │ │ │ Feed Name │ Version │ Last Sync │ Status │ Size │ │ │ │ ────────────────────┼────────────┼────────────┼─────────┼─────────────│ │ │ │ NVD │ 2024-01-15 │ 2h ago │ 🟢 OK │ 2.3 GB │ │ │ │ Trivy │ 2024-01-15 │ 1h ago │ 🟢 OK │ 856 MB │ │ │ │ OSV │ 2024-01-14 │ 1d ago │ 🟡 Stale│ 1.2 GB │ │ │ │ GitHub Advisories │ 2024-01-15 │ 30m ago │ 🟢 OK │ 245 MB │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ AIRGAP BUNDLES ─────────────────────────────────────────────────────────┐ │ │ │ Bundle ID │ Created │ Size │ Signed │ Status │ Action │ │ │ │ ───────────────┼──────────────┼─────────┼─────────┼───────────┼────────│ │ │ │ AIRGAP-2024-01 │ 2024-01-15 │ 4.5 GB │ ✓ │ Ready │ [↓] │ │ │ │ AIRGAP-2024-02 │ 2024-01-10 │ 4.2 GB │ ✓ │ Imported │ [→] │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────────────────────────────────┘ ``` --- ### 3.7 Offline Kit **Route:** `/ops/offline-kit` **Location:** `src/app/features/offline-kit/` **Sub-routes:** | Path | Component | |---|---| | `/ops/offline-kit` | `OfflineKitComponent` (shell) | | `/ops/offline-kit/dashboard` | `OfflineDashboardComponent` | | `/ops/offline-kit/bundles` | `BundleManagementComponent` | | `/ops/offline-kit/verify` | `VerificationCenterComponent` | | `/ops/offline-kit/jwks` | `JwksManagementComponent` | --- ### 3.8 AOC Compliance **Route:** `/ops/aoc` **Location:** `src/app/features/aoc-compliance/` **Sub-routes:** | Path | Component | |---|---| | `/ops/aoc` | `AocComplianceDashboardComponent` | | `/ops/aoc/violations` | `GuardViolationsListComponent` | | `/ops/aoc/ingestion` | `IngestionFlowComponent` | | `/ops/aoc/provenance` | `ProvenanceValidatorComponent` | | `/ops/aoc/report` | `ComplianceReportComponent` | --- ### 3.9 Scheduler Operations **Route:** `/scheduler` **Location:** `src/app/features/scheduler-ops/` **Sub-routes:** | Path | Component | |---|---| | `/scheduler/runs` | `SchedulerRunsComponent` | | `/scheduler/schedules` | `ScheduleManagementComponent` | | `/scheduler/workers` | `WorkerFleetComponent` | ``` ┌────────────────────────────────────────────────────────────────────────────────┐ │ SCHEDULER OPERATIONS │ ├────────────────────────────────────────────────────────────────────────────────┤ │ [Runs] [Schedules] [Workers] │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ SCHEDULED JOBS ─────────────────────────────────────────────────────────┐ │ │ │ Schedule Name │ Cron │ Next Run │ Last Run │ Status │ │ │ │ ────────────────┼──────────────┼───────────────┼────────────┼───────────│ │ │ │ daily-scan │ 0 0 * * * │ in 4h 23m │ 19h ago │ 🟢 Active │ │ │ │ hourly-sync │ 0 * * * * │ in 23m │ 37m ago │ 🟢 Active │ │ │ │ weekly-report │ 0 0 * * 0 │ in 3d 4h │ 3d ago │ 🟢 Active │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ WORKER FLEET ───────────────────────────────────────────────────────────┐ │ │ │ Worker ID │ Status │ Current Job │ Queue │ Uptime │ CPU │ │ │ │ ─────────────┼──────────┼──────────────┼──────────┼──────────┼─────────│ │ │ │ worker-01 │ 🟢 Busy │ JOB-12345 │ scan │ 5d 4h │ 45% │ │ │ │ worker-02 │ 🟢 Idle │ - │ scan │ 5d 4h │ 12% │ │ │ │ worker-03 │ 🔴 Down │ - │ export │ - │ - │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────────────────────────────────┘ ``` --- ### 3.10 Doctor Diagnostics **Route:** `/ops/doctor` **Component:** `DoctorDashboardComponent` **Location:** `src/app/features/doctor/doctor-dashboard.component.ts` ``` ┌────────────────────────────────────────────────────────────────────────────────┐ │ DOCTOR DIAGNOSTICS │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ SYSTEM HEALTH CHECK ────────────────────────────────────────────────────┐ │ │ │ [Run Full Diagnostics] │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ ├────────────────────────────────────────────────────────────────────────────────┤ │ ┌─ DIAGNOSTIC RESULTS ─────────────────────────────────────────────────────┐ │ │ │ Check │ Status │ Details │ Action │ │ │ │ ────────────────────────┼──────────┼──────────────────────────┼─────────│ │ │ │ Database connectivity │ 🟢 Pass │ 5ms latency │ │ │ │ │ Redis connectivity │ 🟢 Pass │ 2ms latency │ │ │ │ │ Certificate validity │ 🟡 Warn │ Expires in 14 days │ [Fix] │ │ │ │ Feed freshness │ 🟢 Pass │ All feeds < 24h old │ │ │ │ │ Storage capacity │ 🟡 Warn │ 82% used │ [→] │ │ │ │ Worker health │ 🔴 Fail │ 1 of 3 workers down │ [Fix] │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ ├─ RECOMMENDATIONS ──────────────────────────────────────────────────────────────┤ │ │ 1. Renew TLS certificate before expiration │ │ │ │ 2. Consider expanding storage or enabling cleanup policies │ │ │ │ 3. Investigate worker-03 failure and restart if necessary │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────────────────────────────────┘ ```