fix(ci): disable anise default features to unblock cargo-semver-checks (nalgebra 0.35)#632
Merged
Merged
Conversation
nalgebra 0.35.0 (published 2026-05-24) is incompatible with anise's direct `nalgebra = "^0.34"` requirement, but anise's `hyperdual` edge (pulled by its default `analysis` feature) accepts the wider range. The cargo-semver-checks job builds the current crate's rustdoc in a scratch dir with a fresh, *unlocked* resolve, so it selected both nalgebra 0.34.2 (for anise) and 0.35.0 (for hyperdual) into one graph — two incompatible versions — and `anise` failed to compile (436 errors), failing the gate. Our committed Cargo.lock pins a single nalgebra 0.34.1, so normal builds are unaffected; only the unlocked semver-checks resolve broke. astrodyn_ephemeris is the workspace's only anise consumer and uses only core anise (`Almanac::from_spk`/`translate`/`rotate`, constants, `Epoch`). Disabling anise's default features drops `analysis`/`csv`/`rayon`/`metaload` — and with them the `hyperdual → nalgebra` edge — so even a fresh resolve now caps nalgebra at 0.34.x from anise's own requirement. Behavior- preserving (the dropped features are unused and compile-gated) and leaves the dependency tree leaner. Verified: hyperdual removed, single nalgebra 0.34.1; `cargo update -p nalgebra` now caps at 0.34.2 (cannot reach 0.35); 216/216 tier3 tests pass; ephemeris unit tests pass; fmt + clippy clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This PR unblocks cargo-semver-checks for the published astrodyn crate by ensuring the dependency graph cannot resolve to two incompatible nalgebra versions during the action’s fresh/unlocked rustdoc build. It does this by disabling anise default features in the only workspace crate that depends on anise (astrodyn_ephemeris), removing the hyperdual → nalgebra path that admitted nalgebra 0.35.
Changes:
- Disable
anisedefault features incrates/astrodyn_ephemeristo prevent unlocked resolves from pulling in conflictingnalgebraversions. - Update
Cargo.lockto reflect the leaner dependency graph after droppinganisedefault-feature dependencies.
Reviewed changes
Copilot reviewed 1 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| crates/astrodyn_ephemeris/Cargo.toml | Switch anise to default-features = false and document the rationale tied to semver-checks/unlocked resolves. |
| Cargo.lock | Lockfile refresh reflecting removal of anise default-feature dependency subtree (including hyperdual). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
The published astrodyn 0.1.1 baseline is no longer buildable on a fresh (unlocked) resolve: cargo-semver-checks rebuilds the baseline crate in a scratch dir, and since nalgebra 0.35.0 (2026-05-24) anise pulls two incompatible nalgebra majors via its hyperdual edge, so the baseline rustdoc build fails (436 errors) on every PR — independent of the PR's content. A published manifest can't be patched, but `main` can (this PR's anise feature trim), so a git baseline stays buildable and self-heals once this lands. Comparing against main is also a stronger regression fence for a pre-1.0 crate. Checkout uses fetch-depth: 0 so the main rev is local. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
cargo-semver-checks(the gating public-API fence on the publishedastrodyncrate) began failing on every PR afternalgebra 0.35.0was published 2026-05-24:Root cause
astrodyn→astrodyn_ephemeris→anise 0.10.1, which depends onnalgebradirectly (^0.34, i.e.<0.35) and viahyperdual 1.4.0(a wider range that now admits0.35).cargo-semver-checksbuilds both the current crate and a baseline crate's rustdoc with a fresh, unlocked resolve (it ignores ourCargo.lock), so it selectsnalgebra 0.34.2for the anise edge and0.35.0for the hyperdual edge — two incompatible versions in one graph — andanisefails to compile. Our committedCargo.lockpins a singlenalgebra 0.34.1, so normal/locked builds are unaffected.Fix (two parts)
1. Trim
anisefeatures (fixes the current build + leaner deps).astrodyn_ephemerisis the workspace's onlyaniseconsumer and uses only core anise (Almanac::from_spk/translate/rotate, constants,Epoch). Disabling anise's default features dropsanalysis/csv/rayon/metaload— and with them thehyperdual → nalgebraedge — so even a fresh resolve capsnalgebraat0.34.xfrom anise's own^0.34.Behavior-preserving (dropped features are unused and compile-gated);
Cargo.lockdrops ~870 lines.2. Move the semver baseline to git
main(fixes the baseline build).The published
0.1.1baseline can't be patched and is now unbuildable on a fresh resolve.baseline-rev: mainbuilds the baseline frommain's source, which carries the part-1 fix once this lands — so it stays buildable and self-heals. Also a stronger regression fence for a pre-1.0 crate.Bootstrap note
During this PR's own CI, the semver baseline is current
main(which doesn't yet have part 1), socargo-semver-checksstays red here — a one-time chicken-and-egg. This PR is intended to be admin-merged once the substantive checks (Tier 3, unit+tier2, parity) are green. After it lands, semver-checks goes green for all PRs (and #629 once rebased onmain).Verification
hyperdualremoved; singlenalgebra 0.34.1;Cargo.lockstill pins 0.34.1.cargo update -p nalgebranow caps at 0.34.2 — cannot reach 0.35.0.earth_moon); 12/12 ephemeris unit tests;apollo8_frame_switch+kinematic_propagationpass.cargo fmt --check+cargo clippy -p astrodyn_ephemeris --tests -- -D warningsclean.🤖 Generated with Claude Code