Flow Control
What this category is for
Use flow-control nodes to control timing, split execution, synchronize branches, redirect clients, or terminate execution explicitly.
Node list table
| Node type | Purpose | Key inputs | Branch outputs |
|---|---|---|---|
delay_node | Pauses execution for a configured time. | Config delay_ms | none |
parallel_node | Forks to all outgoing edges concurrently. | none | none (all outgoing edges run) |
merge_node | Waits until all incoming branches complete and emits combined upstream outputs. | implicit $predecessor_ids, $upstream | none |
redirect_node | Sends HTTP redirect and ends flow. | input url (required), config status (301/302/307/308) | none |
stop_node | Ends workflow without sending a response. | none | none |
Common patterns
1) Fan-out then join
parallel_nodetriggers multiple independent branches (audit write, notification, enrichment)- Each branch feeds
merge_node - Use
merge_node.resultto build one consolidated downstream payload
2) Rate-limited upstream protection
- Insert
delay_nodebeforehttp_request_nodefor controlled pacing in sensitive integrations - Tune
delay_msconservatively and measure latency impact
3) Async side effect after response
response_node(immediate client reply) then side branch toparallel_nodeandstop_node- Useful when client must not wait for non-critical work
4) Redirect-based handoff
condition_nodeorswitch_node->redirect_nodefor browser-facing flows (auth handoff, docs relocation)
Common mistakes and how to debug
- Merge never runs:
merge_nodeexecutes only when all incoming predecessors have completed. Check missing edges or branches terminated early. - Unexpected cycle error: engine marks visited nodes and fails on revisit. Avoid wiring arbitrary cycles back into already executed nodes. Controlled iteration uses the Loop Node (see Logic And Routing), which runs body nodes per array item—do not confuse with accidental graph cycles.
stop_nodeused in request/response path: it does not send HTTP response. For API endpoints, end withresponse_nodeorredirect_node.parallel_nodeordering assumptions: branch completion order is non-deterministic. Do not rely on ordering side effects.- Redirect URL missing:
redirect_nodeerrors whenurlis empty. Confirm expression resolves to a non-empty string.