Audit log
Requires the Pro plan or higher; see Billing.
The audit log is an append-only record of every governed action. Each entry includes the hash of the entry before it, so editing or deleting any row breaks every hash after it. Tampering is detectable, not impossible.
Forgebench writes each audit row as part of the governed call itself, not from traces or logs afterwards.
Reading the list
Each row is one governed action: when it happened, who or what did it, what it acted on, a shortened hash, and its state. Select a row for its position in the chain, both full hashes, a summary of what happened, and a link to the call's trace when one exists.
| Field | What it is |
|---|---|
| Sequence | Increases per workspace. Ordering by sequence reconstructs the chain. |
| Event / Resource | What happened and to what. |
| Actor | Who or what caused it: a person, an agent, or an API key with no identity behind it. |
| Trace | A link to the call in Traces. Absent on older rows or when tracing is off. |
| Row hash / Previous hash | The chain. A row's hash is computed from the previous row's hash plus its own contents. |
Actor and agent names are looked up when you view the log and aren't part of the hash. Renaming a person or agent changes what old rows display without breaking the chain.
Status
Each entry has one of four statuses, shown as a visual state:
| Status | Shown as | What it means |
|---|---|---|
| Final | Ready (✓) | The call completed and was delivered. The only success status. |
| Pending | Working (◐, pulsing) | Written when a call begins. It should resolve almost immediately; a row stuck here means the call didn't complete cleanly. |
| Blocked | Attention (▲) | The call completed and was billed, but a policy such as a guardrail or the Tool Registry withheld the result. The detail says why. |
| Failed | Failing (✕) | The call broke, for example on a provider error, and was refunded. The detail says why. |
A row whose hash doesn't link correctly to the previous row shows as Failing, whatever its status.
The list's status filter has two options: Succeeded (Final) and Failed (any other status).
The hash chain
Walk the chain in sequence order and each link either matches or doesn't. Editing a row, or deleting one and closing the gap, breaks every hash after that point. No blockchain or third party is involved.
The list shows the chain's verdict: verified, or a count of broken links with each affected row marked.
The audit chain doesn't depend on tracing: if Traces is down, audit rows are still written. Refused calls that never reach the provider are recorded too (see Errors and refusals), so denied calls appear alongside successful ones.

