Skip to main content
A decision node is an internal node that does not speak: it asks no questions and says no phrases. Its only job is to route the flow by evaluating a set of conditional rules. It is where branching logic that spans several answers or variables lives. Decision node

How rules are evaluated

  • First match wins: rules are evaluated in order, and the first whose condition holds is taken.
  • Mandatory default branch: the last rule must be always. This guarantees the node always has an exit; if it is missing, publishing the protocol fails.
  • A decision node has no “own value”, so every rule other than always must explicitly state which variable it evaluates.

Where a rule routes to

Each rule points to one of two things:
  • Another node in the flow (a question, a phrase, a webhook, or another decision node), or
  • A terminal action that closes the run:
    • end_protocol_run — finishes the questionnaire.
    • mark_unresolved — finishes it, marked as unresolved.
In the builder, terminal actions appear as distinct end nodes (End and Unresolved).

When to use them

Use a decision node when branching depends on more than the immediate answer: combining several answers, comparing against a variable, or reacting to a webhook result.