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
| Property | Value |
|---|---|
| Capability | change.write |
| Risk class | Write - autonomy L1 |
| Min. permission | Member |
| Availability | On demand (MCP tier 2) |
| Idempotent | No |
| Egress | None - 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
| Property | Value |
|---|---|
| Capability | change.write |
| Risk class | Write - autonomy L1 |
| Min. permission | Member |
| Availability | On demand (MCP tier 2) |
| Idempotent | No |
| Egress | None - 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
| Property | Value |
|---|---|
| Capability | change.write |
| Risk class | Write - autonomy L1 |
| Min. permission | Member |
| Availability | On demand (MCP tier 2) |
| Idempotent | No |
| Egress | None - 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.