--- id: STORE-2 family: GR-STORE level: core profiles: [storage-api] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/gr-store/store-2 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # STORE-2 — A workflow must be named *GR-STORE (Part I) · level: core · profiles: storage-api · added in 1.0* Every workflow carries a name, on creation and on every update. The name is what a person uses to find it again, so the system refuses to store one without it. ## The rule > **Normative.** This is the rule. > > 1. A workflow's `name` is required when it is created and when it is updated, and must be a non-empty string. > > 2. An implementation must accept a name of at least 255 Unicode code points, and may accept longer. > > 3. A request that omits the name, sends an empty one, or exceeds the implementation's limit is refused with 400, and nothing is stored. ## What it means The name is the only field a workflow cannot be stored without. Everything else either defaults or is optional: STORE-4 lets `nodes`, `edges` and `metadata` default to empty on create, and leaves them untouched on a partial update. The name is the exception; it is required on update too, so there is no name-omitted `PUT`. The refusal happens at the boundary, before the workflow is written, so a rejected update leaves the stored workflow exactly as it was. ## Example ```http title="Creating a workflow with no name" verdict="400 refused" POST /api/flowdrop/workflows { "nodes": [], "edges": [] } ``` ```http title="A name that is a single zero: a string, so a name" verdict="201 stored" POST /api/flowdrop/workflows { "name": "0" } ``` ## Why Three details here were once specified differently, each because a host language's idiom was mistaken for a decision. **A name of `"0"` is a name.** Nothing about a workflow makes a single zero unsuitable, so the rule tests for a non-empty string and nothing else. **Length counts code points, not bytes.** Counting bytes makes the limit depend on which alphabet the name is written in. Saying "characters" would only move the ambiguity. **255 is a floor, not a ceiling.** The number was borrowed from a database convention no implementation here runs. A floor gives the guarantee that matters (a name within 255 code points is accepted everywhere) without freezing one system's limit into every other. Recorded under OPEN-19, which covers seven such corrections. ## Why Recorded under OPEN-19. ## References **Normative** — incorporated into this rule: - The Unicode Standard, Definition of code point (https://www.unicode.org/versions/latest/) — The unit this rule counts. **Further reading:** - Unicode UAX, Unicode Text Segmentation (https://www.unicode.org/reports/tr29/) — Why the limit counts code points and not grapheme clusters, which are closer to what a person calls a character and much harder for two implementations to agree on. ## Related rules - Referenced by: STORE-4 --- 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.