opbox

The escalation.* family (3 verbs). Every verb enters through the one front door: it is capability-checked, permission-checked, scope-checked and audited before it runs (see Security & permissions). Each entry below lists its capability, risk class (which fixes the minimum autonomy level), the minimum caller permission, its availability tier, whether it is idempotent, and any outbound egress.

Assignescalation.assign

PropertyValue
Capabilitychange.write
Risk classWrite - autonomy L1
Min. permissionMember
AvailabilityOn demand (MCP tier 2)
IdempotentNo
EgressNone - in-box (pure Postgres, no outbound call)

{ id, assignedToId }. Sets assigned_to_id + status ASSIGNED where id AND workspace_id = ctx.workspace_id. rows_affected==0 -> BadInput (the existing not-found throw).

Call POST /v/escalation.assign with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool escalation.assign.

Createescalation.create

PropertyValue
Capabilitychange.write
Risk classWrite - autonomy L1
Min. permissionMember
AvailabilityOn demand (MCP tier 2)
IdempotentNo
EgressNone - in-box (pure Postgres, no outbound call)

{ type, title, description?, entityType?, entityId?, createdById? }. Opens an OPEN HumanEscalation in ctx.workspace_id. type validated vs EscalationType. created_by_id is the passed-in id (a service context may attribute one) else the acting user (nullable).

Call POST /v/escalation.create with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool escalation.create.

Resolveescalation.resolve

PropertyValue
Capabilitychange.write
Risk classWrite - autonomy L1
Min. permissionMember
AvailabilityOn demand (MCP tier 2)
IdempotentNo
EgressNone - in-box (pure Postgres, no outbound call)

{ id, disposition: RESOLVED|DISMISSED, resolution }. Terminal close folding the resolve / dismiss service fns: sets resolved_by_id (the acting user), resolution, resolved_at, status = disposition where id AND workspace_id = ctx.workspace_id. rows_affected==0 -> BadInput.

Call POST /v/escalation.resolve with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool escalation.resolve.