`nodeUnder()` recomputed the node's face as `0 <= x <= w`, while the pointer events follow the `hitArea`, which reaches `PORT_HIT_RADIUS` past the edge. An input port sits at exactly x = 0, so the global point rounded back landed a hair outside: the drop counted as one on empty canvas, the node palette opened and swallowed every later click – four checks of step 6 at once. `NodeView` now answers from that same `hitArea`, and the step also checks that no palette is open. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>