--- id: EXPO-3 family: GR-EXPO level: core profiles: [storage-api] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/gr-expo/expo-3 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # EXPO-3 — Overrides are scoped by direction *GR-EXPO (Part I) · level: core · profiles: storage-api · added in 1.0* ## The rule > **Normative.** This is the rule. > > 1. Exposure overrides are scoped by port direction: an output port's override is read from the `outputs` map, and an input port's (that of every other direction) from the `inputs` map. > > 2. An input and an output of the same name are separate ports, and an override on one never applies to the other. ## What it means An input and an output that happen to share a name are two different ports, not one port seen from two sides, and their exposure overrides live in two different maps. Hiding an input named `other` says nothing about an output also named `other` — a lookup that ignored direction and matched by name alone would leak one port's override onto the other. ## Example ```json title="The stored overrides: other hidden, but only in inputs" verdict="hidden" { "inputs": [{ "id": "other", "exposed": false }] } ``` Checked as an input, `other` resolves hidden. Checked as an output, the same port name finds no entry at all — the `outputs` map carries none — and resolves to its own default, exposed. ## Related rules - Names: EXPO-2 - Referenced by: EXPO-1, EXPO-2 --- 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.