--- id: CFG-21 family: GR-CFG level: extended profiles: [runtime] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/gr-cfg/cfg-21 specification: FlowDrop Workflow Specification 1.0 licence: CC BY 4.0 --- # CFG-21 — A required parameter marked skip skips its node instead of failing it *GR-CFG (Part I) · level: extended · profiles: runtime · added in 1.0* The exception to CFG-9. A node that was given nothing to work on is left out of the run, the same way an untaken branch is, and the run is not failed by it. ## The rule > **Normative.** This is the rule. > > 1. This rule applies where a parameter is required, its `when_missing` flag is `skip` (CFG-20), and it is missing: no priority supplied it (CFG-4 to CFG-6), as CFG-9 defines missing. > > 2. In that case the node MUST NOT be executed. > > 3. The node MUST be recorded as skipped, on the same announcements and with the same reason as BR-7 records a skip. > > 4. The node MUST NOT be recorded as failed, and the skip MUST NOT fail the run. > > 5. Where several required parameters are missing, the node MUST be skipped if any one of them has `when_missing` `skip`, whatever the others have: a node that is not executed does not fail. > > 6. A key present with a `null` value counts as supplied (CFG-7), and so does a `null` effective default: such a parameter is not missing, and its schema decides whether the `null` is acceptable (CFG-10). ## What it means "Missing" is narrow on purpose. The parameter got nothing from a wire or from the launch, nothing from the author's configuration, and has no default. A `null` that somebody did send, or that the node type records as its default, was chosen. It is resolved and checked like any other value, and the parameter's schema decides whether it is acceptable (CFG-10). The skip looks exactly like a BR-7 skip from outside: the same reason on the skip event, the real-time status and the snapshot, and the node counted among the run's skipped nodes. What follows needs no rule of its own. A node that reads from the skipped node never becomes ready (DATA-4), and BR-7's end-of-run sweep records it as skipped too. A node that does not depend on it runs as usual. BR-7 says a node with no incoming trigger edge is never skipped for want of a trigger. That is about trigger edges only: it does not promise the node runs whatever else happens, and the sweep already covers a node that was ready but never executed. ## Example A workflow with two trigger nodes, `on_insert` and `on_update`. A firing of the update trigger supplies only `event:on_update`: ```json title="The initial data the firing delivers" verdict="delivered" { "on_update": { "event": { "ref": "node/42", "changed_fields": ["body"] } } } ``` ```json title="The skipped nodes in the run's response metadata" verdict="skipped" ["on_insert", "notify_new_article"] ``` ```json title="The run's status" verdict="completed" "completed" ``` ## Why Recorded under [OPEN-21](https://flowdrop.io/spec/rulings/open-21), [OPEN-25](https://flowdrop.io/spec/rulings/open-25), [OPEN-26](https://flowdrop.io/spec/rulings/open-26), [OPEN-42](https://flowdrop.io/spec/rulings/open-42). ## Fixtures Test cases whose outcome this rule decides (fixtures/README.md defines each operation): - A missing skip parameter skips the node even when another missing parameter would fail it (`resolve-parameters`): fixtures/presence/cfg-skip-beats-fail.json - A null default is supplied, so a skip parameter does not skip (`resolve-parameters`): fixtures/presence/cfg-skip-null-default-is-supplied.json - A null is supplied, so a skip parameter does not skip (`resolve-parameters`): fixtures/presence/cfg-skip-null-is-supplied.json - A required skip parameter nothing supplies skips its node (`resolve-parameters`): fixtures/presence/cfg-skip-when-absent.json ## Related rules - Names: CFG-9, CFG-7, CFG-20, BR-7, DATA-4 - Referenced by: SCH-47, CFG-9, CFG-20 --- 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.