SMELT

Approval Gates

Approval gates pause workflow execution at a specific point and wait for a human to approve or reject before continuing. They are the primary mechanism for human-in-the-loop control in SMELT.

What they solve

Fully autonomous workflows save time but introduce risk for high-stakes operations. Approval gates let you keep humans in the loop exactly where it matters - without slowing down the rest of the pipeline.

The gate block receives the output of the upstream block and presents it for review. Nothing downstream executes until approval is granted.

Adding an approval gate

Open the block palette and select Approval Gate from the Control section. Place it between the block you want to review and the block that should wait for approval.

The block has two settings:

  • Approval Message - what the reviewer should check, for example "Review the generated email before sending". It is shown on the approval card and in the notification.
  • Timeout (minutes) - how long to wait before the gate auto-rejects. The default is 0, which means no timeout: the run waits indefinitely. Any value above zero shows as "Auto-rejects in Nm" on the block preview.

An auto-rejected gate stops the run in exactly the same way a person rejecting it does. There is no auto-approve.

The timeout is measured from the moment the run reaches the gate, not from the start of the run. A background sweep checks parked gates every few minutes, so a run is auto-rejected shortly after its timeout passes rather than to the second. The run history records it as "Auto-rejected: no response within 15 minutes", which is how you tell a timeout apart from a person rejecting the gate.

Changing the timeout only affects runs that reach the gate afterwards. A run already waiting keeps the timeout that was set when it parked.

Runtime behaviour

When execution reaches an approval gate:

  • The gate block glows amber on the canvas, the same ring a running block uses.
  • An email is sent to the workspace owner with the workflow name, the approval message, and a link to the run.
  • The trace panel logs an approval_waiting event with a timestamp, shown as "Awaiting approval".
  • All downstream blocks remain in pending (grey) state.
  • Upstream blocks that have already completed are unaffected - their results are preserved.

Approving or rejecting

Review the upstream output and choose one of two actions:

  • Approve - execution resumes. The gate output passes through to downstream blocks unchanged.
  • Reject - execution stops and the run is marked as cancelled. Add a reason if you want one recorded; it is stored on the run and shown against it in the run history.

You can approve or reject from two places. The first is the Pending approvals list on your Studio dashboard, which gathers every gate waiting across your projects. The second is the Output tab of the inspector: click the amber gate block on the canvas to open it. Only the Output tab takes a rejection reason.

The trace panel records the wait as an event but carries no buttons, and the notifications page sets which emails are sent rather than acting on a gate. The approval email links straight to the run.

Use cases

  • Deploy gates - review generated infrastructure changes before the workflow applies them.
  • Content review - check AI-generated emails, posts, or reports before they are sent or published.
  • Financial approvals - require sign-off before workflows that create invoices, process payments, or update billing.
  • Data pipeline QA - validate extracted or transformed data before it is written to a production database.
  • Irreversible steps - hold anything that cannot be undone, such as a deletion or an outbound payment, until a person has seen it.

One limitation worth knowing before you plan around it. A gate stops the run until someone with build-and-run permission approves it, and the run records that it paused and then continued. It does not record which person approved it. If you need to show later who signed off, keep that record outside SMELT.


Next steps