--- id: SCH-47 family: GR-SCHEMA level: extended profiles: [storage-api, editor-client] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/gr-schema/sch-47 specification: FlowDrop Workflow Specification 1.0 licence: CC BY 4.0 --- # SCH-47 — A trigger node type has a reserved event input *GR-SCHEMA (Part I) · level: extended · profiles: storage-api, editor-client · added in 1.0* What happened outside the workflow enters a run on one known port. A reader can find it without knowing anything about the trigger, and an editor can treat it the same way on every trigger. ## The rule > **Normative.** This is the rule. > > 1. A trigger node type MUST declare one input port named `event`. > > 2. The schema of that port MUST be the schema of the event the node type delivers. > > 3. The `event` parameter MUST be connectable, required and not configurable. > > 4. It MUST have no default, and its `when_missing` flag (CFG-20) MUST be `skip`. > > 5. The `event` port MUST be exposed, and an instance-level exposure setting MUST NOT hide it. > > 6. A node type that is not a trigger node type MUST NOT declare an input port named `event`. ## What it means A trigger node is a node that starts runs when something happens outside the workflow: a record is saved, a schedule comes due, a webhook arrives. Whatever an implementation does to notice the event, the event reaches the run in one place, the node's `event` input. The trigger node then turns it into its outputs like any other node. The port is reserved in both directions. Every trigger node type has it, and no other node type has it. So the presence of an `event` input is how a reader, or an editor, recognises a trigger node. Each flag has a job. Connectable and exposed let a value from outside reach the parameter (CFG-4). Required with `skip` means a trigger that did not fire leaves itself out of the run (CFG-21). Not configurable and no default mean nothing but the start of the run can fill it. No wire can fill it either (R16). ## Example ```json title="The event parameter of a trigger node type" verdict="conforming" { "event": { "connectable": true, "configurable": false, "required": true, "when_missing": "skip" } } ``` ```json title="An instance setting that tries to hide the port" verdict="ignored" { "ports": { "input": { "event": false } } } ``` ## 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-2, SCH-16, CFG-20, CFG-21, R16, MAN-26 - Referenced by: R16, MAN-26 --- 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.