Relationships
#3815 workflow resume --run refuses workflows with the same step name in two jobs, though validate and run accept them
Opened by kagarmoe · 10/23/2026· Shipped 10/27/2026
Description
swamp workflow validate accepts a workflow where two jobs each have a step with the same name, and swamp workflow run runs it. When such a run fails, swamp prints "To retry failed steps: swamp workflow resume --run ". That resume is then refused:
Error: Step name "s" is used in more than one place in the workflow; retry needs unique step names.Step names scoped per job are natural, e.g. one version or restart step in each per-host job. The run's own retry hint points at a command that can't work, and the only way out is a fresh full rerun. In our case that rerun didn't redo the side effects (service restarts) that the failed run should have retried.
Steps to reproduce
In a fresh repo with a command/shell behavior named sh:
name: dup-steps
jobs:
- name: a
steps:
- name: s
task: { type: model_method, modelIdOrName: sh, methodName: execute, inputs: { run: echo job-a } }
- name: b
dependsOn: [{ job: a, condition: { type: succeeded } }]
steps:
- name: s
task: { type: model_method, modelIdOrName: sh, methodName: execute, inputs: { run: "exit 1" } }
version: 1swamp workflow validate dup-steps→Summary: 15 passed, Result: PASSEDswamp workflow run dup-steps→ fails, printsTo retry failed steps: swamp workflow resume dup-steps --run <id>swamp workflow resume dup-steps --run <id>→ the error above
Expected
Either:
- resume identifies steps by job plus step name, since step names only need to be unique within a job; or
validaterejects (or warns about) duplicate step names across jobs, andrundoesn't print a retry hint it can't honor.
The first is better.
Environment
swamp 20261022.211048.0 (Linux, WSL2 Ubuntu 26.04)
Shipped
Click a lifecycle step above to view its details.
zack commented 10/27/2026, 8:58:46 PM
Thanks @kagarmoe for reporting this! We shipped: Identify steps by job plus step name when resetting a failed run, so retry (resume --run) works for workflows that reuse a step name across jobs and re-runs only the failed job's step and its real dependents. resume --from refuses a step name used in more than one job and asks which job, via a new --job option passed through CLI, serve and the execution service. Expression-named jobs fall back to today's name matching.. The fix has been merged and a release is on its way. We appreciate your contribution to swamp.
Sign in to post a ripple.