type, a
code and a human-readable message.
Refusals fall into three groups, and knowing which one you are looking at tells you where
to fix it:
- Shape — the definition failed the schema. Always
invalid_pipeline_definition; themessagenames the JSON path and the rule. - Graph — the definition parsed but its steps or references do not hang together. Each has its own code.
- Run time — the definition is fine but something failed while it executed.
definition. Graph refusals are raised there
and again on every run, including a run of a stored workflow. A definition you cannot
save is a definition you cannot run.
Shape refusals
All of these come back ascode: "invalid_pipeline_definition", with the detail in the
message.
A binding in a numeric or enum field lands here too: the value is validated with its tokens
masked to a placeholder string, and no string satisfies a number or an enum.
Graph refusals
Run-time failures
These appear as the failing step’serror in stepRuns, and as the run’s own error when
failure_mode is fail_fast.
Retries
A step failure is retried only if aretry block asks for it and the code is on the allowed
list. See Step types for the default list and the codes that
are never retried.
foreach_empty_body, foreach_unknown_step_type, parallel_empty_branch and
parallel_unknown_step_type are not on the never-retry list, but nothing about them changes
between attempts — listing one in retryable_errors buys retries that cannot succeed.