Skip to content

crates.io publish prep for mortie-core (issue #201) - #211

Merged
espg merged 6 commits into
mainfrom
claude/201-crates-prep-v2
Aug 24, 2026
Merged

crates.io publish prep for mortie-core (issue #201)#211
espg merged 6 commits into
mainfrom
claude/201-crates-prep-v2

Conversation

@espg

@espg espg commented Aug 24, 2026

Copy link
Copy Markdown
Owner

Refs #201 (crates.io publish prep). Refs #202 (due-diligence residuals folded in — espg decides when that issue closes).

Continuation of #210#207 (workspace split) was squash-merged to main, so the original stacked branch's ancestry no longer matched; this PR carries the same five prep commits cherry-picked onto main (no force-push, per policy). The actual cargo publish is a production release espg executes by hand; this PR goes exactly as far as a clean cargo publish --dry-run and stops.

Phases

  • Phase 1 — crate metadata (589adc7): mortie-core/Cargo.toml gains rust-version, homepage/readme, keywords, categories, and a docs.rs target pin; LICENSE (MIT) copied into the crate dir so the published archive ships the license text.
  • Phase 2 — README (5dd7ed6): mortie-core/README.md with the wire-format-frozen framing per the semver ruling: crate API 0.x/unstable, byte-level codec grammar frozen-for-1.x and normative in the spec page (deep-linked under the latest/ alias, since the docs site is mike-versioned and the unprefixed path 404s). The anchors are slugified from the numbered headings, so they are not stable by construction — they are unaffected by Spec: normative toc word grammar, frozen for 1.x (issue #193) #206 specifically, because that PR appends a new section and leaves §1/§2 untouched. Includes the mortie-core due diligence: license, CDS-healpix dep overlap, MSRV, wasm32 target #202 license-direction line (MIT crate ← Apache-2.0 consumer is the clean direction). Also two test-only lines: iter::repeat_n (stabilized 1.82) → repeat().take() so the whole crate, tests included, compiles on the declared MSRV.
  • Phase 3 — CI leg (316bee8): .github/workflows/mortie-core.yml, new standalone workflow (existing workflows untouched): build, cargo test -p mortie-core (includes tests/dep_contract.rs, the zero-dependency guard — the stale "no CI runs this" note in lib.rs updated accordingly), wasm32 build (mortie-core due diligence: license, CDS-healpix dep overlap, MSRV, wasm32 target #202), publish dry-run, and an MSRV job that tests the packaged crate on 1.67 (the check must leave the workspace: the workspace Cargo.lock is v4, unreadable by pre-1.78 cargo).

Name — RESOLVED

espg ruled mortie-core (2026-08-24). The in-tree metadata already carried that default, so nothing changed on the ruling.

Original framing, kept for the record: Defaulted to mortie-core — available on crates.io, as are all alternatives (see the availability findings on #201). The name is espg's ruling and a five-minute mechanical rename, but it is not two-places-trivial — the sites are: the name field in mortie-core/Cargo.toml; the README title line and its use mortie_core::… example (the lib name derives from the package name, so the example stops compiling otherwise); the workspace-root Cargo.toml dependency key mortie-core = { path = "mortie-core" } (a build break, not a doc nit, unless the key changes or gains package = "…"); and .github/workflows/mortie-core.yml's four -p mortie-core flags plus its mortie-core-*.crate globs. The name-derived documentation = "https://docs.rs/mortie-core" field has been dropped (docs.rs is cargo's default for a published crate), removing one silent-breakage site.

MSRV: 1.67 (determined empirically)

  • Lib gate is u64::ilog10 (decimal_morton.rs:671), stabilized 1.67.0.
  • Verified against the packaged crate: full suite green on 1.67.0; 1.66 fails on int_log even with --ignore-rust-version, so 1.67 is the true floor, not just the declared one.
  • The only post-1.67 usage was iter::repeat_n in two #[cfg(test)] lines (would have made the crate-as-tested need 1.82); swapped to the equivalent repeat().take() (phase 2) rather than declaring a 15-release-newer MSRV for a test convenience.
  • Consumer side: healpix-geo's workspace pins no top-level rust-version, so there is no upstream constraint to match (mortie-core due diligence: license, CDS-healpix dep overlap, MSRV, wasm32 target #202).

Dry run (local, clean)

$ cargo publish --dry-run -p mortie-core
    Updating crates.io index
   Packaging mortie-core v0.1.0 (.../mortie-core)
    Packaged 11 files, 100.9KiB (28.8KiB compressed)
   Verifying mortie-core v0.1.0 (.../mortie-core)
   Compiling mortie-core v0.1.0 (.../target/package/mortie-core-0.1.0)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.22s
   Uploading mortie-core v0.1.0 (.../mortie-core)
warning: aborting upload due to dry run

No path-dependency issues: the workspace root depends on mortie-core, not the reverse; cargo tree -p mortie-core is one line and tests/dep_contract.rs keeps it that way.

wasm32 (#202)

cargo build --target wasm32-unknown-unknown -p mortie-coreFinished clean, no changes needed (zero-dep arithmetic crate). Also wired into the CI leg.

How it was tested

  • cargo test -p mortie-core — 72 tests green (66 unit + dep_contract 2 + pivot_surface 4).
  • cargo publish --dry-run -p mortie-core — clean (tail above).
  • Packaged-crate MSRV check on 1.67.0 / negative check on 1.66.1, as described.
  • wasm32 build clean.
  • CI: this PR runs the new mortie-core crate workflow itself.

Questions for review

  1. Crate name ruling RESOLVED: espg ruled mortie-core (2026-08-24, recorded on #201); the metadata already defaults to it, no change needed.
  2. fmt/clippy in the CI leg RESOLVED: espg ruled it rides this PR (2026-08-24) — the crate job now runs cargo fmt --check -p mortie-core and cargo clippy -p mortie-core --all-targets -- -D warnings (88969bd; both clean locally). Covers the mortie-core half of Follow up items for the week of 2026-08-17 #208 item 1; the src_rust/ half stays on Follow up items for the week of 2026-08-17 #208.
  3. Release cadence RESOLVED: espg ruled own cadence, by-hand publish (2026-08-24, recorded on #201). Nothing in this PR mechanizes a release — publish stays a by-hand command.

@codecov

codecov Bot commented Aug 24, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 96.67%. Comparing base (b2ad13a) to head (88969bd).

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##             main     #211   +/-   ##
=======================================
  Coverage   96.67%   96.67%           
=======================================
  Files          20       20           
  Lines        2283     2283           
=======================================
  Hits         2207     2207           
  Misses         76       76           
Flag Coverage Δ
unittests 96.67% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.


Continue to review full report in Codecov by Harness.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update b2ad13a...88969bd. Read the comment docs.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@codspeed-hq

codspeed-hq Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Merging this PR will improve performance by 15.53%

⚠️ Different runtime environments detected

Some benchmarks with significant performance changes were compared across different runtime environments,
which may affect the accuracy of the results.

Open the report in CodSpeed to investigate

⚡ 1 improved benchmark
✅ 70 untouched benchmarks
⏩ 1 skipped benchmark1

Performance Changes

Benchmark BASE HEAD Efficiency
coverage_triangle[4] 147.6 µs 127.8 µs +15.53%

Tip

Curious why this is faster? Comment @codspeedbot explain why this is faster on this PR, or directly use the CodSpeed MCP with your agent.


Comparing claude/201-crates-prep-v2 (88969bd) with main (b2ad13a)

Open in CodSpeed

Footnotes

  1. 1 benchmark was skipped, so the baseline result was used instead. If it was deleted from the codebase, click here and archive it to remove it from the performance reports.

@espg
espg marked this pull request as ready for review August 24, 2026 17:13
@espg espg added the waiting label Aug 24, 2026
@espg

espg commented Aug 24, 2026

Copy link
Copy Markdown
Owner Author

🤖 from Claude

Folded espg's two in-session rulings (2026-08-24):

  • fmt/clippy ride this PR (overriding the leave-minimal posture): 88969bd extends the crate job with cargo fmt --check -p mortie-core and cargo clippy -p mortie-core --all-targets -- -D warnings (toolchain now installs the rustfmt, clippy components). Both were run locally first from a clean build: no findings in either — no fmt churn, no clippy lints, so the commit is workflow-only. Refs Follow up items for the week of 2026-08-17 #208 (covers the mortie-core half of item 1; src_rust/ half noted there).
  • Cadence: own cadence, by-hand publish — recorded on #201, which closes the last open half of that issue. Questions 2 and 3 in the body are now marked RESOLVED; no standing questions remain on this PR beyond the merge itself.

@espg
espg merged commit 54e9133 into main Aug 24, 2026
26 checks passed
@espg
espg deleted the claude/201-crates-prep-v2 branch August 24, 2026 22:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant