The oversight.* family (6 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.
Escalateoversight.escalate
| Property | Value |
|---|---|
| Capability | oversight.write |
| Risk class | Sensitive - autonomy L2 |
| Min. permission | Admin |
| Availability | On demand (MCP tier 2) |
| Idempotent | No |
| Egress | None - in-box (pure Postgres, no outbound call) |
| Legal basis | CC-OPBOX 99 |
file a governance complaint + notify the matter workspace’s OWNER.
Input: { matter_id, reason }. Output: { complaint_id, matter_id, workspace_id, status, notified }.
Call POST /v/oversight.escalate with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool oversight.escalate.
Revokeoversight.relationship.revoke
| Property | Value |
|---|---|
| Capability | oversight.write |
| Risk class | Sensitive - autonomy L2 |
| Min. permission | Admin |
| Availability | On demand (MCP tier 2) |
| Idempotent | Yes |
| Egress | None - in-box (pure Postgres, no outbound call) |
Hard DELETE a relationship, fenced to overseer_org_id = ctx.workspace_id. Idempotent: a missing row returns deleted
. The route gates this OWNER-only.{ relationshipId }.
Call POST /v/oversight.relationship.revoke with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool oversight.relationship.revoke.
Updateoversight.relationship.update
| Property | Value |
|---|---|
| Capability | oversight.write |
| Risk class | Sensitive - autonomy L2 |
| Min. permission | Admin |
| Availability | On demand (MCP tier 2) |
| Idempotent | No |
| Egress | None - in-box (pure Postgres, no outbound call) |
Patch a relationship’s config and/or status (a
cross-workspace visibility boundary). Fenced to overseer_org_id = ctx.workspace_id (FOR UPDATE).
{ relationshipId, config?, status? (ACTIVE|SUSPENDED|REVOKED) }.
Call POST /v/oversight.relationship.update with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool oversight.relationship.update.
Createoversight.request.create
| Property | Value |
|---|---|
| Capability | oversight.write |
| Risk class | Write - autonomy L1 |
| Min. permission | Admin |
| Availability | On demand (MCP tier 2) |
| Idempotent | No |
| Egress | None - in-box (pure Postgres, no outbound call) |
The requesting workspace asks to oversee a target workspace.
requesting_org_id = ctx.workspace_id, requested_by_id = acting user, status PENDING. Refuses self-target.
Fail-closed Conflict if an ACTIVE relationship or a PENDING request already exists. The ON CONFLICT
(requesting_org_id, target_org_id) upsert ABSORBS the route’s old delete-then-create (a stale non-PENDING
row is reset to a fresh PENDING request). { targetWorkspaceId, message?, config?, expiresAt }.
Call POST /v/oversight.request.create with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool oversight.request.create.
Rejectoversight.request.reject
| Property | Value |
|---|---|
| Capability | oversight.write |
| Risk class | Write - autonomy L1 |
| Min. permission | Admin |
| Availability | On demand (MCP tier 2) |
| Idempotent | No |
| Egress | None - in-box (pure Postgres, no outbound call) |
Only the TARGET workspace may reject a PENDING request. Fenced target_org_id = ctx.workspace_id; PENDING -> REJECTED (idempotent re-call returns changed
). reviewed_by_id = acting user, reviewed_at = now().{ requestId, note? }.
Call POST /v/oversight.request.reject with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool oversight.request.reject.
Withdrawoversight.request.withdraw
| Property | Value |
|---|---|
| Capability | oversight.write |
| Risk class | Write - autonomy L1 |
| Min. permission | Admin |
| Availability | On demand (MCP tier 2) |
| Idempotent | No |
| Egress | None - in-box (pure Postgres, no outbound call) |
Only the REQUESTING workspace may withdraw a PENDING request.
Fenced requesting_org_id = ctx.workspace_id; PENDING -> WITHDRAWN (idempotent). { requestId }.
Call POST /v/oversight.request.withdraw with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool oversight.request.withdraw.