The steptype.* 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.
Archivesteptype.archive
| Property | Value |
|---|---|
| Capability | steptype.write |
| Risk class | Write - autonomy L1 |
| Min. permission | Admin |
| Availability | On demand (MCP tier 2) |
| Idempotent | Yes |
| Egress | None - in-box (pure Postgres, no outbound call) |
Withdraw a step_type from NEW authoring: flip is_archived to
true. { key }. Existing matters/boards that pinned the kind are UNAFFECTED (board.validate still
resolves it, R11); only new authoring should avoid a withdrawn kind. Status-not-timestamp (INV-3),
never a hard DELETE; retained-not-deleted (INV-8). Reversible via steptype.register (a re-author
clears is_archived). Idempotent: re-archiving an already-archived key is a no-op success; a missing
key is a not-found BadInput. (Mirrors board.archive’s guarded-flip + re-read shape.)
Call POST /v/steptype.archive with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool steptype.archive.
Liststeptype.list
| Property | Value |
|---|---|
| Capability | steptype.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 |
List the box-global step-type registry. { isTerminal?, limit? }.
Optional isTerminal boolean filter (terminal vs non-terminal kinds). Paginated (NFR-PERF-3).
Call POST /v/steptype.list with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool steptype.list.
Registersteptype.register
| Property | Value |
|---|---|
| Capability | steptype.write |
| Risk class | Write - autonomy L1 |
| Min. permission | Admin |
| Availability | On demand (MCP tier 2) |
| Idempotent | Yes |
| Egress | None - in-box (pure Postgres, no outbound call) |
Upsert a step_type by key (the PRIMARY KEY). { key, label, handlerVerb?, configSchema?, isTerminal? }. A re-register of an existing key UPDATES the label /
handler / schema / terminality in place (ON CONFLICT(key) DO UPDATE) - the box-global registry is
authored, not append-only. handlerVerb defaults to matter.advance (the generic completion path,
ADR-0016: step-types ARE verbs). Re-registering an archived key clears is_archived (a re-author
reinstates it - the reversible twin of steptype.archive). Idempotent: registering the same shape twice
is the same row.
Call POST /v/steptype.register with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool steptype.register.