Skip to main content

Branching and repetition

A flow is rarely a straight line. Four steps handle decision, joining, and repetition.

Condition​

Chooses between two paths based on a comparison. The exits are called Yes and No.

You build the comparison by choosing a value, an operator and, when the operator needs one, a value. The operators offered depend on the value's type — you cannot ask for "is greater than" on a text.

"Starts with" and "ends with" are not offered

And that is intentional: implementing them as "contains" would approve xyzABC for "starts with ABC". When the operator genuinely exists, it will appear.

Without the No path, the run simply does not continue when the comparison is false. If the "otherwise" matters, connect it.

Choose a path​

For three, four, or more alternatives, use Choose a path rather than chained conditions.

  • The paths are evaluated top to bottom; the first match wins.
  • The order is a visible list, not a consequence of the layout.
  • The value is evaluated once, before all the cases — two cases never see different values.
  • Up to 12 paths.

Use the default path. Without it, an unexpected value stops the run without taking any path. Publishing warns when it is missing.

The path taken is recorded in the step's output. Routing consults that record rather than re-evaluating — what the audit shows is what the run did.

Combine results​

When two or more paths need to meet again, connect them to Combine results. It waits for all of them to resolve and gathers what each produced.

ChoiceOptions
How to combineOne field per step (recommended) · A list, in connection order
Name of each sourceLeft blank, the step's name applies
If a source brings no dataInclude as empty (recommended) · Leave it out · Fail

The sources come from the connections arriving at the step, not from a typed list: a typed list could disagree with the layout, and it is the layout you believe.

A path that did not run appears named among the sources with no data. Including the empty explicitly is the default so an incomplete result does not look like a complete one.

Two sources with the same name

If two sources produce the same key, publishing is refused. Without that, one would silently overwrite the other — and an object with one key fewer is still a valid object.

For each item​

Repeats the same treatment for each item in a list, delegating to a published agent: each item becomes a run of its own.

FieldUse
ListWhere the items come from
AgentWho handles one item
What it receivesAssembled with "the item" and "the index"
Maximum itemsRequired. Ceiling of 50
If an item failsStop, or continue and record

Produces: the results, the items that failed, how many were handled, and the total.

Two properties matter in practice:

  • The list is frozen on the first pass. If the run resumes, "item 3" still means the same thing.
  • Progress is stored. A resume continues where it stopped; no item is processed twice.

The maximum is required on purpose. A list coming from outside can have a thousand elements, and a thousand child runs is not a loop — it is an incident. A list longer than the maximum fails; it is never silently cut.

An empty list is a legitimate result, not an error.

What publishing checks​

  • Every step must be reachable from the start.
  • There must be no cycle.
  • Every step that is not a Result must have an exit.
  • Every path declared in a switch must be connected to some destination.

Next steps​