The Evidence Ledger is the plane's source of truth and audit surface. Every guarantee in this reference is recorded here at the moment it happens — the enforcement event, the verdict, the compensation, the human decision. The Control Plane renders views of the ledger; nothing feeds it, and nothing edits it after the fact.
The event record
| Field | Semantics |
|---|---|
event_id |
Event identity |
workflow_id |
Run identity — the join key for a full trail |
step_id |
Step identity, where the event is step-scoped |
event_type |
One of the closed vocabulary below |
timestamp |
ISO-8601 UTC, at the moment of the event |
data |
Typed payload per event type |
checksum |
Chain link — verifiable against the preceding event |
Field-level JSON schemas are specified in ledger and artifact formats.
Event taxonomy
The vocabulary is closed. An event type that does not exist in this table does not exist in the stream.
| Event type | Records |
|---|---|
step_start |
Step dispatched, context assembled |
step_complete |
Step committed, artifact sealed |
policy_eval |
Cedar decision with the evaluated context |
tool_call |
The call that actually executed, post-gates |
hitl_escalation |
Human signal issued, tier and payload |
hitl_park |
Workflow parked, diagnosis attached |
verification |
Verdict, criteria, and critique |
compensation |
Rollback action per step, reverse order |
regeneration |
Child generation spawned |
circuit_breaker |
Regeneration halted, signature attached |
workflow_complete |
Terminal state of the run |
Artifacts
Step outputs are sealed as artifacts: immutable, content-checksum-addressed records referenced by identifier — art_… — during hydration. Steps reference artifacts; they do not copy values, and nothing mutates a sealed artifact. The address is the checksum of the content, which makes reference and integrity the same property.
Append-only and chained
| Property | Semantics |
|---|---|
| Append-only | Events are never edited or deleted; corrections are new events |
| Checksum chain | Each event's checksum covers its content and the preceding link |
| Verifiable | Any third party can re-walk the chain from the first event |
| Complete | A step does not commit past an unrecordable event — the ledger fails closed |
The auditor's walkthrough
One step, read in order from the stream:
| Order | Event | The audit question it answers |
|---|---|---|
| 1 | step_start |
What dispatched this step, with what context? |
| 2 | policy_eval |
Was this call allowed — by which policy, against what parameters? |
| 3 | tool_call |
What actually executed, after the gates? |
| 4 | verification |
Did the output pass the declared criteria — with what critique if not? |
| 5 | step_complete |
What artifact sealed, referenced by which checksum? |
Five events, five answers, no reconstruction required. That is the property the rest of the plane exists to produce: not logs assembled after the fact by convention, but a trail written by the only code path that could have done the work.
