Evidence
Verified against commit
942a18727con 2026-09-26 (UTC). Re-verify:grep -nE "^ (evidence-web|evidence-worker|attestor-tileproxy|tsa):" devops/release/bundle/docker-compose.ymlandls src/Evidence src/Evidence/__Libraries src/EvidenceLocker/__Libraries.Service rows (host project, image, database and role, compose file, bundle presence, Doctor registration) are generated in
docs/architecture/service-inventory.md; where this page and the inventory differ, the inventory is authoritative.
The consolidated evidence and attestation service (ADR-039 D14): sign-off evidence is attested, anchored in a local transparency log, sealed into capsules and bundles, time-stamped, held and exported from one family with one database. Signer is not part of this family.
Start here: architecture.md.
Deployables
| Role | Source | Image | Compose | Release bundle |
|---|---|---|---|---|
evidence-web | src/Evidence/StellaOps.Evidence.WebService/ | stellaops/evidence-web | devops/compose/docker-compose.evidence.yml (included by docker-compose.stella-ops.yml) | yes |
evidence-worker | src/Evidence/StellaOps.Evidence.Worker/ | stellaops/evidence-worker | same | yes |
attestor-tileproxy | src/Attestor/StellaOps.Attestor.TileProxy/ | stellaops/attestor-tileproxy | devops/compose/docker-compose.stella-services.yml | yes |
tsa | devops/docker/tsa/ (openssl RFC 3161 responder) | stellaops/tsa | devops/compose/docker-compose.stella-services.yml | yes |
attestor-tileproxy and tsa are family members by ownership, not by compose key: the tile proxy is its own small ASP.NET host, tsa is an openssl container, and neither has a database.
Database
- One database,
stellaops_evidence, on the shared PostgreSQL server, with its own role. - Connection:
STELLAOPS_POSTGRES_EVIDENCE_CONNECTION(orPostgres:Evidence:ConnectionString); the DAL refuses to start without it and has no shared-connection fallback (src/Evidence/__Libraries/StellaOps.Evidence.Persistence/Extensions/ConsolidatedEvidencePersistenceExtensions.cs). - Migrations: embedded SQL in
src/Evidence/__Libraries/StellaOps.Evidence.Persistence/Migrations/, applied at startup by both roles throughAddStartupMigrationsinto theevidence.schema_migrationsledger. Schemas:evidence,attestor,proofchain,evidence_locker,evidence_locker_app.
API surface
The canonical prefix is /api/evidence/v1, plus absolute controller routes under /api/v1, /anchors, /proofs and /verify. The published route set is pinned in src/Evidence/__Tests/StellaOps.Evidence.WebService.Tests/Fixtures/consolidated-route-inventory.tsv.
| Capability | Where it lives |
|---|---|
| DSSE attestation submit, verify and retrieval | StellaOps.Attestor.Application, .Verify |
| Local transparency log, checkpoints and inclusion proofs | StellaOps.Attestor.Infrastructure/Rekor/ |
| Proof chains, merkle spines, receipts, content-addressed store | StellaOps.Attestor.ProofChain |
| Sealed evidence capsules, bundles, exports, legal holds, evidence threads, regulatory artifact ledger | StellaOps.EvidenceLocker* |
| RFC 3161 existence-time anchoring at seal | StellaOps.EvidenceLocker.Infrastructure/Signing/ |
| Predicate schema registry and standard predicates | StellaOps.Attestor.StandardPredicates |
| Identity watchlist | StellaOps.Attestor.Watchlist |
| Timestamp Assurance: web checks, tenant API and worker schedules | StellaOps.Evidence.TimestampAssurance* |
All libraries above are under src/Evidence/__Libraries/. Shared contract, export, import and timestamping libraries remain under src/EvidenceLocker/__Libraries/, and the encrypted-backup tool is src/EvidenceLocker/__Apps/StellaOps.EvidenceLocker.BackupCli/.
Doctor checks
evidence-web serves GET /doctor/evidence/checks behind ops.health: the family checks (doctor.evidence.database.*, doctor.evidence.data-integrity.*, doctor.evidence.retention.*), the SDK standard checks and the Timestamp Assurance checks (doctor.evidence.timestamp.*). The full list is in architecture §7.
Retention
Retention classes, cleanup budgets and custody boundaries: retention-classification.md. RFC-15 Q-38 added migration 011_evidence_counsel_retention_reclamation.sql and the counsel-retention reclamation worker (architecture §2).
Retired predecessors
| Was | Replaced by | Record |
|---|---|---|
attestor host | evidence-web / evidence-worker (2026-09-05) | ../attestor/README.md |
evidence-locker-web / evidence-locker-worker | evidence-web / evidence-worker (2026-09-05); hosts frozen under src/__Obsoleted/EvidenceLocker/ | archived dossier: docs-archive/modules/evidence-locker/ |
Operating
- Compose definition:
devops/compose/docker-compose.evidence.yml, with reviewed immutable digests indevops/compose/docker-compose.local-evidence.yml. - Cutover and isolated-rehearsal runbook:
../../runbooks/evidence/evidence-evd9-data-move.md. - Operator runbooks:
../../runbooks/evidence/.
Subordinate documents
| Document | Status |
|---|---|
architecture.md | current |
retention-classification.mdand its verification JSON | current (retention programme record) |
native-package-verification.md | design record, not re-verified 2026-09-26 |
locker/export-format.md, locker/bundle-packaging.md, locker/bundle-packaging.schema.json, locker/evidence-bundle-v1.md, locker/verify-offline.md, locker/schemas/, locker/samples/ | current format contracts; routes updated to /api/evidence/v1 |
locker/attestation-contract.md, locker/attestation-scope-note.md, locker/promotion-evidence-contract.md, locker/replay-payload-contract.md | contracts; routes updated, otherwise design record, not re-verified 2026-09-26 |
locker/portable-audit-pack-contract.mdand the other locker/portable-audit-pack-*.md pages | design record, not re-verified 2026-09-26 (the CLI runbook describes target behaviour) |
locker/dora-roi-retention.md, locker/eu-regulatory-persistence.md, locker/legacy-capsule-erasure-policy.md | current for semantics; schema authority note added (the consolidated baseline is the migration authority) |
locker/encrypted-backup-restore.md | current (BackupCli under src/EvidenceLocker/__Apps/) |
locker/incident-mode.md, locker/compliance-checklist.md | design record, not re-verified 2026-09-26 |
locker/guides/evidence-locker.md, locker/guides/evidence-pack-schema.md | guides; the pack assembly/replay routes are marked not served |
api-reference.md, openapi/v1.json | generated 2026-09-27 from the consolidated host’s /openapi/v1.json (in-process capture; see docs/changelog/openapi/2026-09-27-pcd84-openapi-captures-regenerated.md) |
EvidenceLocker host-era README.md, architecture.md, api-reference.md, openapi/v1.json, CHANGELOG.md, eb-gaps-161-007-plan.md | archived at docs-archive/modules/evidence-locker/ |
