Two under-node fix strategies in the winner refinement:
1. Long sweeps (> 40% graph width): route through top corridor at
graphMinY - 56, with perpendicular exit stub. Fixes edge/20.
2. Medium sweeps near graph bottom: route through bottom corridor at
graphMaxY + 32 when the safe push-down Y would exceed graph bounds.
Fixes edge/25 (was 29px gap, now routes below blocking nodes).
Both under-node geometry violations eliminated. Edge/25 gains a
below-graph flag (Y=803 vs graphMaxY=771) which the FinalScore
adjustment handles as a corridor routing pattern.
Also adds target-join face reassignment infrastructure (redirects
outer edge to target's right face) — evaluates but not yet promoted
for the current fixture.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>