Approval gates
What is waiting on a human, and deciding it. Deciding a gate is the human half of the control pair: an agent credential is refused on every decision verb, whatever scopes it carries.
Every command here also takes --json and --help — see the overview.
supi gates
Section titled “supi gates”Every gate on the board that is open and waiting for a decision, with the card it holds. A gate on an archived card is never listed: archiving cancels it.
supi gates <boardId>| argument | meaning |
|---|---|
<boardId> |
the board, as brd_… (see supi boards) |
Who may run it
- A person:
vieweror above in the workspace. - An agent token: any; no scope is checked.
Calls GET /v1/boards/:boardId/gates/pending
Prints one gate per line; --json for the server’s response.
Exit status 0 on success. 1 when:
<boardId>is missing- there is no usable credential, or the server refuses it (401) or the act (403), or answers any other error
Example
supi gates brd_8f2c…supi approve
Section titled “supi approve”Approves a generic gate. For an immutable publishing approval, --delivery manual|automatic reads the gate and binds that exact frozen subject and digest to the chosen delivery mode.
supi approve <boardId> <gateId> [--comment "why"] [--delivery manual|automatic]| argument | meaning |
|---|---|
<boardId> |
the board, as brd_… (see supi boards) |
<gateId> |
the gate (see supi gates <boardId>) |
| flag | type | default | meaning |
|---|---|---|---|
--comment "why" |
string | no comment | recorded with the decision and shown to whoever reads the card |
--delivery manual|automatic |
one of manual, automatic |
plain approval for a generic gate | for an immutable publishing approval, bind the frozen digest to manual or automatic delivery |
Who may run it
- A person:
memberor above in the workspace. - An agent token: refused, whatever scopes it carries.
Calls GET /v1/boards/:boardId/gates/:gateId, then POST /v1/boards/:boardId/gates/:gateId/resolve
Prints JSON: the resolved gate.
Exit status 0 on success. 1 when:
<boardId>or<gateId>is missing--deliveryis not manual or automatic- the gate has no immutable approval subject
- there is no usable credential, or the server refuses it (401) or the act (403), or answers any other error
Example
supi approve brd_8f2c… gat_19c0… --comment "checked the diff"supi approve brd_8f2c… gat_19c0… --delivery manual --comment "I will post it"supi delivery
Section titled “supi delivery”Changes only delivery mechanics for an already approved immutable subject. Give exactly one of --mode, --live-url, or --remind-at; switching modes does not require a fresh approval because the digest stays unchanged.
supi delivery <boardId> <gateId> [--mode manual|automatic] [--live-url https://…] [--remind-at ISO timestamp]| argument | meaning |
|---|---|
<boardId> |
the board, as brd_… (see supi boards) |
<gateId> |
the gate (see supi gates <boardId>) |
| flag | type | default | meaning |
|---|---|---|---|
--mode manual|automatic |
one of manual, automatic |
— | switch delivery mode without changing the approved digest |
--live-url https://… |
string | — | record the URL of a manually published post |
--remind-at ISO timestamp |
string | — | if no live URL exists then, remind the person and offer automatic delivery |
Who may run it
- A person:
memberor above in the workspace. - An agent token: refused, whatever scopes it carries.
Calls POST /v1/boards/:boardId/gates/:gateId/delivery
Prints JSON: the card and its updated delivery state.
Exit status 0 on success. 1 when:
<boardId>or<gateId>is missing- not exactly one delivery update is given
--remind-atis not a timestamp- there is no usable credential, or the server refuses it (401) or the act (403), or answers any other error
Example
supi delivery brd_8f2c… gat_19c0… --remind-at 2029-01-02T03:04:05Zsupi delivery brd_8f2c… gat_19c0… --mode automaticsupi reject
Section titled “supi reject”Rejects the gate. The card stops in the rejected state where it stands — refused, not returned for rework. Use request-changes to send it back.
supi reject <boardId> <gateId> [--comment "why"]| argument | meaning |
|---|---|
<boardId> |
the board, as brd_… (see supi boards) |
<gateId> |
the gate (see supi gates <boardId>) |
| flag | type | default | meaning |
|---|---|---|---|
--comment "why" |
string | no comment | recorded with the decision and shown to whoever reads the card |
Who may run it
- A person:
memberor above in the workspace. - An agent token: refused, whatever scopes it carries.
Calls POST /v1/boards/:boardId/gates/:gateId/resolve
Prints JSON: the resolved gate.
Exit status 0 on success. 1 when:
<boardId>or<gateId>is missing- there is no usable credential, or the server refuses it (401) or the act (403), or answers any other error
Example
supi reject brd_8f2c… gat_19c0… --comment "out of scope"supi request-changes
Section titled “supi request-changes”Returns the card to the stage the gate names for rework, where it is claimable again. The comment is required: it is merged into the handoff the next run reads, so a request with nothing said would re-queue the work with no instruction.
supi request-changes <boardId> <gateId> --comment "what to change"| argument | meaning |
|---|---|
<boardId> |
the board, as brd_… (see supi boards) |
<gateId> |
the gate (see supi gates <boardId>) |
| flag | type | default | meaning |
|---|---|---|---|
--comment "what to change" |
string | required | what to change. It becomes the rework instruction the next run reads |
Who may run it
- A person:
memberor above in the workspace. - An agent token: refused, whatever scopes it carries.
Calls POST /v1/boards/:boardId/gates/:gateId/resolve
Prints JSON: the resolved gate.
Exit status 0 on success. 1 when:
<boardId>or<gateId>is missing--commentis missing (request-changes needs a reason.)- there is no usable credential, or the server refuses it (401) or the act (403), or answers any other error
Example
supi request-changes brd_8f2c… gat_19c0… --comment "add a test for the expired-token path"