An edge may not target a hidden input port
The rule
An edge whose target port is declared by the target node's node type but is not exposed on that node is refused with R7_EDGE_TARGET_NOT_EXPOSED at edge.{index}, where {index} is the edge's position in the workflow's edge list.
What it means
"Not exposed" folds two different origins into one refusal: a port this instance has explicitly hidden, and a port the node type itself hides by default that this instance never touched. R7.a does not distinguish between them — either way, an edge into it is refused the same way. R7.c is what decides which of the two is in force for a given instance.
The check only fires for a port the target node's type actually declares; a dynamic or author-defined port is out of its scope entirely (R7.d).
Example
The target node's type declares a value input; this instance's own
configuration records it as hidden:
{ "id": "e1", "source": "s", "sourceHandle": "s-output-result", "target": "t", "targetHandle": "t-input-value" }{ "code": "R7_EDGE_TARGET_NOT_EXPOSED", "locator": "edge.0" }