--- id: SCH-40 family: GR-SCHEMA level: extended profiles: [storage-api, runtime, editor-client] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/gr-schema/sch-40 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # SCH-40 — A port's lane is consumed at a public boundary *GR-SCHEMA (Part I) · level: extended · profiles: storage-api, runtime, editor-client · added in 1.0* The lane a port declares is not only a colour on a canvas. It is the shared answer to "what may a caller supply?" at the endpoints that start a workflow and take a turn in a session. ## The rule > **Normative.** This is the rule. > > 1. A port's declared lane decides what a caller may supply at a workflow's public entry points: launching a workflow and taking a turn in a session answer from the same check. > > 2. A port on the sink or on a control lane places no constraint: any JSON value is accepted, including an array or null. > > 3. Narrowing that, for instance by keying the check off JSON Schema's seven type words alone, is strictly stronger and is a breaking change to a public endpoint: it is announced, never carried in on a refactor. > > 4. The name a projection gives the field that carries the lane is likewise a client-facing contract. ## Related rules - Names: SCH-35, SCH-37 - Referenced by: SCH-35 --- 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.