The workflow
parallel.fabro
Fan-out with the fork node
Thefork node has shape=component, making it a parallel fan-out node. Every outgoing edge becomes a concurrent branch:
Join policies
Thejoin_policy controls when execution can proceed past the merge:
| Policy | Behavior |
|---|---|
wait_all | Wait for every branch to finish (default) |
first_success | Proceed as soon as one branch succeeds |
k_of_n(N) | Proceed after N branches succeed |
quorum(0.5) | Proceed after a fraction of branches succeed |
Error policies
Theerror_policy controls what happens when a branch fails:
| Policy | Behavior |
|---|---|
continue | Run all branches even if some fail (default) |
fail_fast | Cancel remaining branches as soon as one fails |
ignore | Treat all branch failures as successes |
error_policy="continue" so that a failure in one review perspective doesn’t cancel the others.
Fan-in with the merge node
Themerge node has shape=tripleoctagon, making it a merge (fan-in) node. It collects results from all branches into a single context:
report node receives all three perspectives in its preamble and synthesizes them.
Concurrency control
By default, Fabro runs up to 4 parallel branches simultaneously. Control this withmax_parallel:
What you’ve learned
- Fan-out nodes (
shape=component) spawn concurrent branches - Merge nodes (
shape=tripleoctagon) collect branch results - Join policies control when execution can proceed past the merge
- Error policies control how branch failures are handled
- Each branch gets an isolated copy of the context
Next
Multi-Model Routing
Assign different models to different workflow nodes using stylesheets.