Skip to content

JEOD Sim Coverage

Claude edited this page May 10, 2026 · 3 revisions

JEOD SIM Coverage Map

Audit anchor: this map reflects the astrodyn tree at commit 7619f2f (2026-05-10) versus JEOD v5.4. Per-RUN verdicts were re-derived by reading each JEOD SIM's S_define, Modified_data/, SET_test/RUN_*/input.py, and comparing against the corresponding astrodyn tier3 test source — not just by checking that a test name exists. After the workspace rebrand (#387), all tier3_* tests live in crates/astrodyn_verif_jeod/tests/; Bevy parity siblings live in crates/astrodyn_verif_parity/tests/bevy_parity_*.rs.

This page is the authoritative per-SIM, per-RUN coverage view. It supersedes earlier "covered/partial/not-covered" tables that scored at the SIM level only. The companion artifact is the JEOD-Capability-Matrix, which scores at the capability level (model, algorithm, data file).

What a coverage verdict means

Stricter than the previous version. A SIM/RUN is:

  • fully covered — at least one tier3 test loads the same initial conditions, exercises the same gravity/atmosphere/RNP/integrator configuration, runs for the same duration (or longer), and asserts position/velocity/attitude/rates against the JEOD reference CSV via assert_position / assert_velocity / assert_quat_angle / assert_ang_vel.
  • partial — N of M RUNs — some RUNs of a multi-RUN SIM are fully covered; others are not. Listed explicitly which RUNs hit which bucket.
  • partial — same physics, no JEOD CSV cross-validation — the physics is exercised analytically (energy / angular momentum conservation, period match, etc.) but not cross-validated against the JEOD reference output. Lower-rigor than CSV cross-val, but still useful.
  • derived — exercised transitively by tests targeting other SIMs that include this SIM as a component (e.g. ephemeris is exercised by every trajectory that loads DE421, even if no test targets SIM_ephem_verif directly).
  • not covered — no implementation, no test.
  • n/a — deliberately out of scope; rationale identifies the Rust/Bevy equivalent (e.g. JEOD's SIM_memory covered by Rust ownership, not by an equivalent test).

Tier 1 (math/unit) and Tier 2 (static reference vectors) tests are noted where relevant but do not count toward Tier 3 coverage on their own.


dynamics / body_action

JEOD SIM RUNs Verdict Our tier3 tests / detail
SIM_orbinit ~46 (across 4 orbit-family directories) partial — 5/46 RUNs CSV-validated Docker-cross-validated: tier3_orbinit_docker_run0001_iss_inertial, _run0101_sts_inertial, _run0201_iss_pfix, _run0301_sts_pfix, _run0401_sts_trans_state. Family invariants (analytical, no JEOD CSV): tier3_orbinit_circular_leo, _eccentric, _equatorial, _highly_eccentric, _hyperbolic, _near_parabolic, _polar, _retrograde, _roundtrip_* (8 round-trip tests). Conversion-correctness via tier3_simulation_orbinit_cross_consistency and tier3_bevy_orbinit_cross_consistency. Gap: 41 of 46 JEOD-source RUNs have no per-RUN trajectory cross-validation.
SIM_lvlh_init 2 (rectilinear, curvilinear) partial — same physics, different harness tier3_simulation_run2_lvlh_rot_init_propagation exercises BodyAction::InitLvlhRot end-to-end (computes t=0 attitude from JEOD's YPR + LVLH-rate IC, then propagates 8 h vs the run2 CSV). bevy_parity_init_lvlh_rot_lvlh_rate_frame_dispatches and bevy_parity_init_lvlh_rot_writes_rotational_state_in_body_frame add Bevy-side parity. The two JEOD lvlh_init RUNs (rectilinear/curvilinear) are not driven directly; coverage rides on the dyncomp_run2 reference.
SIM_ref_attach 2 (matrix, point-to-point) fully covered tier3_sim_ref_attach_matrix (RUN_ref_attach_matrix: matrix attach to Earth.pfix at t=50, propagate to t=100) and tier3_sim_ref_attach_pt2pt (RUN_ref_attach_pt2pt: BodyAttachAligned named-point attach via Simulation::attach_to_frame_aligned). Pre- and post-attach windows both cross-validated against JEOD CSVs.
SIM_verif_attach_mass 21 partial — 8/21 RUNs tier3_sim_attach_mass covers RUN_01, 02, 03, 04, 10, 11, 101, 102. JEOD mass.out files cross-validated for those 8. The other 13 RUNs (advanced attach geometries, reattachment patterns) are not exercised.
SIM_verif_frame_switch 2 fully covered tier3_apollo8_frame_switch (Earth↔Moon switch at lunar approach) and tier3_apollo8_eci_integ (companion test for ECI integration before switch).

dynamics / derived_state

JEOD SIM RUNs Verdict Our tier3 tests / detail
SIM_Euler 3 fully covered tier3_simulation_euler, _euler_ecc, _euler_equ + tier3_bevy_euler* parity. Plus 6 JEOD reference test vectors at Tier 2 in astrodyn_math.
SIM_LVLH 3 (equatorial, eccentric, inclined) fully covered tier3_simulation_lvlh, _lvlh_ecc, _lvlh_equ + tier3_bevy_lvlh* parity + tier3_lvlh_eccentric_orbit, _periodicity, _retrograde_orbit analytical.
SIM_LvlhRelative 2 fully covered tier3_simulation_lvlhrel_test0/test1 + tier3_bevy_lvlhrel_* + tier3_sim_lvlh_relative_consistency.
SIM_NED 3 fully covered tier3_simulation_ned_polar, _ned_sph_inc, _ned_sph_polar + tier3_bevy_ned_sph_* parity. Polar-orbit longitude has documented numerical instability (atan2 sensitivity).
SIM_OrbElem 1 + many singularity sub-cases fully covered tier3_simulation_orbelem_t01..t55 (7 variants) + tier3_bevy_orbelem* parity + 8 tier3_orbinit_roundtrip_* analytical (circular, eccentric, equatorial, hyperbolic, molniya, polar, retrograde).
SIM_Planetary 5 fully covered tier3_simulation_planetary_geo, _leo_ecc, _leo_equ, _leo_inc, _leo_polar + tier3_bevy_planetary_* parity.
SIM_Relative 3 fully covered tier3_simulation_relative_a_rot_no_trans, _ab_rot_ab_trans, _no_rot_ab_trans + tier3_bevy_relative_* parity + 5 analytical (tier3_relative_different_inclinations, _hohmann_transfer_geometry, _round_trip_frames, _same_orbit_phase_difference, _two_coorbiting_vehicles) + tier3_sim_relative_state_consistency.
SIM_SolarBeta 3 fully covered tier3_simulation_solar_beta, _equ, _obliquity + tier3_bevy_solar_beta* parity + 6 analytical (tier3_solar_beta_bounded, _equatorial_at_equinox, _iss_orbit, _polar_orbit, _sun_in_orbital_plane, _sun_perpendicular_to_plane).

dynamics / dyn_body, dyn_manager, rel_kin

JEOD SIM RUNs Verdict Our tier3 tests / detail
SIM_dyncomp 30 partial — 21/30 fully, 2/30 partial, 5/30 not covered, 2/30 n/a See per-RUN table below.
SIM_dyncomp_structure 1 (parametric mass-tree sweep) partial — same physics, different config tier3_apollo_mass_tree, tier3_mass_attach_detach, tier3_mass_* (8 invariant tests). No direct structure-sweep RUN cross-validation.
SIM_force_torque 1 fully covered tier3_force_constant_acceleration, _and_torque_decoupled, _symmetric_impulse_returns_to_rest, tier3_torque_constant_angular_acceleration, tier3_sim_torque_simple_run01..06 (6 RUNs), tier3_sim_force_torque_response.
SIM_verif_attach_detach 3 (RUN_simple_attach_detach, RUN_complex_attach_detach, RUN_compute_child_derivative) fully covered Trajectory cross-val: tier3_sim_attach_detach_trajectory_simple (RUN_simple, full pre-attach + attached + post-detach windows via Simulation::attach/detach), tier3_sim_complex_attach_detach_pre_attach_trajectory + _rerooting_topology (RUN_complex chained-attach re-rooting), tier3_sim_compute_child_derivative_pre_attach_trajectory + _rerooting_topology + _full_trajectory (RUN_compute_child_derivative force/torque scheduling on kinematic children). Plus mass-tree analytical: tier3_mass_detach_all_children, _recovers_original, _reattach_different_position (10 functions in tier3_mass_attach_detach.rs). Bevy parity: bevy_parity_attach_detach_trajectory_simple, bevy_parity_chained_attach_*, bevy_parity_kinematic_propagation_simple_chain, bevy_parity_attach_non_root_integ_source_*, bevy_parity_detach_non_root_integ_source_*, bevy_parity_mass_attach_*, bevy_parity_mass_detach_*.
SIM_verif_shutdown 1 n/a — Rust Drop JEOD shutdown sequence; Rust ownership cleans up resources automatically.
SIM_removable_body_action 1 (RUN_1, 1-second logging-only) fully covered (via dyncomp_run2 proxy) bevy_parity_body_action_lifecycle mirrors JEOD's mass.py add → remove → re-add lifecycle on the Bevy adapter and propagates the resulting orbit against the dyncomp_run2_state.csv reference (numerically identical because spherical-Earth point-mass cancels vehicle mass). bevy_parity_body_action_init_mass_resets_abm4_history, bevy_parity_body_action_init_trans_resets_abm4_history, and bevy_parity_body_action_startup_message_applies_exactly_once cover specific lifecycle invariants. tier3_bevy_parity_body_action_init_lifecycle adds the runner-side parity.
SIM_RELKIN_VERIF 1 (RUN_relkin_test) partial — same physics, no JEOD CSV Relative kinematics exercised via tier3_relative_* analytical and tier3_simulation_relative_*. No SIM_RELKIN-specific RUN cross-validation.

environment / time

JEOD SIM RUNs Verdict Our tier3 tests / detail
SIM_1_dyn_only 1 fully covered tier3_time_v1_dyn_only loads JEOD CSV, asserts DYN seconds match within 1e-12s.
SIM_2_dyn_plus_STD 5 (init by value, MET, GPS sec, GPS week, UTC epoch) partial — 1/5 RUNs tier3_time_v2_std covers RUN_initialize_by_value. Other initialization modes (MET, GPS variants) not tested.
SIM_3_dyn_plus_UDE 4 fully covered tier3_time_v3_ude covers representative RUN with millisecond-precision UDE+DYN combo.
SIM_4_common_usage 2 (uGPS init, leap-second boundary) partial — 1/2 RUNs tier3_time_v4_common covers leap-second crossing; uGPS init mode not tested.
SIM_5_all_inclusive 3 fully covered tier3_time_v5_all covers RUN_UDE_initialized + all 10+ time scales; tier3_time_forward_reverse_all_scales adds bidirectional.
SIM_6_extension 1 (user-defined extension scale) partial — standard scales covered, user extension out of scope tier3_time_v6_ext covers standard-scale subset. User-defined extensions are an architectural divergence (not implemented; users add scales as needed).
SIM_7_time_reversal 8 partial — 3/8 + general round-trip tier3_sim_time_reversal_run1, _run3a, _run8b cover 3 explicit RUNs. tier3_sim_time_reversal_round_trip and tier3_time_forward_reverse_all_scales cover general bidirectional contract. RUN_2, RUN_4–7 not explicitly tested.

environment / gravity, ephemerides, RNP, planet, atmosphere, earth_lighting, spice

JEOD SIM RUNs Verdict Our tier3 tests / detail
SIM_grav_accel_verif 1 (RUN_01: 4×4 + 8×8 SH static check) fully covered (mixed-tier) Tier 2: astrodyn_gravity::jeod_validation::spherical_harmonics_40_test_vectors validates 40 JEOD reference vectors statically. Tier 3 via SIM_dyncomp proxy: tier3_simulation_run3a_sh4x4 + _run3b_sh8x8 exercise the same gravity setup in trajectory cross-val. Note: no test directly targets SIM_grav_accel_verif's CSV; coverage is via the equivalent SIM_dyncomp RUNs.
SIM_csr_compare 1 (CSR vs GGM) not covered CSR coefficient set not ingested. We use GGM05C/GGM02C only. Tracked in Audit-Findings B1.10.
SIM_mercury 3 (RUN_newtonian, RUN_relativistic_sun, RUN_ephemeris) fully covered tier3_mercury_jeod_advance_rate reads 774MB Newtonian/relativistic CSVs, detects ~6800 periapsis events, measures GR rate (40–46 arcsec/century vs 43 theoretical). tier3_mercury_perihelion_advance_rate self-validates over 200 orbits. tier3_simulation_mercury_relativistic_effect 10-orbit sanity. tier3_bevy_mercury_relativistic + tier3_bevy_relativistic_moving_source parity.
SIM_tide_verif 2 (RUN_01, RUN_02) partial — 1/2 RUNs tier3_simulation_tide_run01 covers RUN_01 with JEOD CSV; tier3_bevy_tidal_sh4x4 and tier3_sh4x4_rnp add Bevy parity. RUN_02 not tested.
SIM_ephem_verif 2 (DE421 interpolation accuracy) derived Every trajectory test using ANISE exercises ephemeris. tier3_simulation_earth_moon_clem is the explicit Earth-Moon ephemeris case. No direct SIM_ephem_verif RUN cross-validation.
SIM_prop_planet 10 (propagated-planet + checkpoint + integrator switching) not covered Propagated-planet mode (planets integrated under sim physics, not ephemeris-sourced) not implemented. We require ANISE-loaded ephemeris.
SIM_RNP_J2000_prop 6 (polar motion, nutation, precession, RNP frame variants) partial — 1/6 RUNs tier3_bevy_run2p_polar_motion + tier3_simulation_run2p_polar_motion + tier3_sim_polar_motion cover the polar-motion RUN. tier3_bevy_sh4x4_rnp exercises gravity-under-RNP. The other 5 RUNs (nutation isolation, precession isolation, RNP-frame switch) not separately tested.
SIM_mars_orientation 2 fully covered tier3_sim_mars_rotation_dispatch validates the rotation dispatch logic; tier3_simulation_mars_dawn + tier3_bevy_mars_dawn exercise Mars rotation in the DAWN orbital scenario.
SIM_PLANET_VERIF 7 (Earth/Moon/Mars planet constants) derived Planet radii/μ/J2/flattening exercised by every gravity, geodetic, and orbit-init test transitively. No direct SIM_PLANET_VERIF cross-validation.
SIM_MET 9 (multiple altitudes, seasons, density profiles) partial — 1/9 RUNs tier3_simulation_met_run5a + tier3_bevy_met_run5a cover RUN_5A (mid-altitude, nominal density). 8 other altitude/season variants not tested. tier3_bevy_met_atmosphere_drag_sixdof exercises 6-DOF drag with MET.
SIM_wind 2 (corotating, inertial-frame wind) partial — same physics, no JEOD CSV tier3_drag_corotation_wind_effect exercises corotating-wind drag reduction analytically. No direct SIM_wind RUN CSV cross-validation.
SIM_LIGHT_CIR 10 (T01–T10: sunlit, shadow, terminator, penumbra, eclipse, etc.) fully covered tier3_bevy_earth_lighting_t01 through _t10 (all 10 cases mapped). tier3_sim_earth_lighting_consistency validates determinism. tier3_bevy_earth_lighting_pipeline exercises full module.
SIM_de4xx 2 derived Every trajectory loading DE4xx via ANISE exercises ephemeris read.
SIM_spice 2 n/a — replaced by ANISE SPICE C-binding lifecycle replaced by ANISE (Rust SPK reader). Coverage: ANISE is bit-validated against CSPICE in flight-dynamics deployments.

interactions

JEOD SIM RUNs Verdict Our tier3 tests / detail
SIM_VER_DRAG 11 (3 ballistic + 8 flat-plate variants) partial — 10/11 RUNs Ballistic: tier3_sim_drag_ver_bc, _ver_cd (2 of 3 RUNs). Flat-plate: tier3_sim_drag_ver_flatplate_calc_eps00, _eps05, _eps1, _diffuse, _mixed, _specular, _orbiter, _torque (all 8 variants). Plus tier3_sim_drag_flatplate_ver, tier3_sim_drag_analytical, 8 tier3_drag_* analytical. Gap: RUN_aero_drag_const (constant-force mode) not ported (config gap, not physics gap).
SIM_contact 8 (point, point off-center, line, line-point, line-arbitrary, line-inverse, line-side-to-side) fully covered tier3_contact_point_pair, _point_off_center, _line_pair, _line_point, _line_side_to_side. Tests load JEOD CSVs, integrate with RK4 dt=0.01s, cross-validate trajectory + force/torque. Note: this is an upgrade from the old doc which said "not covered, body-to-body contact forces not ported" — that was stale; contact mechanics is ported in crates/astrodyn_interactions/src/contact.rs.
SIM_ground_contact 1 (RUN_contact_ground) fully covered tier3_contact_ground cross-validates against contact_ground_contact_state.csv. GroundFacet (sphere-vs-plane geometry, Phase::Initialization / Phase::SteadyState) is ported in crates/astrodyn_runner + astrodyn_interactions. The earlier #[ignore] gating is gone.
SIM_grav_torque_verif 1 (RUN_01) fully covered (via dyncomp) Exercised in greater fidelity through SIM_dyncomp RUN_10 series: tier3_simulation_run10a_gravity_torque, _run10c_gravity_torque_elliptical, _run10d_gravity_torque_elliptical_rate, plus tier3_bevy_gravity_torque_sixdof and tier3_bevy_run10c/10d parity.
SIM_torque_compare_simple 6 (RUN_01–06: scalar inertia/orbit sweep) partial — same physics, different scenario tier3_sim_torque_simple_run01..06 (6 RUNs) exist but exercise simple-impulse torque scenarios; not the JEOD scalar-sweep input set. The physics is verified more comprehensively via SIM_dyncomp RUN_10 (multi-body, higher-fidelity mass tree).
SIM_1_BASIC (SRP) 3 (RUN_basic, RUN_basic_cr, RUN_basic_dynbody) fully covered tier3_simulation_srp_basic_default, _srp_basic_varied_cr, plus tier3_bevy_srp_basic_default, _varied_cr. tier3_srp_1st_order_trajectory adds first-order analytical.
SIM_2_SHADOW_CALC 4 (cooling, annular, ten-plates, transverse) fully covered tier3_bevy_flat_plate_srp_with_shadow, tier3_simulation_shadow_2a_cooling, tier3_bevy_shadow_2a_cooling, tier3_sim_shadow_2a.
SIM_2A_SHADOW_CALC 4 (annular eclipse variant) fully covered tier3_simulation_shadow_2a_annular, tier3_bevy_shadow_2a_annular. Plus the _cooling pair shared with SIM_2.
SIM_3_ORBIT (SRP+drag+SH) 2 (baseline, radiation) fully covered (via dyncomp run7 series) tier3_simulation_run7a_sh4x4_3rd_body, _run7b_sh8x8_3rd_body, _run7c_sh4x4_3rd_body_drag, _run7d_sh8x8_3rd_body_drag + tier3_bevy_run7a/7b/7c/7d.
SIM_3_ORBIT_1st_ORDER 2 fully covered tier3_srp_1st_order_trajectory, tier3_sim_srp_1st_order, tier3_bevy_srp_derivative_first_order.
SIM_4_DEFAULT 1 (RUN_compare) fully covered tier3_simulation_srp_basic_default, tier3_bevy_srp_basic_default.

utils

JEOD SIM RUNs Verdict Our tier3 tests / detail
SIM_integ_test 8 (RK4, RKF45, multiple step sizes) fully covered tier3_integ_rk4_vs_analytical, _rk4_convergence_order, _rk4_energy_conservation, _rkf45_vs_analytical, _rkf45_convergence_order, _rkf45_energy_conservation, _rkf45_more_accurate_than_rk4, _rk4_vs_rkf45_agreement, _rk4_vs_gj_agreement. Plus tier3_simulation_lsode_abm4, _lsode_default (note: these exercise ABM4 as the multi-step option since LSODE is not ported — see Audit-Findings B1.3).
SIM_GJ_test 19 (Gauss-Jackson order×dt sweep) fully covered tier3_simulation_gj_dt10, _gj_order4, _gj_order8, _gj_order12, tier3_integ_gj_order4, _order8, _order12, _gj8_vs_analytical, _gj_energy_conservation, _gj_order_comparison, tier3_bevy_gj_dt1, _order4, _order12, _point_mass, tier3_bevy_parity_gj_* (7 bootstrap+order variants).
SIM_orb_elem 1 + singularity sub-cases fully covered See SIM_OrbElem (derived_state); same test coverage.
SIM_PFIXPOSN_VERIF 1 (geodetic) fully covered tier3_simulation_geodetic, tier3_bevy_geodetic_derived_state, tier3_bevy_polar_geodetic.
SIM_NED_VERIF 1 (NED) fully covered See SIM_NED (derived_state); same test coverage.
SIM_LVLH_Frame 1 (LVLH) fully covered See SIM_LVLH (derived_state); same test coverage.
SIM_REF_FRAMES 1 (frame-tree topology) partial — same physics, no dedicated topology test Frame-tree operations are exercised correctly by every relative-state and derived-state test transitively. No isolated frame-graph test exists.
SIM_math_verif 1 (vector/matrix/numerical) derived Math kernel exercised by every test; direct unit tests live at Tier 1 in astrodyn_math.
SIM_ARTICULATION 1 (moving facets) not covered Articulated surfaces (rotating panels, opening payload bays) not implemented. Static surfaces only. Tracked in Audit-Findings B2.4.
SIM_SURFACE_MODEL 1 partial — static facets only Flat-plate facet calculations validated via SRP/drag tests (e.g. tier3_sim_drag_ver_flatplate_orbiter covers the 6-plate orbiter geometry). Dynamic surface reconfiguration not ported.
SIM_container 1 n/a — Rust collections JEOD checkpointable containers replaced by Vec/HashMap + Bevy reflection.
SIM_memory 1 n/a — Rust ownership JEOD memory allocator replaced by Rust borrow checker.
SIM_message_handler_verif 1 n/a — tracing + panic! JEOD MessageHandler replaced by tracing crate for logs and panic! for fatal errors.
SIM_integ_loop 1 n/a — Bevy FixedUpdate Trick integration loop replaced by Bevy schedule + Simulation::step().
SIM_simulation_interface 1 n/a — Bevy ECS Trick-JEOD coupling replaced by ECS scheduler.

integrated / sims

JEOD SIM RUNs Verdict Our tier3 tests / detail
SIM_Apollo 1+ (multi-body Saturn V + Apollo stack across 12 mission phases) partial — mass tree fully, trajectory only 100s slice tier3_apollo_mass_tree validates the 12-phase mass tree with exact JEOD-sourced mass/inertia/CoM at each stage separation. tier3_apollo8_eci_integ covers 100s of trans-lunar coast (Dec 23, 1968 19:38 UTC, Earth+Moon+Sun spherical, RK4 dt=0.5s, ~1m final position error). tier3_apollo8_frame_switch adds Earth↔Moon switch at lunar approach. Gap: no full multi-day mission cross-validation against JEOD's full RUN reference.
SIM_Earth_Moon 2 public (RUN_clem, RUN_rosetta) partial — 1/2 RUNs RUN_clem (Clementine 7-day lunar orbit, Moon LP150Q 60×60 SH, RK4 dt=0.03125s): tier3_simulation_earth_moon_clem + tier3_bevy_earth_moon_clem cover the full 7-day span with JEOD CSV cross-validation. RUN_rosetta (Earth swing-by hyperbolic): not covered. Tracked in Audit-Findings B1.6.
SIM_Mars 3 (RUN_dawn, RUN_phobos, RUN_orb_init_phobos) partial — 1/3 RUNs RUN_dawn (DAWN 3-hour Mars orbit, MRO110B2 110×110, Mars IAU rotation, Sun 3rd-body): tier3_simulation_mars_dawn + tier3_bevy_mars_dawn cover full scenario with JEOD CSV cross-validation. RUN_phobos and RUN_orb_init_phobos: not covered. Tracked in Audit-Findings B1.7.

SIM_dyncomp per-RUN (30 RUNs)

The canonical cross-validation target. Every "covered" claim here was verified by reading both the JEOD SET_test/RUN_*/input.py + Modified_data/ configuration and the corresponding astrodyn tier3 test source.

RUN Physics config Our tier3 test(s) Verdict
RUN_1 Point-mass Earth, gradient ON, MET atmos (min activity), constants verification not covered
RUN_2 Point-mass Earth, gradient OFF, circular ISS, 3-DOF and 6-DOF tier3_simulation_run2_3dof, tier3_simulation_run2_6dof, tier3_bevy_run2_6dof fully covered
RUN_2P Point-mass + RNP polar motion, 3-DOF tier3_simulation_run2p_polar_motion, tier3_bevy_run2p_polar_motion, tier3_sim_polar_motion fully covered
RUN_3A 4×4 SH gravity + RNP, 3-DOF tier3_simulation_run3a_sh4x4, tier3_bevy_sh4x4_rnp, tier3_sh4x4_rnp fully covered
RUN_3B 8×8 SH gravity + RNP, 3-DOF tier3_simulation_run3b_sh8x8, tier3_bevy_run3b_3rd_body_sun fully covered
RUN_4 Point-mass + Sun/Moon (DE421), 6-DOF tier3_simulation_run4_3rd_body, tier3_bevy_run4_3rd_body_sun_moon fully covered
RUN_5A Point-mass + MET (solar min), gradient ON, 6-DOF, no drag tier3_simulation_met_run5a, tier3_bevy_met_run5a fully covered
RUN_5B Point-mass + MET (solar mean), elliptical, no drag tier3_simulation_run5b_atmosphere_mean, tier3_bevy_run5b_atmosphere_mean fully covered
RUN_5C Point-mass + MET (solar max), elliptical, no drag tier3_simulation_run5c_atmosphere_max, tier3_bevy_run5c_atmosphere_max fully covered
RUN_6A Point-mass + constant-density drag, 6-DOF tier3_simulation_run6a_const_density_drag, tier3_bevy_constant_density_drag_sixdof fully covered
RUN_6B Point-mass + MET drag, 6-DOF tier3_simulation_run6b_drag, tier3_simulation_drag_run6b, tier3_simulation_drag_run6b_rotated, tier3_bevy_drag_run6b fully covered
RUN_6C Point-mass + applied force (plane change maneuver) not covered
RUN_6D Point-mass + applied force (Y-axis impulse) not covered
RUN_7A 4×4 SH + Sun/Moon, no drag, 3-DOF tier3_simulation_run7a_sh4x4_3rd_body, tier3_bevy_run7a_3rd_body_sixdof fully covered
RUN_7B 8×8 SH + Sun/Moon, no drag, 3-DOF tier3_simulation_run7b_sh8x8_3rd_body, tier3_bevy_run7b_3rd_body_sun_moon_sixdof fully covered
RUN_7C 4×4 SH + Sun/Moon + MET drag, 6-DOF tier3_simulation_run7c_sh4x4_3rd_body_drag, tier3_bevy_run7c_3rd_body_inclined fully covered
RUN_7D 8×8 SH + Sun/Moon + MET drag, 6-DOF tier3_simulation_run7d_sh8x8_3rd_body_drag, tier3_bevy_run7d_3rd_body_polar fully covered
RUN_8A Point-mass, zero ω, attitude propagation 6-DOF conservation laws via tier3_dyncomp_6dof_rigid_body_invariance partial — analytical, no JEOD CSV
RUN_8B Point-mass, LVLH rate ω, attitude stability intermediate-axis theorem via tier3_dyncomp_attitude_stability_major_axis partial — analytical, no JEOD CSV
RUN_9A External torque (body), 6-DOF, zero ω tier3_simulation_run9a_torque, tier3_bevy_run9a_torque fully covered
RUN_9B External torque (body), 6-DOF, with ω — (JEOD CSV exists but no test) not covered
RUN_9C External force + torque, 6-DOF, zero ω tier3_simulation_run9c_force_torque, tier3_bevy_run9c_force_torque fully covered
RUN_9D External force + torque, 6-DOF, with orbit rate tier3_simulation_run9d_force_torque_rate, tier3_bevy_run9d_force_torque_rate fully covered
RUN_10A Gravity gradient torque, cylinder mass, circular, 6-DOF, 85° pitch+1° yaw tier3_simulation_run10a_gravity_torque, tier3_reference_run10a_libration_period fully covered
RUN_10B Gravity gradient torque, cylinder mass, circular, 6-DOF, 0° attitude — (JEOD CSV exists but no test) not covered
RUN_10C Gravity gradient torque, cylinder mass, elliptical, zero ω tier3_simulation_run10c_gravity_torque_elliptical, tier3_bevy_run10c_gravity_torque_elliptical fully covered
RUN_10D Gravity gradient torque, cylinder mass, elliptical, with ω tier3_simulation_run10d_gravity_torque_elliptical_rate, tier3_bevy_run10d_gravity_torque_elliptical_rate fully covered
RUN_attach_to_ref_frame Body attached to non-inertial frame, multi-attach lifecycle (8h ISS + 8×8 SH + Sun/Moon + MET drag + GG-torque, attach/detach/maneuver schedule at t=1000/1400/1800/2000–2050/2200/2600) tier3_sim_dyncomp_run_attach_to_ref_frame fully covered
RUN_checkpoint_create Trick checkpoint serialization n/a — Bevy reflection (covers state, not active integrator state)
RUN_checkpoint_restart Trick checkpoint restore n/a — same as create

SIM_dyncomp summary: 21 fully covered, 2 partial (analytical, no CSV), 5 not covered (RUN_1, 6C, 6D, 9B, 10B), 2 n/a (checkpoints).


Coverage summary

Status Count Of which
fully covered 35 tier3 + matching IC + matching physics + JEOD CSV cross-validation
partial (N/M RUNs) 15 some RUNs covered, others not — listed explicitly
partial (same physics, no JEOD CSV) 6 code path exercised but not against JEOD reference output
derived 4 exercised transitively (math, planet constants, ephemeris)
not covered 3 real gaps
n/a + Rust/Bevy equivalent 7 infrastructure replaced by Rust/Bevy idioms
Total SIMs 70 (67 model-level + 3 integrated)

Plus SIM_dyncomp's 30 RUNs counted at the RUN level: 21 fully + 2 partial + 5 not + 2 n/a = 30.

Gap follow-ups

Real gaps (the "not covered" + "partial — same physics, no JEOD CSV" rows) are triaged in Audit-Findings. Top items to close before release:

  1. SIM_dyncomp RUN_6C, 6D, 9B, 10B — JEOD reference CSVs exist but no test harness; add tier3_simulation_run6c/run6d/run9b/run10b. (Audit-Findings B1.4, B1.5)
  2. SIM_orbinit per-RUN — extend Docker regeneration to cover the remaining 41 RUNs, or document that the 5 covered are representative.
  3. SIM_verif_attach_mass per-RUN — same for the 13 uncovered mass-tree RUNs.
  4. SIM_Earth_Moon RUN_rosetta — Audit-Findings B1.6.
  5. SIM_Mars RUN_phobos / RUN_orb_init_phobos — Audit-Findings B1.7.
  6. SIM_csr_compare — decide on CSR coefficient support; Audit-Findings B1.10.

How to keep this page current

This page is a snapshot at commit 7619f2f. When a new tier3 test lands or JEOD's verification suite is upgraded, re-run the four-domain investigation (see commit history for the methodology) and update verdicts row by row. Do not silently widen "fully covered" to absorb new RUNs that aren't actually tested. The cost of this page is its honesty.

Clone this wiki locally