A condition on an edge is tolerated, warned about, and ignored
The rule
Normative: this is the rule
- A condition on an edge is a removed feature.
- A stored
edge.data.conditionis tolerated and round-trips unchanged, and it gates nothing: the edge always routes. - A non-empty string condition is reported as a warning each time the source node's outgoing edges are resolved, so a source that executes more than once (inside a loop) warns each time rather than once per run.
- An absent or empty condition is silent.
What it means
A stored condition is not quietly dropped: it survives exactly as written on every subsequent save. Nothing about it is consulted, though — a conditioned edge routes precisely as an unconditioned one would.
The warning this produces is not a one-off. It is emitted wherever a source node's outgoing edges are resolved, so a source that runs more than once inside a loop warns again on every pass, not once per run. An absent or an empty condition never warns at all — only a non-empty string does.
Example
An edge carries a non-empty condition:
{
"id": "e_conditioned",
"source": "src",
"target": "sink",
"sourceHandle": "src-output-text",
"targetHandle": "sink-input-message",
"data": { "condition": "false" }
}"payload"The same condition on a loopback edge inside a loop produces one warning per re-entry, not one for the whole run.
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 · EDGE-8 · changed in spec 1.0