Relationships
#2905 workflow reject leaves sibling gates waiting_approval and dependents pending in a failed, retryable run
Opened by hammz · 10/1/2026· Shipped 10/5/2026
Description
Rejecting a manual approval gate (src/libswamp/workflows/reject.ts, around lines 176-178) fails the gate and its job, then calls run.complete(). The run becomes failed, but sibling gates in other jobs stay waiting_approval, sibling jobs stay running, and dependent steps and jobs stay pending. A failed run is retryable (ExecutionService resume accepts suspended or failed runs), so the retry starts from a record with open work.
Found while planning swamp-club#2895 (cancel/supersede leave a cancelled run's jobs running). That fix introduces src/domain/workflows/abort_settlement.ts with a settlement entry point that is the natural tool here, but reject is a different terminal status with retry semantics, so it is tracked separately.
Steps to reproduce
Use the workflow from swamp-club#2895 (two parallel jobs each starting with a manual_approval gate, plus an always-teardown job). Run it until it suspends, then reject one gate with swamp workflow reject.
Expected
A failed run holds no job running and no step waiting_approval; unfinished work is settled consistently with an aborted run, and a retry behaves predictably.
Actual
The sibling gate stays waiting_approval, its job stays running, and dependents stay pending in the failed record.
Shipped
Click a lifecycle step above to view its details.
Sign in to post a ripple.