The regulator.* family (5 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.
Addregulator.comment.add
| Property | Value |
|---|---|
| Capability | form.write |
| Risk class | Write - autonomy L1 |
| Min. permission | Member |
| Availability | Core - always on (MCP tier 1) |
| Idempotent | No |
| Egress | None - in-box (pure Postgres, no outbound call) |
([2026] CC-OPBOX 29). Record a regulator-raised query/comment on
a submission (status defaults OPEN). The named writer. { submissionId, authority, body, commentType? }.
Call POST /v/regulator.comment.add with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool regulator.comment.add.
Deleteregulator.comment.delete
| Property | Value |
|---|---|
| Capability | form.write |
| Risk class | Write - autonomy L1 |
| Min. permission | Member |
| Availability | Core - always on (MCP tier 1) |
| Idempotent | No |
| Egress | None - in-box (pure Postgres, no outbound call) |
([2026] VJS-DEC 17). Remove a regulator comment (the frontend
DELETE path). Workspace-scoped, fail-closed on a missing row. { id }.
Call POST /v/regulator.comment.delete with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool regulator.comment.delete.
Listregulator.comment.list
| Property | Value |
|---|---|
| Capability | form.read |
| Risk class | Read - autonomy L0 |
| Min. permission | Member |
| Availability | Core - always on (MCP tier 1) |
| Idempotent | No |
| Egress | None - in-box (pure Postgres, no outbound call) |
| Render schema | Yes - drives an inline chat artefact and a GUI panel |
([2026] CC-OPBOX 29). The regulator correspondence THREAD for a
submission (the rows regulator.comment.add/respond write to the new regulator_comment store). Ordered
oldest-first (the thread). { submissionId }. RLS-scoped. The one consolidated read for the store.
Call POST /v/regulator.comment.list with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool regulator.comment.list.
Respondregulator.comment.respond
| Property | Value |
|---|---|
| Capability | form.write |
| Risk class | Write - autonomy L1 |
| Min. permission | Member |
| Availability | Core - always on (MCP tier 1) |
| Idempotent | No |
| Egress | None - in-box (pure Postgres, no outbound call) |
([2026] CC-OPBOX 29). Record the firm’s reply to a regulator
comment (linked via parent_comment_id), and advance the PARENT (responded_at + status=RESPONDED). The
reply inherits the parent’s submission + authority. { parentCommentId, body, author? }.
Call POST /v/regulator.comment.respond with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool regulator.comment.respond.
Updateregulator.comment.update
| Property | Value |
|---|---|
| Capability | form.write |
| Risk class | Write - autonomy L1 |
| Min. permission | Member |
| Availability | Core - always on (MCP tier 1) |
| Idempotent | No |
| Egress | None - in-box (pure Postgres, no outbound call) |
([2026] VJS-DEC 17). The frontend PATCH path: edit status,
priority, category, filing reference, inline response, due/closed on a regulator comment IN PLACE (the
frontend treats a comment as one row with an inline response, distinct from the threaded respond). Only
provided fields change (COALESCE keeps the rest). { id, status?, priority?, category?, filingReference?, responseText?, respondedBy?, dueDate?, closed? }.
Call POST /v/regulator.comment.update with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool regulator.comment.update.