--- id: MAN-26 family: GR-MAN level: extended profiles: [storage-api, runtime, editor-client] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/gr-man/man-26 specification: FlowDrop Workflow Specification 1.0 licence: CC BY 4.0 --- # MAN-26 — Each trigger node gives the workflow a reserved input *GR-MAN (Part I) · level: extended · profiles: storage-api, runtime, editor-client · added in 1.0* A firing reaches a run through the same mapping a caller's input does, without the author declaring anything and without the entry ever going stale. ## The rule > **Normative.** This is the rule. > > 1. For each trigger node in a workflow, the workflow MUST have one reserved input. > > 2. Its name MUST be `event:` followed by the trigger node's identifier. > > 3. It MUST bind that node's `event` port (SCH-47). > > 4. A reserved input MUST be derived from the workflow's trigger nodes whenever it is needed. > > 5. A reserved input MUST NOT be stored in the workflow's manifest, and an authoring surface MUST NOT write one there. > > 6. A value supplied under a reserved input name MUST be delivered as MAN-11 delivers a declared input. > > 7. A reserved input MUST NOT be required at launch. ## What it means A firing puts its event somewhere, and the manifest already says how a named input reaches a port (MAN-11). Reserved inputs reuse that mapping instead of adding a second route into a run. They are worked out from the trigger nodes, never stored. Add a trigger and its reserved input exists; delete it and the input is gone; copy it and the copy gets its own. Nothing can go stale, and nothing needs repairing. The name cannot clash with an author's input. `event:` contains a colon, which R4.a's alphabet does not allow, so no declared input can ever carry it. A reserved input is never required, because a run is started by at most one firing and the other triggers simply skip (CFG-21). ## Example A workflow with trigger nodes `on_insert` and `on_update`, and one declared input, `article`: ```json title="The workflow's reserved inputs" verdict="derived" [ { "name": "event:on_insert", "node_id": "on_insert", "port": "event" }, { "name": "event:on_update", "node_id": "on_update", "port": "event" } ] ``` ```json title="The workflow's stored manifest" verdict="unchanged" [{ "name": "article", "node_id": "run_triage", "port": "article" }] ``` ## Why Recorded under [OPEN-21](https://flowdrop.io/spec/rulings/open-21), [OPEN-25](https://flowdrop.io/spec/rulings/open-25). ## Related rules - Names: MAN-1, MAN-11, MAN-27, SCH-47, R4.a - Referenced by: SCH-47, MAN-27 --- 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.