--- id: R12 family: GR-VAL level: core profiles: [storage-api] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/gr-val/r12 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # R12 — A node may not be wired to itself *GR-VAL (Part I) · level: core · profiles: storage-api · added in 1.0* ## The rule > **Normative.** This is the rule. > > 1. An edge whose non-empty `source` equals its `target` is refused with `R12_EDGE_SELF` at `edge.{index}`. > > 2. This holds whatever ports the two ends name, so wiring a node's own output into its own input is still refused, and it holds whether or not the named node exists; a self-edge on a node that was deleted also earns R8's two dangling-endpoint errors. > > 3. An edge with an empty `source` is never reported as a self-edge, even when its `target` is empty too; R5.c and R8 own that case. ## Why Recorded under OPEN-7. ## Related rules - Names: R8.a, R8.b --- 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.