--- id: MAN-12 family: GR-MAN level: core profiles: [storage-api] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/gr-man/man-12 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # MAN-12 — The node-keyed input shape is internal and unreachable from outside *GR-MAN (Part I) · level: core · profiles: storage-api · added in 1.0* Addressing a node and port directly bypasses the manifest entirely, which is the whole of the launch boundary. It stays available to the system's own callers and to nobody else. ## The rule > **Normative.** This is the rule. > > 1. The node-keyed input shape, addressing a node identifier and port name directly, is an internal contract. > > 2. Every externally reachable launch door refuses it: a caller supplies declared input names, and nothing else. ## What it means The node-keyed shape — addressing a node identifier and port name directly — is how initial data is built once a value has already been resolved. It is a real, working shape: read it back and it comes out unchanged, because nothing about it needs the manifest to make sense. That is exactly why it has to be walled off: a shape that "just works" internally is also a shape a caller could send by hand, and if a launch door ever let it through, a caller who had learned a workflow's internal node ids could seed initial data the author never declared as an input at all. So every externally reachable launch door treats a node-keyed key as unknown — not as a second, quieter way in. ## Example ```json title="A node-keyed body arriving where declared input names are expected" verdict="refused" { "chat_input.1": { "message": "injected" } } ``` ```json title="The same shape read back where it belongs, unchanged" { "other.1": { "port_a": 1 } } ``` The first is what a caller gets for reaching a launch door with a node id instead of a declared input name. The second is the identical shape, handled by the implementation's own resolution of already-trusted, node-keyed data — the same notation, admitted only on the side of the boundary that never sees an outside caller. ## Related rules - Names: MAN-10, MAN-13 - Referenced by: MAN-10, MAN-13 --- 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.