Skip to content

v0.14.0

Choose a tag to compare

@github-actions github-actions released this 08 Jun 13:28
· 33 commits to main since this release

Fixed

  • Robustness hardening from an adversarial battle-test pass. (1) sbas_protection_level now
    rejects non-finite elevation/azimuth/variance and negative or non-finite covariance diagonals
    (a near-singular geometry scaled up by small σ could previously slip the absolute-pivot gate and
    return a NaN VPL / absurd HPL as a valid Some — a silent integrity failure). (2) The
    numerical propagator (propagate/propagate_dopri) fails closed on a non-finite initial state
    instead of spinning the adaptive controller forever. (3) The DEM cell helper no longer panics on
    a single-sample (1×N) grid. (4) lunar_look_angle azimuth is held strictly in [0, 360).
    (5) SphericalHarmonicField::from_gfc rejects non-physical (NaN / non-positive) GM/radius.

Added

  • validation_report binary + release artifact: a dependency-free generator that emits a
    one-page, print-ready HTML validation summary indexing every CI-enforced validation (SGP4
    666/666, EGM2008, bit-for-bit frames, NIST Allan, IMU datasheets, ARAIM/SBAS, 3-OS
    reproducibility, coverage) to its test and external oracle. The release workflow generates
    kshana-validation-summary.html and attaches it (with SLSA provenance) to each tagged release.
  • numpy-interop pytest + wheel hardening: tests/python/test_numpy_interop.py (run in CI)
    plus a pinned manylinux container and an auditwheel show verification step in the wheel build.
  • Tutorials & education: docs/tutorials/ (three worked tutorials, per-domain annotated
    scenarios, Tier-1/2/3 exercises) with tests/tutorials.rs pinning every quoted number to live
    engine output.
  • External submission artifacts (paper/, notebooks/, submissions/): a JOSS paper
    draft, a quantum-vs-classical notebook, and ready-to-file kits for awesome-gnss / ESA Navipedia
    / NASA ASCL / ESA ESSR / ION/IAC, plus FUNDING.yml — staging the external steps for submission.
  • Terrain-referenced & combined alt-PNT navigation (altpnt module): a TERCOM/SITAN
    terrain-matching navigator over a DEM (.hgt loader + synthetic-fixture generator) and a
    combined gravity + magnetic (IGRF) + terrain GPS-denied navigator, exposed as terrain-nav and
    combined-altpnt scenario kinds. Validated by terrain-match convergence (a known injected
    offset recovered) and a bounded combined-filter error over a GPS-denied window.
  • LunaNet LANS geometry (lunar): named lunar surface sites (Apollo 11/15/16, Shackleton
    rim) with authoritative selenographic coordinates, surface look angles (az/el/range),
    visibility/coverage, and site DOP, validated against the Moon radius, the published site
    coordinates, and the radial-overhead 90° elevation identity.
  • Guided browser playground: guided-mode sliders, a tabbed output panel, a first-run tour
    overlay, parameter-sweep and multi-run-overlay modes, a dependency-free canvas/SVG 3D orbit
    view (the orbit pack now emits an additive eci_track), an embed/iframe mode, and
    download-as-HTML-report — each with node unit tests in CI.
  • Datasheet-validated IMU error model (tests/imu_allan_spec.rs): ADIS16465/16488/16460
    ARW/VRW/bias-instability recovered from the synthesised Allan deviation and checked against the
    manufacturer specs (NIST SP1065 / IEEE 952 identification).
  • NIST SP1065 Allan-estimator validation (tests/allan_nist_sp1065_1000point.rs): the four
    estimators reproduce the published 1000-point reference deviations and Table-32 confidence
    bounds.
  • SBAS / DO-229E protection levels, L1/L5 ionosphere-free, and a DO-316 compliance map
    (sbas module). sbas_protection_level forms the weighted geometry matrix from each
    satellite's elevation/azimuth and UDRE/GIVE/airborne/tropo error budget, inverts the normal
    matrix (shared orbit::invert4), and projects the variances into HPL/VPL via the DO-229E
    K-factors (PA 6.0/5.33, NPA 6.18). iono_free_l1l5 adds the GPS L1/L5 ionosphere-free
    pseudorange (IS-GPS-705, γ₁₅ = 1.79327), validated to cancel the engine's independent
    first-order ionospheric delay. do316_compliance_map traces DO-316/DO-229E requirements to
    the implementing functions. Validated against closed-form K-factor definitions, the numpy
    inv(GᵀG) reference geometry, and the two-route covariance identity; the published-PL
    RTKLIB/gLAB conformance cross-check is documented as founder-gated in docs/COMPLIANCE.md.
  • Full tesseral spherical-harmonic gravity — the EGM2008 field to degree/order 70.
    A new gravity_sh::SphericalHarmonicField evaluates the geopotential and its acceleration
    in the Earth-fixed frame from fully-normalized C̄_nm, S̄_nm coefficients, using the stable
    Holmes–Featherstone normalized Legendre recurrence (de-normalizing would overflow at this
    degree). The shipped coefficients are the NGA EGM2008 product (public domain, via ICGEM),
    bundled in egm2008_data.rs and reproduced bit-for-bit by tools/gen_egm2008.py from the
    committed tools/egm2008_to70.gfc; any ICGEM .gfc model loads via from_gfc. Validated
    against three independent oracles: point-mass collapse (C̄00-only = −μr/|r|³), a zonal-only
    field reproducing the existing forces::zonal_accel to ~1e-9, and the analytic acceleration
    matching the finite-difference gradient of the directly-summed potential to <1e-6.
  • General-relativistic Lense–Thirring (frame-dragging) acceleration
    (forces::lense_thirring_accel, IERS 2010 Eq. 10.12), the gravitomagnetic term beyond the
    existing Schwarzschild correction, wired into the numerical propagator via a new
    ForceModel::lense_thirring() flag. Validated as linear in the Earth's angular momentum and
    1–2 orders of magnitude below the Schwarzschild term, the regime of the LAGEOS / Gravity
    Probe B measurements.
  • A Propagator trait unifying the analytic and numerical orbit propagators. The
    numerical Cowell force-model propagator is now a first-class peer of SGP4: a new
    NumericalPropagator type (initial state + ForceModel + Tolerance + choice of
    step-doubling or Dormand–Prince Integrator) and Sgp4 both implement
    propagator::Propagator, whose state_at(t_seconds) -> StateVector returns the inertial
    TEME state in SI units (m, m/s) so the two are interchangeable behind a
    Box<dyn Propagator>. The SGP4 impl is the exact km/min→SI conversion of the inherent
    method (verified by an equality test); the numerical impl clears the same sub-metre
    exact-Kepler gate through the trait, the two adaptive drivers agree, and a PropagatorError
    surfaces the underlying SGP4 code.

Full changelog: CHANGELOG.md · Docs: README