v0.18.0
Added
-
Eleven new runnable scenario kinds — two-tender demonstrators, a CCSDS interop
bridge, and a first-order mission-analysis / environment suite (all MODELLED,
additive; existing reproducibility goldens unchanged). Each is CLI / Python /
WASM / MCP dispatchable, ships ascenarios/<kind>.toml, and carries an explicit
MODELLED label in its result JSON and one-line summary (a per-kind test in
tests/dominance_demonstrators.rsasserts the label is present and that the output
never contains the stringVALIDATED):impairment-eval(src/impairment_eval.rs) — AI/ML RF-impairment detection
evaluation testbed: a labelled synthetic corpus + a detector-agnostic
ROC/AUC harness + an in/out-of-distribution optimism-gap report (operating
characteristics only — never field/IQ data).quantum-trade(src/quantum_trade.rs) — quantum-vs-classical PNT trade with
measured-ADEV ingestion and a GNSS-denied resilience envelope.space-weather(src/space_weather.rs) — solar/geomagnetic indices (Kp↔ap IAGA
table, daily Ap, centred 81-day F10.7a), Jacchia-71 exospheric temperature, and
an activity-driven thermospheric-density coupling over a static atmosphere (NOT an
NRLMSISE absolute-density model).oem-interop(src/oem.rs) — CCSDS 502.0 OEM import + round-trip bridge for
GMAT / Orekit / STK ephemerides (theparse_oemreader, exact inverse of the writer).launch-window(src/launch.rs) — two-body launch azimuth (sin Az = cos i/cos lat),
plane-change Δv, site-rotation bonus, and daily-opportunity geometry.reentry(src/reentry.rs) — Allen-Eggers ballistic re-entry corridor:
peak deceleration, peak-g and peak-heating velocities, peak-g altitude.eo-coverage(src/eo_payload.rs) — EO swath / GSD / access / revisit geometry
(SMAD space-triangle).space-packet(src/space_packet.rs) — CCSDS 133.0-B Space Packet primary-header
encode/decode with bit-exact round-trip.attitude-budget(src/attitude_budget.rs) — 3-DOF gravity-gradient torque +
RSS pointing-error budget (scalar pre-hardware budget, not a control loop).passes(src/passes.rs) — ground-station rise/set pass prediction (AOS/TCA/LOS,
max elevation, access).link-budget(src/linkbudget.rs) — one-way CCSDS-401 / DSN-810-005 link equation
(C/N₀ = EIRP − FSPL − L_other + G/T − k, FSPL / Eb·N₀ / margin / closure).
-
17-state hybrid quantum + classical tightly-coupled UKF — surfaced as a runnable
scenario (MODELLED). A newhybrid-ukfscenario kind (src/fusion/hybrid_ukf.rs,
scenarios/hybrid-ukf.toml) that turns the previously API-only 17-state tightly-coupled
GNSS/INS unscented filter (src/fusion/tightly_coupled17.rs) into a scenario the
CLI/Python/WASM/MCP bindings can dispatch. The 17-state error vector is the 15 INS error
states (position, velocity, attitude misalignment, accel + gyro bias) augmented with the
CAI-derived accelerometer-bias correction — the cold-atom interferometer
(src/inertial/quantum_imu.rs) sets the velocity-random-walk floorq_va, so the long-term
coast drift is the quantum-sensor-limited one — and a 2-state phase + frequency clock
whose process noise comes from the q-parameter clock engine
(clock_state::q_from_allan, mapping a clock's Allan-deviation profile to theq_wf/q_rw
PSDs, scaled to range units). The platform is GNSS-aided for a lead-in (the filter learns
the biases, velocity and clock), then coasts through a GNSS outage on the CAI IMU + clock
alone, so the run demonstrates classical-IMU short-term + quantum long-term
hybridisation. The figure of merit is filter self-consistency: pooled NEES
(Normalised Estimation Error Squared, over the estimable position/velocity/clock subset) and
innovation-whiteness NIS (Normalised Innovation Squared) over a Monte-Carlo ensemble,
checked against their 95% χ² bands (Bar-Shalom §5.4). The matched filter lands inside the
bands; a deliberately mistuned filter (theq_factor/r_factorknobs) is flagged — an
objectively checkable, discriminating gate, not a rubber stamp. The NEES/innovation-
whiteness check is the STATISTICAL ORACLE: a self-consistency statement (the filter's
reported covariance honestly matches the spread of its own errors under the modelled noise),
NOT a real-world accuracy guarantee. Honest scope: everything is modelled / simulation
— the CAI and clock inputs are bracketed, literature-representative values, not measured
hardware; the CAI hardware and its Key-Person stay partner-owned; nothing here implies
TRL > 3, flight heritage, or external validation (the result JSON and one-line summary carry
these labels explicitly). The single constant-velocity, level trajectory leaves attitude and
IMU-bias states only weakly observable, so NEES is assessed over the 8 estimable states; a
manoeuvring trajectory for full-17 observability is roadmap. Also addsUkf::update_stats
(returns the per-update NIS) andTightlyCoupled17::{update_gnss_nis, nees, nees_subset}
consistency instrumentation. All existing scenarios are unaffected (additive; reproducibility
goldens unchanged). -
Sequential (recursive) terrain-referenced navigation — SITAN as a running filter.
A newterrain-slamscenario kind (src/altpnt/sequential.rs,
scenarios/terrain-slam.toml) that runs the existing altimeter-vs-DEM measurement
model epoch by epoch through theparticle_filterSIR engine, rather than the
batch coarse-to-fine searchterrain-navuses to recover a single constant INS
offset. At each waypoint the cloud is propagated by the INS-reported increment (itself
corrupted by the per-step drift growth), reweighted by the terrain match, and
resampled on degeneracy — so a time-varying INS drift is tracked along the
track, which a constant-offset fit structurally cannot do. On the synthetic DEM the
recursive estimate stays bounded and re-converges (final ≈ 70 m) while the unaided
inertial solution diverges unbounded to ≈ 5 km; per-epoch error follows terrain
distinctiveness (it coasts on the biased INS over flat saddles and re-locks over
distinctive relief), and the effective-sample-size monitor confirms a healthy cloud.
Honest scope: the map is known and fixed — recursive localization against a
stored DEM (the localization half of terrain SLAM), not joint map estimation;
non-circular by construction (the injected drift ramp is the independent truth). All
existing scenarios are unaffected (additive; reproducibility goldens unchanged). -
GNSS-denied resilience spine + FutureNAV demonstrator slices (
src/holdover.rs,
and resilience-envelope foundations undersrc/impairment_eval.rs,src/quantum_trade.rs,
src/navsignal.rs,src/inertial/quantum_imu.rs, with FutureNAV verification slices in
src/verification.rs). Composes the alternative-PNT building blocks — clock holdover,
signal tracking, inertial coast, terrain — into a single GNSS-outage resilience narrative.
MODELLED; additive. -
Kshana Interchange Format (KIF) — a versioned, self-describing artifact envelope
(src/interchange.rs). A schema-tagged wrapper around scenario results so a stored
artifact carries its kind, schema version, and MODELLED/VALIDATED labels with it, and
older envelopes stay forward-compatibly readable. Additive; existing result JSON unchanged. -
Navigation-signal modulation / tracking + CR3BP halo/NRHO differential corrector
(src/navsignal.rs,src/cr3bp.rs). A first-order nav-signal modulation & tracking model,
and a circular-restricted three-body differential corrector for halo / near-rectilinear
halo orbits, surfaced on the existing deep-space capability axis. MODELLED. -
Distribution-shift evaluation mode + corpus severity-scale knob for
impairment-eval
(src/impairment_eval.rs). Adds an explicit in/out-of-distribution split and a tunable
corpus severity scale to the ROC/AUC optimism-gap harness (operating characteristics only —
never field/IQ data). -
Cost-per-coverage ROI + detection-miss integrity-impact mapping (
src/frugal.rs,
src/integrity_impact.rs). A frugal-engineering ROI lens (cost per unit coverage) and a
mapping from detection-miss rate to integrity impact. MODELLED; additive. -
Cited cold-atom-interferometer (CAI) error-model parameter sheet
(src/inertial/quantum_imu.rs). A literature-referenced, bracketed parameter sheet for the
CAI inertial model — inputs are cited, not measured hardware (no TRL / flight claim); it
feeds thehybrid-ukfvelocity-random-walk floor. -
Project governance.
GOVERNANCE.mddocumenting the decision model and the open/closed
boundary; the capability map's community/governance row movesnone → partialto reflect it.
Fixed
-
ARAIM integrity protection level — nominal bias (
b_nom) and σ_URA now applied. The
MHSS protection level now subtracts the one-sided nominal-bias projection
b_k = Σ_i |s_i|·b_nomper fault mode, and uses the integrity sigma σ_URA (distinct
from the accuracy sigma σ_URE) carried on the Integrity Support Message. This makes the
protection level more conservative and standards-correct, and therefore changes the PL
values reported by existing integrity scenarios. The ISM/scenario gains#[serde(default)]
sigma_ura_m/b_nom_mfields, so inputs that leave them unset retain prior behaviour. See
docs/ARAIM_REFERENCE.mdfor the restoredb_kformula and the honest implementation note. -
Spoof-monitor χ² consistency.
parity_raim_testnow uses the shared
raim::chi2_quantileinverse-χ² path, removing a second divergent χ² implementation so RAIM
and the parity spoof monitor agree on their thresholds. -
gravity-map-navwired into the CLI dispatcher. The scenario was previously reachable
only through the API; it now dispatches as akind=like every other scenario. -
Documentation/count accuracy. Scenario-kind counts in the README are now pinned to
api::list_scenario_kinds().len()by ascenario_count_doc_synctest, so the documented
count can no longer drift from the dispatcher.
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.18.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