Releases: simnaut/astrodyn
v0.2.0
Second release. Headlined by the frame-identity work (#659 / #660–#664 / #668): every reference frame now carries a stable FrameUid, every cross-source reference resolves through it, and a new astrodyn_frame_doc crate captures that identity in a self-describing, replayable wire schema.
Added
astrodyn_frame_doccrate (#663) — frame-document schema: a self-describing serialized form of a reference-frame tree (snapshotFrameDocument+ replay-seriesFrameSeries) carrying identity, topology, origin, and epoch on every record, with bit-exactf64round-trips. Per-record validators (validate_header,validate_uid_table,validate_record) support independent streaming consumers (#659). The gateway exposes it behind a new, off-by-defaultframe-docfeature (astrodyn::frame_doc+astrodyn::frame_doc_io), keeping the production build serde-free.- Frame identity vocabulary (#660) —
FrameUidplusFrame::DESCRIPTORon the sealedFrametrait. CartesianState<F>(#650) — typed position + velocity state record with opt-in serde (the gateway'sserdefeature forwards to it).- New frames and presets: Moon mean-Earth (ME) frame for DEM georeferencing (#652); site-anchored topocentric ENU frame (#651); generic IAU body-fixed rotation beyond Moon/Mars (#653); a typed
Ephemerisrotation accessor (#648); Jupiter + Saturn shape presets (#649). - LSODE integrator family (#615/#616/#617) — non-stiff Adams and stiff BDF (Newton corrector + Jacobian) integrators, wired through the Bevy adapter with a parity test.
Changed
- MSRV bumped to 1.89 (was 1.87). Forced by
bevy 0.18.1declaring its ownrust-version = "1.89"; cargo's MSRV-aware resolution refuses to build the workspace on older toolchains. - Docs and package metadata reframed to describe astrodyn as an engine-agnostic framework rather than a Bevy-first library (#647).
Breaking
- Frame identity is now required throughout (#661/#664/#668).
RefFrameKindwas removed;FrameUidis required onFrameTreenodes behind a checked typed boundary (validate()+ namespace rules); and the formerSourceIdcollapsed so every cross-source reference is aFrameUid. Downstream code that built frames without identities, or referenced frames via the oldSourceId/RefFrameKindtypes, must migrate toFrameUid. astrodyn::source_frames::SourceFrameIdsgained apub central: boolfield (originally landed in #568 without a version bump). Downstream code constructing this struct via struct literal must add the new field.
Tooling
Bundled as part of #527: cargo-deny supply-chain fence; Dependabot weekly cadence; MSRV CI gate; cargo-semver-checks (advisory) against the crates.io baseline; cargo-hack feature-powerset on astrodyn_ephemeris; cancel-superseded CI concurrency; Claude Code review + @claude mention workflows (#666).
Verification
Large Tier 2 / Tier 3 cross-validation expansion against JEOD Trick sims: SIM_orbinit (full 46/46 init-variant matrix), SIM_verif_attach_mass, SIM_dyncomp, SIM_MET, SIM_tide_verif, SIM_7_time_reversal, SIM_VER_DRAG (with the DRAG_OPT_CONST aero option), SIM_RNP_J2000_prop, and the SIM_csr_compare gravity-acceleration octant sweep. Added Rosetta swing-by and Phobos mission benchmarks (#203/#204).
Crates
Fourteen publishable workspace crates published to crates.io at this version — the thirteen from 0.1.0 plus the new astrodyn_frame_doc.
📦 All 14 crates live on crates.io · 📖 Full changelog · 🔍 Compare v0.1.1...v0.2.0
v0.1.0
Add workflow_dispatch recovery path to publish workflow (#474) When a tag-triggered publish run partially succeeds and then halts (e.g. crates.io sparse-index propagation times out after the first crate uploads), there was no way to resume without re-publishing the crates the registry already accepted. Adds `workflow_dispatch` with `from_crate` and `no_wait` inputs that pass through to `cargo xtask publish`, so resuming a v0.1.0 release after a partial failure is one `gh workflow run` away. Co-authored-by: Test User <test@test.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Ephemeris kernels v1
Pinned ephemeris and orientation kernels for astrodyn_ephemeris consumers. This release is decoupled from the source-crate v* releases so kernel data can be updated independently.
| Asset | Size | SHA-256 |
|---|---|---|
de421.bsp |
16,790,528 | 08b20db2ae22488650641c5a9033e5bfda4b1c4b440cfeaf20f621cfa18ecdb3 |
de440.bsp |
32,726,016 | c1c7feeab882263fc493a9d5a5b2ddd71b54826cdf65d8d17a76126b260a49f2 |
moon_pa_de421_1900-2050.bpc |
1,770,496 | 656f90616403d75a75f0cd6c8830fc5b44f8cb4facb5ccb8915e752b397520cf |
moon_fk_de421.epa |
345 | cc2c6e03f28656d317da2b79107c16b4cd0cf01c87a1645f3354d6f53b314c6d |
pck11.pca |
45,604 | 486df2ada7064d79f33b2a4f5d26902474d569108f01c349ada5b39aad52ff72 |
astrodyn_ephemeris::data::load() resolves kernels in this order: ASTRODYN_EPHEMERIS_KERNELS_DIR → $CARGO_MANIFEST_DIR/assets/ (workspace builds) → user cache → fetch from this release (default-on fetch feature).
Orientation kernels (added for #645):
moon_fk_de421.epa— Moon PA→ME frame offset (MOON_ME_DE421, NAIF 31007), for lunar cartography/DEM georeferencing. Converted from NAIFmoon_080317.tf.pck11.pca— IAU 2015 planetary orientation constants (pole/PM), for body-fixed planet rotations. Converted from NAIFpck00011.tpc+gm_de440.tpc.
Both are reproducible from NAIF source via cargo xtask generate-orientation-kernels.