FlowDrop Workflow Specification 1.0-draft

Several sources on one port resolve to a single latest value

A merge point in a workflow is not a collector. A port fed by three edges is still one port, and what a node reads there is one value.

The rule

Normative: this is the rule
  1. A port fed by several edges receives exactly one value, never a list of them.
  2. The value is the one produced by the most recent execution among the sources: a source carrying a later execution order wins; a source carrying an execution order wins over one carrying none; and where neither carries one, the source node identifier decides, lexicographically.
  3. A collision between sources on one port is reported as a warning and never fails the run.

What it means

A port fed by several edges never accumulates a list; it resolves to exactly one value, and the resolution has a strict order of preference. A source that completed later wins over one that completed earlier. Only when neither source recorded a completion order at all does the tie-break fall to the source node's own identifier — and that fallback is a genuine lexicographic sort, not the order the edges happen to be drawn in a workflow: which edge was drawn first has no bearing on which source wins.

Example

Two sources, node_early and node_late, both wire into the same port. Each completes with its own execution order recorded.

Resolved by completion orderresolved
{"data": "second"}

The same port, fed by node_a and node_b, neither of which recorded a completion order — and the edge from node_b is drawn first in the workflow, ahead of node_a's:

Resolved by source node identifierresolved
{"data": "from_a"}

node_a wins on the alphabetical sort even though its edge was declared second.

Rule identifiers are permanent and are never renumbered. Each implementation publishes its own standing against these rules; this specification does not.spec 1.0-draft · DATA-2 · changed in spec 1.0