You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -39,6 +39,37 @@ A `notify` service task stands alone: it cannot carry another action (`setField`
39
39
40
40
A decision condition may walk **one hop** off the trigger entity (`customer.creditLimit > 10000`): a resolver step is generated before the gateway to load the related entity and rewrite the condition.
41
41
42
+
### parallel β concurrent branches (fork/join)
43
+
44
+
A `parallel` step runs several branch steps **at the same time** and rejoins before the next step β two independent reviews of one order, say, instead of one after the other. It declares the `branches` to run concurrently and the `next` step to continue at once every branch is done:
It is a **parallel-gateway fork/join**: a diverging gateway fans an unconditioned flow to each branch, and a converging gateway waits for **all** branches before continuing.
54
+
55
+
A branch is a **chain**, not a single step. It starts at the declared branch step and continues through that step's own routing β its `next`, a decision's `then` / `else`, a boundary `timeout` / `expire` branch β and it may itself be a nested `parallel`, which contributes its own fork/join pair. Everything reachable that way belongs to the branch and runs concurrently with the sibling branches:
A branch and everything it reaches are off the linear chain (like decision targets), so their declaration order carries no meaning β and inside a branch there is **no positional fall-through**. A step routes explicitly, or, declaring no routing at all, is a branch **terminal** and flows into the join. The routing literal **`join`** converges on the innermost enclosing join gateway, which is how a decision inside a branch rejoins from both arms.
70
+
71
+
Rules: at least two distinct `branches`, each a declared step other than the fork itself. `join` is valid only inside a branch, and no step may be named `join`. A branch must never route to `end` β the join would wait forever for a token that ended; end the process after the fork instead. A step may belong to only one branch: a step two concurrent tokens reach runs twice and still leaves the join waiting. A branch is entered through its fork only, so a branch converges on `join`, never on the fork's own `next` directly. A top-level fork declares `next` (a declared step or `end`); a **nested** fork may omit it, and then joins into its own enclosing join.
72
+
42
73
### wait β park the process on a data event
43
74
44
75
A `wait` step parks the process until an entity lifecycle event resumes it β a case waiting for a reply, a flow waiting for a payment, an order waiting for its goods receipt:
0 commit comments