state: "pending_approval", then waits for a decision before the action becomes accepted. The admission bound (AWP-LIF-002) applies to the acknowledgement, not to the decision.
- Action types marked
requires_approval: trueenter thepending_approvalstate after validation and beforeaccepted. The world emitssafety.approval_requested(approval id, action id, type, params, requester, expiry, and the current task when one is set) on the approval channel to its configured approver(s).[AWP-APR-001] - The approver responds via
safety.approval.respond(approve|deny). Approve →accepted(orqueuedif the concurrency group is busy and the submission chosequeue). Deny →rejectedwith reasonapproval_denied.[AWP-APR-002] - Approvals time out after
approval_timeout_ms(safety policy; default 60000) →rejectedwith reasonapproval_timeout. If the submission’s owndeadline_msexpires first, the action isrejectedwith reasondeadline_exceeded(AWP-LIF-008).[AWP-APR-003] - Approvals are per-action; worlds MAY support scoped standing approvals (type + parameter predicate + expiry), which MUST appear in the audit log.
[AWP-APR-004] - Who may approve is deployment configuration, out of protocol scope; the protocol only defines the messages and states.
[AWP-APR-005] - Approval request content is subject to the audit redaction rules (AWP-AUD-006):
paramsfields and the task text listed insafety_policy.audit.redact_pathsare redacted in the log, not in the message to the approver.[AWP-APR-006]