--- id: R16 family: GR-VAL level: extended profiles: [storage-api, editor-client] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/gr-val/r16 specification: FlowDrop Workflow Specification 1.0 licence: CC BY 4.0 --- # R16 — No edge targets a trigger node's event input *GR-VAL (Part I) · level: extended · profiles: storage-api, editor-client · added in 1.0* A trigger's event comes from whatever started the run, never from another node. An edge into the port would replace the event with a value from inside the workflow, because a delivered edge value outranks initial data (DATA-6). ## The rule > **Normative.** This is the rule. > > 1. An edge whose target is the `event` input port (SCH-47) of a node whose node type is a trigger node type MUST be refused with `R16_EDGE_EVENT_INPUT` at `edge.{index}`. > > 2. An authoring surface MUST NOT produce such an edge. ## What it means The `event` port is exposed so that a value from outside can reach it, not so that it can be wired. An edge into it would win over the event (DATA-6) and quietly turn a trigger into an ordinary step. The validator refuses it, and an authoring surface does not produce the connection in the first place. ## Example ```json title="An edge into a trigger node's event input" verdict="refused" { "id": "e3", "source": "n2", "sourceHandle": "n2-output-result", "target": "on_update", "targetHandle": "on_update-input-event" } ``` ```json title="The error" verdict="refused" { "code": "R16_EDGE_EVENT_INPUT", "locator": "edge.2" } ``` ## Why Recorded under [OPEN-21](https://flowdrop.io/spec/rulings/open-21), [OPEN-25](https://flowdrop.io/spec/rulings/open-25). ## Related rules - Names: SCH-47, DATA-6, EDGE-1 - Referenced by: SCH-47 --- 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.