🧾 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 None

Court-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 QueriesAS OF, AS OF SYSTEM TIME, and WITH PROVENANCE over the four timestamp columns on every row.