A node may not be wired to itself
The rule
Normative: this is the rule
- An edge whose non-empty
sourceequals itstargetis refused withR12_EDGE_SELFatedge.{index}. - 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.
- An edge with an empty
sourceis never reported as a self-edge, even when itstargetis empty too; R5.c and R8 own that case.
What it means
The check reads only the two node ids; it never looks at which ports the edge names. Wiring a node's own output into one of its own input ports looks like an ordinary connection in the editor, and even names two different ports, but it is still refused: a cycle of one is a cycle whichever ports it runs through.
Example
An edge from a node's own output port back into a different input port on the same node:
{
"id": "e1",
"source": "n1",
"sourceHandle": "n1-output-result",
"target": "n1",
"targetHandle": "n1-input-value"
}Why
Recorded under OPEN-7.
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 · R12 · changed in spec 1.0