kshana 0.8.0 → 0.9.1

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.
package/README.md CHANGED
@@ -1,6 +1,13 @@
1
- <h1 align="center">
2
- <img src="docs/assets/kshana-banner.svg" alt="Kshana — the precise instant. Open, reproducible hybrid quantum/classical PNT performance simulation." width="760">
3
- </h1>
1
+ <p align="center">
2
+ <img src="docs/assets/kshana-mark.svg" alt="Kshana mark a precision reticle hung from the Devanagari shirorekha" width="96" height="96">
3
+ </p>
4
+
5
+ <h1 align="center">Kshana</h1>
6
+
7
+ <p align="center">
8
+ <strong>क्षण</strong> — Sanskrit for <em>the precise instant</em>, the smallest measure of time.<br>
9
+ Open, reproducible hybrid quantum / classical PNT performance simulation.
10
+ </p>
4
11
 
5
12
  <p align="center">
6
13
  <a href="https://ashfordeou.github.io/kshana/"><img src="https://img.shields.io/badge/playground-try%20in%20browser-2dd4bf" alt="Live playground — run in your browser, no install"></a>
@@ -28,26 +35,14 @@ and every sensor parameter is traceable to a published source.
28
35
  *Free and open source under Apache-2.0, professionally developed and maintained by
29
36
  Ashforde OÜ — commercial support, integration, and proprietary extensions available.*
30
37
 
31
- > **Status: v0.8.0 a simulation substrate, not yet a product.** Four sensor packs
32
- > that each report all six operational figures of merit (including a clock-stability-based
33
- > spoof-*detectability* bound analytic, meaningful only with a configured attack —
34
- > demonstrated by an active spoofing-attack scenario), two independent Kalman error
35
- > budgets (clock and position) reported as a combined FoM, and a filter
36
- > self-consistency bound, multi-constellation geometry-derived GNSS availability *and*
37
- > dilution of precision from orbits — synthetic Walker, Keplerian mean elements, or
38
- > full two-line element sets propagated with **SGP4/SDP4** (validated against the AIAA
39
- > 2006-6753 vectors) — a single-axis (1-DOF) IMU error budget (velocity/angle random
40
- > walk and bias-instability), Monte Carlo confidence bands, trade-study parameter
41
- > sweeps, and a shareable HTML scorecard — all calibrated to published data and
42
- > validated against the standard relations, with optional Python and WebAssembly
43
- > bindings and a browser playground. Read [`docs/VALIDATION.md`](docs/VALIDATION.md)
44
- > before citing any number — each noise term is labelled `validated` or `not modeled`,
45
- > and optical-clock figures are *space goals on ground hardware* (no strontium optical
46
- > clock has flown). What it is **not**: a 3-axis IMU triad, a coupled GNSS/INS filter, a
47
- > first-principles quantum simulator, or aviation-grade RAIM/HPL/VPL integrity. The full
48
- > honest scope map is in [`docs/CAPABILITY.md`](docs/CAPABILITY.md); see also
49
- > [`docs/INTEGRITY.md`](docs/INTEGRITY.md) and the claims table in
50
- > [`docs/VALIDATION.md`](docs/VALIDATION.md).
38
+ > **Status: v0.9.1 · a simulation substrate, not yet a product.** A validated,
39
+ > fully reproducible engine spanning the PNT stack orbit geometry, inertial
40
+ > navigation, GNSS/INS fusion, integrity, clocks, and timing. Honest by design:
41
+ > every figure of merit is labelled *validated* or *not-modeled*, and optical-clock
42
+ > figures are space goals on ground hardware (no strontium optical clock has flown).
43
+ > See **[Capabilities](#capabilities)** for what it does, **[What it is / is not](#what-it-is--is-not)**
44
+ > for scope, and [`docs/CAPABILITY.md`](docs/CAPABILITY.md) / [`docs/VALIDATION.md`](docs/VALIDATION.md)
45
+ > for per-capability maturity and the claims table.
51
46
 
52
47
  > **Try it in your browser:** the [playground](web/) runs the engine client-side as
53
48
  > WebAssembly — pick a scenario, edit the parameters, and see the result, with nothing
@@ -66,12 +61,12 @@ Ashforde OÜ — commercial support, integration, and proprietary extensions ava
66
61
 
67
62
  ## Contents
68
63
 
69
- - [Why](#why) · [What it is / is not](#what-it-is--is-not) · [Results](#results)
64
+ - [Why](#why) · [What it is / is not](#what-it-is--is-not) · [Capabilities](#capabilities) · [Results](#results)
70
65
  - [Install & build](#install--build) · [Usage](#usage) ([Python](#python), [WebAssembly](#webassembly))
71
66
  - [Scenario format](#scenario-format) · [Output](#output) · [Architecture](#architecture)
72
67
  - [Repository layout](#repository-layout) · [Validation & honesty](#validation-reproducibility--honesty)
73
68
  - [Documentation](#documentation) · [FAQ](#faq) · [Troubleshooting](#troubleshooting)
74
- - [Roadmap](#roadmap) · [Contributing](#contributing) · [Citing](#citing) · [License](#license)
69
+ - [Roadmap](#roadmap) · [Contributing](#contributing) · [Citing](#citing) · [Versioning & releases](#versioning--releases) · [License](#license)
75
70
  - [Support & professional services](#support--professional-services) · [References](#key-references)
76
71
 
77
72
  ## Why
@@ -89,13 +84,33 @@ noise realizations.
89
84
 
90
85
  ## What it is / is not
91
86
 
92
- **It is:** a deterministic engine that runs a GNSS-outage scenario, evolves
93
- calibrated sensor error models, runs a holdover/dead-reckoning estimator, and
94
- scores the result against six figures of merit, emitting a JSON result and an SVG
95
- chart.
96
-
97
- **It is not:** flight hardware, a quantum-payload design, or a full GNSS receiver.
98
- Quantum-hardware fidelity comes from published error models, not from this tool.
87
+ **It is:** a deterministic, dependency-light engine spanning the PNT stack orbit
88
+ geometry, inertial navigation, GNSS/INS fusion, integrity, clocks, and timing. It
89
+ runs a scenario (often a GNSS outage), evolves calibrated sensor error models
90
+ through the appropriate estimator, and scores the result against the operational
91
+ figures of merit — emitting a reproducible JSON result and an SVG chart, from a
92
+ Rust library, CLI, Python extension, or in-browser WebAssembly module.
93
+
94
+ **It is not:** flight hardware, a quantum-payload design, a full GNSS signal
95
+ receiver, or a certified avionics product. Quantum-hardware fidelity comes from
96
+ published error models, not from this tool. The granular maturity of each
97
+ capability is documented in [`docs/CAPABILITY.md`](docs/CAPABILITY.md).
98
+
99
+ ## Capabilities
100
+
101
+ | Domain | Capability |
102
+ |--------|------------|
103
+ | **Orbit & geometry** | SGP4/SDP4 propagation (validated to 4.12 mm against all 666 AIAA 2006-6753 vectors), real-TLE or synthetic Walker constellations, multi-constellation visibility, dilution of precision, and GNSS availability. |
104
+ | **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). |
105
+ | **Fusion** | Loosely-coupled GNSS/INS error-state EKF (15-state) with closed-loop feedback that coasts through GNSS outages on a calibrated inertial solution. |
106
+ | **Integrity** | Snapshot and solution-separation (ARAIM-style) RAIM with horizontal/vertical protection levels (HPL/VPL), fault detection and identification, and Stanford integrity diagrams. |
107
+ | **Clock & timing** | Two-state Kalman holdover, Allan-family stability (ADEV/MDEV/TDEV/HDEV) with confidence intervals, and optical/RF two-way time transfer. |
108
+ | **Interoperability** | RINEX-3 GPS broadcast-ephemeris ingestion with IS-GPS-200 satellite position and clock evaluation. |
109
+ | **Resilience** | Clock-aided spoof-detectability analysis against a configurable time-spoof attack. |
110
+
111
+ Each capability is reachable as a Rust API, a runnable scenario `kind`, or both.
112
+ Maturity per capability — *validated*, *runnable*, or *library* — is tracked in
113
+ [`docs/CAPABILITY.md`](docs/CAPABILITY.md).
99
114
 
100
115
  ## Results
101
116
 
@@ -159,6 +174,7 @@ cargo run -- scenarios/timetransfer.toml
159
174
  cargo run -- scenarios/hybrid-pnt.toml
160
175
  cargo run -- scenarios/orbit-gnss-challenged.toml
161
176
  cargo run -- scenarios/orbit-sgp4-gps.toml
177
+ cargo run -- scenarios/integrity-raim.toml
162
178
  ```
163
179
 
164
180
  Example output (clock holdover — note the Integrity and Security figures of merit):
@@ -177,9 +193,16 @@ accuracy — alongside the clock result.
177
193
  > **Read these two numbers carefully.** `security` is an *analytic spoof-detectability
178
194
  > bound* derived from each clock's stability — it is meaningful only against a
179
195
  > configured spoofing scenario and is **not** a multi-satellite RAIM detector. `integrity`
180
- > is the filter's *self-consistency* (fraction of outage samples inside its own k-sigma
196
+ > here is the filter's *self-consistency* (fraction of outage samples inside its own k-sigma
181
197
  > bound), **not** an aviation HPL/VPL integrity figure. See
182
198
  > [`docs/INTEGRITY.md`](docs/INTEGRITY.md).
199
+ >
200
+ > For genuine receiver-autonomous integrity, the **`integrity` scenario kind**
201
+ > (`scenarios/integrity-raim.toml`) runs real snapshot and solution-separation
202
+ > (ARAIM-style) RAIM over the propagated constellation geometry: it computes
203
+ > horizontal/vertical **protection levels (HPL/VPL)** per epoch and reports the
204
+ > fraction of epochs that meet the configured alert limits, with a Stanford
205
+ > integrity diagram for error-vs-PL classification.
183
206
 
184
207
  ### Python
185
208
 
@@ -259,8 +282,16 @@ Optional fields (off when absent): a clock may add `flicker_floor` (1/f FM Allan
259
282
  floor); an inertial sensor may add `gyro_bias` and `q_arw` (gyro bias and angular
260
283
  random walk), and `bias_instability` and `q_aa` (the Allan bias-instability floor and
261
284
  acceleration random walk) — together a **single-axis (1-DOF) accelerometer error
262
- budget** (VRW/ARW and bias-instability), *not* a 3-axis IMU triad: scale-factor,
263
- misalignment, g-sensitivity, and cross-axis coupling are not modelled. A
285
+ budget** (VRW/ARW and bias-instability). This is the error budget the shipped
286
+ `inertial` scenario *pack* runs. Separately, the library now carries a verified
287
+ **3-axis strapdown navigator** (`src/inertial/{attitude,mechanization,imu_errors}.rs`):
288
+ quaternion attitude with coning/sculling compensation, a full NED mechanization
289
+ (Earth-rate and transport-rate terms, WGS-84 Somigliana gravity), and a
290
+ deterministic IMU error model in which **scale-factor, misalignment,
291
+ g-sensitivity, quantization, and rate-ramp are modelled** (IEEE Std 952-1997
292
+ §A.2; Groves 2013 §4.3). That 3-axis path is **not yet wired into the scenario
293
+ pack/FoM** — switching the pack over, with a loosely-coupled GNSS/INS filter, is
294
+ the next inertial milestone. A
264
295
  clock-holdover scenario may add `runs` (> 1) to run a **Monte Carlo ensemble** — each
265
296
  figure of merit is then reported as a mean with a 5th–95th-percentile spread and the
266
297
  chart shades the error confidence band (see `scenarios/clock-ensemble.toml`).
@@ -532,7 +563,20 @@ entry for every user-visible change. Participation is governed by our
532
563
 
533
564
  If you use Kshana in academic or technical work, please cite it. Machine-readable
534
565
  metadata is in [`CITATION.cff`](CITATION.cff) (GitHub renders a "Cite this repository"
535
- button from it); cite the version you used (e.g. `v0.7.0`).
566
+ button from it); cite the version you used (e.g. `v0.9.1`) together with the
567
+ scenario and seed for full reproducibility. An archival DOI (Zenodo) is planned.
568
+
569
+ > Baweja, C. (2026). *Kshana — hybrid quantum/classical PNT performance simulator*. Ashforde OÜ. https://github.com/AshfordeOU/kshana
570
+
571
+ ## Versioning & releases
572
+
573
+ Kshana follows [Semantic Versioning](https://semver.org). While pre-1.0 the public
574
+ scenario/result schema may still change; breaking changes are called out explicitly
575
+ in the [`CHANGELOG.md`](CHANGELOG.md). Tagged releases are published to
576
+ [crates.io](https://crates.io/crates/kshana), [PyPI](https://pypi.org/project/kshana/),
577
+ and [npm](https://www.npmjs.com/package/kshana), and listed under
578
+ [GitHub Releases](https://github.com/AshfordeOU/kshana/releases). Every result is
579
+ reproducible from `scenario + seed + engine version`.
536
580
 
537
581
  ## License
538
582
 
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 hybrid quantum/classical PNT performance simulator",
8
- "version": "0.8.0",
8
+ "version": "0.9.1",
9
9
  "license": "Apache-2.0",
10
10
  "repository": {
11
11
  "type": "git",