Part 02 · Control
The audit chain
Two records, with different jobs. The agent's own journal says who did what, in the order it happened. The audit log is the tamper-evident copy the agent cannot reach.
- Each action bound to a validated principal, not a client-supplied header
- Rule hits recorded by rule id and a redacted snippet, never by the secret itself
- Audit data is not model-visible, so an agent cannot read its own compliance record
- Exportable to an auditor without exposing credentials or provider keys
- Who did it, who approved it, who answered it: always answerable
Identity in the record, not beside it
Every durable user/message row carries the acting principal as source.actor, resolved from the auth gate's rpcId → principal binding, captured independently of the agent, so the agent cannot write its own alibi.
Question answers are stamped answeredBy. Approval-gated results are stamped decidedBy with the outcome, and the decider is the person who actually clicked, not the session driver. The enrichment is strictly additive: an unreachable sidecar leaves the message untouched and never aborts a turn.
Shipped
Hash-chained JSONLAppend-only