Skip to content

Follow up items for the week of July 4, 2026Β #97

Description

@espg

πŸ€– 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

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions