Skip to content

Audit log

The Audit log is the compliance evidence trail.

Every governed event — every LLM call, every tool call, every Pipeline step decision — produces a hash-chained, signed audit row. Tamper-detectable. Verifiable offline. The single source of truth for "what did this Agent actually do?"

Recordsevery Pipeline step decision (allow / deny / redact) on every call across every Session
Carriestrace_id, session_id, agent_id, project_id, policy_version, signed mandate (Ed25519)
Formathash-chained: each row includes SHA-256 of the previous row's hash
Verifiableoffline via JWKS — auditors don't need TapPass infrastructure to verify a row
Used forcompliance reports, drift baselines, incident response, cross-customer Intelligence (2027)

Every governed call produces one or more audit rows. Per call you see:

{
"audit_id": "audit-9f1c…",
"trace_id": "trace-abc…", // one call (LLM or tool)
"session_id": "sess-xyz…", // which Session this call was part of
"agent_id": "support-bot-v2",
"project_id": "eu-customer-support",
"policy_version": 1042,
"phase": "before", // before / during / after
"step_id": "detect_pii",
"decision": "allow",
"reason": null, // populated on deny / redact
"input_summary": {...}, // PII-redacted preview
"output_summary": {...}, // PII-redacted preview
"mandate": {
"issued_at": "...",
"expires_at": "...",
"signature": "ed25519:..."
},
"prev_hash": "sha256:abc123…", // chain link
"this_hash": "sha256:def456…"
}

Every row links to the previous via prev_hash. Forge or delete a row → chain breaks → tamper detected.

The audit log is offline-verifiable:

  1. TapPass publishes its public keys at a JWKS endpoint (.well-known/jwks.json).
  2. An auditor downloads the audit log + the JWKS.
  3. For each row, they verify: (a) the Ed25519 mandate signature against the published key, (b) the prev_hash matches the previous row's this_hash.
  4. If any row fails, the chain is broken → forensic alarm.

This means even if TapPass's servers were compromised, an auditor with a snapshot of the log + the JWKS can independently prove which actions were authorized.

The audit log defends against three different threat models:

LayerMechanismProtects against
Hash chainEach row includes SHA-256 of previous rowInsertion / deletion / reordering
Mandate signaturesEd25519 on each event's canonical hashForged events (without signing key)
Checkpoint anchoringSigned checkpoints written every N eventsFull chain replacement

Same machinery that backs the live engineering audit — see Audit trail internals for the implementation deep-dive.

AUDIT LOG
┌───────────┼───────────┬────────────┬─────────────┐
▼ ▼ ▼ ▼ ▼
Compliance Drift Incident Operator Cross-customer
reports baselines response dashboards intelligence
(2027)
Use caseWhat the audit log provides
SOC 2 / ISO 42001 / EU AI Act reportsOne-click export filtered by control + time range. Auditors verify offline via JWKS.
Drift baselinesPre-deployment evaluation establishes typical tool-call distribution per Session. Production audit feeds drift comparison.
Incident responseFilter by session_id or trace_id → reconstruct exactly what an Agent did, in order, with every decision's reason.
Operator dashboardsLive trace viewer; per-Sandbox / per-Agent / per-Project / per-Session filtering.
Cross-customer Intelligence (2027)Anonymized cross-tenant pattern detection (opt-in).
  • Per-org append-only store (Postgres + offline cold storage for retention).
  • Per-event canonical JSON (deterministic serialization for signature verification).
  • Retention: configurable per Project policy; minimum 7 years for SOC 2.
PersonaSurfaceWhat you do
AuditorDashboard audit viewsBrowse, filter, export. Filtered by team membership + scope.
Operatortappass audit tailLive tail; --filter session_id=…
Operatortappass audit export --pack soc2-cc6.1 --range 30dOne-click compliance report
Auditor (offline)JWKS endpoint + downloaded logIndependently verify integrity