Files
git.stella-ops.org/docs/modules/ui/information-architecture.md
master a4badc275e UI work to fill SBOM sourcing management gap. UI planning remaining functionality exposure. Work on CI/Tests stabilization
Introduces CGS determinism test runs to CI workflows for Windows, macOS, Linux, Alpine, and Debian, fulfilling CGS-008 cross-platform requirements. Updates local-ci scripts to support new smoke steps, test timeouts, progress intervals, and project slicing for improved test isolation and diagnostics.
2025-12-29 19:12:38 +02:00

12 KiB

StellaOps UI Information Architecture

Overview

This document defines the information architecture (IA) for the StellaOps web interface, including navigation structure, route hierarchy, and role-based access patterns.

Navigation Structure

Primary Navigation

┌─────────────────────────────────────────────────────────────────┐
│ StellaOps                                                       │
├─────────────────────────────────────────────────────────────────┤
│ 🏠 Home                                                          │
│ 📊 Analyze                                                       │
│    ├── Findings                                                 │
│    ├── Vulnerabilities                                          │
│    ├── Reachability                                             │
│    ├── Graph Explorer                                           │
│    ├── Unknowns                       [SPRINT_033]             │
│    └── Binaries                       [SPRINT_038]             │
│ 🔒 Proof                                                         │
│    ├── Proof Chain                                              │
│    ├── CVSS Receipts                                            │
│    └── Attestations                                             │
│ 📜 Policy Studio                                                 │
│    ├── Packs                                                    │
│    ├── Editor                                                   │
│    ├── Simulation                     [SPRINT_021b]            │
│    ├── Approvals                                                │
│    └── Governance                     [SPRINT_021a]            │
│ 🔗 Integrations                                                  │
│    ├── Hub                            [SPRINT_011]             │
│    ├── Registries                     [SPRINT_012]             │
│    ├── SCM                            [SPRINT_013]             │
│    ├── CI/CD                          [SPRINT_014]             │
│    └── Hosts                          [SPRINT_011]             │
│ ⚙️ Ops                                                           │
│    ├── Health                         [SPRINT_032]             │
│    ├── Orchestrator                   [existing]               │
│    │    ├── Jobs                                                │
│    │    ├── Quotas                                              │
│    │    ├── Dead-Letter               [SPRINT_030]             │
│    │    └── SLO                       [SPRINT_031]             │
│    ├── Scheduler                      [SPRINT_017]             │
│    ├── Packs                          [SPRINT_036]             │
│    ├── Signals                        [SPRINT_037]             │
│    ├── Feeds                          [SPRINT_020]             │
│    │    ├── Mirrors                                             │
│    │    ├── Snapshots                                           │
│    │    └── AirGap                                              │
│    ├── Scanner                        [SPRINT_025]             │
│    ├── AOC                            [SPRINT_027]             │
│    └── Exports                        [SPRINT_016]             │
│ 🔐 Admin                                                         │
│    ├── Users                          [existing]               │
│    ├── Tenants                        [existing]               │
│    ├── Tokens                         [existing]               │
│    ├── Audit                          [SPRINT_028]             │
│    ├── Trust                          [SPRINT_018c]            │
│    │    ├── Keys                                                │
│    │    ├── Issuers                   [SPRINT_024]             │
│    │    └── Certificates                                        │
│    ├── Notifications                  [SPRINT_018b]            │
│    ├── Registry Admin                 [SPRINT_023]             │
│    └── Quotas                         [SPRINT_029]             │
└─────────────────────────────────────────────────────────────────┘

Route Hierarchy

Route Component Scope Required Sprint
/ HomeDashboard authenticated existing
/dashboard/sources SourcesDashboard authenticated existing
/analyze/findings FindingsContainer findings.read existing
/analyze/findings/:scanId FindingsContainer findings.read existing
/analyze/vulnerabilities VulnerabilityExplorer vulnerabilities.read existing
/analyze/vulnerabilities/:vulnId VulnerabilityDetail vulnerabilities.read existing
/analyze/reachability ReachabilityCenter reachability.read existing
/analyze/graph GraphExplorer graph.read existing
/analyze/unknowns UnknownsList scanner.read SPRINT_033
/analyze/binaries BinaryIndexBrowser binaryindex.read SPRINT_038
/proof/:subjectDigest ProofChain proof.read existing
/cvss/receipts/:receiptId CvssReceipt cvss.read existing
/policy-studio/packs PolicyWorkspace policy.read existing
/policy-studio/packs/:packId/editor PolicyEditor policy.author existing
/policy-studio/packs/:packId/simulate PolicySimulation policy.simulate existing
/policy-studio/packs/:packId/approvals PolicyApprovals policy.review existing
/admin/policy/simulation PolicySimulationStudio policy.simulate SPRINT_021b
/admin/policy/governance PolicyGovernance policy.admin SPRINT_021a
/integrations IntegrationHub integrations.read SPRINT_011
/integrations/registries RegistryIntegrations integrations.read SPRINT_012
/integrations/scm ScmIntegrations integrations.read SPRINT_013
/integrations/ci CiIntegrations integrations.read SPRINT_014
/ops/health PlatformHealth ops.health SPRINT_032
/ops/orchestrator OrchestratorDashboard orch.read existing
/ops/orchestrator/jobs OrchestratorJobs orch.read existing
/ops/orchestrator/jobs/:jobId OrchestratorJobDetail orch.read existing
/ops/orchestrator/quotas OrchestratorQuotas orch.operator existing
/ops/orchestrator/dead-letter DeadLetterManagement orch.admin SPRINT_030
/ops/orchestrator/slo SloMonitoring ops.read SPRINT_031
/ops/scheduler SchedulerOps scheduler.read SPRINT_017
/ops/packs PackRegistry orchestrator.read SPRINT_036
/ops/signals SignalsDashboard signals.read SPRINT_037
/ops/feeds FeedMirrorOps feeds.read SPRINT_020
/ops/scanner ScannerOps scanner.admin SPRINT_025
/ops/aoc AocComplianceDashboard ops.audit SPRINT_027
/ops/exports EvidenceExports evidence.read SPRINT_016
/admin/users UserManagement ui.admin existing
/admin/tenants TenantManagement ui.admin existing
/admin/tokens TokenManagement ui.admin existing
/admin/audit UnifiedAuditLog audit.read SPRINT_028
/admin/trust TrustDashboard trust.admin SPRINT_018c
/admin/notifications NotificationAdmin notify.admin SPRINT_018b
/admin/registry RegistryAdmin registry.admin SPRINT_023
/admin/quotas QuotaDashboard quota.admin SPRINT_029

Role-Based Access Matrix

Roles and Scopes

Role Scopes Description
Viewer *.read Read-only access to all features
Developer scanner.read, findings.read, policy.read, proof.read Day-to-day development workflow
Security Engineer policy., findings., vulnerabilities., proof. Security triage and policy management
Operator orch., scheduler., ops., integrations. Platform operations
Admin *.admin, ui.admin Full administrative access
Tenant Admin tenant.admin, quota.admin Tenant-level administration

Feature Visibility by Role

Feature Viewer Developer Security Operator Admin
Home Dashboard
Findings
Vulnerability Triage
Policy Editor
Policy Simulation
Orchestrator Jobs
Dead-Letter Queue
SLO Monitoring
Platform Health
Integration Hub
User Management
Audit Log

Navigation State Management

Breadcrumb Strategy

All nested routes should display breadcrumbs for context:

Home > Analyze > Findings > CVE-2024-1234

Home > Ops > Orchestrator > Jobs > job-12345

Home > Policy Studio > Packs > production-baseline > Editor

Deep Linking

All significant states should be deep-linkable:

  • Filter states encoded in URL query params
  • Tab selections encoded in URL fragments
  • Modal states use route params where appropriate

Navigation Guards

// Guard priority order
1. AuthGuard - Verify authentication
2. RoleGuard - Check required scope
3. FeatureGuard - Check feature flags
4. OnboardingGuard - Redirect to onboarding if incomplete
5. OfflineGuard - Redirect to offline view if disconnected

Search and Discovery

Global Search (SPRINT_034)

Cmd+K / Ctrl+K opens command palette with:

  • Entity search (CVEs, artifacts, policies, jobs)
  • Navigation shortcuts (g h, g f, g p)
  • Quick actions (>scan, >vex, >policy)

Each list view includes contextual search:

  • Findings: CVE ID, artifact, package
  • Jobs: Job ID, type, status
  • Policies: Name, rule content
  • Audit: Actor, action, resource

Mobile and Responsive Considerations

Breakpoints

Breakpoint Min Width Navigation
xs 0px Bottom nav, collapsed sidebar
sm 576px Collapsed sidebar
md 768px Collapsed sidebar with expand
lg 992px Full sidebar
xl 1200px Full sidebar with details panel

Touch Interactions

  • Swipe left/right for list actions
  • Pull to refresh on list views
  • Long press for context menu

Accessibility Navigation

Keyboard Navigation

Key Action
Tab Next focusable element
Shift+Tab Previous focusable element
Enter Activate selection
Esc Close modal / Clear selection
? Show keyboard shortcuts
/ Focus search
j/k Navigate list items
<a class="skip-link" href="#main-content">Skip to main content</a>
<a class="skip-link" href="#main-nav">Skip to navigation</a>

ARIA Landmarks

<header role="banner">...</header>
<nav role="navigation" aria-label="Main navigation">...</nav>
<main role="main" id="main-content">...</main>
<aside role="complementary">...</aside>
<footer role="contentinfo">...</footer>