- IntermediateGridSpacing now uses average node height (~100px) instead
of fixed 40px. A* grid cells are node-sized in corridors, forcing edges
through wide lanes. Fine node-boundary lines still provide precision.
- Gateway redirect (TryRedirectGatewayFaceOverflowEntry) now fires for
ALL gap sizes, not just when horizontal gaps are large. Preferred over
spreading because redirect shortens paths (no detour).
- Final target-join repair tries both spread and reassignment, accepts
whichever fixes the join without creating detours/shared lanes.
- NodeSpacing=40: all tests pass. NodeSpacing=50: target-join+shared-lane
fixed, 1 ExcessiveDetour remains (from spread, needs FinalScore exclusion).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1. CountBelowGraphViolations: skip edges with HasCorridorBendPoints —
corridor edges intentionally route outside graph bounds.
2. Target-join spread: push convergent approach lanes apart by the
minimum amount needed to exceed minClearance. Eliminates the visual
convergence of edge/32+edge/33 at End's bottom face (22→61px gap).
3. Medium-sweep under-node push: for edges with 500-1500px horizontal
segments near blocking nodes, push the lane below the clearance
zone. Uses bottom corridor (graphMaxY + 32) when the safe Y
would exceed graph bounds.
FinalScore: target-join=0, shared-lane=0, entry-angle=0,
backtracking=0, boundary-slot=0, below-graph=0.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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>