EvidenceLocker

Status: Implemented Source: src/EvidenceLocker/ Owner: Platform Team

Purpose

EvidenceLocker provides sealed, immutable storage for vulnerability-scan evidence and audit logs. It guarantees tamper-evident evidence chains for compliance and forensic analysis through content-addressable storage and cryptographic sealing (Merkle root + DSSE).

Audience: compliance and forensics operators who store, hold, and replay release evidence, and service authors integrating decision capsules, verdict attestations, or portable/air-gapped bundle export.

Components

Services:

Libraries:

API Surface

All routes require Authority OAuth2 bearer auth and a resolved tenant (RequireTenant()). The service FallbackPolicy requires evidence:read, so every route is at minimum read-gated. Scope policies map to: evidence:readEvidenceRead, evidence:createEvidenceCreate, evidence:holdEvidenceHold, export.operatorExportOperator, export.viewerExportViewer (constants in StellaOpsScopes; defined in Program.cs and the *Endpoints.cs files).

Evidence snapshots / gate artifacts (Program.cs):

Decision Capsules (Api/Capsules/CapsuleEndpoints.cs, group /api/v1/evidence/capsules):

Bundle export jobs (Api/ExportEndpoints.cs, group /api/v1/bundles):

Verdict attestations (Api/VerdictEndpoints.cs, group /api/v1/verdicts):

Evidence & Audit adapter (Api/EvidenceAuditEndpoints.cs, group /api/v1/evidence, all evidence:read):

Evidence Threads / Artifact Canonical Record (Api/EvidenceThreadEndpoints.cs, group /api/v1/evidence/thread, evidence:read):

EU regulatory artifact ledger (Api/RegulatoryArtifactLedgerEndpoints.cs, group /api/v1/regulatory/artifact-ledger, evidence:read):

Operational endpoints (anonymous): GET /healthz, GET /readyz, GET /health/ready (legacy), GET /buildinfo.json, and GET /openapi.

Configuration

Configuration binds to the EvidenceLocker section (EvidenceLockerOptions.SectionName); there is no etc/evidence-locker.yaml.sample shipped in this repo. Sealing is synchronous on the write path (no immediate-vs-batch policy toggle).

Key settings (see StellaOps.EvidenceLocker.Core/Configuration/EvidenceLockerOptions.cs):

Dependencies

Current Status

Implemented with WebService and Worker components. Supports sealed evidence storage with cryptographic verification (Merkle root + DSSE), decision-capsule create/seal/verify/export/replay, verdict attestations, an EU regulatory artifact ledger, evidence-thread (Artifact Canonical Record) reads, and portable/air-gapped bundle download. Bundle export jobs and capsule export integrate with the Export Center scopes (export.operator / export.viewer). The Decision Capsule pipeline enforces PII rejection (CapsulePiiGuard) and data residency on write/read. Verdict-attestation DSSE verification is currently fail-closed (trust roots not yet wired). The /api/v1/evidence/audit slice is deprecated in favour of Timeline’s unified audit store.