Skip to content

Refuse silent COMPOUNDCURVE chord flatten (ticket 30) - #131

Merged
grootstebozewolf merged 4 commits into
feature/zoofrom
cursor/compoundcurve-flatten-elim-711e
Sep 3, 2026
Merged

Refuse silent COMPOUNDCURVE chord flatten (ticket 30)#131
grootstebozewolf merged 4 commits into
feature/zoofrom
cursor/compoundcurve-flatten-elim-711e

Conversation

@grootstebozewolf

@grootstebozewolf grootstebozewolf commented Sep 3, 2026

Copy link
Copy Markdown
Owner

CRV-CC ticket 30: COMPOUNDCURVE flatten-elimination. Off JTS #7 / feature/sfa-curve-rgr. Base is feature/zoo.

SQL/MM COMPOUNDCURVE (ISO/IEC 13249-3 §4.2.13 / §7.10.1, WKB 9) stays a COMPOUNDCURVE. Silent chord Flatten for overlay / TestBuilder consume is a refuse. Named linear fallback stays named: toLinear / Linearize / OverlayNGCurve APPROX with isApproximate()=true.

Flatten sites found

Verified the wayfinder hypothesis; discarded the parts that were already honest.

Site Verdict Action
OverlayNGCurve R1.7 / R-LL / R-AA / OverlayNGCircle CompoundCurve kits Already exact; keep type No kit rewrite
OverlayNGCurve leftover cells (unnamed) Densify via R2 Already isApproximate()=true + CurveOps.linearise warn. Test pins it.
Stock OverlayNG / OverlayNGRobust Silent getCoordinates() / LineString extract of CompoundCurve and CC-shelled CurvePolygon Refuse (SqlMmTypes.refuseCompoundCurveChord)
TestBuilder OverlayNGTest.* Raw inspect of control polygon Refuse CompoundCurve / CC shell. CircularString CurvePolygon stays raw (sibling leftover).
TestBuilder Appium OverlayNGTest.unionIntSymDiff.half-moon.pr7 Would have Exec'd inspect on a CC shell Fail closed: skip the dishonest Exec; pin unionIntSymDiff refuse
TestBuilder OverlayNGFunctions / linearizeForOps Named toLinear but no warn Stamp CurveLinearizationStrategy.warnLinearized
MoveTool / GeometryVertexMover Already keeps members Pin with MoveTool basics test
Hull / H-CC Already linearizeForHull / CurveExact; leftover of locationtech#424 HOLD. Do not remint 424-b.
I/O refuseFlatten / IoFlattenHonesty Type identity, not op honesty Not this leftover. No type-9 reader PR.

Patches

  • SqlMmTypes.refuseCompoundCurveChord — type-name walk (WKB 9) plus CurvePolygon structural-ring reflect so core does not depend on jts-curve. Public accessors first; declared walk as fallback.
  • OverlayNG.getResult + EdgeNodingBuilder.add call the refuse.
  • OverlayNGRobust rethrows IllegalArgumentException — a refuse is not a noding failure to snap-round.
  • OverlayNGTestFunctions refuses CompoundCurve consume.
  • CurveFunctions.linearize warns (named toLinear).
  • CompoundCurve javadoc cites 13249-3, not 19125-2.
  • Appium OverlayNGTest/unionIntSymDiff.half-moon.pr7.json skipped; playback treats an OverlayNGTest refuse as a named miss.

Tests run

jts-app included this leftover. GitHub CI build-and-test is green on 93be9ddb (4/4 checks).

  • jts-core: SqlMmTypesTest 5, OverlayNGTest 52, OverlayNGRobustTest 7, OverlayNGEmptyDisjointTest 12 — 76 PASS
  • jts-curve: OverlayNGCurveCompoundCurveFlattenHonestyTest 5, CompoundCurveShellOverlayTest 28, SqlMm13249CurveSpecTest 24 (SQL/MM ISO/IEC 13249-3 curve types: close remaining spec gaps #130, no regress), IoFlattenHonestyTest 8, OverlayNGCurve kit suite 52 — PASS
  • jts-app leftover suite: OverlayNGTestFunctionsCompoundCurveFlattenTest 5, CurveFunctionsCompoundCurveFlattenTest 2, CompoundCurveMoveToolBasicsTest 2, OverlayStaticCurveTest 15 (CircularString inspect stays raw), HullFunctionsCurveTest 12, IOUtilFlattenHonestyTest 3, TbAppiumPr7PlaybackTest 1, TbAppiumSequenceContractTest 4 — PASS

Earlier CI reds on cc3a4280 / bb6ca330 were the fake CurvePolygon core stand-in and the half-moon OverlayNG inspect Exec. Both are closed on this head.

HOLDs refused (explicit)

This is off #7, on feature/zoo. Do not merge into PR #7 / feature/sfa-curve-rgr. Do not target master.

Open in Web Open in Cursor 

cursoragent and others added 4 commits September 3, 2026 01:39
SQL/MM ISO/IEC 13249-3 COMPOUNDCURVE (WKB 9) stays a COMPOUNDCURVE.
Stock OverlayNG / OverlayNGRobust / OverlayNGTest refuse control-polygon
noding. Leftover OverlayNGCurve cells take the named APPROX path
(isApproximate / toLinear). MoveTool keeps members. Off #7 on feature/zoo.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Drop the jts-core Polygon-subclass fake (it is not a CurvePolygon).
Walk public ring accessors first, then declared methods, and assert
containsCompoundCurve on a real COMPOUNDCURVE shell in jts-curve.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
CurvePolygon shells refuse with the parent type name; the message
still cites ISO/IEC 13249-3 COMPOUNDCURVE (WKB 9).

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Inspect of a COMPOUNDCURVE shell is a refuse (ISO/IEC 13249-3 WKB 9).
Skip the dishonest Exec contract; pin unionIntSymDiff refuse; treat
an OverlayNGTest refuse as a named miss if playback still hits it.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
@grootstebozewolf
grootstebozewolf marked this pull request as ready for review September 3, 2026 01:48
@grootstebozewolf
grootstebozewolf merged commit b1ee62a into feature/zoo Sep 3, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants