kshana 0.11.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +103 -51
  2. package/kshana_bg.wasm +0 -0
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -12,11 +12,12 @@
12
12
  <p align="center">
13
13
  <a href="https://ashfordeou.github.io/kshana/"><img src="https://img.shields.io/badge/playground-try%20in%20browser-c79e63" alt="Live playground — run in your browser, no install"></a>
14
14
  <a href="tests/sgp4_verification.rs"><img src="https://img.shields.io/badge/SGP4-666%2F666%20AIAA%20vectors%20%C2%B7%204.12mm-3fb950" alt="SGP4 validated against all 666 AIAA 2006-6753 vectors, worst 4.12 mm"></a>
15
+ <a href="https://github.com/ashfordeOU/kshana/actions/workflows/ci.yml"><img src="https://img.shields.io/badge/coverage-~97%25%20line-3fb950" alt="~97% line coverage on src/ (cargo-tarpaulin LLVM engine), gated at 85% in CI"></a>
15
16
  <a href="https://github.com/ashfordeOU/kshana/actions/workflows/ci.yml"><img src="https://github.com/ashfordeOU/kshana/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
16
17
  <a href="https://github.com/ashfordeOU/kshana/releases"><img src="https://img.shields.io/github/v/release/ashfordeOU/kshana?sort=semver" alt="Release"></a>
17
18
  <a href="LICENSE"><img src="https://img.shields.io/badge/License-Apache_2.0-blue.svg" alt="License: Apache-2.0"></a>
18
19
  <a href="Cargo.toml"><img src="https://img.shields.io/badge/rust-1.75%2B-orange.svg" alt="Rust 1.75+"></a>
19
- <a href="https://doi.org/10.5281/zenodo.20528627"><img src="https://zenodo.org/badge/1256508460.svg" alt="DOI"></a>
20
+ <a href="https://doi.org/10.5281/zenodo.20528627"><img src="https://img.shields.io/badge/DOI-10.5281%2Fzenodo.20528627-blue.svg" alt="DOI 10.5281/zenodo.20528627"></a>
20
21
  </p>
21
22
 
22
23
  <p align="center">
@@ -42,16 +43,21 @@ citable table in [`docs/PROVENANCE.md`](docs/PROVENANCE.md).
42
43
  *Free and open source under Apache-2.0, professionally developed and maintained by
43
44
  Ashforde OÜ — commercial support, integration, and proprietary extensions available.*
44
45
 
45
- > **Status: v0.11.0 · a simulation substrate, not yet a product.** A validated,
46
+ > **Status: v0.13.0 · a simulation substrate, not yet a product.** A validated,
46
47
  > fully reproducible engine spanning the PNT stack — orbit geometry and constellation
47
- > design, time systems, inertial navigation (incl. map-aided), GNSS/INS fusion (loose,
48
- > tight, UKF, coupled clock+position), ARAIM integrity, clocks, advanced time-and-frequency
49
- > transfer, the GNSS measurement domain, and resilience (jamming + multi-layer spoofing).
48
+ > design, a numerical (Cowell) propagator with a six-perturbation force model, maneuver
49
+ > and trajectory design, time systems, inertial navigation (incl. map-aided and
50
+ > gravity-map-matching alt-PNT), GNSS/INS fusion (loose, tight, UKF, coupled
51
+ > clock+position, 17-state), orbit determination, ARAIM integrity, clocks, advanced
52
+ > time-and-frequency transfer, the GNSS measurement domain, and resilience (jamming +
53
+ > multi-layer spoofing).
50
54
  > Honest by design: every figure of merit is labelled *validated* or *not-modeled*, and
51
55
  > optical-clock figures are space goals on ground hardware (no strontium optical clock has flown).
52
56
  > See **[Capabilities](#capabilities)** for what it does, **[What it is / is not](#what-it-is--is-not)**
53
57
  > for scope, and [`docs/CAPABILITY.md`](docs/CAPABILITY.md) / [`docs/VALIDATION.md`](docs/VALIDATION.md)
54
- > for per-capability maturity and the claims table.
58
+ > for per-capability maturity. The overclaim closure ledger
59
+ > [`docs/CLAIMS-VS-REALITY.md`](docs/CLAIMS-VS-REALITY.md) tracks every historical overclaim,
60
+ > how it was resolved, and a CI guard (`tests/no_overclaims.rs`) that keeps it resolved.
55
61
 
56
62
  > **Try it in your browser:** the [playground](web/) runs the engine client-side as
57
63
  > WebAssembly — pick a scenario, edit the parameters, and see the result, with nothing
@@ -121,9 +127,13 @@ the P2 roadmap and [get in touch](#support--professional-services) to collaborat
121
127
  | Domain | Capability |
122
128
  |--------|------------|
123
129
  | **Orbit & geometry** | SGP4/SDP4 propagation (validated to 4.12 mm against all 666 AIAA 2006-6753 vectors); real two-line elements (a committed, date-stamped Celestrak `gps-ops` snapshot) or synthetic Walker-delta constellations whose mean elements realise the `i:T/P/F` formula to under 1 km over a 24 h propagation; multi-constellation visibility, dilution of precision, and GNSS availability; a gradient-free constellation-design optimiser, streets-of-coverage minimum-satellite sizing, a multi-constellation comparison tool, and a Walker **design sweep** that tabulates coverage / PDOP / revisit-time over a planes × satellites grid and reports the Pareto-optimal designs. |
130
+ | **Numerical propagator** | A **Cowell** numerical propagator (`src/propagator.rs`) complementing the analytic SGP4/SDP4 path, with a hierarchical **six-perturbation** force model (`src/forces.rs`): two-body + the full **J2–J6 zonal** field (the exact analytic gradient of its disturbing potential), **epoch-driven Sun and Moon third-body** gravity (a built-in low-precision ephemeris, no DE/SPK kernel), **solar-radiation pressure** (cannonball model with a conical umbra+penumbra shadow), **atmospheric drag** (Vallado piecewise-exponential density, co-rotating atmosphere), and the **post-Newtonian Schwarzschild relativistic correction** — driven by a choice of two adaptive integrators (RK4 step-doubling or the **Dormand–Prince RK5(4)** embedded pair). Validated against analytic truth stronger than a cross-tool would give: the unperturbed orbit matches the exact universal-variable Kepler solution to **sub-metre over 24 h**, energy/angular-momentum conserve to ~1e-9, and each perturbation matches a hand-derived closed-form signature. |
131
+ | **Maneuvers & trajectory design** | Impulsive ΔV nodes with 6×6 covariance propagation (ECI / LVLH execution-error frames), finite-burn integration checked against the closed-form **Tsiolkovsky** rocket equation to < 0.01 %, an **Izzo-2015** single-revolution **Lambert** solver, an exact universal-variable **Kepler** propagator, and a **porkchop** (launch × arrival) C3 / arrival-V∞ sweep emitted as a JSON contour grid — the performance-simulation layer above GMAT/Orekit, with every Lambert output round-tripped against two-body truth and the porkchop minimum checked against the analytic Hohmann floor. |
124
132
  | **Time systems** | IERS leap-second **UTC / TAI / TT / UT1** scales, a Julian-date API, the IAU-2000 **Earth Rotation Angle**, and GMST-based **TEME ↔ ECEF** with WGS-84 geodetic frames — plus IAU 2006 precession (Fukushima–Williams) toward an ITRF-precise reduction. |
125
133
  | **Inertial** | Three-axis strapdown INS — quaternion attitude, WGS-84 NED mechanization, coning/sculling compensation, and a deterministic IMU error model (scale-factor, misalignment, g-sensitivity, quantization, drift); a **first-principles cold-atom-interferometer accelerometer** (Mach–Zehnder phase, quantum projection noise, contrast decay, vibration coupling) that *derives* the velocity-random-walk coefficient; and a sequential-importance-resampling **particle filter** for map-aided (terrain-/gravity-referenced) GPS-denied navigation. |
126
- | **Fusion** | Loosely-coupled 15-state GNSS/INS error-state EKF with closed-loop feedback (the `gnss-ins` pack); a **tightly-coupled** pseudorange update that keeps correcting with fewer than four satellites; a coupled **clock + position** filter; a general **unscented (sigma-point) Kalman** estimator for strongly nonlinear measurements; and a tightly-coupled GNSS/INS **UKF navigator** (pseudorange + Doppler) whose force-model orbital coast is validated to **0.77 m RMS** over a 30-minute curving LEO pass that includes a 120-second GNSS outage. |
134
+ | **Gravity-map / alt-PNT** | A cold-atom **gravimeter measurement model** whose white-noise floor (`σ = ASD/√τ`) is derived from the CAI accelerometer physics; a low-degree, fully-normalised **spherical-harmonic gravity-anomaly field** (validated against the closed-form Legendre functions and a hand-derived single-term anomaly) plus synthetic mascons; and a **gravity-map-matching particle filter** that recovers a GPS-denied track from the anomaly sequence it flies through. A **60-minute GPS-denied benchmark** (a ~700 km / one-hour outage where the inertial solution drifts to ~70 km) is recovered to **~145 m (< 500 m)** by a hierarchical coarse-to-fine matcher the ESA NAVISP *Quantum Wayfarer* target. |
135
+ | **Fusion** | Loosely-coupled 15-state GNSS/INS error-state EKF with closed-loop feedback (the `gnss-ins` pack); a **tightly-coupled** pseudorange update that keeps correcting with fewer than four satellites; a coupled **clock + position** filter; a general **unscented (sigma-point) Kalman** estimator for strongly nonlinear measurements; a tightly-coupled GNSS/INS **UKF navigator** (pseudorange + Doppler) whose force-model orbital coast is validated to **0.77 m RMS** over a 30-minute curving LEO pass that includes a 120-second GNSS outage; and a full **17-state tightly-coupled GNSS/INS UKF** (position, velocity, attitude error, accelerometer and gyro biases, clock bias and drift) whose **quantum-CAI dead-reckoning** coasts a 120-second outage on the cold-atom accelerometer's derived velocity-random-walk. |
136
+ | **Orbit determination** | Recovery of an orbital state `[r, v]` from ground-station range tracking, composing the two-body + J2 force model and RK4 integrator with a **Gauss–Newton batch** corrector (`determine_orbit_batch`, sub-metre / mm·s⁻¹ from noiseless ranges, ~2 m at a 5 m noise floor) and a **sequential** unscented-filter variant (`determine_orbit_sequential`). |
127
137
  | **Integrity** | Snapshot and solution-separation (ARAIM-style) RAIM with horizontal/vertical protection levels (HPL/VPL), fault detection & exclusion, and Stanford integrity diagrams; an explicit integrity-risk-budget (**MHSS**) protection level, including the **dual-/multi-constellation constellation-wide fault mode** (EU ARAIM / DO-316). |
128
138
  | **Clock & timing** | Two-state Kalman holdover (Joseph-form covariance, NIS/NEES consistency health); Allan-family stability (ADEV / MDEV / TDEV / HDEV) with noise-type-specific confidence intervals and a full **IEEE-1139 five-coefficient power-law fit**; geometric corrections (Sagnac, GNSS common-view); and the operational transfer methods — **TWSTFT** with the BIPM Sagnac closed form, **GNSS common-view**, **PPP** ionosphere-free time transfer, a free-space **optical** link with turbulence scintillation, and an inverse-variance **clock-ensemble (paper) timescale** below the best contributing clock. |
129
139
  | **GNSS measurement domain** | Forward pseudorange / Doppler synthesis with **Klobuchar** (broadcast) and **IONEX / TEC-grid** (measured) ionosphere — including an IONEX file parser, time interpolation between maps, and the thin-shell slant-obliquity mapping — **Saastamoinen + Niell** troposphere, and snapshot RAIM (HPL/VPL). |
@@ -209,6 +219,10 @@ cargo run -- scenarios/integrity-raim.toml
209
219
 
210
220
  # Export a propagated constellation to an SP3-c precise-ephemeris file:
211
221
  cargo run -- scenarios/orbit-sgp4-gps.toml --export-sp3 gps.sp3
222
+
223
+ # Export the constellation's mean elements to a CCSDS OMM catalogue (one OMM
224
+ # message per TLE-defined satellite, with its real NORAD id / COSPAR designator):
225
+ cargo run -- scenarios/orbit-sgp4-gps.toml --export-omm gps.omm
212
226
  ```
213
227
 
214
228
  **Interoperability role.** Kshana is the *performance-simulation* layer that sits
@@ -217,7 +231,11 @@ output into RTKLIB or gLAB for a position solution, and use its **SP3** output a
217
231
  precise-orbit product for tools like Ginan — Kshana answers *what resilience a given
218
232
  PNT architecture buys* before you have real signals, in formats those tools already
219
233
  ingest (`--export-sp3`, or `export_sp3 = true` in an `orbit` scenario, writes
220
- `<scenario>.sp3`).
234
+ `<scenario>.sp3`). The same orbit can be published as standards-track **CCSDS OMM**
235
+ mean elements (`--export-omm`, or `export_omm = true`, writes `<scenario>.omm`) —
236
+ one OMM 502.0 KVN message per TLE-defined satellite, carrying each object's real
237
+ NORAD catalogue number, COSPAR international designator, and epoch, for any
238
+ OMM-aware consumer instead of a bespoke two-line element set.
221
239
 
222
240
  Example output (clock holdover — note the Integrity and Security figures of merit):
223
241
 
@@ -446,8 +464,19 @@ power-law type is identified from its modified-Allan slope, and the χ² interva
446
464
  matching NIST SP 1065 effective degrees of freedom). The browser playground renders it as a
447
465
  log-log "Clock stability (ADEV)" chart. (MDEV, TDEV, and HDEV are available as library
448
466
  estimators; the exported result curve is the overlapping ADEV.) Every field, with units and a
449
- source pointer, is documented in [`docs/SCHEMA.md`](docs/SCHEMA.md). The figures of
450
- merit follow the standard operational PNT figures of merit:
467
+ source pointer, is documented in [`docs/SCHEMA.md`](docs/SCHEMA.md).
468
+
469
+ **Every chart is self-describing.** The browser playground, the CLI's `*.chart.svg`
470
+ export, and the HTML scorecard all stamp each chart image with a footer reading
471
+ `Kshana v<version> · scenario <hash> · kshana.dev`. The `scenario <hash>` is the first
472
+ 12 hex characters of the run's **scenario hash** — a SHA-256 over the canonical scenario
473
+ definition (seed, thresholds, model parameters, GNSS windows, …); the integrity and lunar
474
+ reports, which carry no hash of their own, fall back to a SHA-256 of the scenario source.
475
+ It is the **same fingerprint** shown in the one-line summary and the result JSON, so a
476
+ saved or pasted chart always carries its version, the exact scenario that produced it (for
477
+ bit-for-bit reproduction), and the source — change any input and the hash changes.
478
+
479
+ The figures of merit follow the standard operational PNT figures of merit:
451
480
 
452
481
  | Figure of merit | How Kshana computes it |
453
482
  |-----------------|------------------------|
@@ -463,7 +492,10 @@ New to these terms? Each is defined in plain language in the [glossary](docs/GLO
463
492
 
464
493
  ## Architecture
465
494
 
466
- One engine; each sensor pack plugs in via a common error-model interface. See
495
+ One engine. The sensor packs plug in via a common error-model interface; alongside
496
+ them sit an astrodynamics/numerical layer (analytic SGP4/SDP4 **and** a numerical
497
+ Cowell propagator with its force model, maneuver design, and orbit determination) and a
498
+ fusion / alt-PNT layer (the GNSS/INS estimators and the gravity-map matcher). See
467
499
  [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) for the full set of diagrams.
468
500
 
469
501
  ```mermaid
@@ -479,30 +511,45 @@ flowchart LR
479
511
 
480
512
  ```mermaid
481
513
  flowchart TD
482
- cli["CLI · Python · WebAssembly"] --> api["api — run_toml: dispatch by kind"]
514
+ cli["CLI · Python · WebAssembly"] --> api["api — run_toml / run_scenario: typed dispatch by kind"]
483
515
  subgraph shared["Shared core"]
484
516
  types["types"]
485
517
  scenario["scenario · GNSS timeline"]
486
518
  allan["allan — Allan deviation"]
487
519
  end
488
- subgraph p1["Pack 1 · Clock"]
489
- models["modelsClockModel (+ flicker)"]
490
- estimator["estimatorholdover"]
491
- kalman["kalmanIntegrity bound"]
492
- security["securityanalytic spoof-detectability bound"]
493
- fom["fom · report · run"]
520
+ subgraph packs["Sensor packs"]
521
+ p1["Clockmodels · estimator · kalman · security · fom"]
522
+ p2["inertialstrapdown INS + quantum-CAI"]
523
+ p3["timetransfer (+ _adv) optical/RF link"]
524
+ p4["hybridfused PNT suite"]
525
+ end
526
+ subgraph astro["Astrodynamics & numerical"]
527
+ orbit["orbit — geometry → GNSS timeline + DOP"]
528
+ sgp4["sgp4 · tle — SGP4/SDP4"]
529
+ prop["propagator — Cowell"]
530
+ forces["forces — J2–J6 · 3rd-body · SRP · drag · relativity"]
531
+ integ["integrator — RK4 · DOPRI"]
532
+ ephem["ephem — Sun/Moon"]
533
+ man["maneuver — burns · Lambert · porkchop"]
534
+ od["orbit_determination — batch · sequential"]
535
+ end
536
+ subgraph fnav["Fusion & alt-PNT"]
537
+ fus["fusion — EKF · UKF · 17-state · coupled"]
538
+ grav["gravimeter · mapmatch · particle_filter"]
494
539
  end
495
- p2["Pack 2 · inertial — accel + gyro"]
496
- p3["Pack 3 · timetransfer — optical/RF link"]
497
- p4["Pack 4 · hybrid — fused PNT suite"]
498
- orbit["orbit geometry → GNSS timeline + DOP"]
499
- api --> p1
500
- api --> p2
501
- api --> p3
502
- api --> p4
503
- p1 --> shared
504
- p2 --> shared
505
- p3 --> shared
540
+ api --> packs
541
+ api --> astro
542
+ api --> fnav
543
+ packs --> shared
544
+ orbit --> sgp4
545
+ prop --> forces
546
+ prop --> integ
547
+ forces --> ephem
548
+ man --> integ
549
+ od --> forces
550
+ od --> integ
551
+ fus --> p2
552
+ grav --> p2
506
553
  orbit --> p1
507
554
  p4 -. composes .-> p1
508
555
  p4 -. composes .-> p2
@@ -514,27 +561,32 @@ flowchart TD
514
561
  ```
515
562
  kshana/
516
563
  ├── src/
517
- │ ├── types.rs # Seconds, TimeGrid, ModelSpec
518
- │ ├── scenario.rs # GNSS timeline, clock scenario config
519
- │ ├── models.rs # ErrorModel trait, ClockModel (white FM, RWFM, aging)
520
- ├── estimator.rs # HoldoverEstimator (quadratic offset+aging removal)
521
- │ ├── fom.rs # figure-of-merit scoring
522
- │ ├── allan.rs # overlapping Allan deviation
523
- │ ├── kalman.rs # two-state Kalman clock estimator + integrity bound
524
- │ ├── report.rs # result schema, scenario hash, SVG chart (clock)
525
- │ ├── run.rs # clock + orbit-clock run pipelines
526
- │ ├── inertial.rs # Pack 2: inertial dead-reckoning (accel + gyro) + FoMs
527
- ├── timetransfer.rs # Pack 3: optical/RF time-transfer link
528
- │ ├── hybrid.rs # Pack 4: combined PNT suite + ISL clock-aiding
529
- │ ├── orbit.rs # orbit propagation + GNSS line-of-sight visibility
530
- │ ├── api.rs # scenario dispatch shared by the CLI and bindings
531
- │ ├── python.rs # optional PyO3 extension (feature = "python")
532
- ├── wasm.rs # optional wasm-bindgen module (feature = "wasm")
533
- └── main.rs # CLI
534
- ├── scenarios/ # cited scenarios (one per pack + a geometry-driven one)
564
+ │ ├── types.rs · scenario.rs · allan.rs # shared core (time grid, GNSS timeline, Allan)
565
+ │ ├── api.rs · main.rs # typed dispatch + CLI
566
+ │ ├── python.rs · wasm.rs # optional PyO3 / wasm-bindgen bindings
567
+
568
+ │ ├── models.rs · estimator.rs · kalman.rs # Pack 1 — clock holdover + integrity
569
+ │ ├── security.rs · detection.rs · spoof.rs · spoof_monitors.rs # spoof detection
570
+ │ ├── filter_health.rs · fom.rs · report.rs · chart.rs · run.rs # health · scoring · output
571
+ │ ├── inertial/ # Pack 2 strapdown INS (attitude, mechanization, imu_errors, quantum_imu)
572
+ │ ├── timetransfer.rs · timetransfer_adv.rs · timegeo.rs # Pack 3 TWSTFT/CV/PPP/optical, Sagnac
573
+ │ ├── hybrid.rs · ensemble.rs · sweep.rs # Pack 4 fused PNT suite, Monte-Carlo, trade sweeps
574
+
575
+ │ ├── orbit.rs · sgp4.rs · tle.rs · walker.rs # geometry, SGP4/SDP4, TLE, Walker design
576
+ │ ├── propagator.rs · forces.rs · integrator.rs # numerical Cowell propagator + force model + RK4/DOPRI
577
+ │ ├── ephem.rs · precession.rs · frames.rs · timescales.rs · jd2.rs # ephemerides, IAU precession, time/frames
578
+ │ ├── maneuver.rs · batch_ls.rs · orbit_determination.rs # burns/Lambert/porkchop, Gauss-Newton, OD
579
+
580
+ ├── fusion/ # GNSS/INS — EKF, UKF, tightly_coupled, tightly_coupled17, coupled
581
+ ├── gravimeter.rs · mapmatch.rs · particle_filter.rs # gravity-map / alt-PNT navigation
582
+ │ ├── raim.rs · lunar.rs # ARAIM HPL/VPL, cislunar integrity
583
+ │ ├── gnss_sim.rs · ionex.rs · jamming.rs # measurement domain, ionosphere maps, jamming
584
+ │ └── rinex.rs · rinex_obs.rs · glonass.rs · sp3.rs · oem.rs · omm.rs · permalink.rs # interop formats
585
+ ├── scenarios/ # cited scenarios (one per kind + geometry-driven + GPS-denied)
535
586
  ├── scripts/ # reproducibility + repo-hygiene guards
536
- ├── docs/ # CONCEPTS, ARCHITECTURE, VALIDATION, GLOSSARY, assets/
537
- ├── .github/workflows/ # CI gate, release, and wheel-build pipelines
587
+ ├── docs/ # CONCEPTS, ARCHITECTURE, CAPABILITY, VALIDATION, PROVENANCE, GLOSSARY,
588
+ ├── web/ # the WebAssembly playground + kshana.dev site
589
+ ├── .github/workflows/ # CI gate, release, wheels, publish, and pages pipelines
538
590
  ├── pyproject.toml # Python packaging (maturin)
539
591
  ├── CHANGELOG.md # Keep a Changelog + SemVer
540
592
  └── CONTRIBUTING.md
@@ -552,7 +604,7 @@ kshana/
552
604
  | [Provenance](docs/PROVENANCE.md) | reviewers / citers | every sensor parameter, model, and dataset traced to its published source, in one citable table |
553
605
  | [Reproducibility &amp; provenance](docs/REPRODUCIBILITY.md) | reviewers / packagers | determinism guarantees, golden-pinning, SBOM, build provenance |
554
606
  | [Positioning](docs/POSITIONING.md) | evaluators | where Kshana sits vs RTKLIB/gLAB (complementary), and the zero-install browser tier |
555
- | [SGP4 validation](docs/SGP4-VALIDATION.md) | reviewers / citers | agreement with the AIAA 2006-6753 reference (666 states, ~4 mm) |
607
+ | [SGP4 validation](docs/SGP4-VALIDATION.md) | reviewers / citers | agreement with the AIAA 2006-6753 reference (666 states, ~4 mm) **and** a head-to-head against the independent `sgp4` crate (agree to sub-micron / 4.12 mm) |
556
608
  | [Changelog](CHANGELOG.md) | everyone | released history (Keep a Changelog + SemVer) |
557
609
  | [Contributing](CONTRIBUTING.md) | contributors | build, guards, test/citation discipline, DCO |
558
610
  | [Code of Conduct](CODE_OF_CONDUCT.md) | community | expected conduct (Contributor Covenant) |
@@ -661,7 +713,7 @@ entry for every user-visible change. Participation is governed by our
661
713
 
662
714
  If you use Kshana in academic or technical work, please cite it. Machine-readable
663
715
  metadata is in [`CITATION.cff`](CITATION.cff) (GitHub renders a "Cite this repository"
664
- button from it); cite the version you used (e.g. `v0.11.0`) together with the
716
+ button from it); cite the version you used (e.g. `v0.13.0`) together with the
665
717
  scenario and seed for full reproducibility. Every release is archived on Zenodo with
666
718
  a citable DOI — the concept DOI [10.5281/zenodo.20528627](https://doi.org/10.5281/zenodo.20528627)
667
719
  always resolves to the latest version.
package/kshana_bg.wasm CHANGED
Binary file
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "Chakshu Baweja <contact@ashforde.org>"
6
6
  ],
7
7
  "description": "Open, reproducible PNT-resilience simulator with quantum-sensor performance models",
8
- "version": "0.11.0",
8
+ "version": "0.13.0",
9
9
  "license": "Apache-2.0",
10
10
  "repository": {
11
11
  "type": "git",