kshana 0.7.0 → 0.8.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.
package/README.md CHANGED
@@ -3,6 +3,8 @@
3
3
  </h1>
4
4
 
5
5
  <p align="center">
6
+ <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>
7
+ <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>
6
8
  <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>
7
9
  <a href="https://github.com/ashfordeOU/kshana/releases"><img src="https://img.shields.io/github/v/release/ashfordeOU/kshana?sort=semver" alt="Release"></a>
8
10
  <a href="LICENSE"><img src="https://img.shields.io/badge/License-Apache_2.0-blue.svg" alt="License: Apache-2.0"></a>
@@ -11,7 +13,10 @@
11
13
 
12
14
  <p align="center">
13
15
  <strong>Kshana</strong> (क्षण, Sanskrit: <em>"the precise instant"</em>) is an open, reproducible
14
- simulator for <strong>hybrid quantum/classical PNT</strong> — positioning, navigation, and timing.
16
+ <strong>PNT-resilience simulator with quantum-sensor performance models</strong> —
17
+ positioning, navigation, and timing. It compares quantum and classical sensors using
18
+ published Allan/noise-budget coefficients; it is not a first-principles quantum-physics
19
+ simulator (see <a href="docs/QUANTUM-MODELS.md">docs/QUANTUM-MODELS.md</a>).
15
20
  </p>
16
21
 
17
22
  It quantifies, in hard and reproducible numbers, what quantum clocks, quantum
@@ -23,20 +28,26 @@ and every sensor parameter is traceable to a published source.
23
28
  *Free and open source under Apache-2.0, professionally developed and maintained by
24
29
  Ashforde OÜ — commercial support, integration, and proprietary extensions available.*
25
30
 
26
- > **Status: research-grade, v0.6.0.** Four sensor packs that each report all six
27
- > operational figures of merit (including a clock-aided spoof-detection security
28
- > score, with an active spoofing-attack demonstrator), a joint Kalman fusion
29
- > estimator and an integrity bound, multi-constellation geometry-derived GNSS
30
- > availability *and* position accuracy (dilution of precision) from orbits synthetic
31
- > Walker, Keplerian mean elements, or full two-line element sets propagated with
32
- > **SGP4/SDP4** (validated against the AIAA 2006-6753 vectors) a full IMU
33
- > Allan-variance noise model, Monte Carlo confidence bands,
34
- > trade-study parameter sweeps, and a shareable HTML scorecard all calibrated to
35
- > published data and validated against the standard relations, with optional Python and
36
- > WebAssembly bindings and a browser playground. Read [`docs/VALIDATION.md`](docs/VALIDATION.md)
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)
37
44
  > before citing any number — each noise term is labelled `validated` or `not modeled`,
38
45
  > and optical-clock figures are *space goals on ground hardware* (no strontium optical
39
- > clock has flown).
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).
40
51
 
41
52
  > **Try it in your browser:** the [playground](web/) runs the engine client-side as
42
53
  > WebAssembly — pick a scenario, edit the parameters, and see the result, with nothing
@@ -163,6 +174,13 @@ spoof-detection margin (`security 0.000`). The orbit scenario additionally repor
163
174
  geometry block — fraction of samples with a fix, and best/median PDOP and position
164
175
  accuracy — alongside the clock result.
165
176
 
177
+ > **Read these two numbers carefully.** `security` is an *analytic spoof-detectability
178
+ > bound* derived from each clock's stability — it is meaningful only against a
179
+ > 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
181
+ > bound), **not** an aviation HPL/VPL integrity figure. See
182
+ > [`docs/INTEGRITY.md`](docs/INTEGRITY.md).
183
+
166
184
  ### Python
167
185
 
168
186
  An optional Python extension (PyO3, abi3) wraps the same engine. Build and install
@@ -240,15 +258,19 @@ drift = 0.0
240
258
  Optional fields (off when absent): a clock may add `flicker_floor` (1/f FM Allan
241
259
  floor); an inertial sensor may add `gyro_bias` and `q_arw` (gyro bias and angular
242
260
  random walk), and `bias_instability` and `q_aa` (the Allan bias-instability floor and
243
- acceleration random walk), completing the IMU Allan-variance noise model. A
261
+ 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
244
264
  clock-holdover scenario may add `runs` (> 1) to run a **Monte Carlo ensemble** — each
245
265
  figure of merit is then reported as a mean with a 5th–95th-percentile spread and the
246
266
  chart shades the error confidence band (see `scenarios/clock-ensemble.toml`).
247
267
 
248
- A `fusion` scenario (same blocks as `hybrid`) runs a single joint Kalman filter as the
249
- navigator fusing the clock and position states, disciplined by GNSS and aided by
250
- optical time transfer and reports fused holdover with a joint-covariance integrity
251
- (see `scenarios/fusion-pnt.toml`).
268
+ A `fusion` scenario (same blocks as `hybrid`) runs **two independent Kalman estimators**
269
+ one for the clock state, one for the position state disciplined by GNSS and aided by
270
+ optical time transfer, and reports a combined holdover FoM. The two blocks share no
271
+ cross-covariance: this is a stacked pair of error budgets, **not** a true coupled
272
+ clock+position joint filter (cross-block covariance is a roadmap item). See
273
+ `scenarios/fusion-pnt.toml`.
252
274
 
253
275
  A `spoof` scenario injects a ramping false-time spoof (an `[attack]` block with
254
276
  `start_s` and `rate_ns_per_s`) and runs each clock's integrity monitor, reporting
@@ -300,18 +322,24 @@ See `scenarios/` for one example of every kind.
300
322
  ## Output
301
323
 
302
324
  The result artifact is versioned, self-describing JSON: per-step time series, the
303
- scored figures of merit, the active model specs (with provenance), the seed, and a
304
- **scenario hash** — so any chart can be reproduced from the file. The figures of
325
+ scored figures of merit, the active model specs (with provenance), the seed, a
326
+ **scenario hash** — so any chart can be reproduced from the file and, for each clock,
327
+ an `adev_curve` (`[{tau_s, adev, n_samples}]`): the overlapping Allan deviation across
328
+ octave-spaced averaging times, the standard way to read a clock's stability. The
329
+ browser playground renders it as a log-log "Clock stability (ADEV)" chart. (MDEV/TDEV/HDEV
330
+ and confidence intervals are not yet computed — roadmap.) Every field, with units and a
331
+ source pointer, is documented in [`docs/SCHEMA.md`](docs/SCHEMA.md). The figures of
305
332
  merit follow the standard operational PNT figures of merit:
306
333
 
307
334
  | Figure of merit | How Kshana computes it |
308
335
  |-----------------|------------------------|
309
- | Positioning / Timing Performance | RMS + 95th-percentile error over the outage |
310
- | Autonomy | holdover duration time in-spec after GNSS loss |
336
+ | Timing Performance (clock/orbit packs) | clock-phase error RMS + 95th-percentile over the outage, in **nanoseconds** (`timing_rms_ns`) — a timing metric, not position |
337
+ | Positioning Performance (inertial/hybrid packs) | 1-DOF position-error RMS + 95th-percentile over the outage, in **metres** (`pos_rms_m`); single-axis. A single run is flagged `monte_carlo: false`; set `runs = N` for a Monte Carlo ensemble that reports each metric's mean, spread, and bootstrap 95% CI. Still **not** a 2-D CEP/2DRMS or DOP-weighted accuracy (those need the 3-axis model — roadmap) |
338
+ | Autonomy | holdover duration — time in-spec after GNSS loss (grid-quantised: a lower bound) |
311
339
  | Resilience | error-growth slope during the outage |
312
340
  | Availability | fraction of the run with an in-spec solution |
313
- | Integrity | protection-level containment — fraction of outage samples whose error stays inside the Kalman filter's k-sigma bound (clock pack) |
314
- | Security | clock-aided spoof-detection score how far below the timing spec a time-spoof can be flagged by cross-checking GNSS time against the clock's own coasted prediction (clock and orbit packs) |
341
+ | Integrity | filter **self-consistency** — fraction of outage samples whose error stays inside the Kalman filter's own k-sigma bound. **Not** an aviation HPL/VPL/RAIM integrity figure (see [`docs/INTEGRITY.md`](docs/INTEGRITY.md)) |
342
+ | Security | **analytic spoof-*detectability* bound** from clock stability how small/slow a time-spoof a single-clock consistency monitor could flag. Meaningful only with a configured attack; **not** a multi-satellite RAIM detector |
315
343
 
316
344
  New to these terms? Each is defined in plain language in the [glossary](docs/GLOSSARY.md).
317
345
 
@@ -343,7 +371,7 @@ flowchart TD
343
371
  models["models — ClockModel (+ flicker)"]
344
372
  estimator["estimator — holdover"]
345
373
  kalman["kalman — Integrity bound"]
346
- security["security — spoof-detection score"]
374
+ security["security — analytic spoof-detectability bound"]
347
375
  fom["fom · report · run"]
348
376
  end
349
377
  p2["Pack 2 · inertial — accel + gyro"]
@@ -403,6 +431,9 @@ kshana/
403
431
  | [Glossary](docs/GLOSSARY.md) | everyone | plain-language definitions of every term |
404
432
  | [Architecture](docs/ARCHITECTURE.md) | developers / reviewers | module map, engine pipeline, dispatch, and diagrams |
405
433
  | [Validation status](docs/VALIDATION.md) | reviewers / citers | what is `validated` vs `not modeled`, with evidence |
434
+ | [Reproducibility &amp; provenance](docs/REPRODUCIBILITY.md) | reviewers / packagers | determinism guarantees, golden-pinning, SBOM, build provenance |
435
+ | [Positioning](docs/POSITIONING.md) | evaluators | where Kshana sits vs RTKLIB/gLAB (complementary), and the zero-install browser tier |
436
+ | [SGP4 validation](docs/SGP4-VALIDATION.md) | reviewers / citers | agreement with the AIAA 2006-6753 reference (666 states, ~4 mm) |
406
437
  | [Changelog](CHANGELOG.md) | everyone | released history (Keep a Changelog + SemVer) |
407
438
  | [Contributing](CONTRIBUTING.md) | contributors | build, guards, test/citation discipline, DCO |
408
439
  | [Code of Conduct](CODE_OF_CONDUCT.md) | community | expected conduct (Contributor Covenant) |
@@ -476,12 +507,15 @@ CPython versions).
476
507
  ## Roadmap
477
508
 
478
509
  See [`CHANGELOG.md`](CHANGELOG.md) for released history and the `[Unreleased]`
479
- section for what's next (higher-fidelity SGP4 orbit propagation). An active
480
- spoofing-attack demonstrator, multi-constellation availability, a full IMU
481
- Allan-variance noise model, a joint Kalman fusion estimator, real constellation
482
- geometry from TLEs, an HTML scorecard report, a clock-aided spoof-detection Security
483
- score across all four packs, geometry-derived GNSS availability *and* position
484
- accuracy (dilution of precision) from Keplerian orbits with eccentricity and J2 drift,
510
+ section for what's next (Earth-fixed frame reduction TEME&rarr;ECEF/ITRF — and
511
+ explicit time systems: UTC/UT1/TAI/TT with leap seconds). SGP4/SDP4 orbit
512
+ propagation has **shipped** (v0.7.0, validated against the AIAA 2006-6753 vectors),
513
+ and its inertial velocity is now exposed downstream. An active
514
+ spoofing-attack demonstrator, multi-constellation availability, a single-axis (1-DOF)
515
+ IMU error budget, two independent (clock + position) Kalman estimators reported as a
516
+ combined FoM, real constellation geometry from TLEs, an HTML scorecard report, a
517
+ clock-stability-based spoof-detectability bound, geometry-derived GNSS availability
518
+ *and* dilution of precision from Keplerian orbits with eccentricity and J2 drift,
485
519
  Monte Carlo confidence bands, trade-study parameter sweeps, an in-browser WebAssembly
486
520
  playground, and optional Python (PyO3) and WebAssembly (wasm-bindgen) bindings have
487
521
  landed on `main`.
@@ -498,7 +532,7 @@ entry for every user-visible change. Participation is governed by our
498
532
 
499
533
  If you use Kshana in academic or technical work, please cite it. Machine-readable
500
534
  metadata is in [`CITATION.cff`](CITATION.cff) (GitHub renders a "Cite this repository"
501
- button from it); cite the version you used (e.g. `v0.6.0`).
535
+ button from it); cite the version you used (e.g. `v0.7.0`).
502
536
 
503
537
  ## License
504
538
 
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.7.0",
8
+ "version": "0.8.0",
9
9
  "license": "Apache-2.0",
10
10
  "repository": {
11
11
  "type": "git",