How the simulation differs from a real run
The simulation leaves out the parts of a run that depend on a live server and real data:- No plugin work. Nodes do not call models, APIs or databases. Each node simply finishes, or fails if you mark it.
- No retries, timeouts or limits. A node marked to fail fails at once. In a real workflow,
retry, time limits and failure budgets apply first. - No messages or delivery modes. A node runs once per step. Real nodes handle streams of messages, with buffering and back-pressure between them.
- No approval waits. A
WAIT_FOR_SIGNALnode finishes straight away. A real one holds until a signal arrives. - No persistence. Nothing is stored, and a reload starts from the preset again.
- A simplified join rule. A node waits for all of its active inputs. If one parent fails, the node ends
UPSTREAM_FAILEDunless you setengine.triggertoALL_DONEorONE_SUCCESSin itsconfig. - Simplified routing. The simulation follows an
erroredge when its source node fails, whether or not the node setsonErrortoROUTE. Ports such asinvalidstay quiet unless their node fails, because the simulation cannot judge a message.
A failure that is routed to an
error edge shows the failing node as FAILURE, the route target as running, and the nodes that only the normal path would reach as UPSTREAM_FAILED. Nodes that the run never needed stay PENDING and are reported as not reached.