Add a branch point — call .path() after this to define paths
Iterate over items, executing a step for each
Optionaloptions: StepOptions<TInput, TSteps> & { maxIterations?: number }Step names that generate indexed per-iteration records (name:0, name:1, ...).
Loop bodies and forEach steps both do; a plain step never does.
Get flat list of step names for validation
Mark the point of no return.
Everything before it stays compensatable; everything after is committed and is never rolled back, however the run ends. Past the pivot the only correct recovery is forward — retry, alert, fix — because there is no semantic inverse for "the welcome email was sent". Declare it explicitly; it is never inferred.
Freeze this definition and return its durable structural identity.
Add a step to the workflow — return type accumulates into TSteps
Optionaloptions: StepOptions<TInput, TSteps & Record<TName, Awaited<TResult>>>Call another registered workflow as a step
Optionaloptions: SubWorkflowOptionsWait for an external signal before continuing
Optionaloptions: { timeout?: number }
Explicit semantic revision. Bump it when handler or condition behavior changes incompatibly without changing the graph shape.