Static Validation
Reliant validates every workflow when it’s loaded. This catches structural problems before your workflow ever runs.What Gets Validated
Static validation checks for:- Entry point validity: Every node listed in
entrymust exist in the workflow - Node references: Edges can’t reference non-existent node IDs
- Input completeness: Every input must have either a
defaultvalue orrequired: true - Loop structure: Loop nodes must have either a
workflowreference or aninlinedefinition - Edge consistency: Edge targets must be valid node IDs within the workflow
- Reserved names: Input groups can’t use reserved names like
default - CEL expression syntax: Template expressions and conditions are checked for valid syntax
Common Validation Errors
| Error | Cause | Fix |
|---|---|---|
| ”input X has no default and is not required” | Input missing both default and required: true | Add one of the two |
| ”node X not found” | Edge references a non-existent node ID | Check spelling of node IDs |
| ”entry node X not found” | entry lists a node that doesn’t exist | Match entry names to node IDs |
| ”loop must have either ‘workflow’ or ‘inline‘“ | Loop node missing its body | Add an inline definition or workflow reference |
validate_workflow tool in the workflow builder, which is useful when iterating on a workflow definition.
When Static Validation Isn’t Enough
Static validation confirms your workflow is structurally sound, but it can’t tell you whether the workflow actually does what you intend. A workflow can pass all validation checks and still route to the wrong node, loop forever, or produce unexpected outputs. That’s where scenario testing comes in.Scenario Testing
Scenario testing lets you verify workflow runtime behavior without running real LLM calls or tool executions. You define simulated events—mocked LLM responses and tool results—then assert expected outcomes like which nodes were reached, what outputs were produced, and whether the workflow completed successfully.How It Works
The scenario simulator executes your workflow’s node graph, but instead of calling real activities, it uses your mocked events to produce node outputs. It follows the same edge routing, condition evaluation, and loop logic as the real executor.Scenario Structure
A scenario YAML file defines:Event Types
| Type | Fields | Description |
|---|---|---|
llm_response | text, tool_calls | Simulates an LLM returning a response |
tool_result | tool, output | Simulates a tool returning results |
tool_error | tool, error | Simulates a tool failing |
llm_error | error | Simulates an LLM API error |
user_input | user_text | Simulates user sending a message |
Event Fields
Targeting Nodes
By default, events are consumed sequentially — the first triggered node gets the first event, and so on. Use thenode field to target a specific node:
Inner Nodes (Loops and Sub-Workflows)
For workflows with inline loops or inline sub-workflows usingtype: workflow with inline:, you can target individual nodes inside them using dot-separated qualified IDs:
How inline simulation works
For inline loops with aninline: definition, the simulator:
- Creates a sub-state-machine for the inline workflow
- Executes each inner node individually per iteration
- Evaluates conditions on inner nodes and skips those with false conditions
- Evaluates edges within the loop to determine node ordering
- Calls the mocker with qualified IDs like
loop_id.inner_node_id - Evaluates the
whilecondition after each iteration - If the sub-workflow declares
outputs:, evaluates them for thewhilecondition
type: workflow and inline:, the simulator:
- Creates a sub-state-machine for the inline workflow
- Evaluates conditions on each inner node and tracks false conditions as skipped
- Executes inner nodes using qualified IDs like
workflow_id.inner_node_id - Evaluates the sub-workflow’s
outputs:expressions if declared
ref: to an external workflow, the simulator mocks the entire node as a black box using the ref name as the mock ID, since external workflows cannot be loaded in the simulator.
Expectations
Theexpect section defines assertions:
Partial Testing
Usestart_at and state to test from a specific point in the workflow:
Loop Testing Patterns
Single Iteration (Exit Immediately)
Multi-Iteration Loop
Provide events for each iteration. The simulator consumes events per-node sequentially:Testing Loop Output Routing
When a loop’s inline workflow declaresoutputs:, those evaluated outputs are available for downstream edge conditions:
Using Scenario Tools
In the workflow builder, use these tools to manage scenarios:| Tool | Usage |
|---|---|
list_scenarios | See all scenarios and their status |
view_scenario | Examine a scenario’s full YAML |
create_scenario | Create a new scenario and run it automatically |
edit_scenario | Make targeted edits to a scenario |
run_scenario | Re-run a scenario after workflow changes |