--- id: SCH-32 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-32 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # SCH-32 — Every re-enterable node gets a hidden loop-back input *GR-SCHEMA (Part I) · level: extended · profiles: storage-api, editor-client · added in 1.0* Re-entry is a property of the graph, not of a handful of node types. Every node that can be re-entered declares the port; it just ships hidden, so no canvas gains a re-entry handle until an author asks for one. ## The rule > **Normative.** This is the rule. > > 1. A reserved `loop_back` input is injected on every re-enterable node type (every node type that is not a start, terminal or non-executable one) with display order 95 and the `trigger` lane, and it ships hidden, so no canvas gains a re-entry handle until an author exposes the port on that instance. > > 2. A node type that declares its own `loop_back` keeps it and the injection is skipped, because such a declaration carries semantics the injection does not. > > 3. Because the port is now declared rather than absent, an edge drawn into an unexposed `loop_back` is refused as an edge into an unexposed port, where previously it fell outside the check entirely. ## What it means The injected port ships hidden by default, so declaring re-entry legal on every eligible node type does not put a re-entry handle in every editor — an author still has to expose it per instance before a wire can land there. Where a node type already declares its own `loop_back`, the injection does not run at all: the declared port is kept as-is, not merged with or replaced by the injected one. ## Example ```json title="exposedByDefault of the loop_back input injected on an ordinary node type" verdict="hidden" false ``` ```json title="The name of the only loop_back input on a node type that declares its own" verdict="kept" "Custom Loop Back" ``` ## Related rules - Names: SCH-16, SCH-37, SCH-38 - Referenced by: SCH-16, SCH-33, SCH-38 --- 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.