Approvals

An approval gate pauses a persisted run, emits and persists FlowPaused, and issues a pending approval record when persistence is enabled.

Flow::define('invoice.pay')
    ->withInput(['invoice_id'])
    ->step('validate', ValidateInvoice::class)
    ->approvalGate('finance_approval')
    ->step('pay', PayInvoice::class)
        ->compensateWith(ReverseInvoicePayment::class)
    ->register();

CLI decisions

Use flow:approve and flow:reject for operator decisions from the console or automation.