--- id: MAN-2 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-2 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # MAN-2 — A manifest entry names an input and binds it to a port *GR-MAN (Part I) · level: core · profiles: storage-api · added in 1.0* Three fields say what the input is called and where it goes; the rest is documentation for whoever calls the workflow. ## The rule > **Normative.** This is the rule. > > 1. A manifest entry carries a `name`, a `node_id` and a `port`, all required, and may carry `title`, `description`, `examples` and `required`. > > 2. The optional metadata applies to the input side only. > > 3. A `required` entry is folded into the built contract's top-level list of required names rather than surviving as a key on the property fragment. ## What it means Three fields are the entry: `name` is what the caller calls the input, and `node_id` plus `port` are where it lands inside the workflow. Everything else an entry may carry — `title`, `description`, `examples`, `required` — is metadata for whoever calls the workflow, and it applies only to the input side; an entry that binds an output port carries none of it into the built contract. `required` is the field worth pausing on. It is not stored as a key on the property fragment itself; it is folded into the built schema's own top-level `required` list, the way JSON Schema expects required properties to be named (MAN-16). An entry can be required without that fact ever appearing next to its own `type` and `default`. ## Example The workflow declares one input, bound to a port, with author-facing metadata attached. ```json title="A manifest entry naming an input and describing it for callers" { "name": "customer_email", "node_id": "n1", "port": "key", "title": "Customer email", "description": "Email to look up their support history.", "examples": ["a@b.com", "c@d.com"] } ``` ```json title="What that entry contributes to the published contract" { "type": "string", "title": "Customer email", "description": "Email to look up their support history.", "examples": ["a@b.com", "c@d.com"] } ``` `name`, `node_id` and `port` decided where this property comes from; `title`, `description` and `examples` only decorate it. ## Related rules - Names: MAN-1, MAN-6, MAN-15 - Referenced by: MAN-1, MAN-6, MAN-15, MAN-20 --- 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.