Files
git.stella-ops.org/docs/modules/evidence-locker
master 563079fc69 feat(evidence-locker): Decision Capsule sealing pipeline
Builds the previously-aspirational Capsule create/seal/verify/export/replay
pipeline. Unblocks the former CAPSULE-001 task that lived (BLOCKED) in
SPRINT_20260408_005; carried over as CAPSULE-AUDIT-001 inside the new
SPRINT_20260422_002 (created + archived in same pass).

Pipeline:
- CapsuleManifest record: deterministic SBOM+feeds+reachability+policy+VEX
  content-address bundle.
- CapsuleManifestCanonicalizer: mirrors AUDIT-007 algorithm byte-for-byte
  (ordinal-sorted UTF-8 JSON via JsonDocument round-trip).
- ICapsuleSigner + EcdsaCapsuleSigner + NullCapsuleSigner: DSSE PAE
  contract, DSSE payload type application/vnd.stellaops.decision-capsule+json.
  Pattern-identical to IAuditBundleManifestSigner; defined locally rather
  than cross-referencing IExportAttestationSigner (which lives inside
  ExportCenter.WebService, not a shared library — future cleanup noted).
- CapsuleService: create / seal / verify / export (zip) / replay.
- PostgresCapsuleRepository (Dapper) with tenant RLS hookup.

Endpoints (all tenant-scoped, POST):
- POST /api/v1/evidence/capsules
- POST /api/v1/evidence/capsules/{id}/seal
- POST /api/v1/evidence/capsules/{id}/verify
- POST /api/v1/evidence/capsules/{id}/export (application/zip)
- POST /api/v1/evidence/capsules/{id}/replay

Storage: embedded migration 005_decision_capsules.sql creates
evidence_locker.decision_capsules (RLS-enforced) + indexes + CHECK
constraints. Auto-applied by existing EvidenceLockerMigrationRunner.

Audit (CAPSULE-AUDIT-001):
- 5 new AuditActions.Evidence constants (CreateCapsule/Seal/Verify/Export/Replay)
- Each endpoint chained with .Audited(AuditModules.Evidence, ...)
- contentHash surfaced on responses so AuditActionFilter propagates it
  into details_jsonb.

Tests: 9 focused tests (determinism x3, sign+verify+tamper x3, null-signer
graceful degradation, pipeline round-trip, 404 on missing). Full
EvidenceLocker namespace sweep: 141/141, 0 failures.

Docs: docs/modules/evidence-locker/architecture.md §9bis (manifest schema,
DSSE payload type, storage, API surface, relationship to
release.run_capsule_replay_linkage).

Runtime curl+Timeline assertion deferred — running container image
predates these changes; rebuild pending. Structural wiring identical to
runtime-verified VerdictEndpoints (AUDIT-002 precedent).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 16:04:38 +03:00
..
2026-01-06 19:07:48 +02:00
2026-02-11 01:32:14 +02:00
2026-02-11 01:32:14 +02:00
2026-01-07 10:23:21 +02:00
2026-02-11 01:32:14 +02:00

EvidenceLocker

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

Purpose

EvidenceLocker provides sealed, immutable storage for vulnerability scan evidence and audit logs. Ensures tamper-proof evidence chains for compliance and forensic analysis with content-addressable storage and cryptographic sealing.

Components

Services:

  • StellaOps.EvidenceLocker.WebService - HTTP API for evidence submission and retrieval
  • StellaOps.EvidenceLocker.Worker - Background sealing and archival workers

Libraries:

  • StellaOps.EvidenceLocker.Core - Evidence sealing, verification, and chain validation
  • StellaOps.EvidenceLocker.Infrastructure - Storage adapters and evidence bundle management

Configuration

See etc/evidence-locker.yaml.sample for configuration options (if available).

Key settings:

  • Storage backend (filesystem, object storage)
  • Sealing policy (immediate vs. batch)
  • Retention policies
  • Export destinations
  • Authority integration for access control

Dependencies

  • PostgreSQL (schema: evidence_locker)
  • Authority (authentication and authorization)
  • Signer (cryptographic sealing operations)
  • ExportCenter (evidence bundle export)
  • Operations: ./operations/ (if exists)
  • Portable pack contract: ./portable-audit-pack-contract.md
  • Portable manifest schema: ./schemas/portable-audit-pack-manifest.v1.schema.json
  • Portable compatibility mapping: ./portable-audit-pack-compatibility.md
  • Portable determinism profile: ./portable-audit-pack-determinism.md
  • Portable Rekor offline profile: ./portable-audit-pack-rekor-offline.md
  • Portable CLI runbook: ./portable-audit-pack-cli-runbook.md
  • Portable Parquet profile: ./portable-audit-pack-parquet-profile.md
  • Portable verification matrix: ./portable-audit-pack-test-matrix.md
  • Promotion evidence contract: ./promotion-evidence-contract.md
  • ExportCenter: ../export-center/
  • Attestor: ../attestor/
  • High-Level Architecture: ../../ARCHITECTURE_OVERVIEW.md

Current Status

Implemented with WebService and Worker components. Supports sealed evidence storage with cryptographic verification. Integrated with ExportCenter for audit bundle generation.