Audit log
Audit log keeps every Action with who took it, for whom, under which Mandate and with what result, append-only and hash-chained.
Audit log answers who did what, for whom, through which Interface and under which Permission, for every Action. It reads the Event history, which is append-only and hash-chained, so its completeness is provable.
Contract
- Every write records
by(the Worker),for(the principal),via(the Interface), the key, the session, the Mandate it ran under and the definition Version. - A refused call is recorded too: an Action born
refused, naming the rule that refused it. - Events are never edited or deleted. A correction is a new Event that points at the old one.
- Each namespace chains its Events by sequence number and hash. Every hour the chain heads roll up from Startup to Studio to platform, and the root is published.
- Anyone holding a published root verifies a namespace's history offline, without trusting the platform.
- Model calls, with their full request and response, and every browser step are part of the record.
- Any record read with
?audit=returns its history inline.1
Verbs
| Verb | Object | Event |
|---|---|---|
| Action.list | Action | None. |
| Event.list | Event | None. |
Interfaces
Example
# A bookkeeping service traces who voided one client's invoice.
npx startup-builder show /invoices/ invoice_311/ actions
2026-10-14T09: 12: 03Z Invoice.void by agent_billing for customer_88 via api mandate_12 done
2026-10-14T09: 11: 58Z Approval.approve by human_dana via app done
2026-10-14T09: 10: 41Z Invoice.void by agent_support for customer_88 via api refused forbidden