altheia::audit. Each event carries the policy version at decision time, for incident replay. Allowed actions and lifecycle changes index straight from chain. Denials never land on-chain, so the agent records them itself.

On-chain events
Read them with
readAuditLog(client, corePkg, limit), which queries the audit module’s events in descending order and returns the event type, transaction digest, timestamp, and parsed payload.
Denials are recorded off-chain
A denied action aborts insidecheck_and_consume and emits nothing, so no chain query can find it. To make denials visible, the agent dry-runs the transaction first; if the policy aborts, it posts a denied row with the decoded reason and skips submitting. This is what guardedSubmit does, and it is how a denial reaches the dashboard Chronicle even though it never lands on-chain.
How to read the trail
The on-chain events are the source of truth for allowed actions and lifecycle changes. An auditor can read them directly without trusting the backend.
Provision an agent
From the dashboard form to a funded, signable agent key.