Skip to content

Year-1 circular laser vs chainsaw PERF-GATE + ratchet JSON feed - #129

Open
grootstebozewolf wants to merge 6 commits into
feature/sfa-curve-rgrfrom
cursor/year1-circular-perf-gate-ec55
Open

Year-1 circular laser vs chainsaw PERF-GATE + ratchet JSON feed#129
grootstebozewolf wants to merge 6 commits into
feature/sfa-curve-rgrfrom
cursor/year1-circular-perf-gate-ec55

Conversation

@grootstebozewolf

@grootstebozewolf grootstebozewolf commented Sep 1, 2026

Copy link
Copy Markdown
Owner

Year-1 circular laser vs chainsaw (post-#128)

Base: feature/sfa-curve-rgr @ 316258a8149073a88341a2548f4a0af5aa4d4441 (merge of PR #128).
Measured SHA: 29b5d169 (emitter only; no laser algorithm change). Feed: doc/laser-ratchet.json.
Year-2 zoo is library work, not a leftover on JTS PR #7.

GitHub Action

New workflow: .github/workflows/laser-ratchet.ymlnot overloaded onto build-and-test.yml.

  • Triggers: workflow_dispatch; push to feature/sfa-curve-rgr and pull_request, path-filtered to Year-1 circular laser files (*PerfGate*, exactcurve/**, overlayng/curve/**, DistanceConstructionPerfGate*, P1-A / P1-B, ratchet docs, this workflow, the sink/scripts). Clothoid-only / N-SS / HotPixel / 64-a paths are not a reason to expand those.
  • JDK: 1.8 via actions/setup-java@v1 (same as build-and-test.yml). Java 8 language level unchanged.
  • Steps: checkout a branch ref (not detached SHA) → JDK 1.8 → Maven cache → dev/run-year1-laser-ratchet.sh (Year-1 circular PerfGates + P1-A/P1-B; writes doc/laser-ratchet.json from JSONL; stdout-only is the bug) → upload doc/laser-ratchet.json + rows.jsonl as artifact (if: always(), needs actions: write because a permissions: block replaces default token scopes).
  • Reactor: -am walks build-tools. Surefire 3.x needs -Dsurefire.failIfNoSpecifiedTests=false (the 2.x name failIfNoTests is not enough). First Laser-ratchet CI on 8c8bdce8 died there in 26s.
  • Version history: git log -- doc/laser-ratchet.json. On push to feature/sfa-curve-rgr (not pull_request, not forks), if the JSON changed, the job commits chore(laser): retip doc/laser-ratchet.json with a skip-ci token (contents: write). No diff → no commit. That token is only for the bot retip; putting it in a human commit body skips every check on that SHA (that is why af434eef had no CI).
  • Proofs Pages: optional repository_dispatch type laser-ratchet to grootstebozewolf/NetTopologySuite.Proofs (docs/laser-ratchet.json is their SoT; we use doc/). GITHUB_TOKEN cannot cross-repo. Unset PROOFS_DISPATCH_TOKEN → skip; the jts job does not fail. No secret is required for this PR.

Local: bash dev/run-year1-laser-ratchet.sh

(a) Already locked (laser vs chainsaw)

  • #63 6b1dbac1 — Year-1 lock (ExactCircularArc, thin ExactCurve, toLinear only)
  • #66 36ed1dceOrientableSegment adapter
  • #125 81a16be9 — bible A1 (Year-2 zoo membership only; §2/§3 untouched)
  • #128 316258a8 — Year-1 ExactCurve surface + colinear chord pins
  • Prior ratchet pin c956b50d (stale vs HEAD): user-board green 16 · chainsaw-only 3 · measured 11 hold. Sequence M.5→ML.2→HP.4→N-SS expand is STOPPED.

(b) Year-1 circular scoreboard after this run

OpenJDK 8 · nanoTime p50 of 31 after 15 warmups. Numbers from target/laser-ratchet/rows.jsonl.

metric count
green (laser ≤ 1.15×) 119 (117 operation + P1-A + P1-B)
chainsaw-only (named chord-path) 13
measured operation rows 130
HOLD named below

Max non-chord operation ratio: 0.674 (LEC CompoundCurve). Zero Year-1 circular lasers missed 1.15×.

Gates measured: OverlayNGCurve, CurveOpsDistCon, DistanceConstruction, ReverseDispatch (now_* only — no invented red column), CurveWKB, DirectedHausdorff, DiscreteHausdorff, DiscreteFrechet, LargestEmptyCircle, MultiCurve, P1-A (0.122×), P1-B (0.309×).

Previously ungauged on the Proofs observatory now have now_*: WKB, DHD, Discrete Hausdorff/Fréchet, LEC, MultiCurve (was missing from Proofs JSON entirely).

(c) Patches in this PR

  • test.jts.perf.LaserRatchetSink — JSONL emitter + Proofs-schema assembler
  • Year-1 *PerfGateTest + P1-A/P1-B write target/laser-ratchet/rows.jsonl
  • dev/run-year1-laser-ratchet.sh + dev/assemble-laser-ratchet.sh
  • .github/workflows/laser-ratchet.yml
  • doc/laser-ratchet.json (jts feed; Proofs vendors a copy)
  • doc/LASER_RATCHET.md / doc/CHAINSAW_LASER_PROGRAM.md retipped
  • Bible: Year-1 implementation note only. §2 / §3 / A1 untouched

(d) HOLDs refused

  • Year-2 zoo: ExactEllipticalArc, ExactCubicBezier, ExactClothoid, ExactNurbsSegment (page “1 of 5 types” is correct)
  • ClothoidHalleyPerfGateTest (not in the workflow test list)
  • Full D-HF TAG green (fail() kept)
  • M.4 / R.3 / ML.3 / HP.5
  • 74-file N-SS · SHARED_SNAPPED_RAY walk
  • Extra 1M §7 near-degenerate cells
  • 64-a Proofs sweep / 64-file campaign
  • Growing ExactCurve, non-linear core SegmentString, OverlayNGCurve rename, reminting ADR-0004

Tests run — BUILD SUCCESS

OverlayNGCurvePerfGateTest             80/80
ReverseDispatchPerfGateTest            15/15
CurveOpsDistConPerfGateTest            10/10
MultiCurvePerfGateTest                  2/2
CurveWKBPerfGateTest                    2/2
DirectedHausdorffDistancePerfGateTest   4/4
DiscreteHausdorffDistancePerfGateTest   3/3
DiscreteFrechetDistancePerfGateTest     5/5
LargestEmptyCirclePerfGateTest          8/8
DistanceConstructionPerfGateTest        9/9
ExactArcOptionAMillionTrialTest         3/3
PredicateOptionBMillionTrialTest        1/1
check-no-curved                         OK
LaserRatchetSink assemble               ok (schema + 132 JSONL rows)

jts emits doc/laser-ratchet.json for Proofs to vendor. This agent is jts-only (no Proofs PR). Zoo / 64-a remain HOLD.

Open in Web Open in Cursor 

cursoragent and others added 2 commits September 1, 2026 06:10
Stdout-only timings were discarded; gates now write target/laser-ratchet/rows.jsonl
via LaserRatchetSink so Proofs can vendor doc/laser-ratchet.json the same day.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Assemble doc/laser-ratchet.json from PerfGate rows (tip 29b5d16 / post-#128).
Scoreboard this run: green 119, chainsaw-only 13. Previously ungauged WKB/DHD/
Hausdorff/Fréchet/LEC/MultiCurve now have now_*. ReverseDispatch has no red
column. Zoo, 64-a, N-SS, and SHARED_SNAPPED_RAY walk stay HOLD.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
@grootstebozewolf
grootstebozewolf marked this pull request as ready for review September 1, 2026 06:14
cursoragent and others added 4 commits September 1, 2026 06:17
Add .github/workflows/laser-ratchet.yml (not overloaded onto
build-and-test.yml). Path-filtered to circular laser files; JDK 1.8.
Uploads the JSON always. On push to feature/sfa-curve-rgr, commits a
retip when the feed changed ([skip ci] stops the loop). Proofs
repository_dispatch is optional — GITHUB_TOKEN cannot cross-repo.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Check out a branch ref so the retip push is not a detached HEAD.
Grant actions:write so the JSON artifact can upload (permissions
replace the default token scopes). Path-filter the Year-1 primitive
gates. The previous workflow commit body contained a skip-ci token
and GitHub skipped every check on that SHA.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Surefire 3.x on build-tools treats -Dtest= as specified tests and
exits when none match. failIfNoTests is the 2.x name; CI needs
surefire.failIfNoSpecifiedTests=false so -am can walk the reactor.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
Retip feed notes and Year-1 HOLD lists so the four unimplemented
Exact* names and ClothoidHalley are not treated as leftover work on
this fork. implemented:false / measured:false unchanged. Bible §2,
§3, Year-2 period table, and A1 membership text are untouched.

Co-authored-by: Jeroen Bloemscheer <grootstebozewolf@users.noreply.github.com>
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