Skip to content

Follow up items for the week of June 27, 2026Β #88

Description

@espg

πŸ€– from Claude

Sweep of closed PRs from the last 10 days (June 17–27, 2026): #53, #55, #57, #58, #59, #70, #72, #76, #84. Items already individually tracked as open issues (#78, #79, #80, #81, #83) or fully addressed in the prior sweep issue (#73) are excluded. Items (7)–(10) are carry-forwards from #73 that are not yet individually tracked.


Items

(1) // floor-division (Morton coarsening) operator β€” deferred β€” PR #72

PR #72 added moc_min / common_ancestor and documented // as the reduce-by-common-coarsening sibling of clip2order. The operator was explicitly called "deferred" in the PR body. No tracking issue exists. Scope: MortonIndex // n coarsening to a given order, matching Python // semantics.

(2) Morton __repr__ deferred to a separate PR β€” PR #76

PR #76's body explicitly notes: "no morton __repr__ is added here β€” that was deferred to a separate PR." No issue has been opened. A useful repr (e.g. MortonCell(order=12, base=3, ...) rather than a raw int) would significantly improve interactive usability and debugging.

(3) res2display() order cap silently wrong above order 20 β€” PR #76

res2display() in tools.py loops only to order 20 and prints km-only units. With the packed-u64 encoding now supporting order 29, the function returns None for any order above 20 β€” silently giving wrong output for the ~11 new usable orders. Should extend to order 29 with readable units (m at fine scales).

(4) Earthdata-gated notebooks not publicly Binder-runnable β€” PR #76

Three of the five updated example notebooks (velocity/grounding line workflows) require authenticated earthaccess downloads and cannot run on public Binder without credentials. PR #76 asked: "Leave as-is, or open a follow-up to cache a small anonymous subset in-tree?" β€” no decision was made. CLAUDE.md Β§4 states notebooks "should be runnable on binder" with "publicly (anonymously) reachable" data, so this is a compliance gap.

(5) split_base_cells dict entry ordering β€” decision pending β€” PR #84

PR #84 added split_base_cells with an open question on dict ordering: first-seen (insertion order from traversal) vs sorted by base cell id. This is an API/behavior decision that affects reproducibility and testability. No determinism test can be written until this is decided.

(6) split_base_cells Python wrapper vs Rust group_by kernel β€” decision pending β€” PR #84

A sorted-output variant of split_base_cells could be a Python wrapper (sort the existing dict result) or a new Rust group-by kernel. The current implementation is pure Python. PR #84 raised this as an open question for @espg. No decision recorded.

(7) CI versioning automation β€” PR #55 / carry-forward from #73

Still unaddressed: the most recent Cargo.toml bump commit message reads "REALLY needs to be automated!!!" (commit 1cf29c2, June 25). Manual Cargo.toml bumps remain the only release path and will keep causing friction on every release. Risk: version drift between the git tag that triggers build-wheels.yml and the Cargo.toml version that sets the wheel version.

(8) mort2norm FORCE_PYTHON remnant β€” PR #49 / carry-forward from #73

mort2norm's _python_mort2norm fallback, the os.environ env-var switch, and the os import remain in tools.py. CLAUDE.md Β§7 states the Rust extension is the sole runtime path β€” this remnant is inconsistent with that guarantee. Scope: one function + ~5 lines of cleanup.

(9) Clippy useless_conversion 27 warnings β€” decision pending β€” PR #57 / carry-forward from #73

27 pre-existing clippy warnings remain on main from the pyo3/numpy ? idiom (false-positive clippy::useless_conversion β€” the conversion is load-bearing). PR #57 left the decision open: keep as-is (noisy clippy output) or add #[allow(clippy::useless_conversion)] at the crate root. Tracked broadly under #48 but never individually filed.

(10) Benchmark scripts reference removed FORCE_PYTHON functions β€” PR #49 / carry-forward from #73

benchmarks/benchmark_rust_vs_python.py and benchmark_morton_bbox.py still set MORTIE_FORCE_PYTHON. For the four removed functions this env var is now a no-op; the benchmarks silently measure only the Rust path while claiming to compare Rust vs Python. Not run by CI so no failure, but misleading. Scope: small update or deletion.


Priority / severity table

Priority Item Severity Source PR
1 res2display() order cap at 20 β€” silent wrong output for orders 21–29 High PR #76
2 CI versioning automation β€” repeated manual pain, explicitly flagged by committer Medium-High PR #55
3 Earthdata-gated notebooks β€” 3 notebooks can't run on public Binder (CLAUDE.md Β§4 gap) Medium PR #76
4 mort2norm FORCE_PYTHON remnant β€” violates Β§7 Rust-only guarantee Medium PR #49
5 Morton __repr__ missing β€” deferred usability gap, no issue filed Medium PR #76
6 // Morton coarsening operator β€” deferred API gap, no issue filed Medium PR #72
7 split_base_cells ordering decision β€” blocks writing determinism tests Low-Medium PR #84
8 split_base_cells Python vs Rust implementation site β€” performance decision Low PR #84
9 Benchmark scripts reference removed FORCE_PYTHON β€” misleading dead code Low PR #49
10 Clippy useless_conversion 27 warnings β€” decision pending (broadly tracked in #48) Low PR #57

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions