Skip to content

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.

These participate in topological scheduling — a node runs once all its incoming flow edges are satisfied.

TypeBehavior
Data (default)The source’s output is passed to the target as input. The standard connection.
EventPure signaling — the target runs after the source completes, but no data is passed.
ControlExplicit gating: the target waits for the source. Used by Condition nodes to gate a branch.
SuccessFollowed only when the source node succeeds.

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.

TypeBehavior
FailFollowed only when the source node fails. May point backward to form a retry loop. Drives error handling, not the DAG.
MembershipA 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.

Every edge stores:

  • source, target — the connected node ids.
  • edge_type — one of the six types above (data is 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.