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
Static validation runs automatically—there’s no separate command to invoke it. If your workflow has validation errors, Reliant reports them when loading the workflow and it won’t appear in the workflow picker.
You can also trigger validation explicitly using the
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
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:, the simulator uses black-box mocking with the ref name by default. When the scenario targets qualified inner nodes and the runner can resolve the referenced workflow, it executes that referenced workflow internally instead.
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:
Scenarios are stored alongside the workflow and run instantly without network calls or LLM API usage.