2 Commits

Author SHA1 Message Date
Dane Sabo
4b0eae9caf Milestone 0.3: I3 fix at acute corners, min-change deform, SplitSegment preserve
Y-intersection had a real I3 overlap at acute corners, caught by a
new programmatic centroid-in-other-polygon test
(y_intersection_no_overlaps). Fix: bisector-clip regular parcels
adjacent to acute corners (interior < 60°). Obtuse corners keep
their rectangle/parallelogram corner parcels and need no clip.

Minimum-change deformation: when a road's *line* doesn't change —
only its endpoints shift along the same line, e.g., the bottom road
gets longer when its right endpoint moves outward — parcels whose
frontage is still on the new segment are reported as Untouched and
keep their absolute coordinates. Only parcels on a road that
actually rotated get re-projected. Trade-off: vertex-exact
inverse-restore is no longer guaranteed (centroid drift bounded by
edit delta is the new contract).

SplitSegment preserve: rebind frontage_road for parcels whose
frontage is entirely on one side of the split point, or split into
two parcels along a perpendicular through the split point for
parcels that span. road_split_preserves test is now active and
passing. acute_intersection_15deg/5deg also active.

Test status: 24 unit + 20 integration + 1 doc passing; only
cul_de_sac and curved_road_high_curv still ignored (need real curved
roads). Journal §11 session 3 entry added with D14, D15, D16, two
spec deviations, and the milestone-0.4 queue.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 14:51:22 -04:00
Dane Sabo
86b246ead2 initial commit 2026-04-25 14:33:11 -04:00