Skip to main content

ADR-0116: Audit hash chain, seals and outbox

Context​

Kit section 11: unsampled durable critical audit.

Decision​

hash = sha256(prev_hash + canonical JSON) per tenant; seals, outbox, legal holds, evidence access log. Every mutation writes a chained event.

Consequences​

WORM is claimed only when the storage proves it.

Evidence​

  • services/control-plane/src/eai/audit.py
  • sql/postgres/V150__audit_outbox.sql
  • sql/postgres/V151__audit_seals.sql
  • sql/postgres/V152__audit_legal_holds.sql
  • sql/postgres/V153__audit_access_log.sql
  • services/control-plane/src/eai/domains/evidence/seals.py
  • services/control-plane/tests/test_audit_mutation_coverage.py