How approvals work
When a task reaches a gate, the run blocks and records anapproval_gate_blocked
event. A human resolves it:
RSTACK_USER)
— not a generic placeholder. Resolving from the Business Hub is also possible
(see the token below).
Enforce policy — .rstack/policy.json
Make selected stages require approval in every mode, including express runs:
required_approvals— task id → artifacts that must be approved before that task can run. Enforced in interactive and express mode.enforce_in_express— also apply the default interactive gates to express runs.managers— only these people may resolve approvals (see below).
Manager allow-list
When a manager list is configured (viapolicy.json managers[] or the
RSTACK_MANAGER_USERS env var, comma-separated), only those identities can
resolve a gate. Anyone else is rejected. With no list configured, any
identified user may approve.
Dashboard approval token
Approving from the browser requires a signed token so a manager’s identity can’t be spoofed from an unauthenticated request:- With the token set, the dashboard sends it as a header; approvals also
require a same-origin request and
Content-Type: application/json. - Without the token set, browser approvals are disabled (the secure
default) — approve via
sdlc_approveinstead. - Every dashboard approval records audit-proof actor evidence, not just a name.
The CLI path (
sdlc_approve) always enforces the manager allow-list. The
token specifically protects the dashboard endpoint from spoofed requests.