🧾 Audit & Provenance
The audit chain is hash-chained and tamper-evident. A chain_valid: False response means tampering — escalate immediately.
from relata import AuditClient
audit = AuditClient.from_client(client)
audit.count()
# AuditCountResponse(count=47, entries=47,
# chain_valid=True, chain_head="f3a2c8b1...")chain_valid: True — every query, ingest, and MCP call is recorded and provably unmodified.
# Paginated entries with filters:
audit.entries(principal="investigator-1",
purpose="analytics",
limit=5)
# {"entries": [{"ts_ns": ..., "principal": "investigator-1",
# "action": "query", "sql": "SELECT ...",
# "decision": "allow", "request_id": "req_..."}, ...],
# "next_cursor": "...", "chain_valid": True}
audit.find_by_request_id("req_abc123")
# Single entry, or NoneCourt-grade PDF + signed receipts
pdf_bytes = audit.export_pdf("case-2026-001", template="default")
Path("shadow-ledger.pdf").write_bytes(pdf_bytes)
receipt = audit.sign_receipt({
"case_id": "case-2026-001",
"subject": "alice",
"action": "gdpr_erasure",
})
# {"signed": True, "signature": "...", "signed_at": "..."}Next: Temporal Queries — AS OF, AS OF SYSTEM TIME, and WITH PROVENANCE over the four timestamp columns on every row.