--- id: SG-9 family: RT-SG level: core profiles: [runtime] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/rt-sg/sg-9 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # SG-9 — An edge condition never decides routing *RT-SG (Part II) · level: core · profiles: runtime · added in 1.0* ## The rule > **Normative.** This is the rule. > > 1. A condition stored on an edge never gates dispatch: not on any edge, and not on a loopback edge, the one place dispatch genuinely decides. > > 2. The edge is stored, the edge is followed, and a warning is reported for it once per edge each time its source's outgoing edges are resolved. ## What it means A condition stored on an edge looks like it should gate whether that edge is followed, and it does not — not on an ordinary edge, and not on a loopback edge either, which is the one place dispatch actually does decide whether to re-enter. The edge is stored unchanged and always followed; the condition is reduced to a warning, so a workflow carrying one keeps its shape and keeps working, but the author is told the expression is not consulted. The warning is emitted each time the source's outgoing edges are resolved, not once per edge overall. A source visited more than once — a loop body — warns again on every pass. ## Example An edge storing a condition that would, if it still gated, suppress it: ```json title="An edge with a stored condition" verdict="stored" { "id": "e_conditioned", "source": "src", "target": "sink", "data": { "condition": "false" } } ``` ```json title="What the target receives anyway" verdict="delivered" { "message": "payload" } ``` ## Related rules - Names: SG-6 - Referenced by: SG-6 --- 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.