Skip to content

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=1 returns its history inline.

Verbs

VerbObjectEvent
Action.listActionNone.
Event.listEventNone.

Interfaces

Example

Terminal
# 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