Edge types
Edges connect nodes. Most edges carry data flow and drive the execution schedule (the topological order). Two edge types are non-flow: they’re read or followed by special-case logic and are deliberately excluded from scheduling.
To set an edge’s type, draw a connection on the canvas and pick the type in the edge menu.
Flow edges
Section titled “Flow edges”These participate in topological scheduling — a node runs once all its incoming flow edges are satisfied.
| Type | Behavior |
|---|---|
| Data (default) | The source’s output is passed to the target as input. The standard connection. |
| Event | Pure signaling — the target runs after the source completes, but no data is passed. |
| Control | Explicit gating: the target waits for the source. Used by Condition nodes to gate a branch. |
| Success | Followed only when the source node succeeds. |
Non-flow edges
Section titled “Non-flow edges”These are excluded from the topological sort and from a node’s predecessors/successors,
so they never block or trigger scheduling. They’re handled by dedicated logic instead.
| Type | Behavior |
|---|---|
| Fail | Followed only when the source node fails. May point backward to form a retry loop. Drives error handling, not the DAG. |
| Membership | A structural reference: a coordinator (Panel / Orchestrator) points at the Agent reference nodes it convenes. Read off the graph to build the roster — it carries no data and imposes no ordering. |
Edge fields
Section titled “Edge fields”Every edge stores:
source,target— the connected node ids.edge_type— one of the six types above (datais the default).condition_branch— the branch label a Condition node uses to choose this edge.label— an optional display label.
The canonical definition lives in backend/src/graph/schema.rs (EdgeType), and the scheduling
filter (EdgeType::is_flow) is what excludes Fail and Membership from the topological sort.