Skip to content

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.

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.

Terminal window
supi gates <boardId>
argument meaning
<boardId> the board, as brd_… (see supi boards)

Who may run it

  • A person: viewer or 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

Terminal window
supi gates brd_8f2c…

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.

Terminal window
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: member or 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
  • --delivery is 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

Terminal window
supi approve brd_8f2c… gat_19c0… --comment "checked the diff"
supi approve brd_8f2c… gat_19c0… --delivery manual --comment "I will post it"

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.

Terminal window
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: member or 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-at is not a timestamp
  • there is no usable credential, or the server refuses it (401) or the act (403), or answers any other error

Example

Terminal window
supi delivery brd_8f2c… gat_19c0… --remind-at 2029-01-02T03:04:05Z
supi delivery brd_8f2c… gat_19c0… --mode automatic

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.

Terminal window
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: member or 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

Terminal window
supi reject brd_8f2c… gat_19c0… --comment "out of scope"

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.

Terminal window
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: member or 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
  • --comment is 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

Terminal window
supi request-changes brd_8f2c… gat_19c0… --comment "add a test for the expired-token path"