Adds a dependency to the spec, returning a NEW spec.
Immutable because the component emits the result to a host that may keep it, diff it, or reject
it; mutating the input would let a canceled edit leak into the host's copy anyway. A duplicate
edge is a no-op rather than an error — dragging the same connection twice is a slip, not a
request to corrupt the graph.
Adds a dependency to the spec, returning a NEW spec.
Immutable because the component emits the result to a host that may keep it, diff it, or reject it; mutating the input would let a canceled edit leak into the host's copy anyway. A duplicate edge is a no-op rather than an error — dragging the same connection twice is a slip, not a request to corrupt the graph.