--- id: META-4 family: RT-META level: core profiles: [runtime, editor-client] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/rt-meta/meta-4 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # META-4 — The workflow schema door publishes a bare document *RT-META (Part II) · level: core · profiles: runtime, editor-client · added in 1.0* A workflow's declared input and output ports, read by an editor before it can draw the workflow. It is not wrapped in the standard envelope, and its snake_case is as much a contract as the playground's camelCase. ## The rule > **Normative.** This is the rule. > > 1. A successful read of a workflow's schema answers exactly `{schema_version, parameter_schema, output_schema}` in that order, snake_case, with no `success` key and no `data` wrapper. > > 2. `parameter_schema` and `output_schema` are the stored snapshot verbatim, and where a workflow declares no ports they are JSON `null` (not an empty object, and not omitted), so a consumer can distinguish "no ports" from "key missing". ## What it means This door answers with no envelope at all: no `success`, no `data`, just the three keys themselves. And where a workflow declares no ports, the missing schema is `null`, not an empty object and not a key left out — the three shapes ("no ports", "an empty object", "key missing") would otherwise all look the same to a consumer that has to guess which one it is looking at. ## Example A workflow with both a declared input and a declared output: ```http title="A workflow's declared parameter and output schemas" verdict="200 served" GET /api/flowdrop/workflows/{id}/schema {"schema_version": "2.1.0", "parameter_schema": {"type": "object", "properties": {"name": {"type": "string"}}}, "output_schema": {"type": "object", "properties": {"result": {"type": "string"}}}} ``` A workflow that declares no ports at all: ```http title="A workflow with no declared ports" verdict="200 served" GET /api/flowdrop/workflows/{id}/schema {"schema_version": "0.0.0", "parameter_schema": null, "output_schema": null} ``` ## Related rules - Names: META-5, META-6 - Referenced by: META-5, META-6, META-9, STORE-8 --- 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.