Skip to content

Releases: simnaut/astrodyn

v0.2.0

09 Jun 04:06
0aee912

Choose a tag to compare

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_doc crate (#663) — frame-document schema: a self-describing serialized form of a reference-frame tree (snapshot FrameDocument + replay-series FrameSeries) carrying identity, topology, origin, and epoch on every record, with bit-exact f64 round-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-default frame-doc feature (astrodyn::frame_doc + astrodyn::frame_doc_io), keeping the production build serde-free.
  • Frame identity vocabulary (#660) — FrameUid plus Frame::DESCRIPTOR on the sealed Frame trait.
  • CartesianState<F> (#650) — typed position + velocity state record with opt-in serde (the gateway's serde feature 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 Ephemeris rotation 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.1 declaring its own rust-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). RefFrameKind was removed; FrameUid is required on FrameTree nodes behind a checked typed boundary (validate() + namespace rules); and the former SourceId collapsed so every cross-source reference is a FrameUid. Downstream code that built frames without identities, or referenced frames via the old SourceId / RefFrameKind types, must migrate to FrameUid.
  • astrodyn::source_frames::SourceFrameIds gained a pub central: bool field (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

12 May 02:28
5d4510f

Choose a tag to compare

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

12 May 03:52
c1e9234

Choose a tag to compare

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 NAIF moon_080317.tf.
  • pck11.pca — IAU 2015 planetary orientation constants (pole/PM), for body-fixed planet rotations. Converted from NAIF pck00011.tpc + gm_de440.tpc.

Both are reproducible from NAIF source via cargo xtask generate-orientation-kernels.