Before deciding#

  1. Open Approvals or the Approvals tab on the awaiting run.
  2. Read the plan, target, resolved source revision and current policy requirements.
  3. Confirm you are an eligible approver. Protected decisions can require a current MFA-authenticated human session and recent reauthentication.
  4. Check whether the initiator or source committer is excluded by separation-of-duties rules. Use another eligible person when required.

Record a decision#

  1. Choose Approve or Reject on the run.
  2. Enter the reason. Rejection requires a reason; include a concise explanation that the project owner can act on.
  3. Submit and inspect the recorded decision.
  4. If multiple approvals are required, wait for the remaining eligible decisions. One approval does not necessarily release the run.
  5. After the gate opens, follow apply and verification. Approval is permission to proceed, not proof the deployment succeeded.
The Approvals panel offers Reject or Approve and displays recorded decisions. The server checks permissions, authentication and plan freshness when a decision is submitted.
The Approvals panel offers Reject or Approve and displays recorded decisions. The server checks permissions, authentication and plan freshness when a decision is submitted. View full size ↗

Stale and rejected decisions#

ResponseWhat to do
stale_approvalRefresh the run. The current plan, target, live-state or policy evidence no longer matches the decision. Review the new evidence.
approval_expiredRe-evaluate the policy/plan through the supported run flow. Do not reuse an expired decision.
separation_of_dutiesHave an independent eligible approver decide.
strong_authentication_requiredComplete current MFA and recent reauthentication with a human account.
approval_already_decidedInspect the existing decision; repeated submission is not an additional independent approval.

API-key limitation#

An API key is useful for permitted automation, but it is not a current MFA-authenticated human session. Do not design an automation that silently substitutes an API key for a protected human approval.