--- id: DATA-2 family: RT-DATA level: core profiles: [runtime] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/rt-data/data-2 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # DATA-2 — Several sources on one port resolve to a single latest value *RT-DATA (Part II) · level: core · profiles: runtime · added in 1.0* 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. ```json title="Resolved by completion order" verdict="resolved" {"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: ```json title="Resolved by source node identifier" verdict="resolved" {"data": "from_a"} ``` `node_a` wins on the alphabetical sort even though its edge was declared second. ## Related rules - Names: SG-8 - Referenced by: SG-8 --- Rule identifiers are permanent and are never renumbered. This specification carries no implementation status: each implementation publishes its own standing against these rules. Licensed CC BY 4.0.