--- id: R11 family: GR-VAL level: core profiles: [storage-api] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/gr-val/r11 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # R11 — A configured expression must be valid for its engine at save *GR-VAL (Part I) · level: core · profiles: storage-api · added in 1.0* An expression that cannot parse can only fail once the workflow is already running. Catching it at save turns a runtime failure into an editing error. ## The rule > **Normative.** This is the rule. > > 1. Every expression carried in a node's configuration must pass its engine's validation when the workflow is saved. > > 2. A failure is refused with `R11_EXPRESSION_INVALID`, and the error names the node, the config key, the engine and the expression. > > 3. The expressions checked are the ones the node types declare as expression-bearing: a data extractor's `path`, the `value` of each dynamic output of a data mapper, the sources of a data shaper's `mapping` (with reserved source values such as a literal or a now marker skipped, and nested `_source` and `_each` sources walked), and a prompt template's `template`. > > 4. An empty expression is always valid. > > 5. An expression naming an engine the implementation does not know is not reported here; R6's `enum` check on the engine key owns that error. > > 6. An engine whose validation raises rather than returning a verdict is treated as a rejection, yielding one `R11_EXPRESSION_INVALID` for that expression; the failure is never propagated, so a misbehaving engine still produces a refusal against the workflow and never a server error. ## Why Recorded under OPEN-3. ## Related rules - Names: R6.d - Referenced by: R6.k --- 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.