--- id: DATA-6 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-6 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # DATA-6 — Initial data fills a node's ports only where no edge did *RT-DATA (Part II) · level: core · profiles: runtime · added in 1.0* ## The rule > **Normative.** This is the rule. > > 1. Initial data supplied with a run, keyed by node identifier, fills that node's input ports underneath anything an edge delivered: an edge-delivered value wins, including an edge-delivered `null`. > > 2. An entry keyed for another node, or one that is not a map of port names to values, is ignored. ## What it means Initial data is a fallback, not a second source competing with an edge: it only ever fills the ports an edge left untouched. An edge-delivered `null` still counts as delivered, so it still wins over a seeded value at the same port — the merge is keyed on presence, not on usefulness. An entry keyed for a node other than the one running is ignored outright, and an entry that is not itself a map of port names to values is dropped rather than merged in some other shape. ## Example A node's `message` port is fed by an edge; its `seed` port is not. Initial data carries a value for both ports, keyed to this node. ```json title="What the run's initial data offers this node" verdict="offered" {"message": "from_initial_data", "seed": "only_in_initial_data"} ``` ```json title="What the node actually receives" verdict="merged" {"message": "from_edge", "seed": "only_in_initial_data"} ``` The wired port keeps the edge's value; the unwired one takes the seed. Where the edge instead delivers an explicit `null` on `message`, the node still receives `{"message": null}` — the seed does not get a second chance because the delivered value happens to be empty. ## Related rules - Names: DATA-1 - Referenced by: DATA-1 --- 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.