Desk Trials

GUIDE / Automation & agents

Design approval gates that reviewers can actually use

A gate needs a decision packet, a timeout, and invalidation rules; an Approve button alone only creates a new queue.

Documentation-based practical guide

Documentation-based proposal; not a hands-on test

Approval applies to one version
  1. Prepare proposed action
  2. Review recipient, content and impact
  3. Approve the exact version
  4. Recheck version and permission
  5. Execute once and record outcome

A rejection, expiry or changed action returns to preparation. No response is not approval.

Original editorial process diagram · proposed workflow, not a product screenshot

Put the decision beside the evidence

The reviewer should not have to reconstruct the workflow from notifications and browser tabs. An approval packet should state the requested action, source record, proposed changes, destination, risk or exception flags, and what happens after approval. Show a diff when possible. Include a stable run ID and a link to the authoritative record, not a copied summary with no trace back.

GitHub's deployment review flow illustrates a clear gate: a reviewer can approve or reject a waiting job, add a comment, and optionally prevent the person who initiated the run from self-approving. The feature also makes an important boundary visible: approval releases the job and can unlock environment secrets. The reviewer should therefore understand the post-approval side effect, not just the draft they see.

Define four states, not two

StateMeaningNext action
PendingPacket is complete and unchangedApprove or reject
ExpiredDecision window endedRebuild context and request again
StaleSource or proposed action changedInvalidate prior approval
EscalatedPrimary reviewer unavailable or conflict existsRoute to named alternate

GitHub documents stale-review dismissal for pull requests: when code changes after approval, the approval can be dismissed and must be renewed. Apply the same principle to business workflows. Store a hash or version of the material reviewed. If amount, recipient, content, permissions, or attachment changes, the old approval must not authorize the new action.

Put time limits on waiting

A workflow that waits forever is not controlled; it is abandoned. AWS Step Functions recommends explicit timeouts because a task without one can remain stuck waiting for a response that will never arrive. Set an approval expiry based on the decision's shelf life. A same-day publishing approval and a monthly vendor-access review need different windows.

At timeout, choose a safe default. For external sends, payments, deletions, access grants, and publication, the default is usually no action. For low-risk internal routing, a fallback queue may be acceptable. State the rule in the packet. Reminders should be bounded too: for example, one reminder, then escalation, then expiry.

Make rejection and bypass meaningful

Rejection should capture a short reason and return the item to a named owner. Provide common reason labels—wrong data, incomplete context, policy conflict, edit required—plus free text. Do not make reviewers approve simply to get an item out of their inbox.

If bypass is allowed, log who used it, why, what protection was bypassed, and which exact version proceeded. GitHub's deployment documentation requires an explicit bypass action and comment where bypass is permitted. A small team can mirror that discipline in a simple audit row.

Test the gate with changed context

  1. Submit a normal approval and confirm the reviewer sees the source and side effect.
  2. Change a material field while it is pending; confirm the request becomes stale.
  3. Let a test request expire; confirm no consequential action occurs.
  4. Reject one item and verify it returns to the right owner.
  5. Exercise the alternate reviewer path.

Connect this gate to the exception queue, not to an unowned error log. Human review adds value only when the person receives enough context, enough authority, and a bounded window in which to decide.

Before you hand it over

Use this as a working check, not certification. Checks stay in this page only and reset on reload.

0 of 5 checked

Sources & verification

Product details are based on the linked documentation. The proposed workflow and worked examples are editorial guidance, not measured test results.

  1. Reviewing deploymentsSource date: not stated · Retrieved: 2026-09-19T19:39:00Z

    Approve/reject controls, comments, self-approval prevention, protection-rule bypass, and post-approval access to environment secrets.

  2. Best practices for Step FunctionsSource date: not stated · Retrieved: 2026-09-19T19:39:00Z

    Explicit task timeouts and heartbeats prevent workflows from waiting indefinitely for a response.

  3. Reviewing proposed changes in a pull requestSource date: not stated · Retrieved: 2026-09-19T19:39:00Z

    Contextual review, changed-file inspection, and dismissal of stale approvals after code-modifying commits.

Continue the workflow

  1. Prevent duplicate records before an automation goes live

    Stop retries, webhook repeats, and double clicks from creating duplicate business records or actions.

  2. Separate retryable failures from work that needs a person

    Keep an automation from hammering a failing service or losing records that cannot complete automatically.

  3. Release an automation change like a small software change

    Change a live automation without discovering mapping or logic errors across the entire workload at once.

  4. Relay.app built its workflow tool around a human approval step

    Archived vendor pages show approval, task and data-input steps as Relay's core feature, before the company wound the product down in 2026.