Skip to main content
Worlds MUST record, per session, an append-only log of: manifests, granted subset, every control-channel message (both directions, after redaction), every action status transition, every safety event and approval, and for each frame on every other channel either the payload or its SHA-256 hash plus header. [AWP-AUD-001]
  • Records are JSON Lines; each record carries ts_mono_ns, direction, kind, and body. [AWP-AUD-002]
  • Worlds SHOULD hash-chain records (prev_hash) for tamper evidence. [AWP-AUD-003]
  • Retention policy is deployment-defined; the format is normative so logs are portable across tools. [AWP-AUD-004]
  • Logs with full payloads plus a starting snapshot are sufficient for deterministic replay on worlds that advertise it. [AWP-AUD-005]

Redaction

  • Before a control-channel message is written to the log, the world MUST replace the values of session_token, transfer_token, snapshot_token, any Authorization header or bearer credential, and every value addressed by a JSON pointer in safety_policy.audit.redact_paths (relative to params or result) with "[redacted:sha256:<first 8 hex of the SHA-256 of the value>]", so that records can be correlated without exposing the value. Deployments use redact_paths for approval params/note, task.content, and any action parameters carrying personal data. Redaction applies to the log only, never to the wire; frame hashes are unaffected. See also AWP-APR-006, AWP-TSK-005. [AWP-AUD-006]

Record classes

The same JSONL format serves three purposes with different completeness requirements. Tooling MUST label which class a file satisfies ("class" in the first record). [AWP-AUD-007] A hash-only log is an audit record, not a dataset: the hashes let a replay prove it reproduced the original observations, but nothing in the log can regenerate them. The log is deliberately triple-purpose: safety audit trail, debugging record, and dataset — see Record and replay.