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