v0.17.0
Added
- Deep-space & Mars PNT — open radiometric navigation engine + GSE simulation.
A new, fully additive capability axis on top of the Earth-validated core (every
existing Earth scenario is byte-identical — the reproducibility goldens pass
unchanged with no regeneration). Adds: a multi-body dynamics core (Body{mu, re, zonals, gravity, rotation, IAU-pole}with Mars GMM-3 tesseral gravity, an IAU
body-fixed Mars frame, a pluggableEphemerisProviderseam, sub-microsecond
two-part Julian dates and TT↔TDB); radiometric observables (iterative light-time +
Shapiro delay, two-/one-/three-way Doppler & range via the Moyer two-leg solve,
coherent transponder turnaround, regenerative/PN ranging per CCSDS 414, Δ-DOR per
CCSDS 506, solar-plasma/tropo/iono media); CCSDS-TDM (503) parse + emit; a
reduced-dynamic Square-Root Information Filter with RTN empirical accelerations, a
three-state onboard clock, and a Mars-drag model; a joint one-way + two-way fusion
estimator; themars-pntscenario surface (relay constellation + LMO/transfer/
surface) across CLI, Python, WASM, MCP, and the playground; and an end-to-end GSE
performance simulator (geometry → link budget → observables → SRIF → covariance).
Validation tier — simulation-validated: synthetic closed-loop OD (Mars-LMO ≈
0.2 m) and analytic self-consistency, with the Sun-central Mars dynamics
independently cross-checked against JPL DE440 (xval/anise-mars-od, kernel-gated:
137 m @ 1-day arc, the honest unmodelled-n-body residual). Reported deep-space
accuracies are simulation / covariance figures of merit, not real-mission
results; real DSN/ESTRACK tracking-data validation remains on the roadmap. ANISE
(MPL-2.0, edition-2024) is confined to a workspace-excluded cross-check crate, so
thecargo denylicense gate and the MSRV-1.75 job are untouched. - Agency-accurate ground tracks from real IERS Earth orientation. The
ephemerisscenario takes an optionaleop_finals2000afield — the inlined body
of a real IERSfinals2000Afile — and reduces the ground track through the
per-epoch UT1−UTC and polar motion interpolated from it (the sameEopSeries
precise_oduses), overriding the nominaldut1_s/xp_arcsec/yp_arcsec
scalars. The data travels in the scenario, so the run stays reproducible and
needs no filesystem (it works in the WASM playground). Akshana --eop <finals2000A>flag folds a real file into the scenario from the CLI. Closes the
asymmetry where onlyprecise_odconsumed real Earth-orientation data.
Fixed
- Range-rate frame consistency. The ground station is now mapped into the
inertial frame through the exact inverse of the satellite's reduction
(frames::itrf_to_teme, undoing polar motion and the sidereal rotation)
instead of a polar-motion-blind GMST rotation, so both endpoints share one
frame. The effect on the reported Doppler is below the validation floor, but it
removes a real frame mismatch and an "exact" overclaim in the source. carrier_hzis validated. A zero or non-finite carrier frequency now returns
an error instead of silently producing zero Doppler (it had made λ = c/carrier
infinite), matching the existingstep_sguard.
Get this release
Download — attached below, prebuilt (no toolchain needed); each artifact carries
SLSA build-provenance (verify with gh attestation verify <file> --repo AshfordeOU/kshana):
kshana— the simulator CLI / engine (Linux x86-64)kshana-mcp— the Model Context Protocol server (Linux x86-64)kshana-sbom.cdx.json— CycloneDX SBOMkshana-validation-summary.html— the per-release validation summary
On macOS or Windows, install from a registry below — the PyPI wheels, the npm/WASM
package, and the Docker image are all cross-platform.
Install from a package registry:
| Channel | Get it |
|---|---|
| crates.io | cargo install kshana · cargo install kshana-mcp |
| PyPI | pip install kshana |
| npm | npm install kshana |
| ghcr.io | docker run -i ghcr.io/ashfordeou/kshana-mcp:0.17.0 |
| MCP registry | io.github.ashfordeOU/kshana-mcp (auto-discovered by MCP clients) |
| JetBrains Marketplace | search "Kshana" in your IDE → Plugins |
No install: run it in your browser at kshana.dev · Cite: DOI 10.5281/zenodo.20528627
Full changelog: CHANGELOG.md · Docs: README