Gate Approval Workflow¶
Audience: operators who need to manually approve a rollout stage gate that requires explicit human sign-off before the stage can advance.
Background¶
Rollout stages can have multiple promotion conditions (time soak, metric gates, manual gates). A manual gate requires an explicit approval action before the stage is considered fully passed. Once the manual gate is approved, the system re-evaluates all conditions — if all pass, the stage is automatically promoted.
Important: Gate approval only marks the manual condition as passed. If other conditions (e.g. a metric gate) are still failing, the stage will not promote until those also pass. Approving a manual gate is not the same as force-promoting the stage.
To bypass all conditions, use the skip_failed recovery strategy instead
(see Fleet Rollout Recovery §3.3).
Prerequisites¶
AUTONOMY_ORCHESTRATOR_URLset or--orchestrator-urlflag available.Plan ID and Stage ID of the gate to approve.
AUTONOMY_OPERATORset for audit record attribution.
1. Identify gates pending approval¶
Inspect gate status for a stage¶
PLAN_ID="plan-abc123"
STAGE_ID="stage-03"
curl -sf \
"${AUTONOMY_ORCHESTRATOR_URL}/v1/rollouts/${PLAN_ID}/stages/${STAGE_ID}/gates" \
| jq .
Example response:
{
"stage_phase": "open",
"gates": [
{
"kind": "time_soak",
"passed": true,
"detail": "soak elapsed 30m of required 30m"
},
{
"kind": "manual",
"passed": false,
"detail": "awaiting operator approval"
}
],
"manual_approved": false,
"all_passed": false
}
manual_approved: false and all_passed: false indicate the manual gate is blocking.
2. Approve the manual gate¶
autonomy rollout gate approve \
--orchestrator-url "$AUTONOMY_ORCHESTRATOR_URL" \
--plan-id "$PLAN_ID" \
--stage-id "$STAGE_ID" \
--reason "release validated against SLO dashboard; no anomalies in 30m soak window"
Expected response (gate approved, all conditions pass, stage auto-promoted):
{
"approved": true,
"promoted": true,
"message": "manual gate approved; all conditions passed; stage promoted",
"approved_at": "2026-03-18T10:30:00Z"
}
Expected response (gate approved, other conditions still failing):
{
"approved": true,
"promoted": false,
"message": "manual gate approved; waiting for metric gate: p99 latency above threshold",
"approved_at": "2026-03-18T10:30:00Z"
}
3. Verify stage advancement¶
After a successful approval with promoted: true:
curl -sf \
"${AUTONOMY_ORCHESTRATOR_URL}/v1/rollouts/${PLAN_ID}/stages/${STAGE_ID}/gates" \
| jq '{stage_phase, manual_approved, all_passed}'
{
"stage_phase": "promoted",
"manual_approved": true,
"all_passed": true
}
Watch the plan advance to the next stage:
watch -n 5 'curl -sf "${AUTONOMY_ORCHESTRATOR_URL}/v1/rollouts/${PLAN_ID}" | jq .current_stage_id'
4. Common failure branches¶
Manual gate re-approved (already approved)¶
The gate approval endpoint is idempotent for the manual condition. Re-approving a
gate that was already approved is a safe no-op — it returns the same approved: true
response and does not double-count the action in the audit trail.
Stage already in terminal phase¶
If the stage is already promoted, halted, or rollback, the gate approval endpoint
returns:
{
"error": "stage is already in a terminal phase"
}
No action needed — the gate is moot once the stage is terminal.
Plan in terminal phase¶
If the plan is rolled_back, cancelled, or completed, gate approval returns a 409.
Check the plan status first:
autonomy rollout plan describe \
--orchestrator-url "$AUTONOMY_ORCHESTRATOR_URL" \
--plan-id "$PLAN_ID"
Known gaps¶
No gate list across all plans: There is no endpoint to enumerate all pending manual gates across the fleet. Operators must query per-stage. A bulk pending-approvals view is a follow-on item.
No notifications: The system does not notify operators when a manual gate is pending. Alerting on
rollout.gate.pendingevents requires a log-based alert rule on the audit slog output.