- Introduced AGENTS.md, README.md, TASKS.md, and implementation_plan.md for Vexer, detailing mission, responsibilities, key components, and operational notes. - Established similar documentation structure for Vulnerability Explorer and Zastava modules, including their respective workflows, integrations, and observability notes. - Created risk scoring profiles documentation outlining the core workflow, factor model, governance, and deliverables. - Ensured all modules adhere to the Aggregation-Only Contract and maintain determinism and provenance in outputs.
		
			
				
	
	
	
		
			9.3 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			9.3 KiB
		
	
	
	
	
	
	
	
StellaOps Architecture Overview (Sprint 19)
Ownership: Architecture Guild • Docs Guild
Audience: Service owners, platform engineers, solution architects
Related: High-Level Architecture, Concelier Architecture, Policy Engine Architecture, Aggregation-Only Contract
This dossier summarises the end-to-end runtime topology after the Aggregation-Only Contract (AOC) rollout. It highlights where raw facts live, how ingest services enforce guardrails, and how downstream components consume those facts to derive policy decisions and user-facing experiences.
1 · System landscape
graph TD
    subgraph Edge["Clients & Automation"]
        CLI[stella CLI]
        UI[Console SPA]
        APIClients[CI / API Clients]
    end
    Gateway[API Gateway<br/>(JWT + DPoP scopes)]
    subgraph Scanner["Fact Collection"]
        ScannerWeb[Scanner.WebService]
        ScannerWorkers[Scanner.Workers]
        Agent[Agent Runtime]
    end
    subgraph Ingestion["Aggregation-Only Ingestion (AOC)"]
        Concelier[Concelier.WebService]
        Excititor[Excititor.WebService]
        RawStore[(MongoDB<br/>advisory_raw / vex_raw)]
    end
    subgraph Derivation["Policy & Overlay"]
        Policy[Policy Engine]
        Scheduler[Scheduler Services]
        Notify[Notifier]
    end
    subgraph Experience["UX & Export"]
        UIService[Console Backend]
        Exporters[Export / Offline Kit]
    end
    Observability[Telemetry Stack]
    CLI --> Gateway
    UI --> Gateway
    APIClients --> Gateway
    Gateway --> ScannerWeb
    ScannerWeb --> ScannerWorkers
    ScannerWorkers --> Concelier
    ScannerWorkers --> Excititor
    Concelier --> RawStore
    Excititor --> RawStore
    RawStore --> Policy
    Policy --> Scheduler
    Policy --> Notify
    Policy --> UIService
    Scheduler --> UIService
    UIService --> Exporters
    Exporters --> CLI
    Exporters --> Offline[Offline Kit]
    Observability -.-> ScannerWeb
    Observability -.-> Concelier
    Observability -.-> Excititor
    Observability -.-> Policy
    Observability -.-> Scheduler
    Observability -.-> Notify
Key boundaries:
- AOC border. Everything inside the Ingestion subgraph writes only immutable raw facts plus link hints. Derived severity, consensus, and risk remain outside the border.
- Policy-only derivation. Policy Engine materialises effective_finding_*collections and emits overlays; other services consume but never mutate them.
- Tenant enforcement. Authority-issued DPoP scopes flow through Gateway to every service; raw stores and overlays include tenantstrictly.
2 · Aggregation-Only Contract focus
2.1 Responsibilities at the boundary
| Area | Services | Responsibilities under AOC | Forbidden under AOC | 
|---|---|---|---|
| Ingestion (Concelier / Excititor) | StellaOps.Concelier.WebService,StellaOps.Excititor.WebService | Fetch upstream advisories/VEX, verify signatures, compute linksets, append immutable documents to advisory_raw/vex_raw, emit observability signals, expose raw read APIs. | Computing severity, consensus, suppressions, or policy hints; merging upstream sources into a single derived record; mutating existing documents. | 
| Policy & Overlay | StellaOps.Policy.Engine, Scheduler | Join SBOM inventory with raw advisories/VEX, evaluate policies, issue effective_finding_*overlays, drive remediation workflows. | Writing to raw collections; bypassing guard scopes; running without recorded provenance. | 
| Experience layers | Console, CLI, Exporters | Surface raw facts + policy overlays; run stella aoc verify; render AOC dashboards and reports. | Accepting ingestion payloads that lack provenance or violate guard results. | 
2.2 Raw stores
| Collection | Purpose | Key fields | Notes | 
|---|---|---|---|
| advisory_raw | Immutable vendor/ecosystem advisory documents. | _id,tenant,source.*,upstream.*,content.raw,linkset,supersedes. | Idempotent by (source.vendor, upstream.upstream_id, upstream.content_hash). | 
| vex_raw | Immutable vendor VEX statements. | Mirrors advisory_raw;identifiers.statementssummarises affected components. | Maintains supersedes chain identical to advisory flow. | 
| Change streams ( advisory_raw_stream,vex_raw_stream) | Feed Policy Engine and Scheduler. | operationType,documentKey,fullDocument,tenant,traceId. | Scope filtered per tenant before delivery. | 
2.3 Guarded ingestion sequence
sequenceDiagram
    participant Upstream as Upstream Source
    participant Connector as Concelier/Excititor Connector
    participant Guard as AOCWriteGuard
    participant Mongo as MongoDB (advisory_raw / vex_raw)
    participant Stream as Change Stream
    participant Policy as Policy Engine
    Upstream-->>Connector: CSAF / OSV / VEX document
    Connector->>Connector: Normalize transport, compute content_hash
    Connector->>Guard: Candidate raw doc (source + upstream + content + linkset)
    Guard-->>Connector: ERR_AOC_00x on violation
    Guard->>Mongo: Append immutable document (with tenant & supersedes)
    Mongo-->>Stream: Change event (tenant scoped)
    Stream->>Policy: Raw delta payload
    Policy->>Policy: Evaluate policies, compute effective findings
2.4 Authority scopes & tenancy
| Scope | Holder | Purpose | Notes | 
|---|---|---|---|
| advisory:ingest/vex:ingest | Concelier / Excititor collectors | Append raw documents through ingestion endpoints. | Paired with tenant claims; requests without tenant are rejected. | 
| advisory:read/vex:read | DevOps verify identity, CLI | Run stella aoc verifyor call/aoc/verify. | Read-only; cannot mutate raw docs. | 
| effective:write | Policy Engine | Materialise effective_finding_*overlays. | Only Policy Engine identity may hold; ingestion contexts receive ERR_AOC_006if they attempt. | 
| findings:read | Console, CLI, exports | Consume derived findings. | Enforced by Gateway and downstream services. | 
3 · Data & control flow highlights
- Ingestion: Concelier / Excititor connectors fetch upstream documents, compute linksets, and hand payloads to AOCWriteGuard. Guards validate schema, provenance, forbidden fields, supersedes pointers, and append-only rules before writing to Mongo.
- Verification: stella aoc verify(CLI/CI) and/aoc/verifyendpoints replay guard checks against stored documents, mappingERR_AOC_00xcodes to exit codes for automation.
- Policy evaluation: Mongo change streams deliver tenant-scoped raw deltas. Policy Engine joins SBOM inventory (via BOM Index), executes deterministic policies, writes overlays, and emits events to Scheduler/Notify.
- Experience surfaces: Console renders an AOC dashboard showing ingestion latency, guard violations, and supersedes depth. CLI exposes raw-document fetch helpers for auditing. Offline Kit bundles raw collections alongside guard configs to keep air-gapped installs verifiable.
- Observability: All services emit ingestion_write_total,aoc_violation_total{code},ingestion_latency_seconds, and trace spansingest.fetch,ingest.transform,ingest.write,aoc.guard. Logs correlate viatraceId,tenant,source.vendor, andcontent_hash.
4 · Offline & disaster readiness
- Offline Kit: Packages raw Mongo snapshots (advisory_raw,vex_raw) plus guard configuration and CLI verifier binaries so air-gapped sites can re-run AOC checks before promotion.
- Recovery: Supersedes chains allow rollback to prior revisions without mutating documents. Disaster exercises must rehearse restoring from snapshot, replaying change streams into Policy Engine, and re-validating guard compliance.
- Migration: Legacy normalised fields are moved to temporary views during cutover; ingestion runtime removes writes once guard-enforced path is live (see Migration playbook).
5 · References
- Aggregation-Only Contract reference
- Concelier architecture
- Excititor architecture
- Policy Engine architecture
- Authority service
- Observability standards (upcoming) – interim reference for telemetry naming.
6 · Compliance checklist
- AOC guard enabled for all Concelier and Excititor write paths in production.
- Mongo schema validators deployed for advisory_rawandvex_raw; change streams scoped per tenant.
- Authority scopes (advisory:*,vex:*,effective:*) configured in Gateway and validated via integration tests.
- stella aoc verifywired into CI/CD pipelines with seeded violation fixtures.
- Console AOC dashboard and CLI documentation reference the new ingestion contract.
- Offline Kit bundles include guard configs, verifier tooling, and documentation updates.
- Observability dashboards include violation, latency, and supersedes depth metrics with alert thresholds.
Last updated: 2025-10-26 (Sprint 19).