--- id: R4.a 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/r4-a specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # R4.a — An exposed workflow port must be named in the permitted alphabet *GR-VAL (Part I) · level: core · profiles: storage-api · added in 1.0* An exposure name is a caller-facing parameter name. Restricting it to a small alphabet keeps it usable as a key in every context a caller passes it through. ## The rule > **Normative.** This is the rule. > > 1. A workflow exposure entry's `name` must match `^[a-z0-9_-]+$`. > > 2. A name that is absent, empty or outside that alphabet is refused with `R4_NAME_FORMAT` at `schema.{side}.{index}`, where `{side}` is `input` or `output` and `{index}` the entry's position in that side's list. > > 3. Unlike R4.c, this failure does not skip the entry's remaining checks: uniqueness, node existence and port declaration are all still evaluated, so two entries with no name at all yield two `R4_NAME_FORMAT` errors and one `R4_NAME_DUPLICATE` on the empty name. ## Related rules - Names: R4.b, R4.c, R4.e - Referenced by: R4.b, R4.c, R4.d, R4.e --- 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.