Every edge carries a unique id
The rule
Normative: this is the rule
- Every edge in a workflow must carry an
id, and edgeids must be unique within the workflow. - An edge with no
idis refused withR3_EDGE_MISSING_ID, a repeatedidwithR3_EDGE_DUPLICATE_ID, and in either case the save does not take effect. - An implementation may mint an id for an edge that lacks one while reading an already-stored definition; that tolerance is for legacy data only and never relaxes the requirement at save.
What it means
The duplicate check reads the id field itself, not what the edges
connect. Two edges that wire completely different ports still collide if
they carry the same id: sharing that one string is enough, independent of
R13's separate check for edges that connect the same pair of ports twice. An
edge with no id at all is refused the same way, located by its position in
the list since it never had an id to name.
Example
Two edges wired to different ports on the target node, sharing one id:
[
{ "id": "e1", "source": "s", "target": "t", "targetHandle": "t-input-a" },
{ "id": "e1", "source": "s", "target": "t", "targetHandle": "t-input-b" }
]An edge carrying no id field at all:
{ "source": "s", "target": "t" }Why
Recorded under OPEN-5.
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 · R3 · changed in spec 1.0