Platform topology (detailed)

Audience: operators and architects who need the layer-by-layer map of how Stella Ops services, clients, and infrastructure fit together. For module-specific detail (APIs, schemas, operations), see the dossiers under docs/modules/; for the full module inventory see the Module Matrix; for ports and hostnames see the Port Registry.

This document gives a comprehensive view of Stella Ops platform topology — the client layer, the gateway, the core engines, and the data plane they share. The ASCII diagrams below are deliberately retained as a fast visual reference; treat the prose tables as the authoritative companion.

Note on consolidated services. Several names in the diagrams below are historical sub-components that now run inside a parent service: the API gateway is hosted by Router (StellaOps.Gateway.WebService); Signer and Provenance run inside Attestor; Excititor and Feedser run inside Concelier; Scheduler and PacksRegistry run inside JobEngine. The diagrams keep the familiar names for orientation; the Module Matrix is the consolidated source of truth.

Component topology (quick reference)

CLIENT LAYER
├─ stella CLI                    → Gateway (JWT + DPoP auth)
├─ Web UI (Angular)              → Gateway (JWT + DPoP auth)
├─ CI/CD Pipelines               → Gateway (JWT + DPoP auth)
└─ Zastava Observer              → Scanner (runtime scans)

INFRASTRUCTURE (REQUIRED)
├─ PostgreSQL v16+               → Primary database (ALL services)
├─ Valkey v8.0                   → Cache, DPoP, queues, events
└─ RustFS                        → Object storage (S3 API)

INFRASTRUCTURE (OPTIONAL)
└─ NATS JetStream                → Alternative messaging (Valkey is default)

GATEWAY LAYER
└─ Gateway.WebService            → Auth, routing, rate limiting

AUTH & CRYPTO
├─ Authority                     → OAuth2/OIDC, OpTok issuance
├─ Signer                        → DSSE signing (FIPS/GOST/SM)
└─ Attestor                      → Rekor v2 transparency log

CORE ENGINES
├─ Scanner.WebService            → Scan orchestration
├─ Scanner.Worker                → Image analysis, SBOM generation
├─ Concelier.WebService          → Advisory ingestion (NVD, Red Hat, etc.)
├─ Excititor.WebService          → VEX ingestion + consensus (within Concelier)
├─ Policy.Engine                 → K4 lattice + ordered-gate evaluation
├─ Scheduler.WebService          → Re-scan orchestration (within JobEngine)
├─ Notify.WebService             → Notification orchestration
├─ Notify.Worker                 → Slack/Teams/Email delivery
└─ JobEngine.WebService          → DAG workflows, pack runs

SUPPORTING
└─ IssuerDirectory               → VEX issuer trust registry

Layers (tabular reference)

LayerPrimary componentsResponsibility
ClientCLI, Web UI, CI/CD pipelines, runtime observersSubmit scan requests, query results, manage policy/tenancy.
GatewayGateway.WebServiceAuth enforcement, tenant routing, rate limiting, request correlation, API routing.
Auth & cryptoAuthority, Signer, Attestor, IssuerDirectoryToken issuance, signing, transparency/attestation workflows, issuer trust registry.
Core enginesScanner, Concelier (incl. Excititor), Policy, JobEngine (incl. Scheduler), NotifyScanning, ingestion, verdicts, orchestration, notifications, exports.
Data planePostgreSQL, Valkey, RustFS (S3), optional NATSPersistent state, queues/streams, artifact storage, optional alternative messaging.

Service categories (detailed)

CategoryServicesPurpose
GatewayGateway.WebServiceAPI routing, auth enforcement
Auth & SecurityAuthority, Signer, AttestorOAuth2, signing, transparency
ScanningScanner.Web, Scanner.WorkerContainer analysis, SBOM
AdvisoryConcelier.Web, Concelier.WorkerVulnerability ingestion
VEXExcititor.Web, Excititor.WorkerExploitability statements
PolicyPolicy.EngineK4 lattice + ordered-gate evaluation (see Policy Engine Data Pipeline)
OrchestrationJobEngine (Scheduler, pack runs)Job coordination
NotificationsNotify.Web, Notify.WorkerDelivery to Slack/Teams/Email

Layered architecture diagram

┌─────────────────────────────────────────────────────────────────────┐
│                      USER EXPERIENCE                                 │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐              │
│  │   Gateway    │  │  Web (UI)    │  │     CLI      │              │
│  │ (API Router) │  │ (Angular 21) │  │(Multi-plat)  │              │
│  └──────────────┘  └──────────────┘  └──────────────┘              │
└─────────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────────┐
│                   DATA & EXPORT                                      │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐              │
│  │ExportCenter  │  │EvidenceLocker│  │FindingsLedger│              │
│  │(SARIF/SBOM)  │  │(Artifacts)   │  │(Audit Trail) │              │
│  └──────────────┘  └──────────────┘  └──────────────┘              │
└─────────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────────┐
│                  EVENTS & NOTIFICATIONS                              │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐              │
│  │   Notify     │  │   Notifier   │  │TimelineIndex │              │
│  │(Orchestrate) │  │  (Delivery)  │  │  (Events)    │              │
│  └──────────────┘  └──────────────┘  └──────────────┘              │
└─────────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────────┐
│                   ORCHESTRATION & WORKFLOW                           │
│  ┌──────────────┐  ┌──────────────┐                                │
│  │ Scheduler    │  │ Orchestrator │                                │
│  │(Job Sched)   │  │(Coordinator) │                                │
│  └──────────────┘  └──────────────┘                                │
└─────────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────────┐
│                      SCANNING & ANALYSIS                             │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐              │
│  │Scanner.Web   │  │Scanner.Worker│  │ AdvisoryAI   │              │
│  │(API/Control) │  │(Analyzers)   │  │(ML Analysis) │              │
│  └──────────────┘  └──────────────┘  └──────────────┘              │
│  ┌──────────────┐  ┌──────────────┐                                 │
│  │ RiskEngine   │  │    Policy    │                                 │
│  │  (Scoring)   │  │   (Engine)   │                                 │
│  └──────────────┘  └──────────────┘                                 │
└─────────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────────┐
│                    INGESTION & AGGREGATION                           │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐              │
│  │  Concelier   │  │   Excititor  │  │IssuerDirectry│              │
│  │(Advisories)  │  │    (VEX)     │  │(CSAF Pubshrs)│              │
│  └──────────────┘  └──────────────┘  └──────────────┘              │
└─────────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────────┐
│                     AUTHENTICATION & SIGNING                         │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐              │
│  │  Authority   │─▶│    Signer    │─▶│   Attestor   │              │
│  │ (OAuth2/OIDC)│  │(DSSE/PKIX)   │  │(in-toto/DSSE)│              │
│  └──────────────┘  └──────────────┘  └──────────────┘              │
└─────────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────────┐
│                        INFRASTRUCTURE LAYER                          │
│  ┌──────────────────┐  ┌──────────────────┐  ┌─────────────────┐   │
│  │   PostgreSQL     │  │     Valkey       │  │     RustFS      │   │
│  │   (v16+ ONLY)    │  │  (Redis-compat)  │  │  (S3-like API)  │   │
│  │                  │  │   - Caching      │  │  - Artifacts    │   │
│  │ All services use │  │   - DPoP nonces  │  │  - SBOMs        │   │
│  │ PostgreSQL for   │  │   - Event queues │  │  - Signatures   │   │
│  │ persistent data  │  │   - Rate limiting│  │                 │   │
│  └──────────────────┘  └──────────────────┘  └─────────────────┘   │
│                                                                      │
│  ┌──────────────────────────────────────────────────────────────┐   │
│  │ Optional: NATS JetStream (alternative transport for queues)  │   │
│  │           Only used if explicitly configured in appsettings  │   │
│  └──────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────┘

Notes