Validation ErrorsEvery Runtara workflow validation code, E001 to E151 and W003 to W093: what each error or warning means and how to fix it in your workflow.Runtara Platformruntara-platformdocsRuntara Platformruntara-platformruntara-platformworkflowsvalidationerrorsreference

Validation Errors

Build47 min readUpdated

Runtara checks a workflow every time you save it. The check finds problems that would make the workflow fail or behave unexpectedly, and reports each one with a code:

  • Errors (codes starting with E) stop the save. The workflow keeps its last saved version until you fix them.
  • Warnings (codes starting with W) do not stop the save. They point at settings that are ignored, risky, or easy to misread.

Problems tab listing E010 errors and W051 warnings after a blocked save

Where you see them

  • In the editor, the Problems tab in the bottom panel lists every message from the last save. Filter by All, Errors, or Warnings, and select a message to jump to its step. The step’s card is outlined in red on the canvas.
  • Through the API and MCP, saving a workflow returns the same codes in validationErrors and warnings. To check a definition without saving it, send it to POST /api/runtime/workflows/graph/validate.

Every message starts with its code in brackets and names the step, for example:

[E010] Step 'done' references 'steps.echo.outputs.status' but step 'echo' does not exist. Did you mean 'done'?

Many messages end with a suggestion, such as the closest valid name or the list of allowed values.

All codes

Code Severity Problem
E001 Error Start step does not exist
E002 Error Step can never be reached
E003 Error Finish step is not connected
E004 Error Workflow has no steps
E008 Error Schema field name used twice
E010 Error Reference to a missing step
E011 Error Reference path is malformed
E012 Error Reads a step that runs later
E013 Error Unknown variable referenced
E014 Error Connection points to a missing step
E020 Error Unknown agent
E021 Error Agent has no such capability
E022 Error Required input is missing
E023 Error Fixed value has the wrong type
E024 Error Value is not an allowed option
E025 Error Condition is not in the expected shape
E026 Error Agent needs a connection
E027 Error Operator only works in queries
E028 Error Waiting step must be durable
E029 Error Suspending step has no timeout
E050 Error Child workflow version is invalid
E051 Error Input field is not declared
E052 Error Inputs used without an input schema
E053 Error Variable is not defined
E054 Error Child workflow accepts no inputs
E055 Error Child workflow inputs are missing
E056 Error Workflows embed each other in a loop
E058 Error Reference names a field that does not exist
E059 Error Reference reads inside a non-object value
E060 Error Two steps share the same name
E070 Error Conditional edges share the same priority
E071 Error More than one fallback edge
E072 Error Conditional step edge is not true/false
E073 Error Parallel branches never join back together
E100 Error Step is missing its configuration
E110 Error AI Agent has duplicate tool names
E111 Error AI Agent tool name has invalid characters
E112 Error AI Agent has no LLM connection
E113 Error AI Agent has more than one memory
E114 Error Memory edge points to a non-Agent step
E115 Error Memory configured but no memory provider
E116 Error Memory provider connected but not configured
E117 Error Workflow output has no name
E118 Error Workflow output has no value
E120 Error MCP toolset edge points to a non-Agent step
E121 Error MCP toolset edge points to wrong agent
E122 Error MCP toolset edge has no name
E123 Error Two MCP toolsets share a name
E124 Error Embedded child workflow not found
E125 Error Embed step ID used more than once
E126 Error Reference starts with an unknown root
E127 Error Loop reference used outside its loop
E129 Error Retry count is too large
E130 Error Step key does not match step ID
E131 Error Waiting step in an unsupported place
E132 Error Control step in an unsupported place
E133 Error Invalid WaitForInstances run list or timeout
E134 Error State step without a state schema
E135 Error SetState writes an undeclared field
E136 Error Step id reserved for error context
E137 Error Variable name reserved by the runtime
E138 Error Graph shape the compiler cannot build
E139 Error Conditioned edges have no default edge
E140 Error Conditional step is missing a branch
E141 Error Routing Switch has no default edge
E142 Error onError edge from an unsupported step
E143 Error Edge label the step never routes on
E144 Error Parallel branch leaves before merging
E145 Error Delay step in a non-durable workflow
E146 Error Split or Switch has no config
E147 Error Duration is not a number of milliseconds
E148 Error Template value has a syntax error
E149 Error Error handlers are nested too deep
E150 Error Variable value does not match type
E151 Error Field condition has no comparison value
W003 Warning Step ends the workflow without Finish
W020 Warning Unknown input for this agent capability
W030 Warning Retry count higher than recommended
W031 Warning Retry delay longer than one hour
W033 Warning While loop iteration limit is very high
W034 Warning Loop timeout longer than one hour
W040 Warning Duplicate normal and error edge to one step
W050 Warning Step reads its own outputs too early
W051 Warning Path can’t be checked inside an open object
W052 Warning Template reads a field that is not declared
W053 Warning Error context read through a deprecated spelling
W072 Warning onWait never runs for AI agent tools
W073 Warning Split parallelism may not run concurrently
W074 Warning Fixed run label reused inside a loop
W075 Warning Control step forces parallel work to serialize
W076 Warning Enclosing retry replays a control operation
W077 Warning Workflow to start is not a fixed id
W078 Warning Timeout too short for the step to wait
W080 Warning Data reference in a loop cannot be checked
W081 Warning State schema setting has no effect here
W082 Warning State is not published in non-durable workflows
W083 Warning Embedded workflow state stays inside the child
W084 Warning Workflow-wide setting ignored in a nested graph
W085 Warning Error context has no such field
W086 Warning Unknown key in the definition is dropped
W087 Warning Sequential setting overrides Split parallelism
W088 Warning WaitForSignal poll interval is ignored
W089 Warning Field visibility condition can never match
W090 Warning Reference inside a fixed value isn’t resolved
W091 Warning Zero timeout means different things by step
W092 Warning Routing Switch case has no route
W093 Warning Deprecated field spelling is still accepted

Workflow structure

How steps connect: the start step, edges, branches, and merges.

E001: Start step does not exist

Error. The workflow says it starts at a step id that is not in the workflow, so there is nowhere to begin.

Fix: Set the start (entry point) to the id of an existing step, or rename the step to match.

Example: [E001] Entry point 'start' not found in steps. Available steps: done

E002: Step can never be reached

Error. No path from the start step leads to this step, so it would never run.

Fix: Connect an edge from an earlier step into it, or delete the step.

Example: [E002] Step 'orphan' is unreachable from the entry point

E003: Finish step is not connected

Error. A Finish step exists but no edge leads to it; inside a Split iteration this silently makes the result null.

Fix: Add an edge that ends at this Finish step, or delete it.

Example: [E003] Finish step 'spare' is defined but not reachable from entry point 'a'. Without an executionPlan edge ending at 'spare', the workflow (or Split iteration) silently returns null. Add an edge ending at 'spare' (the executionPlan currently has 1 edge(s)), or remove the step.

E004: Workflow has no steps

Error. The workflow (or a loop body) contains no steps at all, so there is nothing to run.

Fix: Add at least one step; the simplest valid workflow is a single Finish step.

Starting a workflow version with no steps also fails with this code, before the run begins.

Example: [E004] Workflow has no steps defined

E014: Connection points to a missing step

Error. An edge in the execution plan starts or ends at a step id that does not exist.

Fix: Delete the dangling edge, or correct its fromStep/toStep to an existing step id.

Example: [E014] Execution plan edge 'ghost' -> 'done' references fromStep 'ghost', which does not exist in steps. Did you mean 'done'?

E060: Two steps share the same name

Error. Step names must be unique within a workflow so they can be told apart in the editor, logs, and run history.

Fix: Rename one of the steps.

Example: [E060] Multiple steps have the same name 'Look up order': a, b

E130: Step key does not match step ID

Error. In the workflow JSON, each step’s key in the steps map must equal the step’s own id field.

Fix: Set the step’s id to the same value as its key in the steps map.

Example: [E130] Graph "<root>": step map key "a" differs from step.id "lookup"; set step.id to the map key

E070: Conditional edges share the same priority

Error. When a step has several conditional outgoing edges on the same label, they are checked in priority order, so two with the same priority leave the order undefined.

Fix: Give each conditional edge from that step a different priority.

Example: [E070] Step 'a' has multiple '(default)' edges with the same priority 1. Conditional edges must have unique priorities. Targets: x, y

E071: More than one fallback edge

Error. A step that routes by conditions (or by a label such as onError) can have only one edge without a condition, which acts as the fallback when nothing else matches.

Fix: Keep a single unconditioned edge from that step, and add conditions to the others.

Example: [E071] Step 'a' has multiple '(default)' edges without conditions. At most one default (condition-less) edge is allowed. Targets: y, z

E072: Conditional step edge is not true/false

Error. A Conditional step can only leave through edges labeled ‘true’ or ‘false’, and those edges must not carry their own condition or priority; the step’s own condition picks the branch.

Fix: Label the edge ‘true’ or ‘false’ and move any edge condition or priority into the Conditional step’s condition.

Example: [E072] Conditional step 'check' has invalid edge to 'y' with label '(default)': Conditional steps route only through edges labeled 'true' or 'false'; put the predicate in the step.condition, not in edge.condition.

E073: Parallel branches never join back together

Error. When a step has several unconditioned outgoing edges, all of them run in parallel; if those branches end separately, the workflow has more than one result.

Fix: Join the branches at a single step before finishing, or add conditions so only one branch runs.

Example: [E073] Step 'a' fans out to parallel branches that never re-converge: b, c. Unconditional parallel branches all execute, so non-merging branches produce more than one independent exit (an ambiguous result). Re-join the branches at a single merge step, or make the edges conditional so exactly one runs.

E139: Conditioned edges have no default edge

Error. A step only has conditional exits, so when none of the conditions match there is nowhere for the run to go.

Fix: Add one more edge from the step with no condition, to be taken when none of the conditions match.

Example: [E139] Step 'a' has conditioned edges but no unconditioned edge to follow when none of the conditions match. Add one default edge.

E140: Conditional step is missing a branch

Error. A Conditional step needs both a ‘true’ and a ‘false’ exit, and one of them is missing.

Fix: Add the missing edge labelled ‘true’ or ‘false’ from the Conditional step.

Example: [E140] Conditional step 'c' has no 'false' edge. A Conditional needs both a 'true' and a 'false' edge.

E141: Routing Switch has no default edge

Error. A Switch that routes to different branches has no ‘default’ exit for values that match none of its cases.

Fix: Add an edge from the Switch labelled ‘default’.

Example: [E141] Routing Switch 's' has no 'default' edge for values that match no case. Add an edge labelled 'default'.

E143: Edge label the step never routes on

Error. An edge carries a label that its source step never routes on, so the edge would never be followed.

Fix: Change the label to one the message lists (for most steps ‘next’ or ‘onError’, for a routing Switch its route names or ‘default’), or remove the label.

Example: [E143] Edge label 'success' on Agent step 'a' is not one it routes on. Use one of: next, onError.

E144: Parallel branch leaves before merging

Error. Steps that run in parallel must all reach the same merge point, but one branch has a conditional exit that leaves the parallel section early.

Fix: Remove the conditional exit from the branch and do the conditional routing after the merge step.

Example: [E144] Parallel branch step 'c' (fanned out from 'a') has a conditioned exit. Branches of a fan-out must run straight to their merge point; route conditionally after the merge.

W003: Step ends the workflow without Finish

Warning. A step that is not a Finish step has no outgoing edges, so the workflow stops there without returning any output.

Fix: Connect the step to a Finish step (or to the next step) so the run returns a result.

Example: [W003] Step 'a' (Agent) has no outgoing edges but is not a Finish step. The workflow will terminate here without explicit output.

W040: Duplicate normal and error edge to one step

Warning. A step has both a normal edge and an error edge pointing at the same next step, so the workflow goes there whether the step succeeds or fails and the error edge does nothing.

Fix: Delete one of the two edges, or point the onError edge at a real error-handling step.

Example: [W040] Step 'a' has two edges to 'done' differing only in label (next, onError). The duplicate is redundant — keep one and remove the other.

Error handlers

Routes that run when a step fails.

E142: onError edge from an unsupported step

Error. An onError edge starts at a step type that cannot hand its failures to an error handler, such as Filter, Conditional, Switch, Delay or Finish.

Fix: Remove the onError edge, or attach the handler to a step type that supports it (Agent, AI Agent, EmbedWorkflow, Split, While, WaitForSignal, WaitForInstances, SetState or GetState).

Example: [E142] Filter step 'f' cannot route failures through onError. onError edges are supported on Agent, AiAgent, EmbedWorkflow, Split, While, WaitForSignal, WaitForInstances, SetState and GetState steps.

E149: Error handlers are nested too deep

Error. Error handlers that have their own error handlers are nested more than four levels deep, or a chain of handlers loops back to a step already in it.

Fix: Flatten the chain so handlers nest at most four levels, and make sure no handler leads back to a step that is already handling the same error.

Example: [E149] The onError handlers of step 'a' nest more than 4 levels deep (handlers whose steps have their own onError handlers). Flatten the chain.

E136: Step id reserved for error context

Error. The step ids ‘error’ and ‘__error’ are reserved: inside onError handlers they refer to the error details, so a step with that id would have its output hidden.

Fix: Rename the step to something else, such as ‘report_error’.

Example: [E136] Step id 'error' is reserved: inside onError handlers `steps.error` is the error context, so this step's output would be replaced. Rename the step.

W053: Error context read through a deprecated spelling

Warning. The error-handling step reads the error through an old spelling (error.* or __error.*) that still works today but will be removed in DSL 4.0.

Fix: Use steps.__error., for example steps.__error.message.

Example: [W053] Step 'handler' references the onError error context via 'error.message', a deprecated spelling that still resolves. Use the canonical 'steps.__error.message' instead; DSL 4.0 removes the other spellings.

W085: Error context has no such field

Warning. The error-handling step reads a field the error never has (usually a typo), so it is always null.

Fix: Use one of the listed field names, such as steps.__error.message.

Example: [W085] Step 'handler' references 'steps.__error.mesage', but the error context has no 'mesage' field, so it resolves to null. Known fields: code, message, category, severity, retryable, retryAfterMs, attributes, details, context, stepId, stepName, stepType, agentId, capabilityId, childWorkflowId, childError, missingInputs.

References and data

Paths that read inputs, variables, and step outputs. See the Mapping reference for the syntax.

E010: Reference to a missing step

Error. A mapping reads from a step id that does not exist in this graph.

Fix: Correct the step id in the reference (the message suggests the closest match), or add the missing step.

Example: [E010] Step 'done' references 'steps.lookup.outputs' but step 'lookup' does not exist. Did you mean 'done'?

E011: Reference path is malformed

Error. The reference path cannot be parsed, for example an opening bracket with no closing bracket.

Fix: Fix the path syntax, e.g. data.items[0] or data.items.name.

Example: [E011] Step 'done' has invalid reference path 'data.items[abc': unterminated bracket (missing `]`)

E012: Reads a step that runs later

Error. A step uses the output of a step that only runs after it (or on a different branch), so that output does not exist yet.

Fix: Reference only steps upstream of this one, or move the step so the one it reads runs first.

Example: [E012] Step 'a' references step 'b' which has not executed yet. Steps can only reference outputs from steps that execute before them.

E013: Unknown variable referenced

Error. A mapping reads a variable that is not declared in the workflow and is not a built-in.

Fix: Declare the variable under variables, or fix the name in the reference.

Reported together with E053 for the same reference. The built-in variables _workflow_id, _instance_id, and _tenant_id are always available.

Example: [E013] Step 'done' references unknown variable 'currency' Available variables: _tenant_id, _instance_id, _workflow_id

E053: Variable is not defined

Error. A step reads a workflow variable that is not defined.

Fix: Add the variable under variables, or correct the name in the reference.

Reported together with E013 for the same reference.

Example: [E053] Step 'done' references 'variables.currency' but variable 'currency' is not defined Available variables: _instance_id, _tenant_id, region, _workflow_id

E051: Input field is not declared

Error. A step reads a run input field that the input schema does not declare.

Fix: Add the field to the input schema, or fix the name in the reference (the message suggests the closest match).

Example: [E051] Step 'done' references 'data.customerId' but field 'customerId' is not defined in inputSchema. Did you mean 'customer_id'? Available fields: customer_id

E052: Inputs used without an input schema

Error. A step reads run inputs (data.*) but the workflow has no input schema, so no input fields are defined.

Fix: Add an input schema that declares the fields the workflow reads.

Example: [E052] Step 'done' references 'data.customer_id' but no inputSchema is defined. Add an inputSchema to define expected input fields.

E058: Reference names a field that does not exist

Error. A reference points into an object whose fields are known (from the input schema, a variable, or a step’s output schema), and the field it names is not one of them.

Fix: Pick one of the available fields listed in the message, or add the field to the schema it comes from.

Example: [E058] Step 'done' references 'data.customer.phone' but 'data.customer' has no field 'phone'. Did you mean 'name'? Available fields: email, name

E059: Reference reads inside a non-object value

Error. A reference tries to read a field from a value that is known to be a plain value (for example a string or number), so there is nothing to look inside.

Fix: Reference the value itself (drop the extra field), or change the schema so the value is an object with that field.

Example: [E059] Step 'done' references 'data.name.first' but 'data.name' is 'string' and cannot be traversed to 'first'

E126: Reference starts with an unknown root

Error. References must start with a known root (data, variables, workflow, steps, iteration, loop, or item); any other start would silently resolve to nothing.

Fix: Start the reference with one of the listed roots, for example data.name instead of input.name.

Example: [E126] Step 'done' references 'input.name' but 'input' is not a recognized reference root. Legal roots: data, variables, workflow, steps, iteration, loop, item

E127: Loop reference used outside its loop

Error. item.* is only available inside a Filter condition or a Split body, and loop.* only inside a While condition or a While/Split body; used elsewhere, it would always be empty.

Fix: Move the reference inside the Split, Filter, or While step it belongs to, or reference the data directly.

Example: [E127] Step 'done' references 'item.sku' but the 'item' root is not available here: `item.*` is only populated inside a Filter step's own condition or a Split subgraph

E137: Variable name reserved by the runtime

Error. A variable uses a name the runtime sets itself (such as _instance_id, _tenant_id, _workflow_id, _item or _index), so your value would hide the real one.

Fix: Rename the variable so it does not match a runtime name; names starting with an underscore are best avoided.

Example: [E137] Variable '_instance_id' in workflow variables is a runtime-owned binding and would shadow the value the runtime sets. Rename the variable.

E150: Variable value does not match type

Error. A variable’s value is not of the type it is declared as, for example text in an integer variable.

Fix: Change the value to match the declared type, or change the variable’s type.

Example: [E150] Variable 'retries' is declared as integer but its value is a string.

W050: Step reads its own outputs too early

Warning. A step is reading its own result, which does not exist yet when the step runs, so the value is empty.

Fix: Point the reference at an earlier step’s outputs instead of the step itself.

Example: [W050] Step 'a' references its own outputs via 'steps.a.outputs'. This may cause issues unless in a loop.

W051: Path can’t be checked inside an open object

Warning. The reference is fine up to an object, but that object has no declared fields, so Runtara cannot check the rest of the path and a typo there would quietly read nothing.

Fix: Declare the object’s properties in the schema so the full path can be checked.

Example: [W051] Step 'done' references 'data.order.customer.name'. The path is valid through 'data.order', but 'customer.name' is inside a dynamic object and cannot be validated statically.

W052: Template reads a field that is not declared

Warning. A template refers to a field that isn’t declared (often a typo); a missing value prints as empty, but reading a field of it fails the run.

Fix: Correct the field name in the template, or declare the field in the schema.

Example: [W052] Step 'done' template references 'data.nmae': field 'nmae' is not defined in inputSchema. Did you mean 'name'?. A missing value renders empty, but reading a field of a missing value fails the run.

W080: Data reference in a loop cannot be checked

Warning. Inside a Split or While body, a data.* reference can’t be checked because no schema is declared for data there, so a typo silently becomes null.

Fix: Declare inputSchema on the Split step (or on the workflow, for a top-level While).

Example: [W080] Step 'f': reference 'data.sku' cannot be checked — no schema is declared for `data` in this scope. Declare inputSchema on the enclosing Split step (or the workflow) to catch typos; an unknown field silently resolves to null at runtime.

W090: Reference inside a fixed value isn’t resolved

Warning. A fixed (immediate) value contains something shaped like a reference, but outside Agent inputs it isn’t resolved, so the literal JSON is passed on.

Fix: Use a reference or composite mapping to read workflow data.

Example: [W090] Step 'done' field 'v' is an immediate value containing a reference envelope. Only Agent inputs resolve references nested in immediates; here it is passed on as literal JSON. Use a reference or composite mapping to read workflow data.

Step settings

Settings that every run of a step depends on.

E100: Step is missing its configuration

Error. Filter and GroupBy steps need a configuration block (what to filter or group), and the step was saved without one.

Fix: Open the step and fill in its configuration, or add a config object to the step in JSON.

Checked when you save. The message names the step by its display name.

Example: Step 'Keep open orders' (Filter) is missing required configuration

E146: Split or Switch has no config

Error. A Split or Switch step has no config, so it has no value to loop over or match on.

Fix: Add config with a value (and, for a Switch, its cases).

Example: [E146] Split step 'sp' has no config. It needs config.value (and, for a Switch, config.cases).

E147: Duration is not a number of milliseconds

Error. A Delay duration or WaitForSignal timeout is a fixed value that is not a non-negative number of milliseconds, so every run would fail.

Fix: Enter the duration as a plain number of milliseconds, for example 5000 for five seconds.

Example: [E147] Step 'wait' sets durationMs to "5s", but it must be a non-negative number of milliseconds (for example 5000, not "5s").

E148: Template value has a syntax error

Error. A template value has a syntax error, such as an unclosed {{ }} or {% %} block, so it cannot be rendered.

Fix: Fix the template syntax shown in the message, for example close every {{ with }}.

The message ends with the template text, so you can see where it breaks.

Example: [E148] Step 'a' has a template that does not parse: Template syntax error: syntax error: unexpected end of input, expected end of variable block (in __check:1). Template: Hello {{ data.name

E117: Workflow output has no name

Error. One of the Finish step’s outputs has an empty name, so it cannot appear in the workflow result.

Fix: Give the output a name, or remove the empty row.

Example: [E117] Finish step 'done' has an output with no name

E118: Workflow output has no value

Error. One of the Finish step’s outputs has a name but nothing to fill it with (an empty reference, template, or text value).

Fix: Map the output to a value, reference, or template, or remove it.

Example: [E118] Finish step 'done' output 'status' is missing a source

E129: Retry count is too large

Error. The retry count plus the first attempt must fit in the runtime’s attempt counter (at most 4294967294 retries).

Fix: Lower maxRetries to a realistic number (the companion warning suggests 50 or less).

Example: [E129] Step 'a': maxRetries 4294967295 exceeds 4294967294; the initial attempt must also fit in the u32 attempt counter

Warning. A step is set to retry more than 50 times, which can make a failing run take a very long time.

Fix: Lower maxRetries to 50 or fewer.

Example: [W030] Step 'a' has max_retries=100. Consider reducing to 50 or less to avoid long execution times.

W031: Retry delay longer than one hour

Warning. A step waits more than an hour between retries, which can make a failing run drag on.

Fix: Lower retryDelayMs to 3600000 (one hour) or less.

Example: [W031] Step 'a' has retry_delay=7200000ms (2.0h). Consider reducing to 3600000ms or less.

W033: While loop iteration limit is very high

Warning. A While loop allows more than 10,000 iterations, which can hide a loop that never ends.

Fix: Lower maxIterations to 10000 or fewer, or check that the loop condition will become false.

Example: [W033] While step 'loop' has max_iterations=50000. This may indicate an infinite loop risk. Consider 10000 or less.

W034: Loop timeout longer than one hour

Warning. A While loop or Split step has a timeout longer than one hour.

Fix: Lower timeoutMs to 3600000 (one hour) or less, or break the work into smaller steps.

Example: [W034] Step 'loop' has timeoutMs=7200000 (2.0h). Consider 1.0h or less, or breaking into smaller steps.

W091: Zero timeout means different things by step

Warning. timeoutMs: 0 on an Agent or EmbedWorkflow is a deadline already passed, so the step fails before it runs; on a Split or While it means no timeout.

Fix: Omit timeoutMs for no deadline, or set a positive value.

On a Split or While step, timeoutMs: 0 means no timeout, and the warning says so.

Example: [W091] Agent step 'a' sets timeoutMs 0, which is a deadline already passed: the step fails before it runs. Omit timeoutMs for no deadline.

W092: Routing Switch case has no route

Warning. In a routing Switch, a matching case without a route returns its own output but follows the default edge, which is easy to miss.

Fix: Give the case a route, or set route “default” to make that explicit.

Example: [W092] Routing Switch step 'sw' has case(s) 1 without a route. A matching case without a route outputs its own output and takes the default edge. Give it a route, or set route "default" to say so.

W088: WaitForSignal poll interval is ignored

Warning. pollIntervalMs is deprecated and does nothing: a waiting run resumes as soon as the signal arrives.

Fix: Remove pollIntervalMs from the step.

Example: [W088] WaitForSignal step 'wait' sets pollIntervalMs, which is deprecated and has no effect: a waiting run resumes as soon as the signal arrives. Remove it.

Agent steps and connections

Agent capabilities, their inputs, and connections.

E020: Unknown agent

Error. The step uses an agent id that is not installed or enabled on this server.

Fix: Pick an agent from the available list (the message suggests the closest match).

Example: [E020] Step 'a' uses unknown agent 'utilz'. Did you mean 'utils'? Available agents: ai-tools, azure-blob-storage, bedrock, compression, control, crypto, csv, datetime, http, hubspot, mailgun, mcp, object-model, openai, quickbooks, s3-storage, sharepoint, shopify, slack, sqs, stripe, teams, text, transform, utils, xlsx, xml

E021: Agent has no such capability

Error. The agent exists but does not offer the capability (action) named in the step.

Fix: Choose one of the agent’s listed capabilities.

Example: [E021] Step 'a': agent 'utils' has no capability 'return-everything'. Did you mean 'return-input-string'? Available capabilities: random-double, random-array, return-input-string, return-input, do-nothing, delay-in-ms, calculate, format-date-from-iso, iso-to-unix-timestamp, get-current-unix-timestamp, get-current-iso-datetime, get-current-formatted-datetime, country-name-to-iso-code

E022: Required input is missing

Error. The capability needs this input and the step does not map anything to it.

Fix: Map a value to the named input in the step configuration.

Example: [E022] Step 'a': capability 'http:http-request' requires input 'url' but it is not provided

E023: Fixed value has the wrong type

Error. A fixed (immediate) value does not match the type the input expects, e.g. text where a whole number is needed.

Fix: Enter a value of the expected type, e.g. 30000 instead of “30s”.

Example: [E023] Step 'a': field 'timeout_ms' expects type 'integer' but got 'string'

E024: Value is not an allowed option

Error. The input accepts only a fixed list of values and the one given is not on it.

Fix: Use one of the allowed values listed in the message.

Example: [E024] Step 'a': field 'method' has invalid value 'FETCH'. Allowed values: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS

E025: Condition is not in the expected shape

Error. A condition passed to an agent is not a valid condition object; each argument must be a value object such as a reference or an immediate value.

Fix: Write each argument as {“valueType”: “reference”, “value”: “status”} or {“valueType”: “immediate”, “value”: “active”}, and pass the whole condition as an immediate value.

Example: [E025] Step 'a': condition input 'condition' has invalid shape at inputMapping.condition.value: expected ConditionExpression JSON with top-level `type` (`operation` or `value`); deserializer reported: invalid type: string "status", expected internally tagged enum MappingValue

E026: Agent needs a connection

Error. This capability needs a connection (for example a database or account) and none is selected on the step.

Fix: Select a connection on the step (connectionId).

Example: [E026] Step 'a': capability 'object-model:query-instances' requires connection_id but no connectionId is configured

E027: Operator only works in queries

Error. The condition uses an operator (MATCH, SIMILARITY_GTE, COSINE_DISTANCE_LTE or L2_DISTANCE_LTE) that only the object-model query engine understands, so in a workflow condition it can never be evaluated.

Fix: Use a workflow operator such as CONTAINS, EQ or STARTS_WITH, or move the filter into an object-model query condition.

Example: [E027] Step 'check': operator 'MATCH' in condition is only valid inside object-model query conditions; the workflow runtime cannot evaluate it

W020: Unknown input for this agent capability

Warning. A step maps an input that the selected agent capability does not have, so the value will be ignored.

Fix: Rename the input to one of the available fields (the message suggests the closest match) or remove it.

Example: [W020] Step 'a': input 'valeu' is not a known field for 'utils:return-input'. Did you mean 'value'? Available fields: value

AI Agent steps

Tools, memory, and MCP toolsets connected to an AI Agent.

E112: AI Agent has no LLM connection

Error. An AI Agent step needs a connection to a language model provider to run.

Fix: Select an LLM connection on the step (connectionId), or bind one with connectionRef.

Example: [E112] AI Agent step 'ai' is missing connection_id. An LLM connection is required for AI Agent steps.

E110: AI Agent has duplicate tool names

Error. Each tool edge from an AI Agent step becomes a tool the model can call, so every tool label must be unique, including the names generated for MCP toolsets (_search and _invoke).

Fix: Rename one of the tool edges so each label is unique.

Example: [E110] AI Agent step 'ai' has duplicate tool label 'lookup' (including generated MCP names)

E111: AI Agent tool name has invalid characters

Error. Tool edge labels become tool names for the model and may contain only letters, digits, and underscores.

Fix: Rename the edge label using letters, digits, and underscores only (for example look_up_order).

Example: [E111] AI Agent step 'ai' has invalid tool edge label 'look-up order'. Labels must contain only alphanumeric characters and underscores.

E113: AI Agent has more than one memory

Error. An AI Agent step can use at most one memory provider, connected through a single ‘memory’ edge.

Fix: Remove the extra ‘memory’ edge so only one remains.

Example: [E113] AI Agent step 'ai' has multiple 'memory' edges. At most one memory provider is allowed.

E114: Memory edge points to a non-Agent step

Error. The ‘memory’ edge must lead to an Agent step that provides conversation memory; it points to some other kind of step.

Fix: Point the ‘memory’ edge at a memory provider Agent step.

Example: [E114] AI Agent step 'ai' has a 'memory' edge pointing to 'mf', which is not an Agent step. Memory providers must be Agent steps.

E115: Memory configured but no memory provider

Error. The AI Agent step has memory settings, but no ‘memory’ edge connects it to a provider that would store the conversation.

Fix: Add a ‘memory’ edge to a memory provider Agent step, or remove the memory settings.

Example: [E115] AI Agent step 'ai' has memory config but no 'memory' edge. Add a 'memory' labeled edge to a memory provider Agent step.

E116: Memory provider connected but not configured

Error. The AI Agent step has a ‘memory’ edge, but no memory settings telling it which conversation to use.

Fix: Add memory settings with a conversation ID, or remove the ‘memory’ edge.

Example: [E116] AI Agent step 'ai' has a 'memory' edge but no memory config. Add a memory configuration with at least a conversation_id.

E120: MCP toolset edge points to a non-Agent step

Error. An ‘mcp.’ edge from an AI Agent must lead to an Agent step that uses the MCP agent.

Fix: Point the edge at an Agent step that uses the ‘mcp’ agent.

Example: [E120] AI Agent step 'ai' has an 'mcp.github' edge pointing to 'tf', which is not an Agent step. MCP toolsets must be Agent steps (with agent_id = 'mcp').

E121: MCP toolset edge points to wrong agent

Error. An ‘mcp.’ edge leads to an Agent step, but that step uses a different agent instead of the MCP agent.

Fix: Change the target step to use the ‘mcp’ agent, or use a plain tool label for a regular agent.

Example: [E121] AI Agent step 'ai' has an 'mcp.github' edge pointing to Agent step 't1', which uses agent_id = 'utils'. MCP toolsets must target the 'mcp' agent.

E122: MCP toolset edge has no name

Error. An ‘mcp.’ edge needs a toolset name after the dot, which the model uses to name the tools.

Fix: Add a name after ‘mcp.’, for example mcp.linear.

Example: [E122] AI Agent step 'ai' has an MCP edge with empty toolset suffix ('mcp.'). Use a non-empty name like 'mcp.linear' or 'mcp.slack'.

E123: Two MCP toolsets share a name

Error. Two ‘mcp.’ edges from the same AI Agent use the same toolset name, so their tools would collide.

Fix: Rename one of the edges so each MCP toolset name is unique.

Example: [E123] AI Agent step 'ai' has multiple MCP edges with the same toolset suffix 'github'. Each mcp.<toolset> name must be unique within one AI Agent step.

W072: onWait never runs for AI agent tools

Warning. When an AI agent calls a WaitForSignal step as a tool, the wait happens but that step’s onWait steps are skipped, so anything in them never runs.

Fix: Move the onWait logic before the AiAgent step or into a separate tool the model can call.

Example: [W072] Step 'ai': tool 'ask_approval' targets WaitForSignal 'approve' whose onWait subgraph is ignored for AiAgent tool waits — it will never run. Move that logic before the AiAgent step or into a tool the model can call.

Child workflows

Start Workflow steps and the workflows they run.

E124: Embedded child workflow not found

Error. An Embed workflow step points to a workflow that does not exist (or was deleted), so this workflow cannot compile.

Fix: Pick an existing child workflow on the step, or remove the step.

Example: [E124] EmbedWorkflow step 'notify' references child workflow '00000000-0000-0000-0000-000000000000', which was not found. The workflow cannot compile until the child exists.

E050: Child workflow version is invalid

Error. The child workflow version must be ‘latest’, ‘current’ or a positive version number.

Fix: Set the version to ‘latest’, ‘current’ or a version number of 1 or higher.

An invalid version also produces E124 for the same step, because the child cannot be looked up at that version. Fix the version and both go away.

Example: [E050] Step 'notify': child workflow '68846984-8b98-4466-8127-ff854256c0a3' has invalid version 'newest': must be 'latest', 'current', or a version number

E054: Child workflow accepts no inputs

Error. The step passes inputs to a child workflow that has no input schema, so the child has no inputs to receive them.

Fix: Add an input schema to the child workflow, or remove the step’s input mapping.

Example: [E054] EmbedWorkflow step 'call' provides inputs to child 'ab89c715-8007-4372-a46e-fa3424858d36' but child has no inputSchema defined. Add inputSchema to the child workflow or remove inputMapping.

E055: Child workflow inputs are missing

Error. The step does not provide all the inputs the child workflow marks as required.

Fix: Map every missing field listed in the message in the step’s input mapping.

Example: [E055] EmbedWorkflow step 'notify' is missing required inputs for child workflow '68846984-8b98-4466-8127-ff854256c0a3': Missing fields: - lineCount (Integer) - reference (String) Provided fields: - supplier ✓

E056: Workflows embed each other in a loop

Error. Workflows embed each other in a loop, including a workflow that embeds itself, so a run would never end.

Fix: Remove the EmbedWorkflow step that closes the loop.

Checked when you save, because it needs the saved workflows. The message lists the workflow IDs in the loop.

Example: Circular dependency detected in workflow chain: 84d96629-e244-40df-b2ba-683d18e2117b -> 84d96629-e244-40df-b2ba-683d18e2117b

E125: Embed step ID used more than once

Error. Embed workflow step IDs must be unique across the workflow, its loop bodies, and every workflow it embeds, and this ID appears on more than one of them.

Fix: Rename one of the Embed workflow steps so its ID is unique.

Example: [E125] Step id 'notify' is used by more than one EmbedWorkflow step across this workflow and its embedded children. Embed step ids must be unique across the whole closure — rename one of the steps.

W077: Workflow to start is not a fixed id

Warning. The workflow to start comes from data at run time, so Runtara can’t check that it exists until the step runs, when it may fail as not found or not runnable.

Fix: Use a literal workflow id when the target is known, or make sure the value always names a runnable workflow.

Example: [W077] Step 'start' starts a workflow whose workflowId is not a literal; the target is only checked when the step runs (not-found or not-runnable then).

W074: Fixed run label reused inside a loop

Warning. A step that starts another workflow uses the same run label on every loop pass, but labels must be unique per parent, so the second pass fails with label-conflict.

Fix: Build the run label from the iteration, for example with a template that includes the item or index.

Example: [W074] Step 'start' starts a child with a literal runLabel inside loop 's'. Run labels are unique per parent, so the second iteration fails with label-conflict; build the label from the iteration (for example with a template).

Waiting, durability, and coordinating runs

Steps that pause a run, and steps that start or control other runs.

E028: Waiting step must be durable

Error. A step that pauses the run and resumes it later needs durable checkpoints, but the workflow or step turned durability off.

Fix: Remove durable: false from the workflow (and the step).

Also applies to Agent steps whose capability can pause the run (marked Long-running in the step picker).

Example: [E028] Step 'wait' is a WaitForInstances step but is not durable. A suspending step parks its run and replays to it, so it must be durable: remove durable: false from the step and the workflow.

E029: Suspending step has no timeout

Error. A step that calls a capability able to pause the run must have a hard deadline, and this one has no timeout or a timeout of 0.

Fix: Set timeoutMs on the step to a value above 0 (and above about 1 second, or W078 warns that it will time out instead of pausing).

Applies to Agent steps whose capability can pause the run (marked Long-running in the step picker).

Example: [E029] Step '<step>' calls suspending capability '<agent>:<capability>' without a timeout. Set timeoutMs (> 0): it is the hard deadline of the step, parked time included.

W078: Timeout too short for the step to wait

Warning. A step that pauses the run to wait has a timeout of one second or less, so it times out instead of pausing.

Fix: Raise timeoutMs well above 1000 ms.

Applies to Agent steps whose capability can pause the run (marked Long-running in the step picker).

Example: [W078] Step '<step>' calls a suspending capability with timeoutMs=<ms>, at most the 1000ms deadline margin: it times out instead of parking. Raise timeoutMs.

E131: Waiting step in an unsupported place

Error. A step that parks the run (a WaitForInstances step or a suspending agent capability) sits somewhere a run cannot pause: an onError handler, a WaitForSignal onWait body, or an AI Agent tool or memory step.

Fix: Move the waiting step onto the normal path (for example after the handler rejoins the main flow), or replace it with a step that does not wait.

Example: [E131] Step 'w' is a WaitForInstances step in an unsupported context (on-error-region): A step reached only through an onError edge.

E132: Control step in an unsupported place

Error. A Control agent step (reading, starting or coordinating other runs) is inside a WaitForSignal onWait body or is an AI Agent tool or memory step, where control calls are not supported.

Fix: Move the Control step out of the onWait body or AI Agent tool/memory role and run it on the main path instead.

Example: [E132] Step 'peek' calls control capability 'control:get' in an unsupported context (on-wait): A step inside a WaitForSignal onWait subgraph.

E133: Invalid WaitForInstances run list or timeout

Error. A WaitForInstances step has a literal run list or timeout that can never work: the list is not an array, is empty, holds blank or non-string ids, or names more than 1000 runs, or the timeout is not a positive whole number.

Fix: Give instanceIds at least one run id (or map it from an earlier step) and set timeoutMs to a positive number of milliseconds.

Example: [E133] WaitForInstances step 'w' has an invalid instanceIds: names no runs; a wait needs at least one

E145: Delay step in a non-durable workflow

Error. A Delay pauses the run and resumes it later, which needs durability, but this Delay (or the workflow or loop body it is in) has durability turned off.

Fix: Turn durability back on for the step and workflow, or remove the Delay.

Example: [E145] Delay step 'wait' is not durable. A Delay parks the run instead of holding a runner, which needs durability: enable durability for the workflow or step, or remove the delay.

E138: Graph shape the compiler cannot build

Error. The workflow passes every other check, but the compiler cannot turn this shape into a runnable workflow; the message names the shape and the reason.

Fix: Follow the reason in the message. For a Wait for Signal step in a non-durable workflow, for example, turn durability back on or remove the wait.

Reported only when the workflow has no other errors. The text in parentheses names the shape.

Example: [E138] Step 'ws' uses a graph shape the compiler cannot build (non-durable-wait-for-signal): WaitForSignal requires a durable workflow so the instance can park instead of holding a runner; enable durability or remove the wait

W073: Split parallelism may not run concurrently

Warning. Asking a Split for parallelism does not guarantee it: only a narrow body shape runs concurrently, and every other shape quietly runs one item at a time.

Fix: Keep the body to a single Agent step with maxRetries 0 and no retries on the Split, or remove parallelism if sequential is fine.

Example: [W073] Split step 's' sets parallelism=4 — a concurrent window requires a single-Agent body whose maxRetries is 0 (unset defaults to 3, which forces sequential execution), with no breakpoint, not a workflow-agent child and no operation-scoped (suspending or control) step, on a Split with no retries; enclosing and Split timeouts retain the concurrent window, while other shapes run sequentially.

W087: Sequential setting overrides Split parallelism

Warning. The Split asks for both one-at-a-time and parallel processing; sequential wins, so the parallelism setting is ignored.

Fix: Remove either sequential or parallelism.

Example: [W087] Split step 's' sets sequential: true and parallelism 4. Iterations run one at a time; remove one of the two.

W075: Control step forces parallel work to serialize

Warning. A step that starts, signals, cancels or reads other runs (or suspends) cannot run concurrently, so a parallel Split or parallel branches holding it run one at a time.

Fix: Accept the serialized run, or move the control step out of the parallel Split or branch group.

Example: [W075] Step 'get' is operation-scoped (suspending or control), so parallel Split 's' runs it serialized, never concurrently: The body of a Split with parallelism other than 1; iterations holding the step run one at a time.

W076: Enclosing retry replays a control operation

Warning. The step sits inside a Split (or embedded workflow) that retries as a whole; on retry the operation isn’t repeated, it replays its first result.

Fix: Set maxRetries: 0 on the enclosing Split and put retries on the step itself.

Example: [W076] Step 'cancel' is operation-scoped (suspending or control) and 's' retries the region around it: a retry replays the operation's first outcome instead of repeating it. Set maxRetries: 0 on 's' or retry the step itself.

Workflow state

State declared in Settings > State and written with Set State.

E134: State step without a state schema

Error. A SetState or GetState step is used, but the workflow does not declare what state it keeps.

Fix: Add a stateSchema to the workflow that declares every field your SetState steps write.

Example: [E134] SetState step 'save' needs the workflow to declare its state: add a stateSchema

E135: SetState writes an undeclared field

Error. A SetState step writes a field that the workflow’s stateSchema does not list.

Fix: Add the field to stateSchema, or change the SetState step to write one of the declared fields.

Example: [E135] SetState step 'save' writes field 'stage', which stateSchema does not declare. Declared fields: progress

W081: State schema setting has no effect here

Warning. State starts empty and is filled in by steps, so required, default, visibleWhen and requiredWhen do nothing on a state field.

Fix: Remove those settings from the stateSchema field.

Example: [W081] State schema field 'progress' sets required, default, which has no effect: state starts empty and is written by steps. Remove the setting.

W082: State is not published in non-durable workflows

Warning. In a non-durable workflow, SetState and GetState work only inside the run; the state isn’t published for other runs or the platform to read.

Fix: Make the workflow durable if the state needs to be readable from outside the run.

Example: [W082] SetState step 'set' keeps local state: a non-durable workflow does not publish its state to readers. Make the workflow durable to publish it.

W083: Embedded workflow state stays inside the child

Warning. The embedded child workflow sets or reads state, but that state stays inside the embedded run; only the outer workflow’s state is published.

Fix: Move the SetState steps into the parent workflow, or start the child as its own run if its state must be readable.

Example: [W083] EmbedWorkflow step 'embed' embeds '7257e3b5-c8fd-4828-972e-76c8ad228185', whose SetState and GetState steps keep state local to the embedded run: only the outer run publishes state.

Schema fields and definition spelling

Input, output, and state fields, and the spelling of the workflow definition.

E008: Schema field name used twice

Error. Two fields in the same schema have the same name (spaces at either end ignored), and a schema can hold each name only once.

Fix: Rename or remove one of the duplicate fields.

The editor checks this as you type: each duplicate row shows Field name must be unique. The label names the schema: Input, Output, or State.

Example: [E008] Input schema field name 'order_id' is duplicated. Field names must be unique.

E151: Field condition has no comparison value

Error. A visibleWhen or requiredWhen rule names a field to check but does not say what value to compare it with, so it can never be evaluated.

Fix: Add equals or notEquals to the rule, or remove the rule.

Example: [E151] Field 'reason' in inputSchema has a visibleWhen with neither 'equals' nor 'notEquals'. Add one, or remove the condition.

W089: Field visibility condition can never match

Warning. A visibleWhen or requiredWhen rule says the other field must both equal and not equal the same value, which can never be true, so the rule never applies.

Fix: Keep either equals or notEquals, or give them different values.

Example: [W089] Field 'reason' in inputSchema has a visibleWhen whose equals and notEquals are the same value, so it can never hold.

W086: Unknown key in the definition is dropped

Warning. A key in the workflow definition doesn’t match any field Runtara knows (usually a typo), so it is dropped and has no effect.

Fix: Fix the spelling of the key, or remove it.

Example: [W086] 'inputSchema.name.requird' is not a workflow field and is ignored. Check the spelling.

W084: Workflow-wide setting ignored in a nested graph

Warning. A Split, While or onWait body sets something that only applies to the whole workflow, such as rateLimitBudgetMs or executionTimeoutSeconds, so it does nothing there.

Fix: Move the setting to the workflow’s top-level graph.

Example: [W084] Split 's' subgraph sets rateLimitBudgetMs, which has no effect there: it applies to the whole workflow. Set it on the workflow instead.

W093: Deprecated field spelling is still accepted

Warning. The definition uses an old spelling (the json type hint, a millisecond field without Ms such as timeout, or GroupBy total_groups) that still works until DSL 4.0.

Fix: Switch to the spelling the message suggests.

Also reported for timeout, retryDelay, and turnTimeout; use timeoutMs, retryDelayMs, and turnTimeoutMs.

Example: [W093] 'steps.done.inputMapping.v.type' uses the deprecated spelling 'json'. Use 'object or array, or no type hint' instead; both are read until DSL 4.0, which removes 'json'.