--- id: R13 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/r13 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # R13 — Two identical edges between the same ports are refused *GR-VAL (Part I) · level: core · profiles: storage-api · added in 1.0* Duplicate detection compares what the document literally says, not what it means. Two spellings of the same logical connection are therefore two distinct edges, and both are kept. ## The rule > **Normative.** This is the rule. > > 1. Two edges are duplicates when their `source`, `target` and both handle strings are identical. > > 2. A duplicate is refused with `R13_EDGE_PARALLEL_DUPLICATE` at `edge.{index}`, and the error names the position of the earlier edge it duplicates. > > 3. The four values are compared verbatim, with no parsing or normalisation of a handle into a port name, so two edges between the same pair of nodes over different ports stay valid, and two edges over the same logical port written differently (one with the handle omitted, one with it spelled out) are both accepted. > > 4. An edge with an empty endpoint takes no part in the comparison. ## Why Recorded under OPEN-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.