request_logs.csv.
This page is the field-by-field reference an integrator needs to consume
the audit event programmatically — whether that’s piping events into your own
SIEM, running fairness analytics on the decision logs, or proving control
coverage to a SOC 2 auditor.
Every text-bearing field in this schema is sampled from the
post-sanitization payload. Raw PII never appears in an audit event by
design — see the Privacy contract section below for
the invariants the SDK guarantees before writing a row.
Schema version
The fields described here correspond to schema version 2 of the audit event (SDK 0.13.0+, control plane 0.13.0+). Pre-2 events are forward-compatible: missing fields are nullable in the schema and the dashboard treats their absence as “not recorded” rather than as a value. When we add fields, they ship as additive nullable columns. We do not re-write the semantics of existing fields — the EgisAI compliance contract treats historical audit rows as immutable.One audit event = one model call
A single row inrequest_logs represents one step of one agent — one LLM
call, one tool dispatch, one sub-agent spawn, one policy check. A logical
agent task (a “run”) groups many steps under a shared run_id; the run-level
roll-up has its own Run schema summarised at the bottom of
this page.
Field reference
Identity & correlation
Provider & call shape
Governance verdict
The verdict triplet is the single most important set of fields for compliance. The SDK records each phase independently so an auditor can ask “which side fired and why” without back-querying the JSONB blobs.Performance & cost
Compliance-safe text previews
These fields are populated by the SDK after passing through label-based PII redaction and a 2 KB truncation, so any value in these columns is guaranteed to be compliance-safe — typed labels (<SSN>, <EMAIL>) in place of values,
bounded size, never raw PII.
Sanitization tally
Whenverdict = "sanitize", sanitizations records what was masked, in
count-and-shape form only — never the original value.
The privacy contract is non-negotiable: a sanitization record carries
count and mask shape only. There is no field that ever holds the
original value, the original value’s hash, or anything from which the
original value could be reconstructed.
Decision object
Bothprompt_decision and response_decision use the same shape. null
means the phase did not run (typically because the request phase blocked
the call and the response never came back).
Matched-policies array
Each entry records one rule that saw the data, with its individual verdict and reason. The array is preserved in evaluation order — including rules whose verdict was dominated by a more restrictive match — so historical review is accurate.Run roll-up
ARun is one logical agent task: the framework-detected outer call, plus
every step (LLM call / tool dispatch / sub-agent spawn) the agent made
inside it. Run rows live in a separate table and are exported to runs.csv.
The run roll-up carries the worst-of-steps verdict so a single line on
the dashboard’s Runs page tells the operator the strongest enforcement
outcome across the entire task. Per-step detail lives in the
request_logs rows that point at it via run_id / step_seq.
Privacy contract
The SDK guarantees the following invariants before any audit event leaves your environment:- No raw PII fields. Every text-bearing field (
request_text,request_text_before_redaction,response_preview,error,intent_summary) is sampled from the post-sanitization payload, after typed labels have replaced detected PII. The pre-sanitization payload is never serialised to an audit event. - Sanitization records are count-only.
sanitizations[].countandsanitizations[].patternare the only signal — never the original matched values, never a reversible hash. - Fail closed on PII. If the local PII engine errors mid-evaluation, the call is treated as if PII was detected and the audit event records the failure outcome rather than the un-scanned payload.
- Bounded size. Text previews are capped at 2 KB so a misconfigured payload can’t bloat your audit volume unbounded.
- Deterministic evaluation order. Phase 1 (deterministic local checks) always runs before Phase 2 (LLM-backed checks) on each side; a Phase 1 block short-circuits Phase 2 and the audit event records exactly which phase decided.
egisai/tests/test_smoke_privacy_contract.py.
Accessing audit events
The audit-evidence export is the supported path for procurement-style
evidence reviews — see
Audit-evidence export for the ZIP
layout and the framework-control mapping shipped in the manifest.
What’s next
Verdicts
The three verdicts and what each one means in detail.
Audit-evidence export
The ZIP-of-CSVs format auditors actually consume.
Two-phase governance
Why request and response decisions are recorded independently.
Enforcement matrix
Where
enforcement_status = "advisory" happens and why.