The Funnel operation joins many exclusive branches into one continuation. Each firing it passes to Out the one input that arrived on this firing — the lowest-numbered one when several did — and stops the path when none did. It is a router, not a transformer: it never inspects a value, so every port is Any.
With fewer than two inputs connected there is nothing to choose between, and the Editor shows an info badge on the Node saying so.
Inputs
Port
Type
Required
Description
In 1
Any
No
A branch’s value.
In 2
Any
No
Another branch’s value.
In (variable, up to 20 inputs in total)
Any
No
Further branches, added on demand in the Node’s Settings tab.
Every input is loose: the engine does not wait for its producer before running the Funnel, and the Editor offers no Validation rule on it. That is what lets each input sit on a branch the others exclude.
Outputs
Port
Type
Default
Description
Out
Any
Nil
The value of the input that arrived. Unchanged when none did.
Properties
Name
Type
Default
Description
On Error
Combo
Stop this branch
Per-op On Error verb (Stop this branch / Continue with the last value / Continue with the fallback). See the Error Handling guide.
Out → Fallback
bool / int / float / string
Nil
Per-output fallback value used when Continue with the fallback fires. Edit in Settings under the Out port.
State on Reload
Funnel keeps no value of its own. Out is preserved across restarts like any port, within the configured time window.
A step that must follow either outcome of a Node — acknowledge the device, release a lock, write the audit row, bump the attempt counter — drawn once.
Connect the Node’s value output to In 1 and the body of its error branch to In 2, and put the step after Out. Whichever branch ran, the step runs once, with one set of settings and one state, so a Node that carries either is not duplicated to drift.
A Primary source on the trigger, a Secondary source gated by the Primary’s error output, both value outputs into a Funnel, and the processing off Out.
The processing receives the answer from whichever source produced one: the Primary’s when it succeeded, the Secondary’s when the Primary failed. Without the Funnel the two sources would need two copies of everything that follows.
Funnel has nothing of its own to fail at: it reads no setting and inspects no value, so it fails only when the engine cannot read one of its inputs. The Node still carries an On Error verb and an error output like every Node — it is not infallible — and a failure is resolved by that verb:
Verb
What it does
Stop this branch (default)
This Node and its dependents stop; Out keeps its value, and the Node’s last attempt reads as failed.
Continue with the last value
Out keeps its value, not stamped as new; dependents run on it.
Continue with the fallback
Out takes its configured fallback as the value produced by this firing.
A firing on which nothing arrived is a stop, not a failure: no verb is consulted and the error output does not fire.