Goal
Add a new verification track that propagates the NASA NESC Lunar Check Cases through Simulation::step() and compares against the published reference trajectories.
The NESC GN&C check cases (NESC-RP-12-00767 / "Independent Orbit Propagation Verification") are a canonical, vendor-neutral benchmark for high-fidelity propagators: cislunar transfer, lunar orbit, and Earth–Moon–Sun three-body trajectories with documented ICs, force models, integrator settings, and reference ephemerides at fixed checkpoints. Passing them would give us a cross-check that is independent of JEOD/Trick and exercises lunar-regime physics our existing Tier 3 fleet only touches lightly.
Scope
Out of scope
- Adding NESC fixtures to the existing
astrodyn_verif_jeod crate. Keep the NESC track in its own crate so the JEOD vs NESC provenance never gets mixed.
- Any new physics. If a check case exposes missing physics, that's a separate issue and a port — not an approximation in the test.
Open questions
- Which release of the NESC check cases is canonical? (There are several revisions floating around; we should pin one.)
- Do the published cases assume DE405/DE421/DE440 ephemerides? We need to match exactly what the reference used, not what we happen to have loaded.
- Is the attitude case set worth including in the first cut, or should it be a follow-up after the translational cases land?
Goal
Add a new verification track that propagates the NASA NESC Lunar Check Cases through
Simulation::step()and compares against the published reference trajectories.The NESC GN&C check cases (NESC-RP-12-00767 / "Independent Orbit Propagation Verification") are a canonical, vendor-neutral benchmark for high-fidelity propagators: cislunar transfer, lunar orbit, and Earth–Moon–Sun three-body trajectories with documented ICs, force models, integrator settings, and reference ephemerides at fixed checkpoints. Passing them would give us a cross-check that is independent of JEOD/Trick and exercises lunar-regime physics our existing Tier 3 fleet only touches lightly.
Scope
crates/astrodyn_verif_nesc/test_data/(new crate, parallel toastrodyn_verif_jeod).$NESC_HOMEor a--nesc-homepath is supplied) and writes the committed fixtures, mirroring theextract_*pattern.tier3_nesc_*test per check case drivingastrodyn_runner::Simulationend-to-end from the NESC ICs and asserting position/velocity (and attitude, if the case specifies it) against the checkpoint vectors with tolerances set per the No Half-Baked Implementations rule (match the case's force model exactly — point mass vs spherical harmonics, third-body set, integrator, step size).KNOWN_PARITY_GAPSexemption with a written reason if a case can't ride the recipe path.README.mdand link it fromCLAUDE.mdalongside the JEOD regen instructions.Out of scope
astrodyn_verif_jeodcrate. Keep the NESC track in its own crate so the JEOD vs NESC provenance never gets mixed.Open questions