--- id: CFG-20 family: GR-CFG level: extended profiles: [storage-api, runtime] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/gr-cfg/cfg-20 specification: FlowDrop Workflow Specification 1.0 licence: CC BY 4.0 --- # CFG-20 — A parameter's when_missing flag is fail unless the node type says skip *GR-CFG (Part I) · level: extended · profiles: storage-api, runtime · added in 1.0* Most required parameters fail their node when nothing resolves. A few, such as a trigger node's event, mean "this node has nothing to do" when nothing resolves. The flag lets a node type say which, and keeps the default every existing node type has. ## The rule > **Normative.** This is the rule. > > 1. A parameter's `when_missing` flag says what a missing value means: `fail` or `skip`. > > 2. An implementation MUST treat a value it does not recognise as `fail`. > > 3. The flag MUST be read from the node type's own parameter configuration, as the gate flags are (SCH-2). > > 4. Where the node type records no value, an implementation MUST treat the flag as `fail`. > > 5. The flag MUST have no effect on a parameter that is not required. ## What it means `when_missing` sits beside `required`, and only means something together with it. `required` says the node cannot run without a value. `when_missing` says what that absence means: `fail` (the node is broken, CFG-9) or `skip` (the node has nothing to do, CFG-21). A node type that never mentions the flag gets `fail`, so every node type that exists today behaves exactly as before. The flag belongs to the node type, like the gate flags, and not to the author's node configuration: whether "nothing arrived" is an error is a property of what the node does. ## Example ```json title="A trigger node type's event parameter" verdict="skip" { "event": { "connectable": true, "required": true, "when_missing": "skip" } } ``` ```json title="A required parameter that says nothing about when_missing" verdict="fail" { "prompt": { "connectable": true, "required": true } } ``` ## Why Recorded under [OPEN-21](https://flowdrop.io/spec/rulings/open-21), [OPEN-22](https://flowdrop.io/spec/rulings/open-22), [OPEN-25](https://flowdrop.io/spec/rulings/open-25). ## Fixtures Test cases whose outcome this rule decides (fixtures/README.md defines each operation): - A required skip parameter nothing supplies skips its node (`resolve-parameters`): fixtures/presence/cfg-skip-when-absent.json ## Related rules - Names: SCH-2, CFG-1, CFG-9, CFG-21 - Referenced by: SCH-47, CFG-21 --- 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.