Tłumaczenie maszynowe, niezweryfikowane przez osobę, dla której polski jest językiem ojczystym. Wzorcem jest wersja angielska.

API i integracjeEdytuj na GitHubieŹródło: docs/ARCHITECTURE.md

Kshana — Architektura

Kshana jest jednym silnikiem zorganizowanym w warstwy nad wspólnym rdzeniem: pakiety czujników (zegar, inercja, transfer czasu, hybryda); warstwa astrodynamiki / numeryczna (analityczny SGP4/SDP4 (SGP4: Simplified General Perturbations 4; SDP4: Simplified Deep-space Perturbations 4), numeryczny propagator Cowella z modelem sił o siedmiu zaburzeniach, projekt manewrów, wyznaczanie orbity z pomiarów odległości ze stacji naziemnych oraz dopasowanie modelu sił do precyzyjnych efemeryd agencji); warstwa czasu i układów odniesienia (skale czasu IERS (International Earth Rotation and Reference Systems Service), precesja–nutacja IAU (International Astronomical Union) 2006/2000A oraz redukcja CIO (Celestial Intermediate Origin) GCRS↔ITRS (GCRS: Geocentric Celestial Reference System; ITRS: International Terrestrial Reference System)); warstwa fuzji (estymatory GNSS/INS (GNSS: globalny system nawigacji satelitarnej; INS: inercyjny system nawigacji)); oraz warstwy integralności, odporności, alt-PNT (PNT: pozycjonowanie, nawigacja i czas) i Księżyca (RAIM/ARAIM/SBAS (RAIM: autonomiczne monitorowanie integralności przez odbiornik; ARAIM: zaawansowane autonomiczne monitorowanie integralności przez odbiornik; SBAS: system wspomagania oparty na satelitach), zagłuszanie i wielowarstwowa detekcja spoofingu, dopasowanie do map grawitacji/terenu/pola magnetycznego oraz PNT cislunarny); a także nowsze warstwy LEO-PNT (PNT na niskiej orbicie okołoziemskiej), widma, Układu Słonecznego i projektu konstelacji, synchronizacji sieciowej i kampanii, wraz z modułami zapisu raportów, animacji i interoperacyjności, z których może korzystać każdy przebieg (§1d). We wszystkich z nich silnik nie wie nic o „kwantowym” i „klasycznym”: steruje modelami błędów czujników przez scenariusz utraty GNSS, uruchamia estymator i ocenia wynik. Urządzenie kwantowe i klasyczne porównuje się więc na tym samym scenariuszu, a różnią się one tylko (opublikowanymi, cytowanymi) parametrami błędów i niezależnymi ziarnami szumu.

Ten dokument zbiera diagramy strukturalne i behawioralne. §1 to rdzeń pakietów czujników; §1a mapuje warstwy astrodynamiki, fuzji i alt-PNT dodane od tego czasu; §1b–§1d to warstwy badań, dziedzin i wyników. Zasady użycia znajdziesz w README; to, co jest, a co nie jest sprawdzone, w VALIDATION; tabelę dojrzałości każdej możliwości w CAPABILITY.

Skróty użyte na diagramach i nierozwinięte w miejscach ich występowania: ADEV, odchylenie Allana; BW, szerokość pasma; CAI, interferometr z zimnych atomów; CZML, Cesium Language; Δ-DOR, delta differential one-way ranging; DO-229E, norma RTCA (Radio Technical Commission for Aeronautics) dla odbiorników SBAS; EKF, rozszerzony filtr Kalmana; FM, modulacja częstotliwości; GSE, sprzęt wsparcia naziemnego; HPL/VPL, poziomy/pionowy poziom ochrony; IMU, inercyjna jednostka pomiarowa; IOAG, Interagency Operations Advisory Group; IQ, próbki synfazowe/kwadraturowe; ISL, łącze międzysatelitarne; ITU-T, Sektor Normalizacji Telekomunikacji Międzynarodowego Związku Telekomunikacyjnego; J2–J6, strefowe harmoniczne pola grawitacyjnego Ziemi stopnia 2 do 6; KIF, Kshana Interchange Format; KML, Keyhole Markup Language; KPI, kluczowy wskaźnik efektywności; L1/L5, pasma nośne GNSS (L2 orbit halo CR3BP to natomiast punkt libracyjny Ziemia–Księżyc 2); LEO, niska orbita okołoziemska; LOO, leave-one-out (wyłączenie jednego elementu); LTC, Coordinated Lunar Time; MEO, średnia orbita okołoziemska; MTIE, maksymalny błąd przedziału czasu; N2, liczba różnorodności Hilla rzędu 2; NED, północ-wschód-dół; NTN, sieć nieziemska; OD, wyznaczanie orbity; OPS-SAT, satelita Europejskiej Agencji Kosmicznej będący laboratorium oprogramowania na orbicie; PPP, precyzyjne pozycjonowanie punktowe; PSD, gęstość widmowa mocy; PVT, pozycja, prędkość i czas; RINEX, Receiver Independent Exchange Format; RK4 / RK5(4), całkowniki Rungego–Kutty czwartego rzędu oraz wbudowany piątego (czwartego) rzędu; SH, harmoniki sferyczne; SigMF, Signal Metadata Format; SIR, ponowne próbkowanie z ważnością; SRIF, pierwiastkowy filtr informacyjny; SRP, ciśnienie promieniowania słonecznego; SSC, współczynnik separacji widmowej; STK, Systems Tool Kit; SVG, Scalable Vector Graphics; TDEV, odchylenie czasu; TDM, Tracking Data Message CCSDS (Consultative Committee for Space Data Systems); TLE, dwuwierszowy zestaw elementów orbity; TPL, poziom ochrony czasu; UBX, protokół binarny u-blox; UHF, ultrawysoka częstotliwość; VLBI, interferometria z bardzo długą bazą; VRW / ARW, błądzenie losowe prędkości / kąta; WASM, WebAssembly.


1. Struktura modułów#

flowchart TD
    main["main.rs<br/>CLI (thin wrapper)"]
    py["python.rs<br/>PyO3 (feature)"]
    wasm["wasm.rs<br/>wasm-bindgen (feature)"]
    api["api.rs<br/>run_toml: parse · dispatch by kind · json+svg+summary"]

    subgraph shared["Shared core"]
      types["types.rs<br/>Seconds · TimeGrid · ModelSpec"]
      scenario["scenario.rs<br/>GnssState · GnssTimeline · ClockCfg · Scenario"]
      allan["allan.rs<br/>overlapping Allan deviation"]
    end

    subgraph pack1["Pack 1 · Clock holdover"]
      models["models.rs<br/>ErrorModel · ClockModel (incl. flicker FM)"]
      estimator["estimator.rs<br/>HoldoverEstimator"]
      kalman["kalman.rs<br/>KalmanClock → Integrity bound"]
      security["security.rs<br/>clock-aided spoof detection → Security"]
      fom["fom.rs<br/>Sample · FoMScores · score · worst_case_holdover"]
      report["report.rs<br/>RunResult · hash · to_svg"]
      run["run.rs<br/>run / run_clock / run_orbit_clock"]
    end

    inertial["inertial/<br/>Pack 2 · AccelModel (accel + gyro + bias instability/RW) · run_inertial · quantum_imu CAI + QuantumNavBudget dead-reckoning-over-holdover"]
    timetransfer["timetransfer.rs<br/>Pack 3 · TimeTransferLink · run_timetransfer"]
    hybrid["hybrid.rs<br/>Pack 4 · run_suite · score_hybrid · run_hybrid (+ integrity/security)"]
    fusion["fusion/<br/>joint Kalman PNT estimator · run_fusion"]
    orbit["orbit.rs<br/>Propagator (Kepler | SGP4) · Walker / TLE / multi-constellation · visibility · DOP"]
    tle["tle.rs<br/>two-line element parsing (line 2 → Kepler, full TLE → SGP4)"]
    sgp4mod["sgp4.rs<br/>SGP4 / SDP4 propagator (deep-space + resonance)"]
    ensemble["ensemble.rs<br/>Monte Carlo confidence bands"]
    sweep["sweep.rs<br/>trade-study parameter sweeps"]
    spoof["spoof.rs<br/>active spoofing-attack demonstrator"]
    jamming["jamming.rs<br/>link-budget anti-jam C/N₀ (J/S · processing gain · Q)"]
    navsignal["navsignal.rs<br/>signal level: BPSK-R / BOC PSD · SSC κ · Gabor BW · DLL jitter · multipath · ranging-code (m-seq/Gold) design-trade"]
    holdover["holdover.rs<br/>GNSS-denied clock holdover: van-Loan coast → holdover-to-threshold · quantum-clock classes"]
    verification["verification.rs<br/>machine-checked requirement→module→test→oracle→status matrix"]

    main --> api
    py --> api
    wasm --> api
    api --> run
    api --> inertial
    api --> timetransfer
    api --> hybrid
    api --> ensemble
    api --> sweep
    api --> fusion
    api --> spoof
    spoof --> security
    api --> jamming
    api --> holdover
    api --> verification
    navsignal -. derives anti-jam Q (κ → Q=1/(R_c·κ)) .-> jamming
    jamming -. uses PSD / SSC .-> navsignal
    holdover -. coast-variance vs van-Loan recursion .-> kalman
    ensemble --> run
    sweep --> run
    orbit --> tle
    tle --> sgp4mod
    orbit -. SGP4 propagator .-> sgp4mod
    fusion -. composes .-> models
    fusion -. composes .-> inertial
    fusion --> kalman

    run --> models
    run --> estimator
    run --> kalman
    run --> security
    run --> fom
    run --> report
    run --> orbit
    models --> types
    scenario --> types
    inertial --> scenario
    timetransfer --> types
    orbit --> scenario
    hybrid -. composes .-> models
    hybrid -. composes .-> estimator
    hybrid -. composes .-> inertial
    hybrid -. composes .-> timetransfer
    pack1 --> shared
    inertial --> allan

CLI (interfejs wiersza poleceń) i oba wiązania przechodzą przez jeden punkt wejścia api::run_toml, więc nigdy się nie rozjeżdżają. Pakiety korzystają ze wspólnego rdzenia (types, scenario, allan); Pack 4 (hybrid) składa modele i estymatory Packs 1–3, zamiast je implementować od nowa; orbit wyprowadza oś czasu GNSS z geometrii, która następnie zasila przebieg Pack 1. Moduł navsignal leży na poziomie sygnału, między bilansem łącza a dziedziną pomiarów: wyprowadza współczynnik separacji widmowej κ z rzeczywistych widm mocy sygnału i zagłuszacza, z którego jamming oblicza teraz swoje Q = 1/(R_c·κ) odporności na zagłuszanie, zamiast przyjmować reprezentatywną stałą (sprawdzone krzyżowo w CI (ciągłej integracji)); niesie także kompromis projektowy kodu dalmierczego (m-sekwencja/Gold).

Trzy dalsze moduły tworzą trzon odporności bez GNSS. holdover odpowiada wprost na pytanie operacyjne — jak długo ten zegar może pracować swobodnie, zanim jego błąd czasu przekroczy budżet? — udostępniając zamkniętą postać van Loana dla błędu dryfu jako odwrócenie holdover do progu, sprawdzone krzyżowo względem wielokrokowej rekursji kowariancji clock_state. Jego inercyjny bliźniak mieszka w inertial::quantum_imu (QuantumNavBudget), który składa dryf szumu białego interferometru z zimnych atomów z błędem odchylenia zera i współczynnika skali w budżet dryfu pozycji w czasie holdover (człon odchylenia zera sprawdzony krzyżowo względem niezależnego integratora AccelModel). verification renderuje macierz wymagania, modułu, testu, wyroczni i statusu całego silnika, z testowanymi jednostkowo niezmiennikami, które zabraniają etykiety „sprawdzone względem niezależnego wzorca zewnętrznego” bez niezależnej wyroczni zewnętrznej — więc twierdzenie o poziomie pewności nie może rozminąć się z kodem.

1a. Warstwy astrodynamiki, fuzji i alt-PNT#

Poza rdzeniem pakietów czujników trzy podsystemy dzielą ten sam wspólny rdzeń i zasilają orbit (lub są przez nie zasilane). Warstwa astrodynamiki / numeryczna dodaje nieanalityczny propagator Cowella obok analitycznej ścieżki SGP4/SDP4; warstwa fuzji niesie estymatory GNSS/INS; a warstwa alt-PNT to dopasowanie do map grawitacji bez GPS (GPS: Global Positioning System). Są to możliwości biblioteki/scenariusza (zob. CAPABILITY, które z nich są podłączone do scenariusza kind, a które osiągalne jako API (application programming interface) Rusta).

flowchart TD
    subgraph astro["Astrodynamics & numerical"]
      orbit2["orbit · sgp4 · tle · walker<br/>analytic SGP4/SDP4 · Walker design"]
      prop["propagator<br/>Cowell driver (accel_at / accel_rv)"]
      forces["forces<br/>two-body · J2–J6 · EGM2008 d/o-70 · 3rd-body · SRP · drag · Schwarzschild + Lense–Thirring · tides"]
      integ["integrator<br/>RK4 step-doubling · Dormand–Prince RK5(4)"]
      ephem["ephem<br/>low-precision Sun & Moon"]
      man["maneuver<br/>impulsive/finite burns · Izzo Lambert · porkchop"]
      od["orbit_determination<br/>Gauss–Newton batch (batch_ls) · sequential UKF"]
    end
    subgraph fusion["Fusion (GNSS/INS)"]
      ekf["fusion/gnss_ins_ekf · closed_loop · pack<br/>15-state loosely-coupled EKF"]
      tc["fusion/tightly_coupled (8-state)<br/>fusion/tightly_coupled17 (17-state, quantum-CAI)"]
      ukf["fusion/ukf — sigma-point core"]
      coup["fusion/coupled — clock+position cross-covariance"]
    end
    subgraph alt["Alt-PNT (GPS-denied)"]
      grav["gravimeter<br/>cold-atom model + SH anomaly field + mascons"]
      pf["particle_filter — SIR"]
      mm["mapmatch — field-match likelihood"]
    end
    prop --> forces
    prop --> integ
    forces --> ephem
    man --> integ
    od --> forces
    od --> integ
    od --> ukf
    tc --> ukf
    tc -. coasts on .-> forces
    grav --> pf
    mm --> pf
    grav --> mm
    ekf -. drives .-> strap["inertial/ strapdown (quaternion · NED · IMU errors)"]
    tc -. drives .-> strap
    grav -. CAI floor .-> strap

Człony sił propagatora numerycznego są domyślnie wyłączone, więc ich włączenie nigdy nie zaburza wydanych wzorców (goldens). 17-stanowy ściśle sprzężony UKF (unscented Kalman filter) przeprowadza utratę GNSS na wyprowadzonym błądzeniu losowym prędkości akcelerometru kwantowego CAI; wyznaczanie orbity używa tych samych forces/integrator do propagacji stanu kandydującego przez łuk śledzenia.

Ten sam wspólny rdzeń niesie też cztery dalsze podsystemy, nienarysowane powyżej (ich pakiety pojawiają się w rozdzielniku w §4): warstwę czasu i układów odniesienia (timescales, jd2, precession, nutation, cio, frames, eop) redukującą TEME↔GCRS↔ITRS (TEME: true equator, mean equinox) i zasilającą pakiet ephemeris/śladu na powierzchni; warstwę integralności (raim, sbas) dla RAIM/ARAIM/SBAS; warstwę odporności (jamming, spoof, spoof_detect, spoof_monitors, detection) dla zagłuszania i wielowarstwowej detekcji spoofingu, z warstwą sygnału nawigacyjnego (navsignal) na poziomie sygnału — gęstości widmowe mocy BPSK-R (BPSK: binary phase-shift keying) / sine-BOC (BOC: binary offset carrier), współczynnik separacji widmowej κ, który teraz wyprowadza odporność na zagłuszanie Q modułu jamming, szerokość pasma dalmierczego RMS (Gabora), jitter śledzenia kodu przez koherentną pętlę DLL (delay-locked loop) wczesny–późny oraz obwiednię błędu wielodrogowości (analiza parametrów sygnału, nie projekt ładunku RF (RF: częstotliwość radiowa) / sprzętu antenowego — to rola partnera od ładunku); oraz warstwę księżycową / cislunarną (lunar, lunar_frame, lunar_od, cr3bp) dla dynamiki CR3BP (ograniczony kołowy problem trzech ciał) — łącznie z macierzą przejścia stanu 6×6 i jednostrzałowym korektorem różnicowym (cr3bp_jacobian, propagate_state_stm, differential_correct_halo), który wytwarza naprawdę okresowe orbity halo/NRHO (NRHO: near-rectilinear halo orbit), odtwarzając opublikowaną południową orbitę NRHO L2 9:2 (orbitę Gateway) przy okresie ≈ 6,57 d / perylunium ≈ 3 250 km (opublikowane ≈ 6,56 d / ≈ 3 370 km); selenocentryczna transformacja MCI/MCMF (MCI: inercyjny względem środka Księżyca; MCMF: związany z Księżycem i jego środkiem) skorygowanej orbity oraz kontynuacja rodziny pozostają dalszymi pracami, a NRHO jest rozwiązaniem CR3BP (kołowym, bez Słońca), niesprawdzonym względem rzeczywistych efemeryd LANS/Gateway (LANS: Lunar Augmented Navigation Service) — oraz integralność LunaNet. Dopasowanie modelu sił do efemeryd agencji (precise_od, lunar_od, tides, gravity_sh) i pełny zestaw pól alt-PNT (igrf, altpnt/terrain, gravimeter) uzupełniają listę modułów; dojrzałość poszczególnych modułów zob. CAPABILITY.

1b. Badania odporności, ocena uczenia maszynowego i odtwarzalne artefakty#

Pięć dalszych grup modułów tworzy otwartą, odtwarzalną warstwę badań stojącą za artykułami badawczymi projektu. W odróżnieniu od kind scenariuszy dostęp do nich odbywa się przez generatory cargo run --example / --bin, które zapisują artefakty deterministyczne co do bajta (stałe ziarna, zapisana wersja silnika i skrót konfiguracji). Wszystkie są MODELLED (kalibracja syntetyczna lub na publicznych zbiorach danych) i niosą uczciwe etykiety walidacji — żadna nie jest certyfikacją.

flowchart TD
    gen["study generators<br/>examples/ · bin/ (cargo run) → byte-deterministic artifacts"]

    subgraph timing["Timing integrity"]
      tplm["tpl<br/>conditional Timing Protection Level: k-σ floor · van-Loan coast · CUSUM"]
    end
    subgraph resilm["Resilience scoring & decision-instability"]
      arch["resilience/arch · score<br/>architecture model + RPCF-aligned scoring"]
      stats["resilience/stats<br/>Dirichlet · Kendall-τ · flip-rate · bootstrap"]
      div["resilience/diversity · timeline<br/>Hill-N2 common-mode collapse · KPIs"]
      study["resilience/study · report · panel<br/>instability study + integrity-hashed assurance report"]
    end
    subgraph aiml["RF-impairment optimism-gap (Machine learning)"]
      ie["impairment_eval<br/>labelled synthetic corpus · ROC/AUC harness"]
      is["impairment_study<br/>13-detector panel · scaling laws · LOO predictor"]
      ml["impairment_ml<br/>logistic-regression + one-hidden-layer MLP"]
      es["eval_stats<br/>bootstrap CI · DeLong · Spearman · ridge"]
      sdrm["sdr · realdata<br/>IQ/IF → E/P/L taps → SQM + ingest adapters"]
    end
    subgraph trade["Quantum-vs-classical"]
      cross["crossover<br/>resilience crossover map under parameter uncertainty"]
      qt["quantum_trade<br/>measured-ADEV holdover benefit vs classical"]
    end

    gen --> timing
    gen --> resilm
    gen --> aiml
    gen --> trade
    tplm -. cross-checked vs .-> recursion["holdover · clock_state · allan"]
    is --> ie
    is --> ml
    is --> es
    ie -. real recordings via .-> sdrm
    cross -. composes .-> packs2["clock · inertial packs"]
  • tpl — warunkowy poziom ochrony czasu (TPL): ograniczony przez holdover bezwarunkowy względem wykrycia próg dla niewykrytego błędu czasu przy spoofingu, składający próg monitora k-σ, wariancję dryfu van Loana w opóźnieniu detekcji i czas do alarmu CUSUM (cumulative sum); skalibrowany na rzeczywistym zarejestrowanym spoofingu (JammerTest 2024). Nie istnieje skończona granica bezwarunkowa — TPL jest warunkowy względem tego, że niezależna kontrola krzyżowa wykryje atak.
  • resilience/ — silnik oceny odporności PNT zgodny z ramami (kategorie DHS (Department of Homeland Security) RPCF (Resilient PNT Conformance Framework)) oraz badanie niestabilności decyzji: sympleks wag Dirichleta, niestabilność rang Kendalla-τ, częstość zmiany zwycięzcy top-1 i zapaść różnorodności wspólnego trybu (Hill-N2), ze skrótem integralności raportu zapewnienia i 35 ręcznie wyprowadzonymi testami wyroczni. Zob. RESILIENCE-CROSSWALK. Syntetyczne architektury dostosowane do RPCF v2.0 — samoocena, a nie certyfikacja.
  • impairment_eval / impairment_study / impairment_ml / eval_stats — badanie luki optymizmu przy zaburzeniach RF: oznaczony syntetyczny korpus i niezależny od detektora zestaw ROC/AUC (ROC: charakterystyka operacyjna odbiornika; AUC: pole pod krzywą), 13-detektorowy panel (energia/AGC/SQM/parzystość (AGC: automatyczna regulacja wzmocnienia; SQM: monitorowanie jakości sygnału) oraz detektory regresji logistycznej z ziarnem i MLP (MLP: perceptron wielowarstwowy) z jedną warstwą ukrytą), prawa skalowania w rozkładzie i poza nim z hipotezą zerową permutacyjną oraz predyktor leave-one-out degradacji poza rozkładem. Metryki oceny są sprawdzone co do bitu względem scikit-learn.
  • sdr / realdata — tor wejściowy odbiornika programowego (surowe IQ/IF (IQ: synfazowe/kwadraturowe; IF: częstotliwość pośrednia) → odczepy korelatora wczesny/bieżący/późny → SQM) oraz adaptery wczytywania (RINEX, u-blox UBX, GnssLogger, JammerTest, Yunnan, SatGrid), które pozwalają tym samym detektorom działać na nagraniach dostarczonych lokalnie; do repozytorium nie są zatwierdzane żadne zbiory danych.
  • crossover / quantum_trade — mapa przecięcia odporności kwantowej i klasycznej przy niepewności parametrów oraz kompromis korzyści z holdover według zmierzonego ADEV; numeryczne jądra kompromisu są sprawdzone względem scipy.

1c. Warstwy integralności, GNSS, głębokiego kosmosu, Księżyca i misji#

Pozostałe dziedziny podłączają się do tego samego rozdzielnika api i ponownie używają wspólnego rdzenia, układów odniesienia i geometrii. Wszystko tutaj jest MODELLED, chyba że wiersz macierzy verification powołuje się na zewnętrzną wyrocznię (jądro RAIM względem SciPy, SBAS względem forka RTKLIB (otwartoźródłowej biblioteki pozycjonowania kinematycznego w czasie rzeczywistym), jądro DOP (rozmycie dokładności) z gnss_lib_py, ocena OPS-SAT, jądro poziomu ochrony księżycowego ARAIM, spójność efemeryd księżycowych między dostawcami) — reszta zestawu księżycowego i demonstrator kwantowy są modelowane, ilustracyjne, oparte na źródłach publicznych i nie niosą żadnego twierdzenia o TRL (poziomie gotowości technologicznej) / dziedzictwie / poparciu agencji.

flowchart TD
    api["api.rs — run_toml / run_scenario · 92 kinds"]

    subgraph gnss["Integrity & GNSS measurement"]
      raim["raim — RAIM/ARAIM · HPL/VPL (kernel vs SciPy)"]
      sbas["sbas — DO-229E PL · L1/L5 (vs RTKLIB fork)"]
      meas["gnss_sim · ionex · pvt · glonass — pseudorange · iono maps · single-point PVT"]
      imp["integrity_impact · frugal — miss→integrity · cost-per-coverage"]
    end

    subgraph deep["Deep-space & Mars"]
      core2["body · ephem_provider · clock_state — multi-body · ephemeris seam · onboard clock"]
      radio["radiometric · ccsds_tdm — light-time · Doppler/range · Δ-DOR · TDM"]
      mars["deepspace_od · mars_frame · mars_atmos · mars_pnt · linkbudget · gse_sim — SRIF OD · Mars frame · relay-PNT · GSE sim"]
    end

    subgraph lunar["Lunar PNT suite (evidence tier per piece in the matrix · illustrative public-source)"]
      cis["cr3bp · lunar · lunar_frame · lunar_od — CR3BP · halo/NRHO · cislunar ARAIM · MCI↔MCMF"]
      suite["lunar_time · lunar_vlbi · lunar_combination · lunar_frame_realise — LTC time · VLBI · joint OD+clock · frame realisation"]
      suite2["lunar_service · lunar_dpnt · lunar_interop — Moonlight service-volume · differential PNT · LunaNet/IOAG interop"]
    end

    subgraph quantum["Quantum-Enabled PNT demonstrator (MODELLED)"]
      qd["quantum_devices · quantum_faults · quantum_nav_od — device error models · fault catalogue · GNSS-free OD"]
      qt["qtrade · timetransfer_chain · representativeness — unified trade · time-transfer chain · gaps-to-flight ledger"]
    end

    subgraph mission["Mission analysis, environment & interop"]
      ma["launch · reentry · eo_payload · attitude_budget · passes · linkbudget — first-order budgets"]
      env["space_weather — Jacchia-71 density"]
      iop["rinex · rinex_obs · sp3 · oem · omm · ccsds_tdm · space_packet · interchange · permalink — interop formats + KIF"]
      ver["verification — requirement→module→test→oracle→status matrix"]
    end

    api --> gnss & deep & lunar & quantum & mission
    raim -. reuses .-> meas
    suite -. reuses validated DOP / SBAS kernels .-> gnss
    qt -. rides validated kernels (scipy / sklearn) .-> quantum

1d. LEO PNT, widmo, Układ Słoneczny, synchronizacja sieciowa, kampanie i wyniki#

Najnowsze warstwy mają ten sam wzorzec: każda to jeden lub więcej scenariuszy kind rozsyłanych z api, zbudowanych na wspólnym rdzeniu i MODELLED, chyba że wiersz macierzy wskazuje zewnętrzną wyrocznię.

flowchart TD
    api["api.rs — run_toml / run_scenario"]

    subgraph leo["LEO PNT (low Earth orbit positioning, navigation and timing)"]
      lsig["leo_signal — signal design: acquisition, code tracking, GNSS compatibility, band trade"]
      lpass["leo_pass · leo_link (geometry · antenna · itu · iono · energy · spoof · presets) — pass and per-band link budget"]
      lnav["leo_navmsg (elements · fit · codec · sisre · services · text) — broadcast ephemeris and clock message"]
      lfus["leo_fusion (doppler · joint_pvt · ppp · ntn · timing · polar · presets) — fused MEO+LEO PVT · PPP · 5G NTN"]
      lchain["leo_pnt_chain — one system end to end, each stage handing its output to the next"]
    end

    subgraph rf["Spectrum"]
      spec["spectrum · navsignal — L-band (and UHF/S/C) PSD waterfall under a jammer timeline"]
      sig["sigmf — SigMF recording read/write · Welch PSD of complex IQ"]
    end

    subgraph sky["Solar system & constellations"]
      ss["solar_system · body · ephem · ephem_provider — bodies, constants, light time at one epoch"]
      bp["body_pnt — positioning around any body with a local constellation"]
      cd["constellation · walker — Walker delta/star, multi-shell, published GNSS slots, coverage/DOP maps"]
    end

    subgraph net["Network timing"]
      tel["telecom_timing — time error, MTIE, TDEV vs ITU-T masks"]
      slot["slot_timing — seconds until a free-running clock leaves a slot guard"]
    end

    subgraph comp["Composition & outputs"]
      camp["campaign · study · suite — chained phases, sweeps, Monte Carlo, shared conditions"]
      rep["advanced_report — report.html + report.json with a reproducibility record"]
      anim["animation — SVG / HTML / frame animations"]
      iop["interop (czml · kml · geojson · stk) · sigmf — exchange files for --export"]
    end

    api --> leo & rf & sky & net & comp
    lchain -. composes .-> lsig & lpass & lnav & lfus
    lsig -. SSC chain .-> spec
    lfus -. GNSS presets .-> cd
    bp -. reuses .-> ss
    camp -. runs other kinds through .-> api

Szczegóły każdego rodzaju są w LEO-PNT, LEO-SIGNAL, LEO-PASS, LEO-NAVMSG, LEO-PNT-FUSION, SPECTRUM, CONSTELLATION-DESIGN, TELECOM-TIMING, SLOT-TIMING, CAMPAIGNS, REPORTS, ANIMATION i INTEROP.

1e. Warstwy zaufania do odbiornika, dowodów, telemetrii, szkolenia i compliance (0,35)#

Te warstwy czytają własny dziennik odbiornika lub zapisują pliki dla innych narzędzi; żadna z nich nie syntezuje ani nie nadaje sygnału radiowego. Leżą obok api, a nie pod rodzajami scenariuszy, z wyjątkiem samego receiver-trust, który jest rodzajem scenariusza. Wszystkie są MODELLED, chyba że wiersz macierzy wskazuje zewnętrzną wyrocznię, a wyniki morskie są wyłącznie doradcze, nie jest to sprzęt nawigacyjny z zatwierdzeniem typu.

Moduł Co robi Opisany w
receiver_trust ocenia dziennik odbiornika epoka po epoce monitorami zaufania; platforma statku dodaje monitory morskie i wskaźnik 0-100 z uzasadnieniami RECEIVER-TRUST, MARITIME-TRUST
receiver_trust::live ta sama ocena na strumieniu w miarę jego nadchodzenia (stdin, dopisywany plik, TCP lub UDP), zdanie $PKSHT i opcjonalna bramka; LiveEngine to całość tego bez wejścia i wyjścia MARITIME-TRUST
evidence podpisany, powiązany łańcuchem skrótów pakiet okna dziennika, jego konfiguracji i wyniku silnika, weryfikowalny offline; opcjonalny token znacznika czasu RFC 3161 EVIDENCE-PACKS
telemetry strumień zaufania jako metryki Prometheus, zdarzenia syslog (CEF lub LEEF) i opcjonalnie OpenTelemetry (funkcja otlp, domyślnie wyłączona) TRUST-TELEMETRY
nmea_synth syntetyczny most NMEA 0183 ze skryptowanymi zdarzeniami zagłuszania (jamming), odciągania (drag-off), spoofingu czasu i odtwarzania oraz dziennikiem instruktora, do szkolenia załóg (wyłącznie tekst) NMEA-TRAINING
interference_map zbiorcze mapy pogorszonej nawigacji na podstawie otwarcie licencjonowanych raportów statków powietrznych i okrętów oraz narażenie trasy na nie; wyłącznie pliki lokalne INTERFERENCE-MAP
osnma weryfikator po stronie odbiornika dla Galileo OSNMA: odczytuje strony I/NAV (zwykłe strony, wektorowy CSV, strumień UBX), sprawdza podpisany klucz, łańcuch TESLA i kody MAC oraz zgłasza dla każdego satelity, czy dane nawigacyjne są uwierzytelnione; osnma::cli::verify_report to jedna ścieżka wspólna dla wiersza poleceń, Pythona i WebAssembly; wyłącznie status uwierzytelnienia, nie usługa integralności OSNMA
compliance odwzorowuje wyniki Kshana na publiczne ramy odporności i wypełnia to odwzorowanie na podstawie dokumentów wyników; run_from_text i assess_texts przyjmują teksty, nie ścieżki compliance/
interop::testbench ruch pojazdu i zdarzenia scenariusza jako CSV ruchu, NMEA, tekst punktów trasy i pliki zdarzeń dla laboratoryjnego symulatora GNSS; żaden sygnał nie jest zapisywany TEST-BENCH

Integracje dla łodzi (wtyczka Signal K, tryb bramki OpenCPN i kompilacja referencyjna) wywołują narzędzie wiersza poleceń; zob. MARINE-INTEGRATIONS.

2. Potok silnika (dla każdego przebiegu)#

Każdy przebieg przeprowadza pojedynczy model czujnika przez siatkę czasu, dyscyplinując go, gdy GNSS jest nominalny, i pozwalając mu swobodnie dryfować (holdover / nawigacja zliczeniowa) podczas przerwy.

flowchart TD
    A["for each time step t"] --> B{"i &gt; 0 ?"}
    B -- yes --> C["model.step(dt, rng)<br/>evolve noise state"]
    B -- no --> D
    C --> D{"GNSS state at t ?"}
    D -- "Nominal" --> E["discipline to truth<br/>(estimator sync / dead-reckoning reset)<br/>error = 0"]
    D -- "Denied/Degraded" --> F["estimator predicts;<br/>error = truth − prediction"]
    E --> G["record Sample(t, error, gnss)"]
    F --> G
    G --> A
    A -. after loop .-> H["score(series, spec)<br/>→ figures of merit"]
    H --> I["assemble Result<br/>(specs · series · FoM · scenario hash)"]

Scenariusz uruchamia ten potok dwukrotnie — raz dla czujnika kwantowego, raz dla klasycznego — z niezależnymi ziarnami (seed) (classical_seed = seed + 0x9e3779b97f4a7c15), tak aby obie realizacje szumu były nieskorelowane.

3. Interfejs modelu błędu (punkt rozszerzenia)#

Każdy czujnik implementuje ten sam pomysł: obiekt ze stanem, którego step() przesuwa jego wewnętrzny błąd stochastyczny, a skumulowany stan jest odczytywany w każdym takcie. Zegary udostępniają skumulowaną fazę; akcelerometry — dwukrotnie scałkowaną pozycję; łącza — fluktuację dla każdego pomiaru.

classDiagram
    class ErrorModel {
      <<trait>>
      +step(dt, rng)
      +spec() ModelSpec
    }
    class ClockModel {
      +y0, q_wf, q_rw, drift, flicker
      +phase() s
      +det_freq()  +drift_rate()
    }
    class AccelModel {
      +bias, q_va, gyro_bias, q_arw
      +pos() m  +theta() rad
      +reset()
    }
    class TimeTransferLink {
      +sigma_j
      +sample(rng) s
    }
    ErrorModel <|.. ClockModel
    ClockModel : white FM + random-walk FM + flicker FM + aging
    AccelModel : accel bias + VRW + gyro bias + ARW (gravity-tilt)
    TimeTransferLink : white timing jitter

ModelSpec { id, kind, provenance, params } trafia do wyniku, dzięki czemu każda wartość w wynikach jest możliwa do prześledzenia do opublikowanego źródła wskazanego w provenance.

Obok analitycznego HoldoverEstimator pakiet zegara uruchamia dwustanowy (faza, częstotliwość) filtr Kalmana (KalmanClock), którego szum procesu odpowiada modelowi prawdziwemu. Podczas dryfu w czasie przerwy wariancja jego błędu fazy rośnie dokładnie do q_wf·T + q_rw·T³/3 — analitycznej zależności holdover — a jego bieżąca granica 1-σ służy do wyznaczenia wskaźnika jakości Integralność (odsetek próbek z przerwy, dla których błąd mieści się w granicy k-σ).

4. Dyspozytor (CLI i wiązania)#

api::run_toml(src) jest jedynym punktem wejścia: odczytuje najwyższego poziomu kind, deserializuje pasujący scenariusz, uruchamia pakiet i zwraca { json, svg, summary, csv } (csv występuje tylko dla rodzajów, które publikują tabelę odtwarzalności). CLI zapisuje je do plików, wraz z raportem (report.html, report.json) i wszelkimi wynikami --export / --animate; wiązania Pythona i WebAssembly zwracają je hostowi. Jeden dyspozytor, bez rozjazdów.

flowchart TD
    F["api::run_toml(src) · run_scenario(src)"] --> K{"ScenarioKind::classify<br/>typed · exhaustive · 92 kinds<br/>(absent kind → clock; unknown kind → InvalidInput)"}
    K --> G1["Timing<br/>clock · timetransfer · quantum-time-transfer · telecom-timing · slot-timing"]
    K --> G2["Inertial & fusion<br/>inertial · hybrid · hybrid-ukf · fusion · gnss-ins · quantum-gnss-free-nav · ins-trn-coast · hybrid-optical-rf"]
    K --> G3["Orbit, geometry & positioning<br/>orbit · ephemeris · constellation-design · gnss-sim · pvt"]
    K --> G4["Integrity<br/>integrity · lunar-integrity · araim-reference-check"]
    K --> G5["Resilience & spectrum<br/>jamming · spoof · spoof-detect · quantum-anomaly-detect · tracking-loop · spectrum · conflict-resilience"]
    K --> G6["Alt-PNT (GPS-denied)<br/>gravity-map · terrain-nav · terrain-slam · combined-altpnt"]
    K --> G7["LEO PNT<br/>leo-signal · leo-pass · leo-navmsg · leo-pvt · leo-ppp · ntn-positioning · leo-pnt-chain"]
    K --> G8["Lunar / cislunar suite (MODELLED)<br/>lunar-time-offset · lunar-time-budget · lunar-vlbi · lunar-vlbi-fim · lunar-joint-od-clock<br/>lunar-frame-realisation · lunar-frame-campaign · lunar-llr-datum · realtime-frame-eop<br/>moonlight-service-volume · lunar-differential-pnt · lunar-interop-export · lunar-beacon<br/>lunar-jamming · lunar-attack-surface · earth-gnss-lunar · cislunar-observability · cislunar-arc-recovery"]
    K --> G9["Deep space & solar system<br/>mars-pnt · solar-system · body-pnt"]
    K --> G10["Machine learning & trade<br/>impairment-eval · quantum-trade"]
    K --> G11["Mission analysis & environment<br/>launch-window · reentry · eo-coverage · attitude-budget · aperture-duty-cycle<br/>passes · link-budget · space-packet · space-weather"]
    K --> G12["Trade studies, campaigns & interop<br/>sweep · sweep-nd · campaign · oem-interop"]
    G1 & G2 & G3 & G4 & G5 & G6 & G7 & G8 & G9 & G10 & G11 & G12 --> W["RunOutput { json, svg, summary, csv }<br/>+ SHA-256 scenario_hash"]

Dyspozytor działa na typowanym enum ScenarioKind, dopasowywanym wyczerpująco (zob. następny podrozdział), więc dodanie pakietu jest zmianą sprawdzaną w czasie kompilacji. Brak kind powoduje przejście do pakietu clock, dzięki czemu istniejące scenariusze jednego rodzaju deserializują się bez zmian (serde ignoruje pole kind w każdej strukturze scenariusza). Nierozpoznany kind zostaje odrzucony z KshanaError::InvalidInput, który wskazuje najbliższy wbudowany rodzaj, gdy nazwa wygląda na literówkę.

Typowane wywoływanie i uporządkowane API#

Dyspozytor działa na typowanym enum ScenarioKind, a nie na dopasowywaniu surowego łańcucha: ScenarioKind::classify(src) rozstrzyga pole kind do wariantu, a dyspozytor dopasowuje go wyczerpująco — dodanie pakietu jest zmianą sprawdzaną w czasie kompilacji, a nie literówką w łańcuchu. Obok zwracającego łańcuch run_toml (zachowanego dla CLI i istniejących wiązań) działają dwie typowane powierzchnie:

  • run_scenario(src) -> Result<RunOutput, KshanaError> — typowane wejście z uporządkowaną taksonomią błędów (InvalidInput, NonConvergence, Unsupported, IoError). Każdy błąd niesie stabilny kind_tag(), dzięki czemu wywołujący może rozgałęziać się według kategorii niepowodzenia zamiast analizować komunikat. Wiązania udostępniają to jako error_kind(toml).
  • list_scenario_kinds() -> Vec<ScenarioMeta> (oraz list_scenario_kinds_json(), udostępniane we wiązaniach jako list_kinds()) — introspekcja programowa: nazwa, opis oraz pola wymagane i opcjonalne każdego rodzaju, dla UI (interfejsu użytkownika) i autouzupełniania w notebookach.

Rozszerzanie Kshana o zewnętrzny pakiet#

Pakiet zewnętrzny implementuje dwa niewielkie, stabilne semantycznie (semver) traity z api:

use kshana::api::{ExternalPack, KshanaError, RunOutput, Scenario, ScenarioMeta};

struct MyPack {
    threshold: f64, // the deserialized scenario fields
}

impl Scenario for MyPack {
    fn run(&self) -> Result<RunOutput, KshanaError> {
        // Run the model, then build the unified output envelope.
        Ok(RunOutput {
            json: format!("{{\"threshold\": {}}}", self.threshold),
            svg: String::from("<svg xmlns=\"http://www.w3.org/2000/svg\"/>"),
            summary: format!("my-pack | threshold {}", self.threshold),
            csv: None,
        })
    }
}

impl ExternalPack for MyPack {
    fn kind_name(&self) -> &'static str {
        "my-pack"
    }
    fn meta(&self) -> ScenarioMeta {
        ScenarioMeta {
            name: "my-pack",
            description: "An out-of-tree example pack.",
            required_fields: &["threshold"],
            optional_fields: &[],
        }
    }
}

ExternalPack ma też domyślną metodę register_into(&mut PackRegistry), która nic nie robi, chyba że pakiet włączy się w punkt dyspozycji rejestru w src/registry.rs. Wbudowany pakiet jamming jest podłączony przez Scenario jako przykład roboczy; pakiety spoza drzewa stosują ten sam kontrakt bez rozwidlania rdzenia (odzwierciedlając punkt rozszerzenia ErrorModel z §3, z którego korzysta prywatna nakładka odporności).

Kshana ma zatem dwa stabilne punkty rozszerzenia — dodanie czujnika przez implementację ErrorModel (§3) albo dodanie całego rodzaju scenariusza przez implementację Scenario + ExternalPack — oba stabilne semantycznie (semver), żaden nie wymaga rozwidlenia rdzenia:

classDiagram
    class ErrorModel {
      <<trait — sensor seam>>
      +step(dt, rng)
      +spec() ModelSpec
    }
    class Scenario {
      <<trait — pack seam>>
      +run() RunOutput
    }
    class ExternalPack {
      <<trait : Scenario>>
      +kind_name() str
      +meta() ScenarioMeta
    }
    ErrorModel <|.. ClockModel
    ErrorModel <|.. AccelModel
    ErrorModel <|.. TimeTransferLink
    Scenario <|.. ExternalPack
    Scenario <|.. JammingPack : worked example
    ExternalPack <|.. ThirdPartyPack : out-of-tree, no core fork

5. Hybrydowy kamień węgielny#

Pakiet hybrydowy uruchamia zestaw (jeden zegar i jeden czujnik inercyjny) i wymaga, aby zarówno czas, jak i pozycja pozostawały w specyfikacji; pnt_holdover to czas do przekroczenia przez którekolwiek z nich. Opcjonalnie optyczne łącze międzysatelitarne resynchronizuje zegar w czasie przerwy — wyłącznie wspomaganie czasu; pozycja nie jest resynchronizowana, ponieważ transfer czasu daje czas, a nie pozycję. To właśnie wyodrębnia czujnik inercyjny jako czynnik ograniczający.

flowchart LR
    subgraph suite["PNT suite (per technology)"]
      clk["clock → timing error"]
      acc["inertial sensor → position error"]
      isl["optical ISL<br/>re-sync clock at interval"] -. aids .-> clk
    end
    clk --> J["both within spec ?"]
    acc --> J
    J --> P["pnt_holdover = first breach<br/>(timing OR position)"]

6. Dostępność GNSS wyprowadzona z geometrii#

orbit.rs to deterministyczna warstwa geometrii bez zależności. Propagator to albo analityczna keplerowska Orbit (dwa ciała, opcjonalnie wiekowe J2), albo pełny propagator Sgp4 zbudowany z kompletnego zestawu elementów dwuwierszowych; generator Walker-delta tworzy syntetyczne konstelacje, a widoczność w linii prostej = przesłonięcie przez Ziemię + maska elewacji. Liczba widocznych satelitów odpowiada stanowi GNSS (≥4 = nominalny, 1–3 = pogorszony, 0 = odmówiony), a build_timeline zamienia to na oś czasu dostępności, która napędza standardowy przebieg holdover zegara. Dostępność jest więc wyprowadzona z geometrii, a nie tworzona ręcznie, podczas gdy przebieg, estymator i ocena pozostają bez zmian.

Konstelacja podana jako pełne TLE jest propagowana modelem SGP4/SDP4 w sgp4.rs (sprawdzonym względem wektorów AIAA (American Institute of Aeronautics and Astronautics) 2006-6753); elementy tylko z linii 2 zachowują analityczną ścieżkę dwóch ciał. Oba rodzaje można mieszać w jednym bloku konstelacji.

flowchart LR
    U["user orbit"] --> V
    C["Walker constellation"] --> V["visible_count(t)<br/>occultation + mask"]
    V --> S["gnss_state: ≥4 / 1–3 / 0"]
    S --> T["build_timeline → GnssTimeline"]
    T --> R["run_orbit_clock → clock holdover"]

7. Wiązania#

Rdzeń kompiluje się bez zmian do kodu natywnego, rozszerzenia Pythona i WebAssembly. Moduły Python (python.rs, PyO3 abi3) i WebAssembly (wasm.rs, wasm-bindgen) są opcjonalnymi zależnościami włączanymi funkcjami (--features python / --features wasm): domyślna kompilacja i zestaw testów nigdy ich nie kompilują, natomiast bramka audytu zależności (cargo deny --all-features) sprawdza ich drzewa zależności, ponieważ te biblioteki trafiają do pakietu wheel i pakietu npm. Oba wywołują api::run_toml, więc każda powierzchnia zwraca identyczne wyniki. Moduł WebAssembly obsługuje przeglądarkowy plac zabaw w web/ i eksportuje trzynaście funkcji: run, run_all (jeden przebieg silnika zwracający razem wynik, wykres, podsumowanie i tabelę), chart_svg, summary, table_csv, list_kinds, error_kind, version, kodek udostępnialnych adresów URL (URL: adres internetowy) encode_permalink / decode_permalink oraz trzy eksportery export_sp3 / export_omm / export_oem, które obsługują menu eksportu placu zabaw. Dwa dalsze punkty wejścia docierają do tego samego api: serwer MCP (Model Context Protocol) (mcp/kshana-mcp, wyłączona z przestrzeni roboczej biblioteka rmcp udostępniająca piętnaście narzędzi — run_scenario, list_scenario_kinds, validate_scenario, list_example_scenarios, get_example_scenario, report_scenario, animate_scenario, list_export_formats, export_interop, import_route, export_sp3, export_omm, export_oem, export_table_csv, assess_receiver_log; oba narzędzia przykładowe odczytują dołączone scenariusze przez domyślnie wyłączoną funkcję biblioteki bundled-scenarios, którą włącza tylko ten serwer) oraz wtyczka do JetBrains IDE (zintegrowane środowisko programistyczne) (ide/jetbrains, projekt w Kotlinie, który wywołuje CLI kshana zamiast linkować bibliotekę).

flowchart LR
    cli["CLI · main.rs<br/>native binary"] --> api
    py["Python · python.rs (PyO3 abi3)<br/>RunOutput class + run · run_full · run_typed · scenario_kinds · list_kinds · validate_toml · error_kind · version"] --> api
    wasm["WebAssembly · wasm.rs (wasm-bindgen)<br/>run · run_all · chart_svg · summary · table_csv · list_kinds · error_kind · version · encode/decode_permalink<br/>export_sp3 · export_omm · export_oem"] --> api
    mcp["MCP server · mcp/kshana-mcp (rmcp)<br/>tools: run_scenario · list_scenario_kinds · validate_scenario<br/>list_example_scenarios · get_example_scenario<br/>report_scenario · animate_scenario<br/>list_export_formats · export_interop · import_route<br/>export_sp3 · export_omm · export_oem · export_table_csv"] --> api
    ide["JetBrains plugin · ide/jetbrains (Kotlin)"] -- spawns process --> cli
    api["api::run_toml / run_scenario / list_scenario_kinds"] --> out["identical { json, svg, summary } on every surface"]

Włączanie funkcjami: Python i WASM to --features python / --features wasm; dołączona tabela scenariuszy to --features bundled-scenarios (jedyne jej użycie przez serwer MCP); serwer MCP i kontrole krzyżowe xval/* to biblioteki WYŁĄCZONE z przestrzeni roboczej; wtyczka IDE niczego nie linkuje — uruchamia CLI.

8. Determinizm i odtwarzalność#

  • Cała losowość przepływa przez jeden zasiany ChaCha8Rng na przebieg; kolejność kroków jest stała, więc (scenario, seed, engine version) → identical bits.
  • Wynik zawiera scenario_hash SHA-256 (SHA: Secure Hash Algorithm); scripts/check-reproducible.sh uruchamia scenariusz referencyjny dwukrotnie i stwierdza, że wynik jest identyczny co do bajta.
  • Ten sam silnik kompiluje się do kodu natywnego, rozszerzenia Pythona i wasm32-unknown-unknown na potrzeby przebiegów w przeglądarce, dających te same liczby.

9. Struktura odroczona / przyszła#

Warstwy astrodynamiki, fuzji i alt-PNT z §1a — pełny propagator SGP4/SDP4, numeryczny propagator Cowella z siedmioma zaburzeniami w modelu sił i dwoma adaptacyjnymi integratorami, projektowanie manewrów i trajektorii, wyznaczanie orbity, estymatory GNSS/INS o 15, 8 i 17 stanach, sprzężony filtr zegara i pozycji oraz dopasowanie do map grawitacyjnych — zostały dostarczone, wraz ze wskaźnikiem jakości bezpieczeństwa z aktywnym demonstratorem spoofingu, rzeczywistą geometrią TLE/wielu konstelacji, pasmami Monte Carlo, przeglądami badań kompromisowych, drukowalnym raportem HTML (HyperText Markup Language) z jego maszynowo czytelnym bliźniakiem oraz przepływami pracy wydań, publikacji, wheels i pages.

Kilka możliwości wymienianych tu kiedyś jako przyszłe prace zostało od tego czasu dostarczonych i jest opisanych powyżej lub w VALIDATION: pełna nutacja IAU 2000A i wolna od równonocy redukcja CIO GCRS↔ITRS / ITRF (International Terrestrial Reference Frame) (sprawdzona co do bitu względem SOFA/ERFA (SOFA: Standards of Fundamental Astronomy; ERFA: Essential Routines for Fundamental Astronomy)), geopotencjał EGM2008 (Earth Gravitational Model 2008) do stopnia i rzędu 70, składnik Lense’a–Thirringa (unoszenie układu inercjalnego), pływy stałe, oceaniczne i atmosferyczne, walidacja krzyżowa efemeryd klasy DE (DE440/ANISE (DE440: Development Ephemeris 440; ANISE: Attitude, Navigation, Instrument, Spacecraft, Ephemeris — czysto rustowy zestaw narzędzi geometrii planetarnej)), zewnętrzna walidacja krzyżowa Orekit 12,2 numerycznego propagatora Cowella (0,08 m w ciągu 24 h) oraz wsadowego i sekwencyjnego wyznaczania orbity, a także 17-stanowy ściśle sprzężony nawigator udostępniony jako rodzaj scenariusza hybrid-ukf.

Pozostałe prace następcze są śledzone w CHANGELOG [Unreleased], a plan dla poszczególnych możliwości w CAPABILITY: zewnętrzna wartość wyroczni dla ewaluatora wysokiego stopnia EGM (Earth Gravitational Model) dokładnie na osi biegunowej oraz czyste względem pyshtools porównanie w pobliżu bieguna (ewaluator do stopnia 2190 i jego ładowarka .gfc w czasie działania są dostarczone, MODELLED; zob. xval/high-degree-gravity/), zmienny w czasie czynnik pogody kosmicznej dla opcjonalnego poziomu gęstości oporu NRLMSISE-00 (NRLMSISE: Naval Research Laboratory Mass Spectrometer and Incoherent Scatter Radar Extended atmosphere model) (domyślną gęstością oporu jest statyczny model wykładniczy, a gęstość Jacchia-71 rodzaju space-weather jest scharakteryzowana względem NRLMSISE-00, ale przez niego nie zastąpiona), zewnętrzna kontrola opcjonalnego cienia z pociemnieniem brzegowym tarczy Słońca, ścisłe sprzężenie GNSS/INS z fazą nośnej oraz rzeczywista mapa grawitacyjna EGM2008/EIGEN (EIGEN: European Improved Gravity model of the Earth by New techniques) dla dopasowania alt-PNT.

Prywatne repozytorium nakładki zawiera głębię odporności objętą ograniczeniami eksportowymi; podłącza się przez ten sam interfejs ErrorModel (i kontrakt ExternalPack z §4) bez zmiany publicznego silnika.