π€ from Claude
Sweep of closed PRs from the last 10 days (June 24 β July 4, 2026): #59, #70, #72, #76, #84, #85, #86, #87, #89, #91, #94, #95. Items from #59/#70/#72/#76/#84 were already surfaced by the prior sweep (#88); this issue covers new gaps from #85/#86/#87/#89/#91/#94/#95, plus a re-verification of #88's 10 carry-forward items against current main. Six of #88's items are now resolved and excluded: Morton __repr__ (#76), split_base_cells ordering + Python-wrapper decision (#84), mort2norm FORCE_PYTHON remnant (#49), CI versioning automation (#91/#95, tracked to completion via now-closed #92), and the stale benchmark scripts (removed entirely). Four carry-forwards are still open and are folded into the numbered list below. Issue #90 (on_minor_arc/node_straddles, from #87) and #96 (points= geo2mort, filed today by espg) are separately tracked and excluded here.
Items
(1) res2display() order cap still wrong above order 20 β carry-forward from #88 β PR #76
mortie/tools.py::res2display() still loops for res in range(20), so it silently returns nothing for any order above 19 even though the packed-u64 kernel supports order 29. Unchanged by any of the 7 new PRs.
(2) arro3-core CI leg for the pyarrow-free consumer was designed but never wired up β PR #94 (Refs #92/#93)
PR #94 built the Arrow C Data Interface specifically so zagg's pyarrow-free Lambda worker can consume morton_index (TestArro3Interop, currently skipif-gated and local-only β arro3-core is deliberately kept out of the test extra). A concrete arro3-no-pyarrow CI job was proposed with exact YAML in a comment on issue #92 (#92#issuecomment-4859163096), explicitly because the routine lacks the workflow OAuth scope needed to push .github/workflows/ changes itself. Issue #92 was subsequently closed by PR #95 β but #95 only fixed the changelog/version-carryover and codecov.yml; the CI leg was never added. The one real pyarrow-absent consumer this feature exists for currently has zero CI coverage.
(3) // floor-division Morton coarsening operator still not implemented β carry-forward from #88 β PR #72
No __floordiv__ exists anywhere in mortie/morton_index.py, mortie/prefix_trie.py, or src_rust. Still deferred, still no tracking issue of its own.
(4) Earthdata-gated notebooks not publicly Binder-runnable β carry-forward from #88 β PR #76
No PR in this window touched any notebook; the three velocity/grounding-line notebooks requiring authenticated earthaccess downloads are unchanged. CLAUDE.md Β§4 still calls for Binder-runnable notebooks with anonymously-reachable data.
(5) Dissolve winding-sign ambiguity near/over a hemisphere is documented but unguarded β PR #89
mortie/geometry.py::_dissolved_rings_py (and the Rust mirror src_rust/src/dissolve.rs::classify_and_split) classifies exterior-vs-hole rings via if sum(areas) < 0.0: reverse. Spherical signed area is only defined mod 4Ο, so the test is unreliable once a dissolved cover approaches/exceeds a hemisphere. PR #89's review (discussion_r3491006825) suggested either a guard/raise or a comment; only the comment ("this assumes the cover stays well under a hemisphere") was added β there's no runtime guard and no test near a hemisphere-sized cover.
(6) Clippy useless_conversion warnings still pending, now 31 (was 27) β carry-forward from #88 β PR #57
New #[pyfunction] bindings added in #86/#94 grew the pre-existing false-positive count from 27 to 31. Still no #[allow(clippy::useless_conversion)] anywhere in src_rust, and still flagged as "pre-existing, not introduced here" in each new PR's self-review rather than decided one way or the other.
(7) from_geometry(..., normalize=False) is silently a no-op for LineString/MultiLineString input β PR #89
The linear branch of mortie/geometry.py::from_geometry (~line 262) only rejects moc/tolerance/max_cells as polygon-only; normalize passes straight through with no effect and no error, since linestring_coverage has no such parameter. Raised in review (discussion_r3487712390); not fixed.
(8) Two non-blocking design questions from PR #85 remain unanswered β PR #85
(a) Whether moc_to_order's size guard should raise ValueError (current) or MemoryError; (b) whether the hard-raise threshold should stay pinned to the existing 1<<20 warn threshold or use a separate, higher line. Both were posed as "Questions for review" in the PR body with no reply visible in the thread and no later follow-up.
(9) PR #91's mktemp+mv vs. sed -i portability question β no explicit sign-off visible β PR #91
PR #91 asked for explicit confirmation of a deliberate deviation from sed -i (portability across GNU/BSD sed); the PR was merged with no visible reply. Effectively moot since it shipped, but noting it since the question was never explicitly closed out.
Priority / severity table
| Priority |
Item |
Severity |
Source PR |
| 1 |
res2display() order cap wrong above order 20 β silent wrong output for orders 20β29 |
High |
#76 (carry-forward) |
| 2 |
arro3-core CI leg missing β the one real pyarrow-free consumer path has zero CI coverage |
High |
#94 |
| 3 |
// Morton coarsening operator missing β deferred API gap, still untracked |
Medium |
#72 (carry-forward) |
| 4 |
Earthdata-gated notebooks not Binder-runnable β CLAUDE.md Β§4 compliance gap |
Medium |
#76 (carry-forward) |
| 5 |
Dissolve winding-sign ambiguity near a hemisphere β unguarded correctness risk on large polar covers |
Medium |
#89 |
| 6 |
Clippy useless_conversion warnings, now 31 β decision still pending |
Low |
#57 (carry-forward) |
| 7 |
from_geometry(normalize=False) silently ignored for linear input |
Low |
#89 |
| 8 |
Two unanswered design questions in moc_to_order's size guard |
Low |
#85 |
| 9 |
PR #91 portability question β no explicit sign-off, effectively moot |
Low |
#91 |
π€ from Claude
Sweep of closed PRs from the last 10 days (June 24 β July 4, 2026): #59, #70, #72, #76, #84, #85, #86, #87, #89, #91, #94, #95. Items from #59/#70/#72/#76/#84 were already surfaced by the prior sweep (#88); this issue covers new gaps from #85/#86/#87/#89/#91/#94/#95, plus a re-verification of #88's 10 carry-forward items against current
main. Six of #88's items are now resolved and excluded: Morton__repr__(#76),split_base_cellsordering + Python-wrapper decision (#84),mort2normFORCE_PYTHON remnant (#49), CI versioning automation (#91/#95, tracked to completion via now-closed #92), and the stale benchmark scripts (removed entirely). Four carry-forwards are still open and are folded into the numbered list below. Issue #90 (on_minor_arc/node_straddles, from #87) and #96 (points=geo2mort, filed today by espg) are separately tracked and excluded here.Items
(1)
res2display()order cap still wrong above order 20 β carry-forward from #88 β PR #76mortie/tools.py::res2display()still loopsfor res in range(20), so it silently returns nothing for any order above 19 even though the packed-u64 kernel supports order 29. Unchanged by any of the 7 new PRs.(2) arro3-core CI leg for the pyarrow-free consumer was designed but never wired up β PR #94 (Refs #92/#93)
PR #94 built the Arrow C Data Interface specifically so zagg's pyarrow-free Lambda worker can consume
morton_index(TestArro3Interop, currentlyskipif-gated and local-only β arro3-core is deliberately kept out of thetestextra). A concretearro3-no-pyarrowCI job was proposed with exact YAML in a comment on issue #92 (#92#issuecomment-4859163096), explicitly because the routine lacks theworkflowOAuth scope needed to push.github/workflows/changes itself. Issue #92 was subsequently closed by PR #95 β but #95 only fixed the changelog/version-carryover andcodecov.yml; the CI leg was never added. The one real pyarrow-absent consumer this feature exists for currently has zero CI coverage.(3)
//floor-division Morton coarsening operator still not implemented β carry-forward from #88 β PR #72No
__floordiv__exists anywhere inmortie/morton_index.py,mortie/prefix_trie.py, orsrc_rust. Still deferred, still no tracking issue of its own.(4) Earthdata-gated notebooks not publicly Binder-runnable β carry-forward from #88 β PR #76
No PR in this window touched any notebook; the three velocity/grounding-line notebooks requiring authenticated
earthaccessdownloads are unchanged. CLAUDE.md Β§4 still calls for Binder-runnable notebooks with anonymously-reachable data.(5) Dissolve winding-sign ambiguity near/over a hemisphere is documented but unguarded β PR #89
mortie/geometry.py::_dissolved_rings_py(and the Rust mirrorsrc_rust/src/dissolve.rs::classify_and_split) classifies exterior-vs-hole rings viaif sum(areas) < 0.0: reverse. Spherical signed area is only defined mod 4Ο, so the test is unreliable once a dissolved cover approaches/exceeds a hemisphere. PR #89's review (discussion_r3491006825) suggested either a guard/raise or a comment; only the comment ("this assumes the cover stays well under a hemisphere") was added β there's no runtime guard and no test near a hemisphere-sized cover.(6) Clippy
useless_conversionwarnings still pending, now 31 (was 27) β carry-forward from #88 β PR #57New
#[pyfunction]bindings added in #86/#94 grew the pre-existing false-positive count from 27 to 31. Still no#[allow(clippy::useless_conversion)]anywhere insrc_rust, and still flagged as "pre-existing, not introduced here" in each new PR's self-review rather than decided one way or the other.(7)
from_geometry(..., normalize=False)is silently a no-op for LineString/MultiLineString input β PR #89The linear branch of
mortie/geometry.py::from_geometry(~line 262) only rejectsmoc/tolerance/max_cellsas polygon-only;normalizepasses straight through with no effect and no error, sincelinestring_coveragehas no such parameter. Raised in review (discussion_r3487712390); not fixed.(8) Two non-blocking design questions from PR #85 remain unanswered β PR #85
(a) Whether
moc_to_order's size guard should raiseValueError(current) orMemoryError; (b) whether the hard-raise threshold should stay pinned to the existing1<<20warn threshold or use a separate, higher line. Both were posed as "Questions for review" in the PR body with no reply visible in the thread and no later follow-up.(9) PR #91's mktemp+mv vs.
sed -iportability question β no explicit sign-off visible β PR #91PR #91 asked for explicit confirmation of a deliberate deviation from
sed -i(portability across GNU/BSD sed); the PR was merged with no visible reply. Effectively moot since it shipped, but noting it since the question was never explicitly closed out.Priority / severity table
res2display()order cap wrong above order 20 β silent wrong output for orders 20β29//Morton coarsening operator missing β deferred API gap, still untrackeduseless_conversionwarnings, now 31 β decision still pendingfrom_geometry(normalize=False)silently ignored for linear inputmoc_to_order's size guard