You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(layout): seat an orphaned half-pitch branch on a full grid row
A half-pitch offset draws a two-way symmetric fork as one compact grid
unit, so both members are placed together and each only reads as
deliberate because it balances the other across the trunk. When Stage
6.10's _align_terminus_to_upstream pulls a terminus member onto its
producer's trunk Y, the surviving member holds an offset that straddles
nothing and renders as a branch stranded between two grid rows.
Add Stage 6.18, _expand_orphaned_half_grid_stations: mirror each marked
station's offset about the section's LR/RL port anchor and, with the
opposite slot empty, seat the branch one full row from the anchor on the
side it already sits. Gated to stations at a genuine half pitch, since
the marker set also carries members already a whole number of rows out.
An earlier gate cannot do this. _layout_once runs up to seven times per
render and the motivating section carries two structurally identical
half-pitch pairs, only one of them broken, so every predicate tried
inside _recenter_full_bundle_columns or _align_terminus_to_upstream
flipped the section into a different fixpoint and bent the trunk.
_half_grid_frame and _straddles_nothing are shared with the invariant
test, as _iter_symmetric_diamonds already does, so the oracle and the fix
cannot disagree about which stations are legitimately half-pitch.
Rename the exercising fixture to paired_input_fan_branch_tree and give it
generic labels and station ids. The replacements are width-matched to
what they replace, so its geometry is coordinate-for-coordinate identical
and the three regressions it locks all still reproduce: the input-fan
bypass-V band, the reconverging-diamond entry-port centring, and the new
half-pitch straddle. Its stage_a4 branch now sits level with the out_a1
branch instead of half a row above the trunk.
Register the resulting off-track reanchor divergence, tracked in #1566.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
0 commit comments