--- id: DATA-1 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-1 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # DATA-1 — An edge delivers one named output port to one named input port *RT-DATA (Part II) · level: core · profiles: runtime · added in 1.0* ## The rule > **Normative.** This is the rule. > > 1. An edge delivers a value from a named output port on its source node to a named input port on its target node. > > 2. Both port names are taken from the edge's endpoint handles; an endpoint that names no port delivers nothing, and neither warns nor fails the run. > > 3. Delivery turns on the presence of the port's key in the source node's output, not on the value being non-null: a source that emits an explicit `null` delivers `null`, and that delivered `null` outranks the target's configuration and its schema default. > > 4. A source that omits the key delivers nothing at all, and the target port falls through to its configuration and then to its schema default. ## What it means What decides whether a value is delivered is whether the source's output contains the wired key at all, not whether the value found there is useful. Even an explicit `null` counts as delivered, and a delivered `null` still outranks whatever the target's own configuration or schema default would otherwise supply. The other side of the same clause is silent absence: an edge whose handle cannot be split into a port name — because the direction marker is missing — names no port, and delivers nothing. Nothing is logged and the run is not failed; the target simply falls through to its own configuration and default, exactly as if the edge had never been drawn. ## Example A node wires another node's `result` output to its `data` input, but the source's actual output never carried a `result` key. ```json title="What the source node produced" verdict="produced" {"other": "alpha"} ``` ```json title="What the target's data port receives" verdict="empty" {} ``` A handle with no `-output-`/`-input-` marker to split on behaves the same way: the port name resolves to nothing, and nothing arrives. ## Related rules - Names: DATA-6, DATA-7 - Referenced by: DATA-4, DATA-6, DATA-7 --- 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.