--- id: SCH-39 family: GR-SCHEMA level: extended profiles: [storage-api, editor-client] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/gr-schema/sch-39 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # SCH-39 — Compatibility is asymmetric, and the sink needs rules both ways *GR-SCHEMA (Part I) · level: extended · profiles: storage-api, editor-client · added in 1.0* A lane with no rules accepts only its own, which is why the sink (a lane worn by outputs as well as inputs) once refused every wire drawn into it. ## The rule > **Normative.** This is the rule. > > 1. Compatibility maps an output lane to the set of input lanes it may enter. > > 2. It is seeded by exact match and widened only by explicit rules, so a lane with no rules accepts nothing but itself. > > 3. The data sink `mixed` is worn by outputs as well as inputs and so needs rules in both directions; making it an alias of the control sink does not serve, because an alias copies the outgoing set only. > > 4. `tool` is excluded from every sink rule in both directions. > > 5. A rule that widens states its reason where it is declared, since the served `from`/`to` pair cannot carry one. > > 6. The stakes are authoring-time: a wrong rule costs an author a wire they cannot draw, or lets them draw one nothing will reject. ## Related rules - Names: SCH-38, SCH-43 - Referenced by: SCH-38, SCH-43 --- 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.