Konekäännös, jota äidinkielinen puhuja ei ole tarkistanut. Viitteenä on englanninkielinen versio.

ProjektiMuokkaa GitHubissaLähde: CHANGELOG.md

Muutosloki

Kaikki Kshanan merkittävät muutokset on dokumentoitu tässä.

Muoto perustuu Keep a Changelog -ohjeeseen, ja tämä projekti noudattaa Semantic Versioning -versiointia. Kun projekti on vielä ennen versiota 1.0, julkinen skenaario- ja tulosskeema voi yhä muuttua; yhteensopivuutta rikkovat muutokset mainitaan erikseen.

Julkaisematon#

[0.40.0] - 2026-10-29#

0,40 lisää Artemis-luokan tehtäväketjun ja sen kuusegmentin, todistemerkinnän jokaiseen ajon kirjoittamaan kuvaan ja taulukkoon, mitatun kellon sisäänluvun ja sovituksen, datakumppanin lähetyksen tarkistuksen, ADS-B- tai AIS-raporteista arvioidun lähetinalueen, 0,40-benchmarkin uusintakampanjan sekä komentorivin, raportit ja Studion seitsemällätoista kielellä englannin rinnalla (konedokumentit pysyvät englanniksi). Varmennusmatriisin rivimäärä kasvaa luvusta 388 lukuun 401: 176 VALIDATED (ennallaan), 221 MODELLED (oli 208) ja 4 PARTNER. Yhtäkään riviä ei ylennetty tilaan VALIDATED. Skenaariotyyppien määrä kasvaa luvusta 87 lukuun 92. Jokainen kynnys, jonka ennalta rekisteröity vertailu alitti, ilmoitetaan alla ja pysyy kiinnitettynä; yhtäkään ei höllennetty. Ohjeellinen ilmoitus on ennallaan: Kshana on ohjeellinen ohjelmisto, ei tyyppihyväksytty navigointilaite eikä sertifiointi; käyttäjä vastaa edelleen.

Tunnetut rajoitukset#

  • Muunkieliset ajot kestävät noin kaksi kertaa kauemmin, koska skenaario ajetaan kahdesti (kerran englanniksi konetiedostoja varten, kerran valitulla kielellä ihmistä varten).
  • Jotkin Studion lauseet kootaan osista, ja niistä voivat puuttua artikkelit kielissä, joissa on kieliopillinen sukupuoli.
  • Käännökset ovat konekäännöksiä, joita äidinkielinen puhuja ei ole tarkistanut; viitteenä on englanti.

Lisätty#

  • Seitsemäntoista kieltä englannin rinnalla moottorin ihmiselle tarkoitetulle tekstille sekä sivustolle ja Studiolle: nl, pl, pt-BR, pt-PT, fi, sv, da, nb, cs, uk, ru, de, fr, es, et, ja, zh-Hans (--lang, KSHANA_LANG, kieliasetusmuuttujat; lang kirjasto-, Python-, WebAssembly- ja MCP-kutsuissa). Komentorivin viestit ja virheet, ajojen yhteenvedot, kaaviotekstit, report.html, tyyppikuvaukset ja ohjeelliset ilmoitukset käännetään; konedokumentit (JSON, CSV, virhekoodit, varmennusmatriisi) pysyvät englanniksi, ja muunkielinen ajo suorittaa skenaarion kerran englanniksi konetiedostoja varten ja kerran valitulla kielellä ihmistä varten (docs/i18n.md). Käännökset ovat konekäännöksiä, joita äidinkieliset puhujat eivät ole tarkistaneet; englanti on viite; kunkin kielen REVIEW.md luettelee, mitä tarkistajan tulisi katsoa ensin, ja sivustosivut kantavat tämän kertovan huomautuksen. Tuomiosanat, todisteiden tasot ja ohjeellisen ilmoituksen laajuus (”ei tyyppihyväksytty”, ”ei sertifiointi”, ”käyttäjä vastaa edelleen”) säilytetään jokaisella kielellä.
  • kshana interference-map locate: arvioitu lähetinalue ADS-B- tai AIS-raporteista. Posteriori sille, missä heikentyneitä paikkaraportteja aiheuttava lähde voi olla (radion näköyhteys 4/3-maapallon säteellä, lähetinantennin korkeus ja teho marginalisoitu, vaikutuksen alaiset ilma-alukset vetävät ja vaikutuksen ulkopuoliset ilma-alukset, joilla on näköyhteys, työntävät vastaan), kirjoitettuna alueina tasoilla 50, 90 ja 95%, painopisteenä epävarmuusellipsineen (ei koskaan pelkkänä pisteenä), istuntoina ajassa (alku, loppu, kesto, vaikutuksen alainen pinta-ala, erilliset ilma-alukset julkaisuminimin yläpuolella), vuorokaudenaikaprofiilina ja tunteina päivässä, valinnaisesti moduulin geolocation TDOA-paikannuksen fuusiolla. Tulosteet: GeoJSON, JSON-yhteenveto, istunto-CSV ja SVG-kuva, kukin lisenssin, tekijänoikeusmerkinnän, menetelmätunnisteen, oletusten, rajoitusten ja todistemerkintänsä kanssa. Kirjasto interference_map::api::emitter_regions_from_*, Python ja WebAssembly interference_emitter_regions. MODELLED (kirjanpitorivi VM-bc70cb57; matriisissa on nyt 401 riviä, 176 VALIDATED, 221 MODELLED, 4 PARTNER); kalibroitu vain synteettisellä datalla, ja vertailu Jammertest 2025 -lähetinkohteisiin ennalta rekisteröitiin ja ajettiin kerran: ADS-B ja AIS molemmat NOT ASSESSABLE (liian vähän aikataulutettuja istuntoja avoimessa datassa), joten rivi pysyy MODELLED (docs/emitter-region/RESULTS.md). Neutraali sanamuoto, vain aggregaatti; lähetinalueiden julkaiseminen julkisessa observatoriossa pysyy pois päältä. Synteettinen esimerkki on kohteessa examples/emitter-region/ (docs/INTERFERENCE-MAP.md).
  • Mitatut kellolokit. src/clock_log.rs lukee mitatun kellolokin yhdeksi vaihesarjaksi: kahdeksan formaattia (RINEX clock, TimeLab, TICC, linuxptp ptp4l, phc2sys ja ts2phc, chronyn seuranta ja tilastot), kukin dokumentoitu osajoukko; kaikki sen ulkopuolinen hylätään virheellä, joka nimeää löydetyn. Sitä käyttävät telecom-timing ([series.clock_log]) ja kellotyyppi ([clock_log], joka lisää lohkon measured, jossa on lokin SHA-256 sekä päällekkäiset ADEV, TDEV ja MTIE), mukana toimitetun skenaarion clock-measured-log kanssa (docs/CLOCK-LOG-FORMATS.md). Verrattuna allantoolsiin todellisella julkisella datalla ennalta rekisteröityjä kynnyksiä vasten: ensimmäinen ajo alitti B1:n (5 / 11 tapausta, kaikki TICC-aikaleimat tallennettuina tyyppinä f64), B2:n, B3:n (7 / 24 tapausta) ja B4:n (otsikon versiota ei tarkistettu); korjausten jälkeen B1, B3 ja B4 täyttyvät ja B2 täyttyy yhtä MTIE-paria lukuun ottamatta, joka on kiinnitetty eikä ole moottorin vika (allantools 2024,6 poistaa keskitaajuuden ennen integrointia; sen vaihetilan MTIE:tä vasten moottori on samaa mieltä tarkkuudella 1e-10). Rivi pysyy MODELLED (tests/fixtures/clock_log_real/RESULTS.md).
  • Sovitun mitatun sarjan ajama holdover: kellotyypin [clock_fit] sovittaa mitatun sarjan kohinan ja ajaa holdoverin sen pohjalta (src/clock_fit.rs, mukana toimitettu skenaario clock-fitted-log). Ennalta rekisteröity vertailu: F1(b), F3 ja F4 täyttyivät; F1(a) (rekisteröidyn random-walk FM:n palauttaminen) NOT MET C3-tietueilla (rakenteellisesti tunnistamaton) ja kahdella kolmesta C4-tietueesta (random-walk FM imeytyi flicker FM:ään ja ajautumaan); F2 (kohinan tunnistus allantoolsia vasten) täyttyi yhdellätoista tietueella kahdestatoista ja D3:lla ja NOT MET D2:lla rekisteröidyllä tavalla (täyttyi vertailukelpoisesti). Kaikki alitukset on kiinnitetty (tests/clock_fit_known_noise.rs); lohko fitted ja sen ajama holdover pysyvät MODELLED (tests/fixtures/clock_fit/RESULTS.md).
  • Benchmarkin 0,40 uusintakampanja, ennalta rekisteröity omistajan kuittauksella ennen yhtäkään ajoa: A3 (EXPLORATORY, kansioklusteroitu bootstrap-AUC (agc_k_sigma), kvantiili (2,5 %) 0,8502, kun kynnys on 0,80), D3 (EXPLORATORY, kolme viidestä ilmaisimesta ylittää optimismiaukon 0,05 mittakaavassa 0,25), R3 (AUC 1,0) ja R4 (P_fa 0,0, P_d 1,0): kaikki MET, kaikki MODELLED. A2, D1 ja R1 ovat koskemattomia ja pysyvät NOT MET; mikään tässä ei sulje niitä (xval/bench/RESULTS-0.40.md, Bench).
  • kshana partner check <submission.toml>: tarkistaa datakumppanin lähetyksen formaatin ja metatiedot (kshana.partner-submission/1: laite, datatiedosto ja SHA-256, miten data on otettu, rivit (tila MODELLED), joita vasten sitä tarjotaan, lisenssi, lausumat) ja lukee datan moottorin omilla kellolokki- tai IMU-lukijoilla. Se ei pisteytä mitään eikä validoi mitään. Synteettinen esimerkki on kohteessa examples/partner-submission/.
  • docs/PARTNER-DATA.md: mitkä kirjanpitorivit tilassa MODELLED mitattu data voisi ylentää, sallitut formaatit, miten lähetys tarkistetaan, pisteytetään ennalta rekisteröityä kynnystä vasten ja hyvitetään, ja mitä PARTNER ja VALIDATED kumpikin tarkoittavat; luonnos yhteydenottoviestistä omistajalle tiedostossa docs/drafts/PARTNER-OUTREACH.md (mitään ei lähetetä).
  • Toiset kampanjat tyyppien gnss-ssv ja lunar-infrastructure kynnyksille, jotka jäivät täyttymättä, ajettu ennalta rekisteröidyn mukaisesti (xval/gnss-ssv/PREREGISTRATION-v2.md, xval/lunar-infra/PREREGISTRATION-v2.md; kuitattu ennen yhtäkään ajoa). Jokainen alkuperäinen alitus pysyy NOT MET ja kiinnitettynä. gnss-ssv: kontrolli toistaa ajon 1 solu solulta; viisi yhden lukeman ablaatiota tuo 2 niistä 78 alitetusta solusta toleranssin sisään (EXPLORATORY, ei kynnystä); uusi kynnys S7b (Classic IIR -paneeleihin sovitettu roll-off-ja-lattia-lähetysmuoto) on NOT MET IIR-M-paneeleilla tasolla 3,83–3,95 dB, kun kynnys on 3 dB; pidätetty julkaistun vastaanoton kampanja ei ajettu (lähdettä ei kiinnitetty) (xval/gnss-ssv/RESULTS-v2.md). lunar-infrastructure: uudet kynnykset C3a, C3b (havaintoraja noin 3e-9 m/s2), Q3a, Q3b (tarkka normaalijakauman kertymäfunktio poistaa eron 1.7e-6) ja G3'' täyttyvät omina kynnyksinään, ja G3' esimerkinomaisilla prioreilla täyttyy ja on merkitty EXPLORATORY (xval/lunar-infra/RESULTS-v2.md). Kaikki pysyy MODELLED. Uudet julkiset kohteet: kshana::lambda::{erfc_accurate, normal_cdf_accurate, bootstrap_success_rate_accurate}.
  • Todistemerkintä jokaiselle ajon kirjoittamalle kuvalle ja taulukolle. Tulos-JSON:ssa on avain evidence, kaavio-SVG:ssä metadata-elementti ja rivi kuvaajan alla, ja CSV-taulukossa kommenttirivit # evidence:: taso (VALIDATED, MODELLED tai PARTNER, rivien heikoin) ja niiden varmennusmatriisin rivien tunnisteet, joihin ajo perustuu. Rivit ja tilat luetaan matriisista, ei kirjoiteta käsin; tunnisteet ovat vakaita (VM- ja kahdeksan heksadesimaalinumeroa, uusi sarake ID tiedostossa docs/VERIFICATION-MATRIX.md, jäädytetty luettelo tiedostossa tests/fixtures/evidence_ids.txt). Myös kohteissa receiver-trust, jammertest score, iq acquire/sweep/track/monitor, reittialtistusraportissa ja allekirjoitetun tiedoston config.json sisällä jokaisessa todistepaketissa (config_version 1,1; kshana evidence verify raportoi tason; ennen 0,40 tehdyt paketit varmentuvat muuttumattomina). tests/evidence_labels_doc_sync.rs epäonnistuu, jos kuvalla ei ole merkintää, merkintä on ristiriidassa matriisin kanssa tai uutta tiedostonkirjoittajaa ei ole merkitty eikä lueteltu perusteluineen. Merkinnättömät tulosteet on lueteltu tiedostossa docs/SURFACES.md. Kolme README-demokaaviota piirrettiin uudelleen merkinnän kanssa (sen poistaminen palauttaa vanhat tavut; docs/revisions/STUDIO15-evidence-label-0.40.md). Mikään väite ei muuttunut.
  • Skenaariotyyppi mission-thread (scenarios/mission-thread-artemis-class.toml, docs/MISSION-THREAD.md): navigoinnin ja ajoituksen virhebudjetti vaiheiden ketjulle laukaisusta paluuseen, jokainen luku MODELLED ja jokainen syöte ilmoitettu. Kahdeksan vaihetyyppiä: launch-ascent, leo-rendezvous (Clohessy-Wiltshire-suhteellinen kovarianssi anturijaksojen yli, telakointi-ikkuna), tli-and-cruise (Cowell-propagointi äärellisen differenssin tilasiirtymämatriisilla, polttovirhe, tyypin gnss-ssv paikannukset ja maaseurantapäivitykset, Kuu valinnaisesta DE440-kernelin leikkeestä), entry (lentoratakulman sigma, käytävän todennäköisyys, huippuhidastuvuus käytävän reunoilla, laskeutumisjalanjälki) ja neljä kuutyyppiä. Siirtosäännöt (carry, inflate, reacquire), koordinaatisto- ja aika-asteikkomuunnokset omina budjettiriveinään, valinnainen maaverkkokerros, joka asettaa kunkin vaiheen seurantakäyttöasteen, marginaali ilmoitettuja vaatimuksia vasten ja heikoin lenkki. Esimerkki seuraa julkisen NASAn toimintakonseptin diasarjan järjestystä luvuilla, jotka ovat ILLUSTRATIVE: kokonaisvaltainen Artemis-luokan esimerkki 11 vaiheen yli, Maa- ja kuusegmentit. Kuunläheistä propagointia verrattiin julkiseen Artemis I -lentorataan 72 h kaaren yli kynnystä vasten, joka kiinnitettiin tiedostoon xval/mission-thread/PREREGISTRATION.md ennen ajoa: NOT MET (45,3 km ja 0,25 m/s, kun kynnykset ovat 5 km ja 0,05 m/s). Diagnostiikka paikantaa alituksen viiteen pieneen impulsiiviseen tapahtumaan viitteessä; niiden välillä voimamalli toistaa tuntitilat mediaanilla 0,4 m. Rivi pysyy MODELLED (xval/mission-thread/RESULTS.md).
  • Artemis-luokan tehtäväketjun kuusegmentti: neljä skenaariotyyppiä, jotka ovat kukin myös rajapinnan mission-thread vaihetyyppi (src/mission_thread/lunar/), kaikki MODELLED.
    • lunar-orbit-rendezvous: suhteellinen navigointi telakointiin ympyränmuotoisella napakiertoradalla (100 km) tai elliptisellä napakiertoradalla (100 km × 3000 km) (scenarios/lunar-orbit-rendezvous.toml, ...-elfo.toml). Erä-Gauss-Newton-estimaatti kaaren yli fuusioi aluskohtaisen absoluuttisen paikannuksen havainnollisesta LCNS-luokan relejoukosta, pysyvän signal-in-space-virheen (yhteinen molemmille aluksille ja riippumaton) ja ristilinkin etäisyyden, crate-paketin Kuun voimamallilla. Se raportoi suhteellisen paikan ja nopeuden kohteen paikallisissa akseleissa, paikannuksen saatavuuden, keskimääräisen normalisoidun estimointivirheen neliön odotusarvoonsa verrattuna, gravitaatioharmonisten sivuuttamisen hinnan, päätevaiheen suhteellisten anturimallien tulokset pelkän signaalien luvun rinnalla sekä eteenpäin siirretyn 6x6-kovarianssin.
    • lunar-descent: laskeutumishajonnan budjetti etelänapa-alueen kohteessa (scenarios/lunar-descent.toml; lunar-descent-lola.toml lukee LOLA DEM:n checkoutista): viiden tilan akselikohtainen inertiavirhemalli, AFS-paikannus (itsenäinen tai differentiaalinen käyttäen tyypin lunar-differential-pnt korjauslinkin jäännöstä), maastosuhteellinen paikannus (tyypin terrain-nav täsmäyttäjä synteettisellä reliefillään tai LOLA DEM:n täsmäytyksen Cramer-Rao-raja) ja Kuun aika ajoneuvon kellon kautta (lunar-time-offset). Se raportoi 3-sigma-laskeutumisellipsin, jokaisen avustusyhdistelmän ja ellipsin Monte Carlo -kalibroinnin.
    • lunar-surface: paikannuksen ja ajoituksen saatavuus kohteen ja vuodenajan mukaan (scenarios/lunar-surface.toml; lunar-surface-terrain.toml lisää säteenjäljitetyn LOLA-horisontin): yhden kohteen paikannusluku on bitilleen sama kuin tyypin moonlight-service-volume; analyyttisistä efemerideistä saatu Maan ja Auringon näkyvyys on se, joka muuttuu vuodenajan mukaan.
    • lunar-ascent: nousu kohtaamiskiertoradalle ja kiertoradalle takaisin kuljetettu paikka-nopeuskovarianssi (scenarios/lunar-ascent.toml), jonka rinnalla raportoidaan moottorin katkaisuhajonta.
    • docs/MISSION-THREAD-LUNAR.md; ennakkorekisteröinti, sen muutokset ja jokainen tulos, alitukset mukaan lukien, kohteessa xval/mission-thread-lunar/.

Todisteet#

  • Ennalta rekisteröity tiedostossa xval/mission-thread-lunar/PREREGISTRATION.md ennen yhtäkään ajoa, kuudella päivätyllä muutoksella (kukin tehty ennen datan noutoa, paitsi muutos 6, joka korjaa tilamäärän laskuvirheen noudon jälkeen ja ennen yhtäkään A2-tulosta; jokainen muutos on ilmoitettu tiedostossa). Yhtäkään kynnystä ei höllennetty.
  • A1 (propagaattori LRO:n rekonstruoitua lentorataa vasten JPL Horizonsista, 24 h): MET, suurin 3D-ero 33 m, kun kynnys on 500 m, ja radiaalinen RMS-ero 2,4 m, kun kynnys on 60 m.
  • A2 (sama propagaattori CAPSTONE NRHO:ta vasten yhden 6.5 vuorokauden kierroksen yli): NOT MET, loppupaikan ero 136,8 km, kun kynnys on 25 km, ja oskuloivan periapsiksen säteen ero 28,4 km, kun kynnys on 10 km. Rivi pysyy MODELLED, ja alituksen kiinnittää tests/mission_thread_lunar_oracles.rs.
  • B1 (suhteellisen kohtaamisestimaatin johdonmukaisuus oman mallinsa kanssa) on MET neljännellä estimaattorisuunnittelulla, keskimääräinen NEES 5,85–5,93 kaistaa [5,2, 6,8] vasten; kolme aiempaa suunnittelua, laajennettu Kalman-suodatin kolmena muunnoksena, alitti sen. Viides muutos, tehty sen jälkeen kun toimitetun 2 h skenaarion havaittiin ajavan 4 / 50 koetta paikalliseen minimiin (keskimääräinen NEES 1e9), ajaa Gauss-Newton-sovituksen kasvavalla kaarella askelpuolituksella; B1 ei muutu siitä ja toimitetut skenaariot antavat 6,51 ja 6,33. Historia on tiedostossa xval/mission-thread-lunar/RESULTS.md.
  • Mikään tässä ei ole VALIDATED: oraakkelirivit testaavat jaettua propagaattoria, eivät navigointisuodatinta, signaalia tai budjettia.

[0.39.0] - 2026-10-22#

Ei uusia ominaisuuksia: yksi komentorivikorjaus, riippuvuuspäivityksiä ristiinvalidointityökaluissa ja dokumentaatiota. Moottorin tulokset ovat muuttumattomia versioon 0.38.0 nähden.

Korjattu#

  • Komentorivi päättyy hiljaa tilakoodiin 141, kun sen vakiotuloste sulkeutuu (kshana kinds | head), sen sijaan että se kaatuisi virheeseen "failed printing to stdout: Broken pipe". 141 on 128 plus SIGPIPE, tila, jonka komentotulkki ilmoittaa komennolle yes | head. Vain suljettu putki käsitellään: täysi levy tai mikä tahansa muu kirjoitusvirhe ilmoittaa yhä itsensä, ja suljettuun pistokkeeseen kirjoittava elävä syöte saa yhä kirjoitusvirheensä. tests/cli_closed_pipe.rs sulkee lukijan ennen ohjelman käynnistymistä, joten ensimmäinen kirjoitus epäonnistuu joka ajolla.

Tietoturva#

Yksi riippuvuuspäivitys toimitetussa kirjastossa (ensimmäinen merkintä), loput ristiinvalidointityökaluissa (xval/).

  • p256, p384 ja p521 versiosta 0,13 versioon 0,14 (samalla elliptic-curve 0.14.3, ecdsa 0.17.0 ja crypto-bigint versiosta 0.5.5 versioon 0.7.10; myös suora crypto-bigint-riippuvuus, nyt 0,7) poistavat neuvonnan RUSTSEC-2026-0387 (ajoitusvaihtelu paketissa crypto-bigint 0.5.5). Kshana käyttää näitä kirjastoja vain julkisten allekirjoitusten varmentamiseen (Galileo OSNMA -juuriavain ja RFC 3161 -aikaleimatunnisteet) ja allekirjoittaa vain testeissä kertakäyttöisillä avaimilla, joten käytännön altistus oli olematon; päivitys poistaa neuvonnan ilman ohitusmerkintää. Kirjaston ja MCP:n lukitustiedostot muuttuvat molemmat; mikään varmennustulos ei muutu (OSNMA- ja aikaleimavektoritestit läpäistään muuttumattomina).
  • Pienin tuettu Rust-versio on nyt 1,88 (vaaditaan RUSTSEC-2026-0387-korjauksessa).
  • memmap2 0.9.10 -> 0.9.11 (RUSTSEC-2026-0186) ANISE-ristiintarkistuksen lukkotiedostoissa (xval/anise-lunar-od, xval/anise-mars-od); lukot synkronoivat myös uudelleen repositorion sisäisen polkuriippuvuuden kshana.
  • pillow 12.3.0 -> 13.0.0 ja certifi 2026.7.22 -> 2026.10.19 oraakkeliympäristön kiinnityksissä (xval/oracles/requirements.lock, requirements.frozen.txt): korjatut julkaisut kahdeksaan pillow-tietoturvailmoitukseen ja yhteen certifi-tietoturvailmoitukseen.

Dokumentaatio#

  • docs/BENCH.md, README ja tämä tiedosto luettelevat jokaisen kshana-benchin kynnyksen, joka on NOT MET, sellaisena kuin se on kirjattu tiedostoon xval/bench/RESULTS-v2.md: A2 (agc_k_sigma AUC 0,766 vähintään 0,80 vastaan testijaolla), D1 (suurin ero 0,0301) ja tehtävä (b) R1 (siirretty, ei ajettu uudelleen). Yhtään kynnystä ei ole löysennetty.
  • README:n täydentämiskierros: sisällysluettelo; skenaariolajit ryhmiteltynä perheisiin, kullakin sivu hakemistossa docs/kinds/by-kind/ (moottorin kuvaus ja kentät, esimerkkiajon syötteet ja tulokset, kirjanpitorivit ja oraakkelit, ajon raportin ilmoittamat rajoitukset ja moottorin kirjoittama kaavio), yhteenvetosivu perhettä kohti, kaikki indeksoituna tiedostolla docs/KINDS.md; jokainen komento tiedostossa docs/COMMANDS.md; jokainen pinta, lisäosan komento, taito ja Studion sivu tiedostossa docs/ALL-SURFACES.md; jokainen kyvykkyysalue tiedostossa docs/CAPABILITY-DOMAINS.md; upotetut Mermaid-kaaviot (järjestelmän yleiskuva, pinnat, sisäsilmukka, vastaanottimen luottamus, laboratorion edestakaiskierros, Studio, testi- ja julkaisuvirta, moduulikartta, jakelu). Kirjoittanut tools/gen_kinds_index.py, tools/gen_readme_blocks.py ja tools/gen_figures_038.py; auditoinut tools/readme_audit.py; vartioi tests/readme_completeness_doc_sync.rs, joka kiinnittää myös jokaisen merkinnän kuvauksen ja kentät moottoriin.
  • tools/render-diagram-chromium.sh: renderöi Mermaid-kaavion SVG:ksi ja PNG:ksi Linuxilla ja päivittää renderöintitietueen.
  • README: avaruuskäyttäjän ja Kuun kuvat käyttivät polkuja suhteessa hakemistoon docs/, joten ne eivät latautuneet README:stä; yksi linkki osoitti tiedostoon ../../docs/JAMMERTEST.md.
  • Poistettu kaksi vanhentunutta käsin kopioitua kaaviotiedostoa (docs/assets/clock-ensemble-band.svg, sweep-clock-stability.svg), joita mikään sivu ei käyttänyt ja jotka eivät enää vastanneet moottoria; docs/KINDS.md sisältää nykyiset kaaviot.

[0.38.0] - 2026-10-19#

Lisätty#

  • GNSS tähdistön tuolla puolen (gnss-ssv). Uusi skenaariolaji avaruusaluksille GNSS-ratojen yläpuolella, ympärillä ja ulkopuolella (docs/SSV.md): yhden ja neljän signaalin saatavuus, katkojen kestot, C/N0, DOP sekä pääkeila- ja sivukeilalinkit GPS:lle, GLONASSille, Galileolle, BDS:lle, QZSS:lle ja NavIC:lle kuorella tai LEO-, MEO-, GEO-, HEO- ja Kuuhun siirtymäradoilla; julkaisun, parametriset tai käyttäjän toimittamat lähetyskuviot; reunasäteen ionosfääri-, plasmasfääri- ja ilmakehämalli; heikon signaalin vastaanottimen suunnittelu; aluksella toimiva GNSS-laajennettu Kalman-suodatin HEO:lle ja Kuuhun siirtymälle; sekä muodostelman suhteellinen navigointi. Verrattu ICG:n Space Service Volume -julkaisuun ennen ajoa tallennetun ennakkorekisteröinnin mukaisesti: vähimmäissäteilytehovakiot ja Kuun kynnys ovat samaa mieltä, muut kynnykset eivät täyty ennakkorekisteröidyllä tulkinnalla (lähes kaikki julkaisun epäjohdonmukaisen GLONASS-keilakulman kautta), eikä parametrinen sivukeilakorvike toista mitattuja GPS-paneelin kuvioita. Kaikki pysyy MODELLED (xval/gnss-ssv/RESULTS.md).
  • Kuun kiertorata ja pinta navigointi- ja geodeettisena infrastruktuurina (lunar-infrastructure). Uusi skenaariolaji viidellä asetuksella study valittavalla tutkimuksella (docs/LUNAR-INFRASTRUCTURE.md): lähes suoraviivaisella halokiertoradalla toimivan aluksella tehtävän Maa-GNSS-radanmäärityksen johdonmukaisuus riippumatonta maanpäällistä etäisyys- ja etäisyysnopeusmääritystä vasten; yhteinen pinta-aseman ja kiertäjän kaksoiserotettu kantoaallon vaihe LAMBDA-kokonaislukuratkaisulla; seitsenparametrisen Kuun datumin Fisherin informaatio kiertäjältä pinnalle -etäisyyksillä ja ilman niitä; GNSS-, VLBI- ja laseretäisyysmittausten tekniikoiden väliset siirtymät paikallista sidosta vasten; sekä herkkyys suureille h2, k2, l2 ja fysikaaliselle libraatiolle. MODELLED, ILLUSTRATIVE-syötteillä: numeriikka tarkistetaan riippumattomilla numpy- ja scipy-ohjelmilla, eikä mitään verrata Kuun suureen mittaukseen. Kynnykset kiinnitettiin tiedostossa xval/lunar-infra/PREREGISTRATION.md ja kahdessa ilmoitetussa muutoksessa. Kolme on NOT MET ja kukin on kiinnitetty testillä, joka vahvistaa epäonnistumisen: C3 (syötettyä voimavirhettä ei havaita ennakkorekisteröidyllä osuudella), Q3 (bootstrapattu onnistumisaste poikkeaa numpy-oraakkelista 1.7e-6 kynnyksen 1e-9 sijaan, LAMBDAn normaalijakauman kertymäfunktion approksimaatiosta) ja G3:n jälkipuolisko (etäisyysmittausperheen lisääminen ei aina pienennä pseudokäänteismatriisin jälkeä). Loput täyttyvät (xval/lunar-infra/RESULTS.md).
  • Kuudes artikkeli Research-taulukossa. "Cislunar navigation is an observability problem: arc-length thresholds, Gramian conditioning, and the Doppler lever" (arXiv:2610,23871, eess.SP) osoittaa, että tarkkuuden heikkenemiskerroin on määrittelemätön pelkkään etäisyyteen perustuvalle kuunläheiselle seurannalle, ja käyttää sen sijaan havaittavuusgramiania neljällä tasomaisella kaukaisella vastakulkuisella radalla: pelkkä etäisyys on astetta 2 4:stä hetkellä ja tarvitsee noin 2,09 h:n kaaren, etäisyysnopeus (Doppler) antaa asteen 4 heti, ja aseman estimointi yhdessä satelliittitilojen ja kellojen kanssa jää yhden asteen vajaaksi ilman ulkoista interferometristä havaintosuuretta. Sen luvut luo uudelleen laji cislunar-observability (kshana scenarios/cislunar-observability.toml); cislunar-arc-recovery testaa kynnyksen riippumattomalla estimaattorilla. README:n tutkimuskortti, crate-, npm- ja PyPI-README:t sekä generaattori sisältävät sen.
  • Neutraali erotuomari, mitattavaksi tehtynä. kshana jammertest import lukee julkaistun NPRA Jammertest -luettelon ja lähetyssuunnitelman ajoitettuna totuutena (luettelotunnisteet säilytetty) ja kshana jammertest score pisteyttää vastaanottimen lokin sitä vastaan testi kerrallaan (havaitsemisviive, havaitsematta jääneet hälytykset, väärät hälytykset, palautumisaika), valinnaisesti allekirjoitettuna todistepakettina (docs/JAMMERTEST.md). Pisteytyskynnykset ennakkorekisteröitiin ennen yhtään pisteytettyä ajoa (xval/jammertest-score/). JammerTest 2024 -aineistolla (haettu, ei koskaan mukana) ennakkorekisteröity vähimmäisdatasääntö epäonnistui sekä ensimmäisellä ajolla että datankäsittelyn revisiossa, joten mikään kynnys ei ole arvioitavissa eikä mitään väitetä; molemmat ajot on kirjattu ja kiinnitetty. MODELLED: aikataulu on aineiston kirjatut ikkunat, ei tallennettuja lähetysaikoja. 2025 SimulaMet NMEA -aineistoa ei sovitettu (sen sivulla ei ilmoiteta lisenssiä).
  • Vastaanottimen omat liput Kshanan rinnalla. UBX-NAV-STATUS spoofDetState ja UBX-SEC-SIG luetaan kentään self_report jokaisella epookilla, ja tuloksen vertailu receiver_self_report asettaa ne Kshanan valvontoja vasten (molemmat, vain vastaanotin, vain Kshana, ei kumpikaan); se ei nosta hälytystä eikä muuta pistemäärää. Septentrio SBF -lukija (PVTGeodetic, MeasEpoch, RFStatus, vain luku, MIT-lisensoidulla sbf-tools-crate-kirjastolla) ja receiver-trust live --serial (sarja- tai USB-NMEA-syöte, vain luku; se ei koskaan kirjoita vastaanottimelle) liittyvät niihin.
  • Ajoitus ja laitteiston turvallisuus (docs/TIMING-HIL.md, docs/HARDWARE-SAFETY.md). Skenaariolaji holdover-test pisteyttää ajoitusjärjestelmän holdover-testin (operaattori poistaa GNSS:n, holdover, palautuminen) mitatusta aikavirhetallenteesta, mitattuna julkisista taulukoista saatuja ITU-T-maskeja vastaan. clock_log lukee linuxptp- (ptp4l, phc2sys, ts2phc) ja chrony-lokeja (tracking, statistics). iq scene --format sdrx kirjoittaa ION GNSS SDR -metadataa ja iq monitor --follow valvoo SigMF-tallennetta sen kasvaessa (vain vastaanotto). compliance-report saa NIST IR 8323r1 Foundational PNT Profile -profiilin (15 parafrasoitua riviä, tukee todisteita (supports evidence for)). Todistepaketti voi kirjata operaattorin lab-attestation-tiedon allekirjoitettuun manifestiinsa, ei koskaan varmennettuna; laitteiston vaiheet 0 – 4 ja oikeudelliset huomautukset ovat tiedostossa HARDWARE-SAFETY.md (odottaa oikeudellista tarkastusta). Minkäänlaista lähetyspolkua ei ole.
  • kshana-bench v1 (kshana bench, bench/SPEC.md, docs/BENCH.md): kiinteät tehtävät, jaot ja mittarit GNSS-häirinnän havaitsemiselle vastaanotinlokeista (JammerTest 2024) ja IQ:sta, ajoituksen holdover-ennusteelle (IGS-kellot) ja jakauman ulkopuolisen optimismin aukolle; jakomanifestit kiinnitetyillä tiivisteillä ja hakuskripteillä (dataa ei ole mukana), sinetöity holdout sitoutumalla ja paljastamalla, tulostiedoston skeema ja staattinen tulostaulusivu. Lähtötasot kynnyksillä, jotka on ennakkorekisteröity tiedostossa xval/bench/PREREGISTRATION.md: pisteyttäjän kynnykset täyttyvät, C1–C3 täyttyvät, D2 täyttyy; A2 NOT MET (agc_k_sigma AUC 0,766 vähintään 0,80 vastaan testijaolla), D1 NOT MET (suurin ero 0,0301) ja tehtävä (b) R1 NOT MET (siirretty, ei ajettu uudelleen), kukin kiinnitettynä (xval/bench/RESULTS-v2.md). Jokainen pistemäärä on MODELLED. Python bench_score, bench_leaderboard; WebAssembly sama; MCP score_benchmark, render_leaderboard.
  • Häiriöobservatorio (kshana interference-map daily, sensitivity, docs/observatory/METHOD.md): toistettava päivittäinen GeoJSON, PNG ja tapausraportti-JSON kolmella tilalla (degraded, not degraded, not observed), 24 h:n vähimmäisviive, solut 0,5 astetta tai karkeammat, syytä ei oleteta ja OpenSky-data hylätään; ennakkorekisteröityjen parametrien herkkyystutkimus; 30 päivän Itämeren takautuva katalogi adsb.lol:sta.
  • Kone- ja anturisyötteet kohteelle receiver-trust (docs/MACHINE-INPUTS.md). Uudet [log] format-arvot, kaikki vain luku, MODELLED, itse kirjoitetuin vertailuaineistoin ja ilman mukana toimitettua dataa: rtklib-pos (RTKLIB .pos -ratkaisutiedostot), novatel (OEM7 ASCII ja binääri BESTPOS, RANGE C/No ja RXSTATUS; vastaanottimen häirintälipusta tulee epookin self_report, jota verrataan Kshanan hälytyksiin vertailulla receiver-self-report), rtcm3 (MSM4:n ja MSM7:n C/N0 GPS:lle, GLONASSille, Galileolle, SBAS:lle, QZSS:lle, BeiDoulle ja NavIC:lle; rakenteet BSD-lisensoiduista pyrtcm-taulukoista, joiden huomautus on tiedostossa NOTICE, ei RTCM-standardista) ja gnss-sdr (GNSS-SDR Monitor- ja PVT-monitor-viestit JSON-riveinä, välittäjänä integrations/gnss-sdr/relay.py).
  • IMU-lokit toisena anturina. [log.imu] (csv tai euroc) integroi gyron kääntymisnopeuden suunnaksi, jonka heading-course-valvonta lukee; inline jokaisella pinnalla ja viety todistepakettien mukana. kshana imu-fit (Python imu_fit, WebAssembly imu_fit, MCP fit_imu_log, lisäosa /kshana-fit-imu, JetBrains-toiminto) sovittaa skenaarioiden hybrid ja fusion kiihtyvyysanturin ja gyron parametrit paikallaan olevasta lokista Allan-poikkeamalla ja tulostaa taulukon [accel_classical], jonka provenanssissa on lokin SHA-256.
  • Integraatiot: ROS 2 -paketti (integrations/ros2/kshana_trust: NavSatFix ja ublox_ubx_msgs sisään, luottamusaiheet ulos; sen ROS-vapaa silta on testattu todellista moottoria vasten, solmua itse ei ole ajettu elävällä ROS-graafilla), gnss_lib_py-silta (integrations/gnss_lib_py, MIT-riippuvuus, valinnainen) ja GNSS-SDR-välittäjä.
  • Home Assistant MQTT -viejä luottamustelemetrialle: kshana trust-telemetry --print-mqtt ja --mqtt-tcp <host:port> (löytöviestit ja JSON-tila-asiakirja; vain julkaisu, ei tunnuksia eikä TLS:ää) sekä format = "mqtt" tekstinä Pythonissa, WebAssemblyssä ja MCP:ssä.
  • Seitsemän MODELLED kirjanpitoriviä edellä mainitulle. Mikään tässä ei ole VALIDATED: yhtään tallennetta todellisesta vastaanottimesta, tukiasemasta, IMU:sta, GNSS-SDR-ajosta, ROS-graafista tai MQTT-välittäjästä ei luettu.
  • Optisen linkin marginaali ajan funktiona. Laji optical-atmosphere ottaa valinnaisen taulukon [timeseries] (duration_h, step_s, seed) ja kirjoittaa sen jälkeen myös kohdetta kohti yhden siemenluvulla tuotetun toteuman ilmoitetusta kohdemallista ajan yli: pilvijaksot, nestevesipatsas jaksoa kohti, yksi gamma-gamma-skintillaationäyte askelta kohti, ja niistä linkin marginaali, pilvi- ja skintillaatiovaimennukset ja linkki päällä -lippu, sekä toteutunut saatavuus, pilvisyysosuus, katkojen lukumäärä ja pisin katko. MODELLED (yksi otos mallista, ei ilmasto; ei ulkoista oraakkelia). Ilman taulukkoa tulos on 0,37 -asiakirja. Kaksi mukana toimitettua optista skenaariota sisältää taulukon (336 h, 600 s, siemenluku 37). Kynnykset ennakkorekisteröity tiedostossa xval/optical-atmosphere/PREREGISTRATION-timeseries.md ennen ensimmäistä ajoa.
  • Testiolosuhteiden määrittely ja laboratorion edestakaiskierros. kshana.test-conditions/1 julkaistaan nimellä docs/spec/TEST-CONDITIONS.md JSON-skeemalla, ja se saa arvon recording.kind = "receiver-log". kshana bench-export kirjoittaa myös <base>.conditions.json. kshana evidence round-trip rakentaa allekirjoitetun paketin, joka linkittää skenaarion tiivisteen, ilmoitettujen olosuhteiden tiivisteen, vastaanottimen lokin tiivisteen ja ilmoitettuja tapahtumia vasten lasketun pistemäärän, ja hylkää olosuhteet, jotka ovat ristiriidassa pisteytystapahtumien kanssa. Työstetty esimerkki, jossa gps-sdr-sim kirjoittaa vain tiedoston; toisto on operaattorin vastuulla eikä sitä koskaan automatisoida. Python evidence_round_trip, MCP create_round_trip_pack, lisäosa /kshana-evidence-pack.
  • Standardipaketit (kshana standards-pack, standards/): DHS Resilient PNT -kehyksen testiprofiilit tasoille 1 – 4, IMO MSC.1/Circ.1575:n tarkkuustasot ja eheysarviointi sekä ICAO Doc 9849 liitteen F monitor, assess and mitigate, kukin joukko skenaarioita, jotka pisteytetään ennen ajoa ilmoitettuja kynnyksiä vasten, niiden tukemin compliance-report-rivein (tukee todisteita, supports evidence for). Epäonnistumiset on kirjattu ja kiinnitetty: DHS L4-T1 ja neljä IMO:n tarkkuustestiä. Doc 9849 -asiakirjaa itseään ei luettu (maksullinen); ICAO-paketti seuraa ICAOn omaa RFI Mitigation Plan -esitystä. compliance-report saa standardipakettiosion. Kaikki MODELLED.
  • LunaNet Augmented Forward Signal (docs/LUNANET-AFS.md): AFS-I Gold- ja AFS-Q Weil -koodit PRN:ille 1 – 210, signaalit lunanet-afs-i ja lunanet-afs-q kohteessa kshana iq, SB1 BCH -koodi, CRC-24Q ja lomittaja sekä kshana lunanet-afs-check (spec, symbols, generate), kiinnitettynä LNIS V5 Applicable Document 1 Volume A:han (LSIS-AFS V1.0, 29 tammikuuta 2025). Koodit VALIDATED asiakirjan painettuja taulukoita vasten (jotka se merkitsee TBC:ksi); yksi painettu tertiäärisarake (PRN 147) on todennäköisesti painovirhe ja epäonnistuminen on kiinnitetty. Alikehysten 2 – 4 LDPC-koodausta ei ole toteutettu.
  • Kurssin muistikirjat (notebooks/course/): häirintä, harhautus, holdover, eheys, OSNMA ja häiriökartta, kukin harjoituksineen.
  • EU-US WG-C ARAIM, Milestone 3: enimmäis-URA-tutkimus (xval/araim-m3/, src/bin/gen_araim_m3_study.rs), joka korvaa peruutetun suunnitelman ”Table A-3”; MODELLED ilmoitetuin poikkeamin.
  • Omistajan hyväksyntää odottavat luonnokset hakemistossa docs/drafts/: JOSS-artikkeli, TSC:n peruskirjan muutos, oraakkelirekisterin prosessi ja ehdotus hakemiston LICENSES/ jakamisesta. Mitään niistä ei ole otettu käyttöön.
  • Studio-näkymät versiossa 0,38 lisättyihin ominaisuuksiin (kshana.dev/studio/). Komentosillan toisto (kaksi synteettistä ajoa samalla kellolla: reitti, luottamuspistemäärä, satelliitit, jotka loki kuulee, ja tuomio, vastaanottimen omat liput Kshanan hälytysten vieressä); optinen PNT (kaksi tyypin optical-atmosphere skenaariota, valinnaisella siemenluvulla ajetulla toteutumalla ([timeseries]), MODELLED); holdover-testi (tyypin holdover-test tulos mitattuna ITU-T-maskeja vasten, piirrettynä tuloksen omasta kentästä record.series); häiriöobservatorion katselin, joka avaa itse tuottamasi tiedostot eikä toimita yhtään; Työkalut-sivulla Jammertest-pisteytin, IMU-sovitus ja MQTT telemetriamuotona; sekä Vastaanottimen luottamus -näkymässä lokimuodon valitsin (RTKLIB .pos, NovAtel OEM7, RTCM 3, GNSS-SDR, Septentrio SBF) ja valinnainen IMU-tiedosto. Jokainen näkymä lukee tiedostot selaimessa eikä lähetä mitään; jokainen luku säilyttää nimiön, jonka kirjanpito sille antaa, ja kukin sisältää ohjeellisuusilmoituksen. Sivuston sivu /benchmark näyttää katkelman kshana bench leaderboard.

Korjattu#

  • Issue #36: tavutarkat pin-kerrokset. Tavutarkat pin-kerrokset ajetaan vain isännällä, joka on julistettu lähtötasoksi (KSHANA_EXACT_PINS=1, asettaja scripts/gate.sh), ei jokaisella Apple siliconia käyttävällä Macilla, koska Applen matematiikkakirjasto eroaa macOS-versioiden välillä; siirrettävä kerros ajetaan kaikkialla, ja tests/exact_pin_gate_guard.rs estää sen, että tavutarkan kerroksen ajoa ehdollistettaisiin enää pelkän alustan perusteella. Oraakkelivertailut itse menevät läpi macOS:ssä. Yhtään literaalia ei otettu uudelleen eikä toleranssia muutettu. scripts/oracle-triage.sh ja docs/LOCAL-ORACLE-TESTS.md kertovat, miten ero luokitellaan; .github/workflows/oracle-macos.yml on manuaalinen ja viikoittainen diagnostiikka, ei portti.
  • CodeQL: ankkuroimaton kuvio Studion trust-open-apufunktiossa täsmää nyt koko otsikkoon (web/studio/lib/trust-open.mjs).
  • CI: ajajan levytila. Työ check rakentaa dev- ja test-profiilit ilman debug-tietoja, joten linkitys ei enää täytä levyä.
  • Lähdesuojat. Jokainen lähdetiedosto, joka sisältää pin-testiaineistoa, ilmoittaa pin-alueensa, ja tilapäisiä tiedostoja kirjoittavat testit käyttävät kutsukohtaisesti yksilöllistä polkua, joten rinnakkaisajot eivät voi törmätä.
  • docs/SCENARIOS.md luodaan uudelleen optical-atmosphere-tyypin valinnaista kenttää timeseries varten.
  • JetBrains-liitännäinen: ei vanhentuneen tai poistettavaksi ajoitetun alustarajapinnan käyttöä. IntelliJ Plugin Verifier (verifyPlugin) IntelliJ IDEA -koontiversiota 263 vasten (2026,3: 263.6800.24 ja 263.7031.23) löysi yhden vanhentuneen kutsun, FileEditorManager.openFile, toiminnossa Insert Example; se avaa nyt uuden tiedoston kutsulla OpenFileDescriptor. Liitännäinen on yhteensopiva ja ongelmaton versiossa 2024,3 (since-build, ennallaan) sekä molemmissa koontiversioissa 263. CI ajaa nyt työkalun verifyPlugin ja epäonnistuu yhteensopivuusongelmien sekä poistettavaksi ajoitetun rajapinnan käytön vuoksi.

[0.37.0] - 2026-10-17#

Lisätty#

  • Optinen PNT ilmakehän läpi (skenaariotyyppi optical-atmosphere, docs/OPTICAL-ATMOSPHERE.md, suunnitelmamuistio docs/design/optical-atmosphere-0.37.md). Optiselle linkille ja joukolle maa-asemia se raportoi aallonpituudesta ja korkeuskulmasta riippuvan selkeän ilman vaimennuksen, Hufnagel-Valley-turbulenssitilan (Rytovin varianssi, skintillaatioindeksi, gamma-gamma-häipymät, aukon keskiarvoistus), saatavuuden suhteessa linkkimarginaaliin ilmoitetusta pilviklimatologiasta, tavoitesaatavuuksiin tarvittavan marginaalin ja katon, jota mikään marginaali ei nosta, katkosten kestojakauman, ajoitus- ja etäisyysmittausvirheen katkosta kohti kellon holdover-mallin kautta, etäisyydestä riippuvasti korreloituneen paikkadiversiteetin sekä mitä-jos-hyödyt aallonpituuden vaihdolle, suuremmalle aukolle, adaptiiviseen optiikkaan perustuvalle skintillaation vaimennukselle ja lisämarginaalille. optical_linkbudget saa ilmakehätietoisen budjetin; ilman sitä sen tuloste on bittitarkasti sama kuin versiossa 0,36 (kynnys A5). Kaksi mukana toimitettua skenaariota sisältää ILLUSTRATIVE-pilviklimatologiat. MODELLED: kolme kirjanpitoriviä. Numeriikka täyttää kynnykset A1–A6, jotka on ennakkorekisteröity tiedostossa xval/optical-atmosphere/PREREGISTRATION.md riippumatonta mpmath-ohjelmaa vasten; se tarkistaa ilmoitettujen kaavojen toteutuksen, ei ilmakehää, eikä mitattua saatavuustallennetta ole verrattu, joten mikään rivi ei ole VALIDATED. Kynnys A4 ei aluksi täyttynyt, ero oli 3e-9, koska käytössä ollut normaalijakauman kertymäfunktio oli approksimaatio, jonka virhe oli 1.5e-7; kertymäfunktio vaihdettiin ja kynnys jätettiin rekisteröidyksi. Natiivi- ja WebAssembly-koontiversiot palauttavat tavu tavulta identtiset asiakirjat molemmille mukana toimitetuille skenaarioille (A7, ajettu integrointicommitilla 0.37.0).

[0.36.0] - 2026-10-16#

Lisätty#

  • IQ-monitorien havaitsemis-ROC (PRO-32, docs/design/DETECTION-ROC.md). Monitoreja käyttävä kampanja säilyttää kunkin testisuureen maksimin ilmoitettujen tapahtumien ikkunoissa (positiiviset) ja tapahtumien ulkopuolisissa tiilitetyissä ikkunoissa (negatiiviset, roc_window_s). Raportti yhdistää ne hälytyslajeittain ROC-käyräksi, jonka mukana ovat AUC ja toimintapiste asetetulla kynnyksellä, tiedostona roc.json ja raporttiosiona. Synteettisillä kampanjoilla satunnaistason tarkistus täyttyy. C/N0-AUC-kynnys (0,95) ei täyty (0,79), koska tapahtuman jälkeen heti tulevat negatiiviset ikkunat perivät havaitsemisesta CUSUM-suureen vaimenemisen; tämä on kirjattu. MODELLED.

  • IQ-monitorit lab-replay-kampanjassa (PRO-31, docs/design/MONITORS-IN-CAMPAIGN.md). Kampanjatiedoston valinnainen taulukko [monitors] ajaa IQ-monitorit ajajan yhdellä läpikäynnillä: teho ja spektri kunkin etupäätyketjun jälkeen sekä C/N0, SQM ja lukitus kutakin seurattua kanavaa kohti. Niiden hälytykset pisteytetään ilmoitettuja tapahtumia vasten: havaittu tai havaitsematta jäänyt, havaitsemisaika ja väärät hälytykset altistustuntia kohti. Kunkin testin suljetun muodon väärän hälytyksen luku on ilmoitettu, mukaan lukien uusi kaksisuuntainen Gaussin luku SQM-testeille (2Q(k)). Ilman taulukkoa mikään ei muutu. Synteettisillä kampanjoilla tehon ja SQM:n väärän hälytyksen kynnykset sekä C/N0:n väärän hälytyksen kynnys täyttyvät; havaitaan 18 / 18 vaimennusta, mutta havaitsemisaikaraja, joka on rakenteensa mukaan alle yhden ilmaisinnäytteen, ei täyty, ja tämä on kirjattu. MODELLED; kirjanpitorivi ”IQ monitors scored in lab-replay campaigns”.

  • Laboratoriosovitus IQ-kampanjoista, jatkokoe (tests/iq_labfit_followup.rs, CI-työ labfit-iq-followup). Se testaa kaksi hypoteesia, jotka tiedoston docs/design/LABFIT-FROM-IQ.md kohta §13,6 jätti auki, kynnyksiä vasten, jotka on ennakkorekisteröity commitissa 1e532f84. Se lisää kaksi synteettistä kampanjaa: S, jossa J/S on porrastettu (siemenluku 2026_1014), ja R, uusi ramppi (siemenluku 2026_1015). Tulokset ovat tiedostossa docs/design/evidence/labfit-followup/RESULTS.md.

    • S1 täyttyi: kun kukin J/S-taso pidetään vakiona, δ_eff palautuu tarkkuudella +0,185 dB. Ramppikampanjoiden virhe −1,1 dB johtuu estimaattorin viiveestä.
    • S2 ei täyttynyt, ja tulos on kiinnitetty testillä, joka toteaa kynnyksen jäävän täyttymättä: (d) sellaisena kuin se on kirjoitettu pätee porrastetussa kampanjassa seurantasilmukkamallille (0,45 dB) mutta ei empiiriselle mallille (6,42 dB).
    • R1 täyttyi: uudessa ramppikampanjassa (d), kun sovitettuun pudotusviipymään lisätään kunkin tapahtuman ramppinopeus, poikkeaa enintään 1 dB molemmilla malleilla.
    • Kynnysten (a′) ja (d) täyttymättä jääminen toistuu kampanjassa R.
    • Kampanja voi nyt ilmoittaa J/S-arvonsa profiilina tyyppiä step testikehikossa.
    • Mikään tuomio kohdassa §13 ei muutu, ja kirjanpitorivi pysyy tasolla MODELLED.
  • Rajattu FLL-sisäänveto, valinnainen (DS-LOOP-05): uusi silmukkasuunnittelun avain [design.carrier] fll_pull_in_max_s (s), Rust LoopConfig::fll_pull_in_max_s. Kun fll_assist = "pull-in" on käytössä, se pakottaa FLL:stä PLL:ään tapahtuvan luovutuksen tämän ajan kuluttua PLI:stä riippumatta. Oletuksena asettamatta, jolloin se on suunnittelutiivisteen ulkopuolella; oletussuunnittelu ja sen tiiviste ovat ennallaan.

    • Tarkistettu kynnyksiä vasten, jotka on ennakkorekisteröity commitissa 58789af0, injektoidulla totuudella. Kontrolli täyttyy: oletus ei koskaan luovuta osuudella 9 / 10 siemenluvuista arvolla 33 dB-Hz.
    • Ei täyttynyt: kun raja on 1,0 s, lukitus säilyy ajoista 16 / 20 arvolla 33 dB-Hz ja 8 / 20 arvolla 31 dB-Hz; muissa ajoissa kierretään pakotettujen luovutusten ja FLL:n paluun välillä. Vaihejitteri on 1,8× pelkän PLL:n jitteri arvolla 33 dB-Hz.
    • Sisäänvetolattia ~35 dB-Hz pysyy oletuksen dokumentoituna rajoituksena.
    • MODELLED; kirjanpitorivi ”Capped FLL pull-in below the default design's FLL-to-PLL hand-over floor (opt-in)”.
  • Hankinnan hystereesi ja etupään kvantisoija skenaariotyypissä jamming (CAP-06c): kaksi valinnaista osiota tyypin jamming skenaariolle.

    • [acquisition]: acquisition_threshold_dbhz (dB-Hz, vähintään seurantakynnyksen suuruinen) ja reacquisition_delay_s (s, oletus 0). Satelliitti hankitaan, kun se on vähintään hankintakynnyksen tasolla ja on ollut hankkimatta viiveen ajan. Se pidetään, kun se on vähintään seurantakynnyksen tasolla. Tulosteet: epochs[].sats[].acquired (tosi/epätosi), epochs[].acquired (lukumäärä) ja fom.availability_acquired (1).
    • [front_end]: adc_bits (1–16) ja bandwidth_mhz (MHz, oletus kaksi kertaa sirunopeus). Tulostaa lohkon front_end: agc_gain_reduction_db (dB, 10·log10(1 + J/N)), quantiser_loss_db (dB, vähennetään jokaisen linkin efektiivisestä C/N0:sta) ja loss_model. Häviö on Gaussin syötteen häviö, ja se on merkitty pätemättömäksi CW-, kapeakaistaisille ja pyyhkäiseville häirintälähettimille.
    • Ilman osioita jokainen tuloste on tavu tavulta identtinen.
    • Tarkistettu kynnyksiä vasten, jotka on ennakkorekisteröity commitissa 70c72fcc. Kvantisointihäviö poikkeaa riippumattomasta Monte Carlo -laskennasta enintään 0,0007 dB ja AGC-lukema IQ-kerroksen AGC-silmukasta enintään 0,012 dB.
    • Rekisteröidyt hystereesiajot eivät kertoneet mitään (jokainen linkki menetettiin), joten tuo kynnys on NOT MET. Täydentävä ajosarja, joka rekisteröitiin commitissa 37793290, täyttää sen: jokainen lippu vastaa riippumatonta uudelleenlaskentaa, ja linkeistä 732 / 1824 näkyy hystereesi.
    • Havainto: CW-häirintälähettimellä 1-bittinen ADC menettää noin 5 dB enemmän kuin Gaussin arvo.
    • MODELLED; kirjanpitorivi ”Acquisition hysteresis and the front-end quantiser in the jamming kind against independent recomputations”.
  • Häirintälähettimen maastovarjostus skenaariotyypissä jamming (CAP-06b): valinnainen osio [terrain] tyypin jamming skenaariossa, jossa on häirintälähetin. Kentät:

    • dem_hgt: SRTM-ruutu (.hgt), suhteessa työhakemistoon;
    • samples_per_side, ll_lat_deg ja ll_lon_deg (deg): ruudun koko ja kulma;
    • geoid_undulation_m (m, oletus 0), k_factor (oletus 4/3) ja profile_step_m (m, oletus 30).

    Moottori näytteistää suurympyrän maastoprofiilin häirintälähettimen ja vastaanottimen väliltä ja löytää hallitsevan veitsenterän. Häirintälähettimen vastaanotettu teho ja siten jokainen J/S laskee yksittäisen veitsenterähäviön verran, kuten ITU-R P.526-15 kohdassa §4,1.

    • Tulokseen tulee lohko jammer_terrain: nu_max (1), diffraction_loss_db (dB), obstacle_distance_m (m), obstacle_terrain_m (m), path_length_m (m) ja profile_points (lukumäärä).
    • Ilman osiota jokainen tuloste on tavu tavulta identtinen.
    • Tarkistettu kynnyksiä ja kymmentä sijoitusta vasten, jotka on ennakkorekisteröity commitissa 92cd2bfd, Kuolemanlaakson sitoutetulla todellisella SRTM-ruudulla, riippumatonta numpy-uudelleenlaskentaa vasten. Kaikki täyttyivät: suurin ero 1.6e-10 suureessa ν ja häviössä (kynnys 1e-9), häviö on monotoninen häirintälähettimen korkeuden suhteen, ja häviö saavuttaa J/S-arvon täsmälleen.
    • MODELLED; kirjanpitorivi ”Terrain shadowing of the jammer in the jamming kind against an independent numpy recomputation on a real SRTM tile”.
  • CRPA-antennivahvistukset skenaariotyypissä jamming (CAP-06a): valinnainen osio [crpa] tyypin jamming skenaariossa. Kentät: elements_enu_m (alkioiden sijainnit paikallisessa itä-pohjoinen-ylös-koordinaatistossa, m), weighting ("null-steering" tai "mvdr") ja bandwidth_mhz (MVDR-kohinakaistanleveys, MHz, oletus kaksi kertaa sirunopeus).

    • Jokainen kanava muodostaa vääristymättömän keilan satelliittiaan kohti. Linkin kohinaa skaalataan suureella ‖w‖² ja häirintälähetintä suureella |wᴴa_j|² ennen nykyistä häirinnänestoyhtälöä C/N0:lle.
    • Jokaiseen linkkiin tulee lohko crpa: array_noise_gain_db (dB) ja jammer_gain_db (dB).
    • Ilman osiota jokainen tuloste on tavu tavulta identtinen.
    • Virheellinen osio (tyhjä alkioluettelo, tuntematon painotus, ei-positiivinen kaistanleveys) on virhe rajapintojen kshana ja api::run_toml sekä jamming::run_jamming kautta.
    • Tarkistettu kynnyksiä vasten, jotka on ennakkorekisteröity commitissa 08d83b4d. Täyttyivät: additiivisuus (korjauksen jälkeen: ensimmäinen koontiversio lisäsi uudet yksiköt jokaisen jamming-ajon yksikkötaulukkoon); yksittäinen alkio ei ole ryhmä; kohinavahvistus ja efektiivinen C/N0 riippumatonta numpy-uudelleenlaskentaa vasten erolla enintään 1e-9 dB; MVDR lähestyy nollausta korkealla JNR:llä.
    • Ei täyttynyt: MVDR-häirintälähettimen vahvistus, 194 / 456 linkillä versiosta 0,36 siirrettävällä matematiikalla (202 isäntämatematiikalla; docs/revisions/STUDIO15-batch4-rebaseline.md) (pahin 1.7e-6 dB). Jäännökset välillä −100 ja −188 dB ovat float64:n resoluution alapuolella tuolla kynnyksellä, ja numpy poikkeaa itsestään samassa suuruusluokassa.
    • MODELLED; kirjanpitorivi ”CRPA antenna gains in the jamming kind against an independent numpy recomputation”.
  • IQ-seurantamoottori verrattuna GNSS-SDR-ohjelmaan 0.0.19 (PRO-33): kshana iq track ja GNSS-SDR seuraavat samoja riippumattomia numpy-tallenteita GPS L1 C/A -signaalista arvoilla 30–45 dB-Hz.

    • Kynnykset ennakkorekisteröitiin commitissa 48edd4a5. Rekisteröity kalibrointi epäonnistui virheellisen GNSS-SDR-luovutuksen vuoksi (F3), joten muutos 1 (1e4288c4) lisää molempiin vastaanottimiin pelkästään sisäänvetoa tekevän FLL:n, sitoutettuna ennen mitään testitallennetta.
    • Täyttyi: kantoaallon ja koodin jitteri sekä Doppler poikkeavat enintään 5 % jokaisella C/N0-arvolla.
    • Ei täyttynyt: moottorin NWPR-C/N0 lukee 2,3–7,1 dB alle GNSS-SDR:n SNV-arvon (F4, tunnettu estimaattorin rajoitus; M2M4 poikkeaa totuudesta enintään 0,06 dB); lukitusindikaattorit eroavat määritelmän mukaan (F5); yksi jaksohyppyä koskeva erimielisyys arvolla 30 dB-Hz (F6).
    • MODELLED; kirjanpitorivi ”IQ tracking engine against GNSS-SDR 0.0.19 on independent recordings”.
  • Kaksi riviä tasolla VALIDATED IQ-kerroksen koodeille (DS-GIQ-06b, PRO-39).

    • BeiDou B1I. Kaikki 63 B1I-primäärikoodia täsmäävät GNSS-SDR-ohjelman v0.0.19 riippumattoman generaattorin kanssa siru sirulta (kynnys ennakkorekisteröity commitissa 911106d1). Vain sen ohjelman tuloste on sitoutettu: julkisen ICD:n määrittelemät B1I PRN -koodit etuliitteenä ja tiivisteenä.
    • GPS L1C. Kaikki 126 L1CP/L1CD-koodia ja 63 L1CO-peitettä täsmäävät asiakirjan IS-GPS-800J tulostamiin tarkistussarakkeisiin, ja laskettu Legendre-jono täsmää sen taulukkoon 6.2-1 (kynnykset ennakkorekisteröity commitissa fe372e26).
    • Rivit: ”BeiDou B1I primary ranging codes against an independent generator” ja ”GPS L1C ranging and overlay codes against the IS-GPS-800J printed check columns”.
  • GLONASS-, BeiDou- ja Galileo E6 -kaistat spektrimallissa (CAP-12, signaalit): uudet kaistanimet glonass-l1of ja glonass-l2of (mikä tahansa FDMA-kanava muodossa glonass-l1of-k<K>, K = −7–6), beidou-b1i, beidou-b1c, beidou-b2a, beidou-b3i ja galileo-e6. Kukin sisältää ICD:n mukaisen kantoaallon, modulaation ja pienimmän vastaanotetun tehon. Ne otetaan käyttöön nimellä: oletuskaistajoukko ja kaikki nykyiset tulosteet ovat ennallaan.

    • Tarkistettu kynnyksiä vasten, jotka on ennakkorekisteröity commitissa 5806f28b: ICD-arvot, nollat, B1C-komposiitti ja C/N0-polku täyttyvät.
    • Kaksi kynnystä ei täyttynyt. Yksikköpinta-alan kynnys oli saavuttamaton sellaisena kuin se oli kirjoitettu (F1). IQ-kerroksen B1I- ja B1C-aaltomuodot vastaavat mallia vain kaistakeskiarvoistettuina, koska niiden koodien viivaspektrit ovat epätasaisia (F2).
    • MODELLED; kirjanpitorivi ”Spectrum model: GLONASS, BeiDou and Galileo E6 bands (opt-in)”.
  • Solukeskiarvoistava CFAR-vaihtoehto IQ-hankinnassa (PRO-37): iq::acq::ca_cfar ja ca_cfar_cells päättävät hankintaruudukolla vertaamalla kutakin solua sen Doppler-rivin vertailusolujen keskiarvoon. Kynnys saadaan suljetun muodon CA-CFAR-väärän hälytyksen todennäköisyydestä M epäkoherentille lohkolle (ca_cfar_pfa, ca_cfar_alpha), joten päätös ei riipu näytetehon normalisoinnista. Se on valinnainen; oletusilmaisin ja kaikki nykyiset tulosteet ovat ennallaan.

    • Tarkistettu kynnyksiä vasten, jotka on ennakkorekisteröity commitissa 3724aefa: suljettu muoto Monte Carloa vasten (18 / 18 tapausta), ja 1 prosentin suunnitteluosuus mitattiin arvoksi 0,97–1,01 % Gaussin ja 2-bittisesti kvantisoidun kohinan osalta.
    • Yksi kynnys ei täyttynyt: kohinattomassa 2-bittisessä signaalissa 1,28 % huipun ulkopuolisista soluista ylittää kynnyksen koodin korrelaatiosivukeiloissa (havainto F1).
    • MODELLED; kirjanpitorivi ”Cell-averaging CFAR option in IQ acquisition”.
  • Skintillaatiomalli mitattua dataa vasten (PRO-34): IQ-kanavan Cornell-skintillaatiomallia verrattiin mitattuun 50 Hz GPS L1 -intensiteettiin ja -vaiheeseen päiväntasaajan skintillaatioyöltä (Zenodo-tietue 16941224, INGV, Malindi, CC BY 4,0), kynnyksiä vasten, jotka on ennakkorekisteröity commitissa b6ccb499. Täyttyi: intensiteettijakauma ja S4:ään sidottu vaihesintillaatio. Ei täyttynyt: malli häipyy 2,4 kertaa useammin alle −10 dB ja 3,5 kertaa pidempään (havainto F1). Rekisteröity käsittely lukee mallin käärityn vaiheen (havainto F2); vaihetulos pätee myös, kun vaihe on avattu. scripts/fetch_scint_malindi.sh hakee datan. Rivi pysyy tasolla MODELLED: ”IQ ionospheric scintillation channel (Cornell model) against measured 50 Hz GPS L1 scintillation”.

  • Korjattu LuGRE-näytteenlukija (MR-09): realdata::lugre::parse_iqs_sdrx lukee LuGRE IQ -erän, jossa I on korkeassa nibblessä ja mid-rise-tasot 2v + 1 (SdrLayout::mid_rise), jotka poistavat −½:n keskiarvon, jonka pelkät kahden komplementin kokonaisluvut tuovat I- ja Q-komponentteihin. run_acq.py --corrected antaa GNSS-SDR:lle saman luennan. Yleinen ION-lukija ja kaikki nykyiset tulosteet ovat ennallaan: 149 skenaarion tulosta ja yksi tutkimus ovat tavu tavulta identtisiä ennen ja jälkeen, ja kiinnitetyt LuGRE-havainnot luetaan kuten rekisteröitiin (xval/lugre-reader/RESULTS.md). Mikään kirjanpitorivi ei muutu.

  • Valinnainen BOC(1 1)-seuranta (CAP-07 (a)): LoopConfig::boc skaalaa DLL-erottimet siniaalto-BOC(1 1)-pääpiikille ja lisää bump-jump-monitorin (hyvin aikaiset ja hyvin myöhäiset korrelaattorit ±0,5 sirun kohdalla, ylös-/alaslaskurit, N = 8), joka siirtää koodi-NCO:n pois sivupiikiltä; Channel::bump_jumps luettelee hypyt. Oletuksena pois, ja kaikki nykyiset tulosteet ovat ennallaan. Tarkistettu kynnyksiä vasten, jotka on ennakkorekisteröity commitissa 6b68f6cc synteettisellä BeiDou B1C -signaalilla: sivupiikkialku, joka pysyy 0,55 sirun verran pielessä ilman valintaa, vedetään pääpiikille yhdellä hypyllä ajanhetkellä 0,08 s valinnan kanssa, eikä pääpiikiltä havaittu väärää hyppyä. Yksi kynnys ei täyttynyt: skaalauksen yksikkötestiruudukko ulottuu erottimien lineaarisen alueen ulkopuolelle (havainto F1 tiedostossa docs/design/evidence/boc-bump-jump/RESULTS.md). MODELLED; kirjanpitorivi ”BOC(1 1) tracking: DLL scaling and bump-jump ambiguity resolution (opt-in)”.

  • Laboratoriosovitus IQ-kampanjoista (B7.1, docs/design/LABFIT-FROM-IQ.md). Labfit-skenaarion [input] campaign = "<out-dir>" sovittaa kansion, jonka komento kshana iq campaign tulosti, komentorivillä (kshana iq labfit), Pythonissa (kshana.iq_labfit) ja MCP:n labfit-työkalussa (vain sen työhakemiston sisällä olevat kansiot). Se sovittaa yhden yksikön signaalia, silmukkasuunnittelua, etupääketjua ja häirintälähetintyyppiä kohti:

    • C/N0-malli ilmoitettua J/S-arvoa vasten, sensuroinnin kanssa;
    • seurantakynnys, suoraan ja suljetussa muodossa;
    • seurantasilmukka- ja empiiriset lukitusmallit, kytkettyinä C/N0-mallin kautta, viipymineen;
    • siemenluvulla ajettu klusteribootstrap tallenteiden yli, 90 % ennustevälit ja leave-one-recording-out-pidätysaineistot;
    • ennakkorekisteröity taulukko [validation], tiivistetty, ja PASS/FAIL kutakin kynnystä kohti.

    Raportti on kshana.labfit-iq/1 JSON-, CSV- ja Markdown-muodossa, yksikkölohkon kanssa. Q_eff ei ole tunnistettavissa C/N0-datasta ilman riippumatonta tehomittausta. Se ilmoitetaan, ei koskaan soviteta, ja sovitettu parametri on delta_eff = delta - 10 log10 Q (suunnittelumuutos 2026-10-12). Tuntematon häirintälähetintyyppi saa vahingollisimman ilmoitetun arvon Q (cw, 1). Kshanan omista kohtauksista tehdyillä synteettisillä kampanjoilla pidätysaineiston kattavuuskynnys (c) menee läpi. Suureen delta_eff kynnykset (a') ja (b') (0 / 50 kampanjaa katettu) sekä suljetun muodon kynnyskriteeri (d) eivät täyty: ne on kirjattu arvoineen. MODELLED; kirjanpitorivi ”Calibration of the open receiver's C/N0 and lock models to IQ campaign results, with stated prediction error”. Vastaanottimen lokin labfit-polku ja sen tulosteet ovat ennallaan.

  • Tyyppi solar-system JPL-kernelillä (CAP-31): planetary_kernel_path ottaa kunkin SPK:n sisältämän kappaleen (de440s:llä: Merkurius, Venus, Maa, Kuu) kernelistä, nimiö KERNEL, ja lisää lohkon kernel vain, kun se on asetettu. Uusi rivi, VALIDATED SPICE-ohjelmaa vasten (ennakkorekisteröity f8e946ea; pahin 3.3e-5 m, 1.0e-11 m/s). Oletusraportti on ennallaan.

  • Porkchop DE440-efemeridillä (CAP-20b): maneuver::porkchop_kernel pyyhkäisee C3:n ja saapumis-V∞:n heliosentrisillä tiloilla DE440 SPK:sta. Uusi rivi, VALIDATED seuraavia vasten: SPICE-tilat ja

    • pykep 3.0.1 (ennakkorekisteröity 2d857fb1; Maasta Marsiin 2026-2028, 304 solua, pahin 2.6e-14, sama pienimmän C3:n solu).
  • LRO:n ei-gravitaatiomakromalli: NOT MET (DS-LRO-10, ennakkorekisteröity e82047e2). lunar_od::LunarMacroModel (valinnainen kautta LunarForceModel::macro_model): tasolevyn suora aurinkosäteily Kuun varjolla, Aurinkoa seuraava paneeli sekä kuun albedo ja lämpö-IR; LunarMacroModel::lro_generic on nimetty yleinen LRO-approksimaatio julkaistuista tosiasioista (ei bussilevyjä: levytaulukkoa ei saatu). LRO-kaarella, jonka pituus on 4 h, se jättää pelkistetyn dynaamisen RMS:n arvoon 6,668 m ja dynaamisen arvoon 11,94 m, epäuskottavalla säteilykertoimella (noin +21 / −22), joten kaikki kolme kynnystä jäävät täyttymättä. Havainto on kiinnitetty testillä, eikä oletustuloste muutu (docs/design/evidence/ds-lro-10-macro-model/RESULTS.md). Valinnainen kuun kanuunankuula-SRP käyttää nyt Kuun kartiovarjoa Maan sijaan (forces::conical_shadow_body).

  • Kuun OD: valinnainen k2-kiinteän kappaleen vuorovesi ja selenosentrinen suhteellisuus (DS-LRO-11), oletuksena pois (LunarForceModel::lunar_tide, ::relativity); kytkin KSHANA_LRO_DEGREE ANISE-ristiinvalidointia varten (DS-LRO-04); LRO-kaaren testiaineisto, pituus 24 h, ja vain tiedoksi tarkoitettu pitkän kaaren sovitus (DS-LRO-09). Tietoajot on kirjattu tiedostoon docs/design/evidence/ds-lro-09-11-longer-arc/RESULTS.md; mikään julkaistu luku ei muutu.

  • CR3BP 9:2 NRHO verrattuna CAPSTONE-lentoon (CAP-29d): uusi rivi tasolla MODELLED, joka mittaa moottorin ympyrärajoitetun NRHO:n suhteessa CAPSTONE-luotaimen lentämään rataan (JPL Horizons, maaliskuu 2023; ennakkorekisteröity 4e868170): jakso 1,07 %, apolune 0,05 %, perilune 4,1 % CAPSTONEn keskiarvoista, rekisteröityjen kynnysten 3 / 5 / 20 % sisällä. Mittaus, ei validointi.

  • CR3BP:n pyörivät tilat Kuu-keskiseen ICRF:ään (RM-34, FUT-06): cr3bp::to_moon_centred_icrf / from_moon_centred_icrf / to_moon_centred_icrf_de440 kuvaavat dimensiottoman Maa-Kuu-pyörivän tilan hetkelliselle DE440 Maa-Kuu-suoralle, mukaan lukien koordinaatiston tason ulkopuolisen kulmanopeuden. Uusi rivi, VALIDATED SPICE-kaksivektorikoordinaatistoa vasten (ennakkorekisteröity 2313eb1b, muutettu ennen yhtään ajoa d5ef79b3; 72 tapausta, pahin 1.8e-7 m ja 1.2e-9 m/s).

  • CR3BP-perheen jäsenet JPL Three-Body Periodic Orbits API:a vasten: NOT MET (RM-35, ennakkorekisteröity a9074f65). cr3bp_family (halo-, NRHO- ja DRO-korjaus, monodromian stabiilisuusindeksi, pseudokaarenpituusjatkuminen) täsmää 54 API-jäseneen 58 jäsenestä kaikilla kynnyksillä (tila, jakso ja Jacobi alle 1e-10 kaikkialla). Yksi L1-halon stabiilisuusindeksi (9.5e-2) ja kolme pienen DRO:n sulkeutumista (1.5e-8–3.3e-8 kynnystä 1e-8 vasten) eivät täytä kynnystä, joten moduuli on merkitty #[doc(hidden)], eikä mikään rivi väitä sitä. Tulokset: docs/design/evidence/cr3bp-families/RESULTS.md.

  • Valinnainen DE440-kuun orientaatio ja ympäristö (FUT-05, DS-LRO-08; oletukset ennallaan): lunar_frame::try_icrf_to_moon_pa_de440, lunar::try_mci_to_mcmf_de440 / try_mcmf_to_mci_de440 (epookkiin ankkuroitu, DE440 pääakselit) ja lunar_od::De440LunarEnvironment (upotettu DE440 PA -orientaatio sekä geosentrinen Aurinko ja Kuu käyttäjän toimittamasta DE440 SPK:sta). ANISE-ohjelmaa vasten (ennakkorekisteröity ea537710): orientaatio erolla enintään 3.5e-7 rad ja LRO-sovitukset erolla enintään 1 mm, mutta efemeridihaara ei täyttänyt kynnystään (Aurinko 30,7 m, Kuu 1,1 m, ANISE-puolella aikapoikkeama ~1 ms), joten se ei ole validoitu rivi. Tulokset: docs/design/evidence/fut05-de440-lunar-env/RESULTS.md.

  • Kuun koordinaatiston kampanjadatum, kuntoluvulla skaalattu NumPy-kynnys: NOT MET (ennakkorekisteröity b887eb05; pysyy MODELLED). Vaihe 0 sulkee pois pseudoinverssivarapolun syynä stations-estimated-eroon 0,30; NumPy täsmää kynnyksen sisällä kuudessa skenaariossa kahdeksasta, mutta stations_estimated ei täytä sitä (6.8e-6 kynnystä 5.9e-7 vasten), ja tuoreella päivämäärällä 2026-12-01 havaitsematon etelänavan majakka tekee majakan informaatiosta rankkivajaan, jota muuttumaton oraakkeli ei pysty evaluoimaan. Tulokset: docs/design/evidence/mr05-lunar-datum-cond/RESULTS.md.

  • Kuun koordinaatiston datum todellisesta havaintokampanjasta (analyyttinen Kuu) VALIDATED tuoreilla 2025 EDC-normaalipisteillä (ennakkorekisteröity 31f5283 ennen kuin yhtäkään haettiin): muuttumaton SPICE- ja NumPy-oraakkeli on samaa mieltä kirjanpidosta, rankeista ja nollakytkennästä, sekä sigmoissa erolla 1.11e-3 (kynnys 1e-2), kuntoluvussa 8.95e-4 ja poikittais-/pitkittäissuhteissa 1.79e-3 (kynnys 2e-2). Vain kovarianssilaskennan Library-tarkistus; kynnykset eivät erottele Kuu-malleja. Tulokset: docs/design/evidence/mr06-llr-analytic-fresh/RESULTS.md.

  • Neljäntoista lisätyn aurinkokunnan kappaleen IAU-orientaatio ja GM erotettu rivistä ”Physical constants of every solar-system body” omaksi riviksi tasolla VALIDATED (ennakkorekisteröity 154bc54): Body::iau_rotation_et täsmää SPICEn funktioon pxform aineistolla pck00011 erolla enintään 1e-9 rad 574 matriisissa alkuperäisillä epookeilla ja 574 matriisissa 41 tuoreella epookilla, joita ei ole ennen verrattu (pahin Phobos 1.38e-10 rad), ja Body::mu on yhtä suuri kuin gm_de440 kaikille neljällätoista kappaleelle. Alkuperäisen rivin loppuosa (J2, keskisäde, raportti) pysyy MODELLED. Tulokset: docs/design/evidence/mr08-body-orientation/RESULTS.md.

  • Monikierroksinen Lambert (maneuver::lambert_multirev): kaikki ratkaisut enintään kolmella kierroksella, molemmat haarat. Uusi kirjanpitorivi, VALIDATED ohjelmaa pykep 3.0.1 vasten (ennakkorekisteröity a75de851; 382 tapausta, 1058 ratkaisua, pahin nopeusero 1.6e-13 kynnystä 1e-8 vasten). Sisäinen Kepler-laskeutumissuoja löysi yhden funktion maneuver::kepler_universal rajoituksen kaarella e = 0,994; se on kirjattu tiedostoon docs/design/evidence/lambert-multirev/RESULTS.md.

  • Laatikko-siipi- ja ECOM2-auringonsäteilypaine (DS-PA-14), valinnainen. srp_boxwing: tasolevyinen laatikko-siipimalli Galileo FOC/IOV -taulukoilla GSC:n satelliittimetatiedoista, nimellisessä GNSS-yaw-ohjauksessa, säteilykertoimen ja paneelikohtaisten osittaisderivaattojen kanssa, sekä empiirinen ECOM2-malli osittaisderivaattoineen. Valitaan kutsulla ForceModel::box_wing_srp / PreciseForceModel::box_wing_srp (kentät srp_boxwing, oletus None: kanuunankuulapolku ja jokainen golden-vertailuarvo ovat ennallaan); laatikko-siipijoukon kanssa cr on sen säteilykerroin. Verrattu ohjelmaan Orekit 12,2 ennakkorekisteröinnin alla (xval/srp-boxwing-orekit/): jokainen kynnys täyttyi, noin 1e-15 suhteellisesti; VALIDATED mallin evaluointina, Galileo-SRP-ennuste pysyy MODELLED.

  • Litistyneen Maan SRP-varjo ja auringon reunatummuminen (FUT-09, RM-11). Uusi moduuli srp_shadow: oblate_conical_shadow (WGS-84-peittävä ellipsoidi), limb_darkened_shadow (Eddingtonin laki) ja ShadowModel, valitaan kutsulla ForceModel::srp_shadow (oletus: nykyinen pallomainen kartiovarjo, ennallaan); forces::srp_accel_with_lit_fraction. Litistynyt varjo täsmää ohjelman Orekit 12,2 valaistussuhteeseen erolla enintään 7.4e-9 2400 geometrialla (VALIDATED, xval/srp-oblate-shadow-orekit/); reunatummumisella ei ole ulkoista oraakkelia (MODELLED).

  • NRLMSISE-00-termosfääri (FUT-08, RM-10, DS-PA-13). nrlmsise00: portti funktioista gtd7 ja gtd7d (kytkimet, päivittäinen Ap ja 3-tuntinen ap-taulukkotila) NRL:n Fortranin julkisesta C-versiosta (public domain). Se on bitti bitiltä identtinen sen C-portin kanssa ja suhteellisesti erolla enintään 1.9e-6 ohjelmasta pymsis 0.13.0 (NRL Fortran, yksinkertainen tarkkuus) 720 pisteen ruudukolla, ja se toistaa 17 julkaistua testitapausta (VALIDATED; xval/nrlmsise00-pymsis/). Tämä validoi portin, ei mallin tarkkuutta mitattua tiheyttä vasten.

  • Valinnainen NRLMSISE-00-ilmanvastuksen tiheystaso. forces::DensityModel::{Exponential, Nrlmsise00 { f107a, f107, ap }}, forces::drag_accel_with_density, density_at ja propagator::ForceModel::drag_density. Staattinen eksponentiaalimalli pysyy oletuksena, bitti bitiltä. Avaruussää on vakio mallia kohti. VALIDATED ratatasolla ohjelman Orekit 12,2 oman NRLMSISE-00-ilmanvastuksen suhteen 24 h ajan (pahin 0,03 m, kun ilmanvastuksen siirtymä on jopa 142 km; xval/drag-tier-orekit/).

  • Valinnainen DE440 Aurinko ja Kuu Cowell-propagaattorissa (RM-33, FUT-10). propagator::ForceModel::with_ephemeris ottaa minkä tahansa EphemerisProvider (esim. DE440 KernelEphemeris) kolmannen kappaleen ja SRP-termeille; se hylkää tarjoajan, joka ei voi palvella epookkia, laskee siirtymät analyyttiseen sarjaan ja on oletuksena pois. EphemerisProvider::relative_position_jd2 säilyttää kaksiosaisen tarkkuuden. Verrattuna ohjelmaan Orekit 12,2 sen omalla DE440-lukijalla 24 h pitkät radat täsmäävät erolla enintään 0,017 m; ennakkorekisteröity Auringon/Kuun sijaintikynnys ei täyttynyt (6,4 m / 0,24 m; SPICE näyttää saman eron), joten MODELLED (xval/propagator-de440-orekit/).

  • Valinnainen S1-ilmakehän vuorovesi (DS-PA-03). tides::atmospheric_tide_s1 ja s1_air_tide_acceleration (Biancale & Bode 2006, GFZ STR06/01 taulukon 1 malli N1, asteet 2–6), otetaan käyttöön kutsulla air_tide_s1() kohteissa propagator::ForceModel ja precise_od::PreciseForceModel; oletuksena pois. MODELLED (kertoimet tarkistettu uudelleen julkaistua taulukkoa vasten; voiman vaikutukselle ei ole ulkoista oraakkelia).

  • Etäisyyden muutosnopeuden ja atsimuutti/korkeuskulma-eräradanmääritys korkeuskulmamaskilla (RM-36, FUT-13). orbit_determination::determine_orbit_batch_tracking, simulate_tracking, predict_tracking, propagate_with_stm (variaatio-STM analyyttisillä kahden kappaleen + J2 -osittaisderivaatoilla), is_visible, measurement_with_partials; batch_ls::gauss_newton_analytic. Pelkän etäisyyden polku on ennallaan. Verrattu ohjelman Orekit 12,2 eräpienimmän neliösumman ratkaisuun 8 ennakkorekisteröidyssä skenaariossa: jokainen kynnys täyttyi paitsi kohinattoman tilan yhtäpitävyys (≤ 1 cm), joka ei täyttynyt skenaarioissa 2 / 4 arvoilla 1,46 ja 1,74 cm, kun kshana on enintään 1e-8 m päässä totuudesta; kirjattu, MODELLED.

  • SP3-tarkkuuspainotus (DS-PA-06). sp3::parse_sp3_accuracy ja Sp3Accuracy::position_sigma_m kuvaavat otsikko- ja tietuekohtaiset tarkkuuskoodit havaintojen sigmoiksi; SP3-painotettu Galileo-sovitusvariantti (Tier-2 3D RMS 0,035 m verrattuna painottamattomaan 0,070 m) lisätään muuttumattomien tallennettujen ajojen viereen. MODELLED.

  • Swarm-A-täyskaaren dispatch-työ (DS-PA-08) tiedostossa .github/workflows/agency-od-validation.yml.

  • Planeettojen gravitaatio PDS SHADR -taulukoista (CAP-30; osa CAP-31). SphericalHarmonicField::from_shadr (src/gravity_pds.rs) lukee Marsin GMM-3:n (d/o 120) ja GRAIL GL0660B:n (d/o 660); Body::with_gravity_field liittää minkä tahansa ladatun kentän (oletukset ennallaan). Astetta 20 olevat rajaukset sisältyvät mukaan (NASA PDS, public domain; tests/fixtures/planetary_gravity/NOTICE.md); täydet tiedostot haetaan skriptillä xval/planetary-gravity-pyshtools/fetch_data.sh. VALIDATED ohjelmaa pyshtools 4.14.1 vasten (kokonaisgravitaatio erolla enintään 4e-15 arvolla d/o 120 koko pallon yli, 5e-14 arvolla d/o 660, kun |lat| ≤ 60°); kappalekoordinaatiston kytkentä pysyy MODELLED (kunkin kentän natiivi koordinaatisto ei ole käytetty IAU-koordinaatisto).

  • Korkea-asteinen gravitaatio asteeseen 2190 asti (RM-14, FUT-07). SphericalHarmonicField::acceleration_hf / potential_hf (Holmes–Featherstonen muokattu eteenpäin-sarake, ei alivuotoa, ei napasingulariteettia), prepare_high_degree, suoratoistava ICGEM-lataaja from_gfc_file / from_gfc_reader (normi- ja maksimiastetarkistukset, vuorovesijärjestelmä kirjattu, aikamuuttuvat termit hylätään) ja scripts/fetch_egm2008.sh (täysi EGM2008, SHA-256 kiinnitetty, ei mukana; testit ehdollistettu muuttujaan KSHANA_EGM2008_GFC). propagator::FieldEvaluator valitsee sen valinnaisessa Geopotential. Täsmää ohjelmaan Orekit 12,2 erolla 7.3e-17 m/s² asteeseen 2190 asti, ja 24 h kestävä 200×200 rata täsmää erolla 0,13 m. MODELLED: pyshtools ei täyttänyt ennakkorekisteröityä napa-alueen kynnystä (jäljitetty pyshtoolsiin) ja radan asteen 70 herkkyyskontrolli ei täyttynyt (0,73 m < 1 m); molemmat on kirjattu tiedostoon xval/.

  • DOP853-integraattori (FUT-11). integrator::integrate_dop853, integrate_dop853_checked, integrate_dop853_dense (7. kertaluvun tiheä tuloste), dop853_step, dop853_initial_step, askelsuojalla, joka estää epäonnistuessaan (fail-closed); propagator::Integrator::Dop853, propagate_dop853, propagate_dop853_checked. Oletusajuri on ennallaan. VALIDATED ohjelmistoa SciPy 1.18.1 vasten solve_ivp(method="DOP853"): yksittäiset askeleet erolla enintään 5.6e-15, vastaavat askelsarjat, lopputilat erolla enintään 1.6e-12 (xval/dop853-scipy/).

  • Robusti Kepler-ratkaisija (FUT-12). Uusi moduuli kepler: solve_kepler_markley (Markleyn 1995 aloitusarvio, kumoutumisvapaa residuaali) kaikille 0 ≤ e < 1, kääritty funktioon propagator::solve_kepler_robust. VALIDATED 50-numeroisia mpmath-juuria vasten tarkkuudella 0,9 ε·|E| aina arvoon e = 0,999999 asti (xval/kepler-mpmath/).

  • Valinnainen tesseraalinen Maan gravitaatio Cowell-propagaattorissa (RM-09). propagator::ForceModel saa kentän geopotential: Option<Geopotential> (with_geopotential, with_egm2008(nmax)). Se evaluoi kentän SphericalHarmonicField (mukana oleva EGM2008 asteeseen/kertalukuun 70 asti tai mikä tahansa ICGEM-tiedosto .gfc) Maahan kiinnitetyssä koordinaatistossa, joka saavutetaan Maan kiertokulmalla (EarthFixedFrame::Era) tai CIO GCRS–ITRS-ketjulla (EarthFixedFrame::Cio). Oletus None: mikään nykyinen tuloste ei muutu. VALIDATED ohjelman Orekit 12,2 Holmes–Featherstone-toteutusta vasten 24 h ajalla (6 tapausta, pahin 0,036 m), kynnykset ennakkorekisteröity tiedostossa xval/cowell-tesseral-orekit/PREREGISTRATION.md.

  • Kaksiosaiset Julian-päivämäärät Maan pyörimisen läpi rataketjussa: jd2::gmst82, cio::gcrs_to_itrs_matrix_jd2, frames::teme_to_itrf_jd2 / itrf_to_teme_jd2, orbit::Propagator::position_in_frame_jd2 ja own_jd2_utc, muunnokset From tyyppien jd2::Jd2 ja timescales::TwoPartJd välillä sekä valinnainen two_part_jd = true skenaariotyypille ephemeris (ECEF, maajälki ja asemanäkymä; oletuksena pois ja ennallaan, ja avain jätetään skenaariotiivisteestä pois, kun se on pois). Uusi kirjanpitorivi, VALIDATED ohjelmaa pyerfa vasten (gmst82/c2t06a) (ennakkorekisteröity b10475ee; 40 päivämäärää: GMST bitti bitiltä identtinen, matriisi erolla enintään 2.7e-14, kierto 1 µs askelilla erolla enintään 1.1e-14 rad, kun taas polku, jossa on vain yksi f64, ei täytä niitä). Cowell-voimamallin epookki pysyy yksiosaisena (tyyppi f64); syy on sen dokumentaatiossa.

  • EOP-ennuste taulukon jälkeen (EopSeries::with_ls_ar_prediction, EopSeries::last_mjd): IERS:n Maan orientaatiosarjan valinnainen jatko LS+AR-ennustimella, joka on laskettu sen viimeiseltä riviltä, joten myöhemmän epookin koordinaatiston argumentit seuraavat ennustetta sen sijaan, että kiinnittyisivät viimeiseen riviin. Taulukon sisäiset vastaukset ovat bitti bitiltä identtiset (testattu); sarja kiinnittyy edelleen viimeiseen riviin, ellei tätä kutsuta. Ennusteen tarkkuus pysyy nykyisenä LS+AR-havaintona Bulletin A:ta vasten (MODELLED).

  • Taivaannapaoffsetit dX, dY CIO-ketjussa (cio::gcrs_to_cirs_matrix_with_offsets) sekä funktioiden precession_matrix, teme_to_gcrs_matrix ja uuden funktion suorat ERFA-vektoritarkistukset. Uusi kirjanpitorivi, VALIDATED ohjelmaa pyerfa vasten (ennakkorekisteröity 979c1e39; 40 epookkia 1950–2100: prekessio ja CIO bitti bitiltä identtiset, TEME→GCRS erolla enintään 1.1e-10 rad, kahden termin equation-of-the-equinoxes-sarjan ennustettu vaikutus). Nykyiset funktiot ovat ennallaan.

  • Ennen vuotta 1972 oleva UTC kaksiosaisella aikapolulla (timescales::tai_minus_utc_on_date sekä Jd2::from_utc_calendar, jd2::utc_to_tai ja jd2::tai_to_utc päivästä 1960-01-01 alkaen): liukuvanopeuksinen (”kumisekunti”) aika, SOFAn drift-taulukolla, murtoluvulla päivän lopun askelilla ja päivän murto-osan UTC–SI-skaalauksella. Uusi kirjanpitorivi, VALIDATED ohjelmaa pyerfa vasten (dtf2d/utctai/taiutc) (ennakkorekisteröity 23c40661; 117 hetkeä 1960–1971, pahin 2.9e-11 s kynnystä 1 µs vasten). Jokainen tulos vuodesta 1972 alkaen on bitti bitiltä identtinen (tarkistussumma kiinnitetty ennen muutosta). Ennen vuotta 1960 TAI − UTC on 0, kuten SOFAssa. Yksiosainen funktio timescales::tai_minus_utc (tyyppi f64) on ennallaan.

  • GLONASS-yleislähetyksen satelliittikello (GlonassEphemeris::sv_clock_bias_s): −τn + γn·(t − tb) RINEX-tietueesta, satelliittikellosta luettavalla ajalla (kaksi kiinteän pisteen iteraatiota, RTKLIB-käytäntö). Jäsennettyjä −τn ja γn ei aiemmin käytetty. Uusi kirjanpitorivi ”GLONASS broadcast satellite clock and broadcast-orbit propagation”, VALIDATED ohjelmaa RTKLIB 2.4.2-p13 vasten (geph2clk/geph2pos) (ennakkorekisteröity e099c42a; 292 tapausta todellisessa 2013 yleislähetystiedostossa: kelloero 0 s, pahin sijainti 1,1 mm kynnystä 1 cm vasten). Kirjastofunktio; mikään skenaariotuloste ei muutu. PZ-90.11 → ITRF -muunnosta ei sovelleta, ja moduuli kertoo sen.

  • PPP-aikaratkaisu IGS-asemakelloa vasten (0,36, FUT-19): WTZR:n float-PPP-suotimen vastaanotinkello täsmää aseman IGS-finaalin yhdistettyyn kelloon (keskihajonta 0,075 ns) vakiosiirtymällä −0,66 ns konvergoituneiden kahden tunnin aikana. Kynnykset ennakkorekisteröitiin tiedostossa xval/ppp-time/. VALIDATED (uusi kirjanpitorivi). Uusi testiaineisto igs_2025055_WTZR_05m_0006.clk, aiemmin satelliittikelloille käytetyn IGS:n finaalikellotiedoston asemakellotietueet.

  • PPP-vastaavuus gLAB-ohjelman kanssa (0,36, WP-07, RM-31): gLAB 6.0.0 ajettiin samoilla WTZR-syötteillä erillisenä työkaluna (Apache-2.0-ydin; latauksen tarkistussumma varmennettu julkaistua luetteloa vasten), komentorivillä, joka oli menettelymuutoksessa sitoutettu ennen ajoa. Ensimmäisellä rekisteröidyllä ajolla Kshanan float-PPP ja gLABin ovat samoilla 240 / 240 epookilla erolla enintään 0,05 m ja viimeisellä 5,0 mm. SPP-kynnys ei täyttynyt (mediaani 1,187 m kynnystä 0,50 m vasten) ja on kirjattu havaintona: gLABin ja RTKLIBin omat SPP-ratkaisut eroavat toisistaan 0,852 m. Rekisteröity sääntö jättää siksi molempien työkalujen haarat kokonaisuutena täyttämättä, vaikka PPP-vastaavuus pätee.

  • RINEX 4 -navigointisanomien luku (0,36, WP-07, PRO-41): rinex::parse_nav lukee RINEX 4.00-4.02 -navigointitiedostot (> EPH GPS LNAV, Galileo I/NAV ja F/NAV, BeiDou D1/D2, QZSS LNAV; muut tietueet ohitetaan seuraavaan tietueotsikkoon), ja parse_nav_with ottaa vastaan asetuksia. VALIDATED saman päivän IGS RINEX 3 -yhdistettyä tiedostoa vasten: jokainen dekoodattu kenttä identtinen ja 0 m sijainnissa. RINEX 2/3:n luku on ennallaan.

  • BeiDou GEO -yleislähetyssijainnit (valinnainen): NavParseOptions::include_beidou_geo ja RinexEphemeris::sv_position_ecef_bds_geo (BDS ICD, −5 asteen kallistus). parse_nav ohittaa edelleen GEO-satelliitit. MODELLED: ennakkorekisteröity vertailu tarkkaan rataan on dataehtoinen eikä sitä ole vielä ajettu.

  • RINEX 4 -havaintotiedostot: todellinen RINEX 4,00 MGEX -havaintotiedosto luetaan testeissä (MODELLED, muotovastaavuus).

  • RTK ja LAMBDA todellisella RINEX-datalla (0,36, WP-07 ★): rtk_real::run_rtk, lyhyen perusviivan kaksoiserot kaksitaajuisesta GPS-koodista ja vaiheesta float-Kalman-suotimella ja LAMBDA-kokonaislukulukituksella (suhdetesti). VALIDATED IGS-asemilla WTZR ja WTZZ (1,4 m etäisyydellä toisistaan) niiden ITRF2020-perusviivaa vasten ennakkorekisteröidyillä kynnyksillä: kokonaisluku ratkaistu jokaisella epookilla ensimmäisten kymmenen minuutin jälkeen, perusviivavirheen mediaani 4,5 mm ja 95. prosenttipiste 5,5 mm.

  • Todellisen datan PPP:n RTKLIB-vastaavuus (RM-31): xval/ppp-parity/run.sh ja tests/ppp_parity_glab_rtklib.rs ennakkorekisteröidyillä kynnyksillä. RTKLIB v2.4.2-p13 PPP samoilla WTZR-syötteillä täsmää Kshanaan erolla enintään 5 cm jokaisella viimeisten kahden tunnin epookilla (9,7 mm lopussa) kolmannella rekisteröinnillä; kaksi ensimmäistä ajoa, jotka kirjattiin havainnoiksi, olivat kiinteä vuorovesi pois päältä ja vastaanottimen antenni RTKLIBin perusslotissa. Yhden pisteen vastaavuuskynnys ei täyttynyt (1,09 m mediaani kynnystä 0,5 m vasten). gLAB-haaraa ei ole ajettu (dataehtoinen).

  • LNAVin jälkeiset navigointisanomakooderit (0,36, WP-07, PRO-40): gnss_navmsg koodaa GPS CNAV:n (sanomatyypit 10, 11, 30; CRC-24Q; jatkuva nopeuden 1/2 K=7 -koodaus), Galileo I/NAV:n (sanatyypit 1-5 parillisilla/parittomilla nimellissivuilla; 30x8-lomittaja; synkronointi 0101100000) ja Galileo F/NAV:n (sivutyypit 1-4; 61x8-lomittaja; synkronointi 101101110000), testidekoodereineen. MODELLED: edestakaiset kierrokset ja ICD:n tunnetut vastaukset; ennakkorekisteröity tarkistus, että yleislähetetyt Galileo-efemeridit ovat kooderin LSB-ruudukossa, piti (pahin 3.6e-3 LSB), mutta satelliittimäärän kynnys ei täyttynyt (15 / 20), kirjattu. Kooderit ovat kirjastofunktioita; skenaariokytkentä ei kuulu tähän muutokseen.

  • IONEX-tiedostonlukija (0,36, WP-07): ionex::parse_ionex_file tyypeillä IonexFile, IonexHeader, IonexEpoch, IonexFileMap ja IonexTimeInterp: tiukka kiinteäsarakkeinen IONEX 1,0 -lukija, jossa epookit lasketaan ensimmäisen kartan päivästä, 9999 luetaan puuttuvaksi, RMS-kartat sekä formaatin lähimmän, peräkkäisen ja kierrettyjen karttojen aikainterpolaatiot; vinon TEC:n laskenta otsikon kuorikorkeudella. Tarkistettu sitoutetulla synteettisellä kartalla ja, dataehtoisesti (haettu testin aikana kiinnitetyllä SHA-256:lla, ei vendoroitu), oikean CODE GIM:n rajauksella: jokainen solmu tarkka; interpolaatio täsmää kaavaviitteeseen erolla 4e-13 TECU. RTKLIBin iontec täsmää erolla 3.6e-13 TECU 6885 pisteessä (ennakkorekisteröity B6). VALIDATED dataehtoisella todistusaineistolla (omistajan päätös, 2026-10-13): testi epäonnistuu millä tahansa muulla kartalla kuin SHA-kiinnitetyllä.

  • Hatchin kantoaaltotasoitus (0,36, WP-07): hatch::HatchFilter ja pvt::assemble_epoch_precise_smoothed, divergenssivapaa (ionosfäärivapaa) muoto tarkassa yhden pisteen kokoonpanossa. MODELLED kirjatulla havainnolla: IGS-asemalla WTZR se laskee yhden pisteen virheen mediaanin arvosta 1,55 m arvoon 1,12 m ja 95. prosenttipisteen arvosta 3,47 m arvoon 3,21 m, mikä jää vajaaksi ennakkorekisteröidystä 40 prosentin vähennyksestä (jäännösvirhe on harhamaista, ei kohinaa).

  • Float-PPP todellisella RINEX-datalla (0,36, WP-07): ppp_real::run_ppp, staattinen float-tarkka pistepaikannussuodin todellisella kaksitaajuisella GPS-koodilla ja vaiheella ja IGS-finaalituotteilla (antennisiirtymät ja -vaihtelut, kiinteän Maan vuorovesi, vaiheen wind-up, Shapiro-viive, estimoitu märkäviive, jaksohyppyjen havaitseminen), ja parse_antex_receiver. VALIDATED pidätetyllä IGS-asemalla WTZR sen ITRF2020-koordinaattia vasten ennakkorekisteröidyillä kynnyksillä: kun on kulunut 6 h, virhe on 1,5 mm vaakasuunnassa ja 2,9 cm pystysuunnassa, ja jokainen viimeisten kahden tunnin epookki on enintään 10 cm päässä.

  • SP3-tarkan kellon interpolointi (0,36, WP-07): Sp3File::clock_s ja clock_nodes interpoloivat taulukoidut SP3-satelliittikellot lineaarisesti kahden ympäröivän kelvollisen solmun välillä (huonon kellon sentinel ohitetaan), ja ClockRinex::from_sp3 syöttää ne kohteeseen PreciseProducts, joten tarkka ketju toimii pelkällä SP3:lla. VALIDATED IGS:n finaalin 30 s kelloja vasten päivältä 2025-02-24 ennakkorekisteröidyillä kynnyksillä: 32 GPS-satelliittia, keskipisteen RMS 0,121 ns (kynnys 0,15 ns), 95. prosenttipiste 0,265 ns (kynnys 0,30 ns).

  • RAIM kellon holdover-laatumittarien rinnalla (CAP-05b): kellotyypin valinnainen osio [integrity] raportoi erillisen lohkon integrity_fom (hetkellinen RAIM esiasetetulla taivaalla ilmoitetusta paikasta: epookkikohtainen tuomio ja suojaustasot, saatavuus; ei saatavilla, kun GNSS on estetty, ei koskaan ekstrapoloida). Holdover-luvut ovat ennallaan; ilman osiota tuloste on tavu tavulta identtinen. MODELLED.

  • JammerTest 2024 -dataan kalibroidut vastaanottimen luottamuskynnykset (CAP-13): ennakkorekisteröity C/N0-pudotuksen, AGC:n ja häirintäindikaattorin monitorien kalibrointi julkisella JammerTest 2024 -aineistolla (haettu ajon aikana, ei koskaan vendoroitu; examples/jammertest_trust_calibration.rs), toimitetaan vain valinnaisena [monitors] profile = "jammertest-2024-calibrated" (1,5 dB, 3,5 sigmaa, 29). Pidätetty aineisto: AGC-, häirintäindikaattori- ja unionikynnykset menevät läpi; C/N0:n väärän hälytyksen kynnys epäonnistuu (0,023 kynnystä 0,02 vasten), joten rivi on MODELLED (xval/jammertest-trust/RESULTS.md). Oletukset ja tulosteet ilman profiilia ovat ennallaan.

  • Usean satelliitin ARAIM-vikahypoteesit (CAP-05a): ADD v4.2 -osajoukkosääntö yleistettynä pareja pidemmälle (add_v42_subset_plan, add_v42_protection_levels_to_order; kertaluku 2 on täsmälleen nykyinen MAAST-tarkistettu polku) ja valinnainen kehittynyt RAIM näille hypoteeseille (araim_subset_raim), joka raportoi suurimman erotuksen osajoukon, kun vika havaitaan. Priorit, jotka vaativat syvempiä osajoukkoja, hylätään, ei koskaan typistetä. MODELLED.

  • Taivaanrantaprofiili vastaanottimen luottamuksessa (FUT-01): vastaanottimen luottamusistunto voi ilmoittaa [skyline]; sen takana olevat satelliitit menetetään taivaan osalta (sky-blocked, behind_skyline, open_fraction) ja niiden menetykset luokitellaan geometry, ei koskaan environment; ilman sitä atsimuuttiaukon varapolku ja kaikki tulosteet ovat kuten ennen. Miehistökoulutusgeneraattori saa tapahtuman natural-degradation (tukittu taivas, ei häiriö) ja skenaarion scenarios/training/fjord-natural-degradation.toml. UERE x DOP Monte Carlo saa suunnitelmamuistion kaksi maskattua taivaanrantageometriaa, ennakkorekisteröity yksin: kaikki 26 tarkistusta menevät läpi.

  • RFC 3161 -aikaleiman varmennus (CAP-14): kshana::evidence::tsa::verify_token tarkistaa aikaleimatunnisteen allekirjoituksen (RSA PKCS#1 v1.5, RSA-PSS, ECDSA P-256 ja P-384), sen ESS-allekirjoitussertifikaattisidonnan, allekirjoittajan timeStamping-käytön ja sen ketjun luotettuun ankkuriin tunnisteen genTime-hetkellä, offline; kshana evidence verify --tsa-ca <anchors.pem> soveltaa sitä paketin tiedostoon timestamp.tsr (valinnainen; ilman sitä raportti on ennallaan). VALIDATED, suppeasti: kaikki 27 itse generoitua tapausta täsmäävät OpenSSL 3.0.13 -ohjelman kanssa tuomiossa ja genTimessa, vertailussa, joka ennakkorekisteröitiin ennen kuin varmentaja kirjoitettiin. Peruutusta ei tarkisteta.

  • Lukukohtaiset varmennustasot jokaiselle tyypille (RM-04): jokaisen skenaariotyypin tulos päättyy nyt lohkoon figure_tiers, joka nimeää sen pääluvut, kunkin luvun omistavan varmennusmatriisin rivin ja riviltä luetun tason (luvut, joita mikään rivi ei omista, luetellaan tasottomina). Lohko liitetään ajon jälkeen ja riisutaan takaisin edelliseksi asiakirjaksi tavu tavulta (api::without_figure_tiers). Tyypillä lunar-station-coverage ei ole lohkoa figure_tiers, ennen kuin uusi päivätty ennuste korvaa sen jäädytetyn; tyypeillä leo-ppp, solar-system, sweep ja sweep-nd ei ole skalaaripäälukua, ja lunar-attack-surface kirjoittaa kompaktia JSONia. Kampanjan jäsenet pitävät tasottomat asiakirjansa.

  • Kvanttiesiasetus quantum-cai-coast (CAP-08c): mukana toimitettu inertiaskenaario, jossa kylmäatomi-interferometrikiihtyvyysmittari, määritelty interferometrifysiikallaan ([accel_quantum.cai] ilmoitetulla alustan tärinätasolla), kulkee navigointiluokan kvartsikiihtyvyysmittaria vastaan 110 minuutin GNSS-katkon läpi. MODELLED.

  • Greenhallin tarkka ekvivalenttinen vapausasteluku (CAP-03): allan::edf_greenhall, täysi Greenhallin ja Rileyn (2003) algoritmi (erotuskertaluvut 1–3, kohinaeksponentit väliltä +2 ja -4, limittäiset ja limittymättömät, modifioidut ja modifioimattomat, suurten J-arvojen taulukoilla), ADEV-, MDEV- ja HDEV-kääreillä. VALIDATED ohjelmaa allantools 2024,6 vasten ennakkorekisteröidyllä vertailulla: 4 876 ruudukkopistettä suhteellisella erolla enintään 6.0e-13; allantools epäonnistuu 32 lisäpisteessä, jotka kirjataan ilman oraakkeliarvoa. Funktion assurance::uncertainty luottamusvälit ovat ennallaan bitti bitiltä.

  • Kylmäatomi-interferometrin virhetermit (RM-26/27/28): Raman-laserin vaihekohina (retroheijastusviivetermin kanssa), termisen pilven aaltorintaman kaarevuusharha (puhdas defokus, havaintosäteellä) ja interferenssijuovan epäselvyyden ratkaisu (klassisesti avustettu ja kaksi kyselyaikaa), kirjastofunktioina tiedostossa src/inertial/cai_error_terms.rs, kukin suljettu muoto tarkistettu kvadratuuria tai Monte Carloa vasten. MODELLED; ei vielä tavoitettavissa skenaariotyypistä (docs/QUANTUM-MODELS.md).

  • Kellolokimuodot (RM-03): src/clock_log.rs lukee RINEX-kellotiedostot, TimeLab-tyyliset ASCII-vaihe- tai taajuuslokit ja TAPR TICC -laskurilokit yhdeksi normalisoiduksi vaihesarjaksi (tau0 ilmoitettu tai löydetty, aukot laskettu, aukkokäytäntö). Valinnainen: telecom-timing-sarja voi nimetä lokin ([series.clock_log]), ja kelloskenaarion taulukko [clock_log] lisää lohkon measured (ADEV, TDEV, MTIE). Ilman taulukkoa molemmat tyypit ovat tavu tavulta identtisiä (docs/CLOCK-LOG-FORMATS.md). Ennakkorekisteröity vertailu kolmella synteettisellä lokilla täytti vaihe- ja kytkentäkynnyksensä; estimaattorit täsmäävät allantoolsin kanssa erolla enintään 2.5e-14 kaikkialla, missä se evaluoi, eikä se evaluoi koko tallenteen MTIE-pistettä (kirjattu). MODELLED.

  • Taajuussynkronoinnin wander-maskit (RM-01): tyyppi telecom-timing saa seitsemän vakiolämpötilan MTIE- ja TDEV-wander-generointimaskia, ITU-T G.811 PRC, G.812 Types I–III, G.8262 EEC Options 1 ja 2 sekä G.8262.1 eEEC, taulukoiden kirjoittamilla potenssilakiosilla, ja viiteskenaario scenarios/telecom-synce-eec.toml (vapaasti käyvä OCXO EEC-maskeja vasten: se epäonnistuu kohdassa 1 000 s, missä silmukan on tehtävä työ). Jokainen rivi luettiin uudelleen itu.int-tekstiä vasten; G.812 (06/2004) on korvattu ennakkojulkaistulla 08/2026-painoksella, jota ei voitu lukea. MODELLED (transkriptio); nykyiset maskit ja tulosteet ovat ennallaan.

  • Suodatinpriorin ohjeet tyypille gnss-ins (0,36, WP-09, RM-21, havainto): paketin oletussuodattimen priori sopii taktisen luokan IMU:lle. Navigointiluokan IMU:lla oletus voi tehdä sulautetusta liukumasta huonomman kuin vapaa INS: 52 m vastaan 11 m lentokoneprofiilissa, jonka nopeus on 70 m/s. Aseta [imu_*.filter_prior] anturin luokkaa vastaavaksi, kuten uudet meri-, rautatie- ja ilmailupaketit tekevät. Mikään mukana toimitettu skenaario ei yhdistä navigointiluokan IMU:ta oletuspriorin kanssa: jokaisella, joka käyttää oletusta, on jäännöskiihtyvyysmittarin harhoja vähintään 0,015 m/s². Vain dokumentaatiota; mikään tuloste ei muutu.

  • Test-bench-vienti tarkistettu simulaattorin omilla lukijoilla (0,36, WP-09, CAP-16): 8 mukana toimitetun skenaarion liikesiedostot, jotka komento kshana bench-export tuottaa, luettiin takaisin gps-sdr-simin NMEA-, leveys-/pituus-/korkeus- ja Maahan kiinnitetyn liikkeen lukijoilla (MIT, commit 28ca29a6, käytetty erillisenä työkaluna polun xval/testbench-gpssdrsim/ kautta; mitään signaalifunktiota ei kutsuta). Ne palauttavat viedyn lentoradan erolla 1,2 mm, 0,15 mm ja täsmälleen. HAVAINTO: kyseisen simulaattorin Maahan kiinnitetty lukija ei pysty lukemaan täysleveää CSV:tä, koska sen 100 merkin rivipuskuri pilkkoo jokaisen rivin. docs/TEST-BENCH.md antaa nyt käytettävät sarakeleikkaukset ja simulaattorin rajan, 300 s. VALIDATED (uusi kirjanpitorivi); viennin tavut ovat ennallaan.

  • GNSS/INS KF-GINS-aineistolla (0,36, WP-09, FUT-17): moduulin fusion::kfgins lataajat ja ajaja sekä vipuvarsimittausmalli suljetun silmukan EKF:ssä. KF-GINS-demoaineistolla (haettu testin aikana, ei vendoroitu) Kshanan horisontaalinen RMS referenssilentorataan nähden on 1,09 cm, kun KF-GINSin oma on 1,11 cm, ja jokainen ennakkorekisteröity kynnys piti. VALIDATED dataehtoisella todistusaineistolla (omistajan päätös, 2026-10-13): aineisto haetaan SHA-256-kiinnityksillä ja toistopolku on tiedostossa xval/kfgins/PREREGISTRATION.md.

  • Kytketty PNT-suodin fusion-paketissa (0,36, WP-09, FUT-16): tyyppi fusion ottaa valinnaisen taulukon [coupled], joka ajaa yhden pinotun suodattimen pseudoetäisyyksillä ja kiihtyvyysmittarin harhatilalla (fusion::coupled::CoupledPntBiasFilter), ja fusion::coupled::CoupledPnt3d on 3D 8-tilainen versio. Uusi mukana toimitettu skenaario fusion-pnt-coupled: harhaisilla kiihtyvyysmittareilla kytketty tila pitää kvanttipaketin sijainnin tasolla 18,7 m (95. prosenttipiste) täydellä eheydellä, kun erilliset suotimet yltävät arvoon 430 m. Ilman taulukkoa sekä fusion että hybrid ovat ennallaan (kiinnitetty); hybrid hylkää taulukon. MODELLED.

  • Meri-, rautatie- ja ilmailu-GNSS/INS-paketit (0,36, WP-09, RM-21): mukana toimitetut skenaariot gnss-ins-maritime, gnss-ins-rail ja gnss-ins-aviation lentoratakirjastolla sekä valinnainen taulukko [tight] tyypille gnss-ins, joka sulauttaa pseudoetäisyydet SGP4-Walker-tähdistöstä (kaikki satelliitit nimellisenä, korkeimmat muutama heikennettynä). Rautatiepaketissa tiukka kytkentä pitää navigointiluokan ratkaisun tasolla 5,3 m läpi leikkauksen ja tunnelin, kun löyhästi kytketyllä ratkaisulla se on 12,9 m. Ilman taulukkoa [tight] paketti on ennallaan (kiinnitetty). MODELLED.

  • Kantoaaltovaiheen tiukka kytkentä (0,36, WP-09, RM-25 / FUT-17): fusion::carrier_tc, virhetilainen EKF, jossa on eksplisiittinen kaksitilainen vastaanotinkello ja float-kantoaaltoepäselvyydet, jota ajaa SGP4-Walker-tähdistö Klobuchar- ja Saastamoinen-korjauksin mittaussilmukassa, aikaerotettu kantoaaltojen jaksohyppyjen havaitseminen ja epäselvyyksien uudelleenalustus, sekä pelkällä koodilla ajettu vertailuajo samoilla mittauksilla. MODELLED: 8-kuvioajolla kantoaaltoratkaisu on 2,5 cm vastaan 47 cm pelkällä koodilla, ja NIS/NEES ovat johdonmukaisia eri siemenluvuilla.

  • GNSS/INS-lentoratakirjasto (0,36, WP-09, RM-24): tyyppi gnss-ins ottaa valinnaisen taulukon [trajectory] asetuksella profile = "straight" | "figure8" | "stop_go" | "aircraft" | "uas" | "csv". Profiilit komentavat Euler-nopeudet ja ratakiihtyvyyden totuustilasta ja johtavat todellisen IMU:n jäykän kappaleen kinematiikasta (koordinoidut käännökset, nousut, Coriolis); csv tuo totuuslentoradan (t, lat, lon, alt, vn, ve, vd, roll, pitch, yaw) ja ratkaisee IMU:n, joka sen toistaa. Ilman taulukkoa paketti lentää historiallisen ajonsa bitti bitiltä (kiinnitetty). MODELLED.

  • Leveys-/pituusasteen DEM-ruudut kuun horisontille: [terrain] dem_tile_path lukee tekstiruudun realdata::lola_dem (korkeudet keskipallon yläpuolella leveys-/pituusasteruudukossa) napastereografisen dem_path sijaan, sekä tyypille lunar-station-coverage että moonlight-service-volume; raportti toistaa ruudun (terrain.dem_tile, SHA-256:nsa kanssa). realdata::lola_dem on nyt kytketty horisonttisäteen marssiin. Mukana olevasta rajauksesta uudelleennäytteistetty ruutu antaa asemalle rajauksen horisontin tarkkuudella 0,22 astetta. MODELLED.

  • Maasto palvelutilavuuden vientipaikalla: kun osio terrain on, tyypin moonlight-service-volume satelliittikohtaisen geometrian viennin jokainen rivi sisältää clears_terrain (satelliitti ohittaa tasaisen maskin ja vientipaikan horisontin sen atsimuutissa), raportti sisältää paikan horisontin (export_site_terrain), ja ajonaikainen CSV saa sarakkeen. Ilman maastoa vienti on ennallaan. MODELLED.

  • Pääkentät moottorilta (0,36, STUDIO-06): kshana::api::HEADLINE_FIELDS, field_importance_json() ja WebAssembly-funktio field_importance() kertovat kahdelletoista tyypille, mitkä skenaarion kentät vastaavat sen kysymykseen, parhaat ensin, pistepolkuina (jammers[].eirp_dbw). Studio lukee ne ennen omaa järjestystään. Vain näyttömetadataa: moottori ei koskaan lue sitä, mikään skenaariotiedosto ei tarvitse sitä, mikään tulos ei riipu siitä. tests/field_importance.rs epäonnistuu, jos tyyppi ei ole ajettavissa tai polku ei löydy yhdestäkään tyypin mukana toimitetusta skenaariosta (se löysi kaksi polkua, jotka Studion litistetyt tunnisteet olivat kirjoittaneet ilman taulukon hakasulkeita).

  • Tyyppi–moduuli-taulukko moottorilta (0,36, STUDIO-05): kshana::api::KIND_MODULES, kind_modules_json() ja WebAssembly-funktio kind_modules() antavat jokaiselle skenaariotyypille, jonka varmennusmatriisin rivit nimeävät muun moduulin kuin sen oman, moduulien nimet. Studion ominaisuuskartta käytti omaa käsin kirjoitettua kopiotaan; tests/kind_modules.rs epäonnistuu, jos taulukon tyyppi ei ole ajettavissa tai moduuli ei esiinny missään matriisirivissä. Mikään tuloste ei muuttunut.

  • Lyhyt IQ-ajo selainkoontiversiossa (0,36): iq_signals() ja iq_run_short(fs_hz, duration_s, signal, ids, dopplers_hz, cn0_dbhz, seed) WebAssembly-moduulissa rakentavat synteettisen kohtauksen, hankkivat kunkin satelliitin ja seuraavat hankitut, kaikki muistissa, rajattuna arvoihin 0,25 s, 1 000 000 näytettä ja 8 satelliittia. Kohtausrakentaja ja signaalihaku nimellä siirrettiin pois vain natiivista iq::cli (kohteisiin iq::scene::synthetic ja iq::signals::by_name), jotta molemmat koontiversiot jakavat ne; komentorivin tuloste on ennallaan. Natiivitesti ja web/smoke.mjs vertaavat samaa pyyntöä yhteen golden-tiedostoon (tests/fixtures/iq_short_golden.json) tavu tavulta: siirrettävän matematiikan muutoksen (STUDIO-15, alla) jälkeen selainkoontiversio ja natiivikoontiversio antavat samat bitit.

  • Tyypitetyt Python- ja TypeScript-rajapinnat (CAP-34): kshana.pyi tyypittää suljetut sanastot (ScenarioKind, jokainen tyypin nimi; ErrorKind; ProvenanceClass) sekä sanakirjat KindMeta ja FieldUnit; scenario_kinds() ja error_kind() palauttavat ne. WebAssembly-paketti lisää run_typed (yksi ajo tyypitettynä oliona RunOutput, jäsennetty asiakirja kentässä data) ja scenario_kinds (jäsennetty KindMeta[]), ja sen kshana.d.ts sisältää saman sanaston; error_kind on tyypiltään ErrorKind | "". tests/typed_api_sync.rs pitää molemmat luettelot yhtä suurina moottorin kanssa.

  • Yksiköt jokaiselle tyypin sweep-nd sarakkeelle (FUT-28): tyypin sweep-nd tulos sisältää nyt key_units ja metric_units, kunkin pyyhkäistyn avaimen ja kunkin tallennetun mittarin yksikön, luettuna pyyhkäistyn paketin omasta yksikkötaulukosta. Akseli voi ilmoittaa unit avaimelle, jota paketti ei toista; ilmoitettu yksikkö, joka on ristiriidassa paketin kanssa, hylätään, ja yksikkö, jota kumpikaan ei anna, on null, ei koskaan arvattu. points[].coords[] ja points[].metrics[] kuvataan, joten jokainen 76 tyypistä on nyt täysin katettu kenttäyksikköportilla (kattamattomien tyyppien katto 1 -> 0).

  • NumPy-taulukot kohteesta RunOutput (FUT-26): Pythonin RunOutput saa funktiot array(path), columns(path) ja series(), jotka palauttavat taulukoita (numpy.ndarray) numeerisesta listasta, tietueluettelon numeerisista sarakkeista tai asiakirjan jokaisesta tietuesarjasta. Jokainen taulukko on yhtä suuri kuin numpy.asarray samoista arvoista kohteesta data() (dtype ja bitit). NumPy tuodaan vain, kun jotakin niistä kutsutaan, eikä se kuulu ajonaikaisiin vaatimuksiin. Tyypitetty tiedostossa kshana.pyi ja stubtestillä tarkistettu.

  • Kampanjaoptimoija (CAP-32): tyypin campaign uusi valinnainen osio [optimize] hakee yhdestä kolmeen skenaarioavainta ilmoitettujen rajojen sisällä yhden mittarin parasta arvoa: minimoi, maksimoi tai osu tavoitteeseen. Se hakee tyhjentävästi ruudukolla tai deterministisellä rajatulla Nelder–Mead-simpleksillä. Jokainen evaluointi on nimetyn tyypin oikea ajo ja luetteloidaan tuloksen kohdassa trace. Esimerkki: scenarios/campaign-optimize-link-budget.toml. Kynnykset ennakkorekisteröitiin (docs/design/evidence/cap32-optimize/):

    • Rosenbrockin funktio täyttyy (f* = 1.7e-20);
    • suljetun muodon 1-D-tavoiteratkaisu täyttyy (6e-15 suhteellinen);
    • ruudukko on bittitasolla yhtä suuri kuin riippumaton raakavoima;
    • simpleksi suoriutuu vähintään yhtä hyvin kuin ruudukko 41 × 41, kun ajoja on 177.

    Kierros 1: 1-D-kynnys kirjattiin NOT MET, koska ennakkorekisteröity laatikko sulki ratkaisun pois. MODELLED; kirjanpitorivi ”Bounded optimisation of one metric over campaign parameters”. Additiivinen: kampanjat ilman osiota ovat ennallaan.

  • Kalibrointiensemblet (CAP-10): kolme yhden siemenluvun tarkistusta ajettu uudelleen 200 riippumattomalla siemenluvulla ennakkorekisteröityjä kynnyksiä vasten, tiedostossa docs/CALIBRATION-ENSEMBLES.md (generoi gen_calibration_ensembles; siemenluvukohtaiset arvot tiedostossa docs/data/calibration-ensembles.csv).

    • Kampanjan Monte Carlo -bootstrapin 95 prosentin luottamusväli kattaa todellisen keskiarvon ensembleissa 192 / 200, ja sen khiin neliö -tarkistus menee läpi 196 tapauksessa.
    • Yhden siemenluvun persentiilitoleranssi menee läpi vain 183 / 200 ensemblessa: NOT MET, kuten ennustettiin. Se on noin 2-sigman kynnys, kirjattu eikä löysätty.
    • Valkoisen FM:n ADEV-kalibroinnit menevät läpi jokaisella siemenluvulla, ja niiden pahin virhe on selvästi toleranssin sisällä.

    MODELLED.

  • Sisäänrakennetut tyypit trait-ominaisuuden Scenario kautta (FUT-27, kesken): trait BuiltinKind (api::BuiltinKind, lukukohtaisella tasokoukulla ja append_figure_tiers) ja ensimmäiset siihen siirretyt tyypit (inertial, spoof, passes, link-budget, jamming). Tuloste on ennallaan: koko katalogin manifesti jokaisen tulosteen SHA-256:sta on identtinen ennen ja jälkeen (tests/scenario_output_manifest.rs).

  • Playgroundin no-fetch-tarkistus (RM-07): tests/playground_no_fetch.rs tarkistaa kolme asiaa:

    • jokainen Studion kirjastoskenaario on selainpaketissa;
    • paketti on tavu tavulta identtinen hakemiston scenarios/ kanssa;
    • jokainen selainskenaario ajetaan tyhjästä työhakemistosta.
  • Alt-PNT-kartat: todellinen gravitaatiokenttä, karttavirheen Monte Carlo, täysresoluutioinen SRTM (0,36, WP-10). Tyyppi gravity-map ottaa valinnaisen [reference]: EGM2008-kertoimista syntetisoitu gravitaatioanomalia (tai ICGEM-tiedosto (.gfc) kentän gfc_path kautta, vain natiivit koontiversiot). Tämä synteesi täsmää ICGEM Calculation Serviceen noin 1e-8 mGal tarkkuudella 794 solmussa kahdella alueella, ennakkorekisteröityjä kynnyksiä 0,005 mGal RMS ja 0,02 mGal max vasten (VALIDATED; kirjanpitorivi ”Gravity-anomaly synthesis from a spherical-harmonic model”). Uusi mukana toimitettu skenaario gps-denied-gravity-nav-egm2008 ajaa 60 minuutin benchmarkin tällä todellisella asteen 70 kentällä. Ennakkorekisteröity tulos: sovitettu virhe 3106 m, joten kynnys < 500 m on NOT MET, kuten ennustettiin (aste 70 on liian tasainen), ja liukuman kymmenkertainen leikkaus on MET (MODELLED). Valinnainen [map_error_mc] ajaa benchmarkin uudelleen siemenluvuilla tuotetuilla Gaussin korreloiduilla karttavirheillä ja raportoi sovitetun virheen jakauman (mukana toimitettu skenaario gravity-map-error-mc). Tutkiva eikä ennakkorekisteröity: kun karttavirhe on 2 mGal ja se korreloi 0,2 asteen yli (koko, jonka sovittimen oma sigma budjetoi), toteutumista 1 / 20 pysyy enintään 500 m päässä (mediaani 2,9 km, p95 14,7 km), kun täydellisellä kartalla tulos on 144 m. Synteettisen benchmarkin ratkaisu, joka on alle 500 m, olettaa kartan tarkaksi. Ilman kumpaakaan valintaa asiakirja on tavu tavulta identtinen aiempien julkaisujen kanssa. combined-altpnt ottaa valinnaisen [magnetic_grid] (csv_path, column), joka lukee magneettikanavan EMAG2v3-muotoisesta CSV:stä. EMAG2:ta ei vendoroida, koska sen ehdot eivät ole yksiselitteiset: tools/fetch_emag2_tile.py hakee sen kiinnitetyllä SHA-256:lla ja rajaa laatikon. Todellisella EMAG2-ruudukolla ei väitetä mitään navigointitulosta. Yhteinen karttaestimointi (maasto-SLAM, RM-18): altpnt::sequential::run_sequential_trn_on_map ajaa sekventiaalisen maastonavigaattorin tallennetun kartan yli, joka poikkeaa totuudesta, joko luottaen siihen tai estimoiden solukohtaisen karttakorjauksen FastSLAM-tyylisellä Rao-Blackwell-suotimella. Ennakkorekisteröity tunnettua karttaa käyttävää SITANia vasten 15 m:n korreloidulla karttavirheellä 20 siemenluvun yli: 1,5 % keskimääräinen hyöty, parempi tapauksissa 10 / 20, joten molemmat parannuskynnykset ovat NOT MET (10 % ja 12 / 20), eikä täydellisellä kartalla ole haittaa (MET). Yksi läpikäynti ilman uudelleenkäyntejä ei salli kartan oppimista (xval/terrain-slam-rbpf/, MODELLED). Tyypin terrain-slam asiakirjat ovat tavu tavulta identtisiä. Todellisen SRTM:n testit ajetaan nyt CI:ssä kahdella sitoutetulla täysresoluutioisella rajauksella; kaikki ennakkorekisteröidyt kynnykset täyttyvät, ja lähin solmu on yhtä suuri kuin GDAL 3.8.4 pisteissä 8 / 8 (xval/srtm-ungate/).

  • Yhteentoimivuus, WP-08 (0,36; jokainen kohta ennakkorekisteröitiin ja sitoutettiin yksin ennen oraakkeliajoaan, kukin uusi kirjanpitorivi tasolla VALIDATED paitsi telemetriakohta, joka laajentaa olemassa olevaa riviä):

    • CCSDS Orbit Data Messages (src/odm.rs): OPM 3.0/2.0, OMM 3.0/2.0 ja OCM 3,0 (TRAJ-, PHYS-, COV-, MAN-, USER-lohkot) kirjoitettu ja luettu KVN- ja NDM/XML-muodossa, sekä täystarkkuuksinen OMM SGP4-alkioista (OmmMessage::from_omm_file); funktion OmmFile::to_omm_kvn tuloste on ennallaan. Ohjelmaa Orekit 13.1.8 vasten molempiin suuntiin: Kshana-viesteistä 27 / 30 jäsentyy Orekitissa ja Kshana lukee jokaisen Orekitin kirjoittaman, arvot suhteellisella erolla enintään 1e-14 ja epookit erolla enintään 1e-9 s; neljä havaintoa kiinnitetty (Orekit vaatii kentän ELEMENT_SET_NO, hylkää kentän COMMENT XML-muotoisissa käyttäjän määrittelemissä parametreissa, ei kirjoita kenttää BTERM ilman kenttää BSTAR ja lukee OCM:n suhteelliset epookit TDB:ssä SI-sekunteina). Vanhan OMM-kirjoittajan kenttä META_START hylätään Orekitissa (kirjattu). Rivi ”CCSDS Orbit Data Messages (OPM, OMM, OCM)”.
    • CCSDS Attitude Data Messages (src/adm.rs, src/ndm_xml.rs): AEM 2.0/1.0 ja APM 2,0 KVN- ja XML-muodossa ohjelmaa Orekit 13.1.8 vasten, jokainen kynnys täyttyi; Orekitin APM-kirjoittaja hylkää manööverin ilman kenttää MAN_DELTA_MASS (kiinnitetty). Rivi ”CCSDS Attitude Data Messages (AEM, APM)”.
    • SPICE SPK -vienti (src/spk_writer.rs): SPK-tyyppien 9 ja 13 kirjoittaja ja lukija sekä OEM–SPK-vienti; ohjelmaa CSPICE N0067 vasten kernelit ovat tavu tavulta identtisiä SPICEn kanssa ja evaluoituvat bitti bitiltä identtisesti. Rivi ”SPICE SPK export (types 9 and 13)”.
    • SPICE SPK -tyypit 3 ja 21 (src/spk_writer.rs): tyypin 3 (Chebyshev) ja tyypin 21 (laajennetut erotusrivit) segmentit kirjoitettu annetuista tietueista ja evaluoitu kuten SPICE; ohjelmaa CSPICE N0067 vasten kernelit ovat tavu tavulta identtisiä SPICEn kanssa ja jokainen evaluointi täsmää bitti bitiltä molempiin suuntiin. Rivi ”SPICE SPK types 3 and 21 (Chebyshev, extended difference lines)”.
    • Space Packet -laajennukset (src/space_packet.rs): toissijainen otsikko CUC/CDS-aikakoodeilla, pakettivirheen hallinta, segmentointi- ja virtatarkistukset, ohjelmia ccsdspy 2.0.1, spacepackets-rs 0.18.0, spacepackets-py 0.32.0 ja CPythonin funktiota crc_hqx vasten, ei yhtään poikkeamaa. Rivi ”CCSDS Space Packet secondary header, packet error control and segmentation”.
    • Telemetriaskeema 1,3 todellisten kuluttajien läpi: synteettisen skeema-1.3-virran Prometheus-esitys ja OTLP/HTTP JSON, mukaan lukien geometriasarja ja nimiö class, luettu täsmälleen prometheus_client- ja OTLP-protolla, hyväksytty ohjelmalla promtool 3.5.0 (check metrics) ilman lint-ongelmaa ja läpäissyt muuttumattomana OpenTelemetry Collector contrib 0.135.0 -ohjelman (dataehtoinen: työkalut haettu kiinnitetyllä SHA-256:lla, tulosteet sitoutettu).
  • Marsin radanmääritys, ajo 2 (0,36, WP-14, CAP-30): mars_od::fit_damped skaalaa normaalimatriisin diagonaalillaan ja vaimentaa askelta (Levenberg–Marquardt), kun rekisteröity Gauss–Newton-sovitus epäonnistui matriisilla, jonka raaka diagonaali ulottuu kahdeksan kertaluokkaa. Rekisteröity erikseen (xval/mro-od/PREREGISTRATION-RUN2.md, sama kaari, kynnykset ja muokkaus). Pisteytetyillä MRO-ylilennoilla radan RMS-ero MRO:n navigointirekonstruktioon nähden on 0,36 km (0,53 km maksimi), kynnykset täyttyivät. Sovituksen jälkeinen Doppler on 48,6 mHz kynnystä 30 mHz vasten, ei täyttynyt (havainto kiinnitetty). Vain pisteytystä koskeva muutos R2-A1 on julkistettu tiedostossa docs/revisions. Rivi pysyy MODELLED.

  • Marsin rampattu 2-suuntainen Doppler-malli ja radanmääritys (0,36, WP-14, CAP-30 osa, vaihe 2): mars_od ennustaa DSN:n rampatun X-kaistan 2-suuntaisen Dopplerin ODF-ramppitaulukoista (valon kulkuaika, Shapiro, troposfääri, asema-aika, DSN-asemat CIO-ketjun ja IERS EOP:n kautta) ja sovittaa Marsin kiertäjän (GMM-3, kolmannet kappaleet, SRP, ilmanvastus). naif_kernel lukee SPK-tyypin 1 (tarkistettu CSPICEen verraten) ja gravity_sh::from_shadr lukee PDS SHADR -kentät. Ennakkorekisteröity MRO:n navigointirekonstruktiota vasten todellisilla MRO-ylilennoilla (dataehtoinen, scripts/fetch_mro_od.sh, kuukausittainen CI): ennustettu Doppler täsmää havaintoihin erolla 12,5 mHz (kynnys 30 mHz, täyttyi); rekisteröity radansovitus epäonnistui pisteytetyllä kaarella eikä tuottanut rataa (havainto kiinnitetty). Rivi pysyy MODELLED.

  • DSN Orbit Data File -lukija (0,36, WP-14, CAP-30 osa): odf::parse_odf lukee TRK-2-18 ODF:t. Todellisella Mars Reconnaissance Orbiter ODF:llä (NASA PDS, vendoroitu) lukija täsmää PDS-nimiön tietueiden lukumäärään, ryhmien sijainteihin, asemiin ja aikoihin, ja kaikki sen datatyypit tunnetaan. Nimiön tiedostonlopputaulukko on yhden rivin vajaa tiedostoon nähden, nimiön epäjohdonmukaisuus kirjattu havainnoksi. MODELLED. Radanmääritystä näillä datoilla ei ole vielä tehty.

  • TWSTFT-budjetti ja ajansiirron stabiilius: tyyppi time-transfer-budget (0,36, WP-14, FUT-19).

    • Kaksisuuntainen yhtälö: twstft_budget ratkaisee sen suureelle T_A − T_B asemalaitteiden viiveiden, Ku-kaistan ionosfäärin ylös-/alas-epäsymmetrian, transponderin viive-eron ja Sagnac-termien kanssa ja palauttaa suoran mallin tarkkuudella 1e-15 s.
    • Epävarmuusbudjetti: yhdistetty neliöllisesti, linkin TDEV tyypin A termina.
    • Linkin kohina: kaksisuuntainen sarja saa flicker-vaihekohinalattian, vuorokausittaisen ei-vastavuoroisuuden ja vakiovastavuusjäännöksen. Valkoisen jitterin paketti timetransfer on ennallaan.
    • Todellinen sarja: toimitetun BIPM Circular T:n, MJD,ns CSV:n tai IGS-asemakellosarjan stabiilius.

    MODELLED. Uusi mukana toimitettu skenaario time-transfer-budget. PPP-aikaratkaisu on erikseen VALIDATED IGS-asemakelloa vasten GNSS-todellisen datan haarassa.

  • Sisääntulolämpeneminen, EO-radiometria ja nousuhäviöt (0,36, WP-14, CAP-28): kolme uutta tyyppiä.

    • entry-heating: 3-DoF-pistemassan sisääntulo pyörivän Maan tai Marsin yli Sutton–Graves-pysähdyspisteen lämpenemisellä.
    • eo-radiometry: kuvaajan SNR, MTF Nyquistilla, suhteellinen reunavaste ja GIQE 4 NIIRS.
    • ascent-losses: monivaiheinen gravitaatiokäännösnousu gravitaatio-, ilmanvastus-, ohjaus- ja vastapainehäviöillä, tarkistettu täsmällisellä ideaali-dv-miinus-häviöt-identiteetillä.

    Sisääntulon huippuhidastuvuus tarkistettiin julkaistua Stardust-nimellisarvoa vasten ennakkorekisteröidyllä kynnyksellä: 35,44 g vastaan 33,4 g (+6,1 %, kynnys 10 %). Se rivi on VALIDATED. Lämpeneminen, radiometria ja nousu ovat MODELLED. Uutta myös: reentry::us76_pressure, mukana toimitetut skenaariot entry-heating-stardust, eo-radiometry ja ascent-losses sekä docs/ENTRY-EO-ASCENT.md.

  • Asennonhallinta reaktiopyörillä: tyyppi aocs (0,36, WP-14, CAP-21). Jäykän navan inertiaalinen osoituskäännös kolmella tai useammalla tasapainotetulla reaktiopyörällä MRP-takaisinkytkennällä, minimi-normin pyörämomentit rajattuna kunkin moottorin rajaan (aocs). Se voi myös sulkea silmukan multiplikatiivisella EKF:llä simuloidusta gyrosta ja tähtiseurannasta (aocs_mekf). Todellisen tilan silmukkaa verrattiin ohjelmaan Basilisk 2.9.1 kolmella tapauksella, jotka ennakkorekisteröitiin ennen kuin koodia oli olemassa (kolme ortogonaalista pyörää, nelipyöräinen pyramidi, kyllästyvä tapaus). Jokainen MRP-komponentti, kulmanopeus, pyörän nopeus ja moottorin momentti täsmäsi jokaisessa näytteessä, pahin 2.4e-14 sigmassa ja 2.9e-11 rad/s pyörän nopeudessa. Tämä rivi on VALIDATED; MEKF on MODELLED (NEES-johdonmukaisuus). Uudet mukana toimitetut skenaariot aocs-slew ja aocs-slew-mekf sekä docs/AOCS.md.

  • Maayhteyksien aikataulutus ja DVB-S2 ACM (0,36, WP-14, CAP-22/23): kaksi uutta skenaariotyyppiä. acm-link antaa yhdelle satelliitille yhden aseman yllä kunkin ylilennon Es/N0:n ja sen aikana valitun DVB-S2 MODCODin (ETSI EN 302 307-1 taulukon 13 kynnykset plus marginaali). Se antaa myös datamäärän, jonka ACM siirtää vakiokoodauksen lähtötasoon verrattuna. contact-schedule tekee saman usealle satelliitille usean aseman yllä ja rakentaa ristiriidattoman yhteysaikataulun (antennin kääntöaika, yksi asema satelliittia kohti, prioriteettipainotettu toimitus rajattuna kunkin jonon määrään). Se raportoi rajahyötyyn perustuvan ahneen suunnitelman, ensin tulleen lähtötason ja tarkan optimin pienillä joukoilla sekä ahneen suunnitelman optimaalisuusvälin. Näkyvyysikkunat tulevat ylilentoennustimesta, jonka taso on VALIDATED. Uudet mukana toimitetut skenaariot acm-link ja contact-schedule (havainnollistavat syötteet) sekä docs/CONTACT-SCHEDULING.md. MODELLED (kaksi uutta kirjanpitoriviä).

  • Starlink-Doppler-paikannus julkaistua koetta vasten (0,36, WP-14, CAP-11 osa, MODELLED). Tämä on ennakkorekisteröity proxy-vertailu tyypin leo-pvt Doppler-tilasta esiasetuksella starlink-sop julkaisun ”Unveiling Starlink for PNT” (NAVIGATION 72(1), 2025, doi:10.33012/navi.685) datajoukon 3 persentiileihin. Malli käytti 3 satelliittia (47 asteen maski kiinteän säännön mukaan), ei korkeusapua ja Doppler-sigmaa 30 Hz, 200 siemenluvulla. Sen 90. prosenttipisteen 3D-virhe on 92,2 m kohdassa 20 s ja 870 m kohdassa 8 s, kun julkaistut ovat 2 m ja 10 m, joten molemmat kaksinkertaisuuskynnykset ovat NOT MET. Malli on pessimistinen, ei optimistinen kuten ennustettiin: kolme kiinteää satelliittia antavat paljon vähemmän geometrista monimuotoisuutta kuin kokeen 63 satelliittia 10 minuutin aikana kanavan vaihdolla joka 15 s. Molempien kynnysten täyttymättä jääminen on todettu testissä (tests/starlink_doppler_published_proxy.rs).

  • Impulsiivinen siirtoradan optimoija DE440:llä (0,36, WP-14, CAP-20c/d): maneuver::optimise_transfer_kernel löytää yhden kierroksen ballistisen kaksi-impulssisen siirron lähtö- ja saapumispäivät, jotka minimoivat lähtö-C3:n tai saapumis-V∞:n tyypissä I tai II. Se hakee 2 päivän ruudukolta ja tarkentaa sitten 2D Nelder–Mead -menetelmällä, heliosentrisillä tiloilla DE440-kernelistä; se rakentuu funktiolle porkchop_kernel. Vertailu ennakkorekisteröitiin (bf0439e8) riippumatonta SPICE + pykep 3.0.1 + SciPy 1.18.1 -optimoijaa vasten Maa–Mars-mahdollisuudella 2026: kaikki neljä optimointia täsmäävät suhteellisella erolla 8.7e-13, päivämäärät erolla enintään 1e-5 päivää (VALIDATED, uusi kirjanpitorivi). Toissijaisena julkaistuna viitteenä NASA/TM-2010-216764 (2026-2045 Maa–Mars-käsikirja) täsmää tyypin II minimi-C3:lle (9,182 vs 9,144) ja tyypin II minimisaapumis-V∞:lle (2,564 vs 2,565). Sen tyypin I minimi-C3 ei täsmää: 10,535 vs 11,11 (-5.18 %), missä kirjastooraakkeli on samaa mieltä Kshanan kanssa. Tämä täyttymättä jääminen on kirjattu ja todettu testissä.

  • Kuun referenssiasematutkimus (0,36, julkaistun aineiston innoittama suunnitellusta kuun etelänavan referenssiasemasta; lähteet tiedostossa docs/LUNAR-REFERENCE-STATION.md): tyyppi lunar-station-coverage, kuun differentiaali-PNT-mallin Monte Carlo -pyyhkäisy etelänapa-alueen käyttäjäruudukon ja vuorokauden epookkien yli, joka antaa pistettä ja aluetta kohti korjatun ja korjaamattoman virheen persentiilit, saatavuuden syineen, kattavuuden ilmoitettua kynnystä vasten, suojaustasot, kattavuussäteen atsimuuttia kohti ja korjauslinkin budjetin. Se supistuu täsmälleen malliksi lunar-differential-pnt yhdessä pisteessä, epookissa ja kokeilussa; sen aritmetiikka laskettiin uudelleen numpylla ennakkorekisteröidyllä kynnyksellä (sijainnit ja persentiilit täyttyivät; aseman korjaukset eivät täyttäneet omaansa kaksoistarkkuuden pyöristyksen vuoksi, kirjattu). MODELLED; kirjanpitorivi ”Lunar reference-station coverage and accuracy map”. Ei yhteyttä mihinkään virastoon eikä minkään viraston tukema; ei lausuntoa minkään todellisen järjestelmän suorituskyvystä.

  • Ennakkorekisteröity ennuste: kuun referenssiaseman kattavuus (ei validointi; MODELLED). docs/predictions/lunar-reference-station.md jäädyttää commitissa c05dac1d tyypin lunar-station-coverage tulokset julkisesti ilmoitetuilla oletuksilla, syötteiden ja tulosten SHA-256-tiivisteillä ja nyt kiinnitetyllä pisteytysprotokollalla (kerroin 2 tarkkuuksille ja suojaustasoille, 10 prosenttiyksikköä saatavuudelle ja kattavuudelle; muuttunut oletus saa uuden päivätyn ennusteen, ei koskaan muokkausta; ennusteen epäonnistuminen julkaistaan yhtä näkyvästi kuin osuma). Jokaista lukua hallitsee nelisatelliittitähdistön julkaisematon alkiojoukko, joka on ILLUSTRATIVE ja ilmoittaa sen itse. tests/prediction_frozen.rs suojaa sitä; docs/VALIDATION.md saa osion ”Pre-registered predictions”. Ei kirjanpitoriviä.

  • Kuun referenssiaseman laajennukset (0,36; aseman tutkimuksen rajoitukset 2 ja 3 sekä lähteiden ratkaisutyyli), kukin valinnainen tyypillä lunar-station-coverage ja oletuksena poissa, joten jokainen nykyinen asiakirja, jäädytetty ennuste mukaan lukien, on ennallaan: [receiver] (monitie-eteneminen a + b exp(-el / el0) käyttäjällä ja asemalla, aseman valinnaisesti Gauss–Markov epookkien yli, DLL-koodikohina C/N0:sta, kanavien väliset harhat; arvot ILLUSTRATIVE Kuulla); orbit_err_growth_m_per_s (lähetetyn ratavirheen lineaarinen kasvu korjausviiveen aikana, ILLUSTRATIVE); [solution] (korkeusrajoite, sen kanssa kolmen satelliitin minimi, staattisen käyttäjän ikkuna epookkien yli). Kaksi lisäystä julkaistujen väitteiden vertailuun, kumpikin ennakkorekisteröity yksin ennen ajoaan, sijaitsevat muokkaamattoman tallennetun ajon vieressä: K5 kasvulla epäonnistuu jokaisella nopeudella; lähteiden ratkaisutyylillä K1–K5 epäonnistuvat ja K6 menee läpi (1 / 6), ja R300:n korjattu p95 3D-virhe laskee arvosta 280,6 m arvoon 2,11 m. MODELLED; kolme kirjanpitoriviä.

  • Kuun maaston horisonttimaskit (0,36; kuun referenssiasematutkimuksen ensimmäinen rajoitus): valinnainen osio [terrain] tyypillä lunar-station-coverage (asema ja jokainen käyttäjäpiste) ja moonlight-service-volume (jokainen ruudukkopiste) antaa kullekin paikalle atsimuutista riippuvan horisontin versiossa 0,36 esitellyssä taivaanrantataulukon muodossa, ilmoitetusta profiilista, joka on merkitty lähteellään (station_horizon, user_horizon), ja/tai napa-DEM:n yli säteen marssilla (dem_path) Kuun pallon isoympyröitä pitkin tarkalla kaarevuudella. Sisältää vendoroidun rajauksen (koko 0,98 MB) public domain -aineistosta LRO LOLA LDEM_75S_240M etelänapa-DEM, 5 x 5 lohkokeskiarvolla uudelleennäytteistettynä tarkkuuteen 1200 m (data/lunar-dem/, NOTICE-tiedostoineen, SHA-256:ineen ja scripts/make_lola_south_polar_crop.py), sekä vain repositoriossa olevan skenaarion scenarios/lunar-station-coverage-terrain.toml. Tarkistettu suljetun muodon horisontteja vasten (paljas pallo, kraatteri tasangolla, rasteroitu kartio); MODELLED, kirjanpitorivi ”Lunar terrain horizon masks from a stated profile or a polar DEM”. Ilman osiota jokainen asiakirja, yksikkölohko mukaan lukien, on tavu tavulta identtinen.

  • Geometriatietoinen luottamus (version 0,36 geometriasuunnitelmamuistio, osa 4). Jokainen tyypin receiver-trust epookki, staattinen tai alus, erä tai live, sisältää satelliittigeometriansa: good, degraded (syyt few-satellites, high-pdop, high-hdop ja tiedoksi sky-blocked) tai unknown, kun loki ei anna satelliittigeometriaa, sekä HDOP, PDOP, VDOP ja käytetyt satelliitit. Se johdetaan vastaanottimen ilmoittamista korkeuskulmista ja atsimuuteista (NMEA GSV, UBX NAV-SAT) nykyisen ytimen orbit::dop kautta tai otetaan NMEA GSA:sta. Jokainen epookki sisältää myös nimiön, good, fair tai poor, aina raportoituna eikä koskaan pisteytettynä, sekä huomautuksen, jossa HDOP, PDOP, VDOP, satelliittien lukumäärä ja signaalin menetys kerrotaan sanoin. Aluksen pistemäärä saa monitorin geometry, joka ei vähennä mitään, ellei geometria ole huono (HDOP yli 4, PDOP yli 6 tai alle 5 käytettyä satelliittia), ja sitten nousee rampilla katoon 15 pistettä; pelkkä geometria yltää enintään heikentyneeseen kaistaan, ei koskaan ei-luotettuun kaistaan (ei hälytystä). Jokainen vähennys saa luokan, geometry, environment tai inconsistency, jotta huono taivas ei näytä hyökkäykseltä. loss-of-lock on geometry, kun menetetyt satelliitit olivat kaikki alle 15 asteessa viimeisimmällä raportillaan; huonon geometrian vähennys on inconsistency, kun vastaanottimen ilmoittama HDOP on ristiriidassa sen ilmoittaman taivaan kanssa yli max(1,0, 25 % johdetusta HDOP:sta), joten väärennetty huono taivas ei voi ostaa nimiötä. Uusi taulukko [geometry] ilmoittaa jokaisen kynnyksen alkuperineen (HDOP 4, PDOP 6, vähintään 5 käytettyä, sigma_UERE 1,5 m, HDOP-toleranssi max(1,0, 25 % johdetusta HDOP:sta), jossa 25 % on edustava valinta vastaanottimille, joilla on tähdistökohtaiset kellot tai osajoukkoratkaisut, 15 astetta; IEC 61108-1- ja GPS SPS -luvut siteerattuina, tarkistettava standardien tekstiä vasten). Täyttä signaalin menetystä ei nimetä taivaaksi: kun näkyvissä olevia satelliitteja ei seurata ja näkyvissä olevien satelliittien DOP on hyvä (eivätkä seuraamattomat rajoitu horisontin toiselle puolelle), epookki sisältää signal_loss ja geometrian vähennys on environment. Ilmoitettu HDOP tai PDOP, joka on 99 tai enemmän, GGA-laatu 0 ja GSA-tila 1 luetaan ratkaisun puutteeksi, ei DOP:ksi. Katto (cap_points 15), rampin loppu (full_ratio 1,5) ja lattia (floor, oletuksena pistemäärän degraded_min) ovat osiossa [geometry], samoin nimiön hyvät tasot (HDOP 2, PDOP 3, 6 satelliittia, edustava); voimassa oleva katto on min(cap_points, 100 - floor), joten taulukko [score], joka nostaa arvoa degraded_min (myös 0,35), laskee kattoa eikä hylkää sitä, ja lattia arvon degraded_min alapuolella hylätään. MODELLED; ohjeellinen ohjelmisto, ei tyyppihyväksytty navigointilaite (IEC 61108, IEC 61162): käyttäjä vastaa edelleen aluksen navigoinnista.

  • Geometria ulottuu jokaiselle pinnalle: tulos-JSON (epochs[].geometry, class jokaisella vähennyksellä, geometry_model, geometry_summary), live-JSON-rivit (skeema 1,3), Pythonin ja WebAssemblyn receiver_trust, assess_vessel_log ja receiver_trust_replay, MCP-työkalut assess_*, todistepaketit (epochs.json, config.json, geometriakaista yhteenvetosivulla) ja trust-telemetry (Prometheus kshana_trust_geometry* ja nimiö class kohteessa kshana_trust_reason_active, OTLP kshana.geometry.*, CEF-mukautetut kentät cs6 (geometrian tila ja luokat), cfp3 (HDOP) ja cfp4 (PDOP), tarkistettu molemmilla CEF-oraakkelijäsentäjillä, sekä LEEF geoStatus, geoHdop, geoClass). Geometrianimiö viedään myös, lisättynä kaikkien aiempien sarjojen ja kenttien jälkeen ja vain syötteille, jotka sen sisältävät: Prometheus kshana_trust_geometry_label{label} ja kshana_trust_geometry_vdop, OTLP kshana.geometry.label ja kshana.geometry.vdop, LEEF geoLabel, geoPdop, geoVdop, geoUsed, ja CEF kolmas kenttä cs6 (nimiö) ja cn1 (käytetyt satelliitit); VDOP ei ole CEFissä (liukulukuiset mukautetut kentät on jo varattu). Molemmat CEF-oraakkelijäsentäjät lukevat nimiötapaukset takaisin sellaisinaan (muutos 5: 176 riviä, 172 jäsentyi pycefillä, 176 Logstashilla). Ilmoitettu HDOP, jota ilmoitettu taivas ei selitä, merkitään jokaiselle epookille ja lasketaan (geometry_summary.hdop_mismatch, rivi todistusyhteenvetosivulla), pisteytetään vain kun geometria on huono. Signaalin menetys viedään erikseen, koska geometrian tila pysyy tilassa degraded sen ollessa voimassa: Prometheus kshana_trust_geometry_signal_loss, OTLP kshana.geometry.signal_loss, LEEF geoSignalLoss=1; CEFissä se näkyy luokkana environment kentässä cs6.

  • orbit::dop_cofactor: kovarianssitekijä (HᵀH)⁻¹ funktion orbit::dop takana, erotettuna siitä samalla aritmetiikalla.

  • Kirjanpitorivi ”Position error from geometry: RMS error = sigma_UERE x DOP” (MODELLED, sisäinen johdonmukaisuus): siemenluvulla ajettu Monte Carlo moottorin pienimmän neliösumman ratkaisusta 8 gnss_lib_py-sovitetulla DOP-geometrialla validoidun DOP-ytimen kovarianssitekijää vasten, toleransseilla, jotka ennakkorekisteröitiin ennen ensimmäistä ajoa, ja kahdella negatiivisella kontrollilla, jotka epäonnistuvat vaaditusti; sen rinnalla aiempi tarkistus neljällä käsin valitulla taivaalla khiin neliö -luottamusväleillä, raportoitu ajettuna ennen ennakkorekisteröintiä.

  • Atsimuutista riippuvat taivaanrantamaskit (src/skyline.rs, docs/SKYLINE.md, suunnitelmamuistion kohta 1): atsimuutista riippuva korkeuskulmaleikkaus, taulukoiden pistekohtainen maksimi (kukin interpoloidaan erikseen, kierretty kohdassa 360°), katukuilu suljetussa muodossa (valinnaisilla avoimilla päillä), teräväreunaiset sektorit ja maastoprofiili Maan kaarevuudella; tehollinen leikkaus on max(mask_deg, skyline). Neljä esiasetusta (REPRESENTATIVE) ilmoitetulla alkuperällä (city-street, harbour-approach, fjord, container-terminal), ohitettavissa kenttä kerrallaan. Valinnainen osio [skyline] tyypeissä gnss-sim, jamming, leo-pvt (kaikki tilat, napapyyhkäisy mukaan lukien) sekä koulutustiedostoissa leo-pass ja nmea-scenario, ja tyypeissä orbit ja integrity uuden maa-asemakäyttäjän kautta, user_site = { lat_deg, lon_deg, height_m } (geodeettiset katselukulmat pyörivällä Maalla, geodeettisella ylöspäin ARAIMin vaaka-/pystyjaolle; kukin näyte on yksi absoluuttinen hetki, epoch + t, johon alkiojoukot, yleislähetetyt efemeridit ja SP3-tiedostot edistetään omista epookeistaan, päivättynä uusimmasta satelliittiepookista, kun epoch ei ole ilmoitettu; kiertävä user hylkää taivaanrantaprofiilin). Tuloksiin tulee skyline { source, open_fraction, provenance } ja näytekohtainen masked_by_skyline. Ilman osiota jokainen skenaario on tavu tavulta identtinen version 0.35.0 kanssa, tarkistettu julkaisucommitin tiivisteitä vasten. Kuusi mukana toimitettua esimerkkiä: orbit-urban-canyon-skyline, integrity-harbour-approach, gnss-sim-container-terminal-skyline, jamming-harbour-approach-skyline, leo-pvt-fjord-skyline ja kampanja leo-vertical-autonomous-vehicle-skyline (autonomisen ajoneuvon kuilu tasaisena leikkauksena ja katuna; nykyinen kampanja on ennallaan). MODELLED.

  • Taivaan geometriafunktiot (src/geometry.rs, suunnitelmamuistion kohta 2): sky_geometry (näkyvät ja maskatut satelliitit paikasta, ajasta ja tähdistöesiasetuksista, kaksirivisistä alkiojoukoista (tle, enintään 4 MiB, moottorin SGP4:llä propagoitu UTC-epookkiin epoch) tai annetuista satelliiteista; sky_source ja sky_statement kertovat, onko taivas edustava vai alkiojoukkojen antama taivas kyseisellä epookilla, ei mittaus; tle_skipped luettelee jokaisen käyttämättömän rivin syineen; syötekatot 2000 horisontin yläpuolella olevaa satelliittia, tarkistettu ennen järjestelmätaulukon rakentamista, ja 16 vastaanotinkelloa; viisi DOP:ia; ENU-kofaktori ja kovarianssi yhdellä kellolla järjestelmää kohti tai yhdellä yhteisellä; vaakavirhe-ellipsi yhden sigman tasolla ja ilmoitetulla luottamustasolla), sky_monte_carlo (siemenluvulla ajetut pienimmän neliösumman virheet, enintään 5000), skyline_presets, skyline_profile ja skyplot_svg. orbit::dop_cov paljastaa kovarianssin funktion orbit::dop takana, joka on nyt sen redusoitu muoto (validoidut skalaarit ennallaan). Pinnat: kshana sky ja kshana skyline, samannimiset Python- ja WASM-funktiot sekä MCP-työkalu sky_geometry (40 työkalua), ja muistikirja notebooks/geometry.ipynb (sen peilitiedosto .md; ajaa testi tests/python/test_notebooks.py). Jokainen tulos sisältää nimiön MODELLED, virhemallin lausuman ja ohjeellisuusilmoituksen.

  • Kirjanpito: viisi taivaanranta- ja taivaan geometria -riviä. VALIDATED, kukin vertailussa, joka ennakkorekisteröitiin ennen oraakkelin ajoa: Azimuth-dependent skyline mask: visible set, azimuth and elevation, and DOP under the mask ohjelmaa Orekit 12,2 (TopocentricFrame, ElevationMask) ja gnss_lib_py 1.0.4 (get_dop) vasten, pahimmat katselukulma- ja maskierot 1.1e-12° kynnystä 1e-9° vasten, identtiset näkyvät joukot, DOP 3.3e-13 suhteellisesti (xval/orekit-skyline/); Horizontal error ellipse and per-system cofactor from the geometry covariance numpyn funktioita linalg.inv ja linalg.eigh vasten (standardi P2), 270 tapausta, akselit 5.1e-13 suhteellisesti (xval/numpy-ellipse/). MODELLED: kuilu-, sektori- ja maastoredusoinnit; esiasetukset; taivaan geometrian koostumus (esiasetustaivas, Monte Carlo -pilvi).

  • Kun mukana ovat geometrialuottamus-, taivaanranta- ja kuun referenssiasemarivit, kirjanpidossa on 274 riviä: 134 validoitua, 136 mallinnettua ja 4 kumppanirivi.

  • Kuun referenssiasema: asemakellolaboratorio (MODELLED). Valinnainen lohko [time_lab] tyypillä lunar-time-budget (src/lunar_time_lab.rs). Se mallintaa asemakellon (oletuksena miniRAFS-luokka, mikä tahansa nimetty luokka tai laitekortti, joka on sovitettu ilmoitettuihin stabiiliuspisteisiin) ohjattuna LTC:hen, sitten vapaasti käyvänä tai uudelleenohjattuna joka N sekunti. Se tuottaa aikavirhekäyrän x(t), ajan, joka kuluu arvoihin 1, 10 ja 100 ns (bisektio suljetun muodon rinnalla) ja hallitsevan termin horisonttia kohti, kaikki yksiköin. Ohjausjäännös on ILLUSTRATIVE. LTC-nopeutta ei johdeta uudelleen, ja sillä on oma rivinsä tasolla VALIDATED. Julkisen ICG WG-B:n Lunar PNT -aineiston (kesäkuu 2024) nanosekuntitason tavoite siteerataan lähdelausumana, ei väitteenä. Kellojärjestys optinen < PHM < RAFS < miniRAFS pätee arvosta 1 s arvoon 7e5 s, ja testi kiinnittää PHM- ja RAFS-käyrien leikkauskohdan lähelle 7.5e5 s. Tämä leikkauskohta on yhden kohinatyypin kellomallien ominaisuus (puhdas flicker FM vastaan puhdas valkoinen FM), ei fysikaalinen tulos. Ilman lohkoa raportti, sen taulukko ja sen yhteenveto ovat ennallaan. Esimerkki: scenarios/lunar-station-time-lab.toml. Lisää yhden kirjanpitorivin, jonka nimiö on MODELLED.

  • Kuun referenssiasema: aseman geodesia (MODELLED). Valinnaiset syötteet extra_reflectors ja extra_beacons tyypillä lunar-llr-datum lisäävät lohkon station_geodesy. Arkistoidusta laseretäisyysviipaleesta saatu viiden ryhmän datum-informaatio yhdistetään siihen, mitä lisätty retroreflektori ja lisätty VLBI-majakka ilmoitetuilla paikoilla toisivat. Reflektori etäisyysmitataan arkistoiduilla epookeilla, jotka se näkee, niiden arkistoiduilla painoilla. Majakka käyttää verkkoa ja aikataulua lunar-frame-campaign, asemat kiinnitettyinä. Lohko antaa kunkin Helmertin 1-sigman ennen ja jälkeen sekä niiden suhteen. Nämä ovat Cramer–Rao-rajoja pelkistetylle parametrijoukolle, aikataululla ja paikalla, jotka ovat ILLUSTRATIVE. Puuttuvat tai tyhjät syötteet jättävät raportin tavu tavulta identtiseksi. Esimerkit: scenarios/lunar-station-geodesy-baseline.toml ja -with-station.toml. Lisää yhden kirjanpitorivin, jonka nimiö on MODELLED.

  • Kuun referenssiasema: vertailu julkaistuihin väitteisiin (MODELLED). Jokainen numeerinen väite viidessä julkisessa lähteessä luetellaan täsmällisine sanamuotoineen, sivuineen ja ilmoitettuine oletuksineen ja luokitellaan vertailukelpoiseksi, osittain vertailukelpoiseksi tai ei vertailukelpoiseksi (tests/fixtures/lunar_station_published/CLAIMS.md; lähteet URL-osoitteineen, hakupäivineen, SHA-256:ineen ja lisensseineen tiedostossa tests/fixtures/lunar_station/SOURCES.md). Osittain vertailukelpoiset väitteet pisteytettiin kuudella yksipuolisella kynnyksellä, jotka ennakkorekisteröitiin ennen ajoa (PREREGISTRATION.md, revisio 2, 05bf9a19): 1 / 6 väitettä ennakkorekisteröidyn kynnyksen sisällä (ennakkorekisteröity 05bf9a19). Kattavuus on 0,00 kynnystä >= 0,95 vasten molemmilla etelänapa-alueen ympyröillä, ja korjattu p95 on 280,6 m kynnystä <= 1,5 m vasten. Syynä ovat satelliittien ratalementit, joita mikään lähde ei julkaise: puussa olevilla alkioilla (ILLUSTRATIVE) neljä satelliittia on yhteisessä näkyvyydessä 8 % epookeista, lähes singulaarisella geometrialla. Ajo ei toista väitteitä näillä alkioilla eikä ole todiste siitä, että väitteet ovat vääriä. Kiinnitetty tiedostossa tests/lunar_station_published_oracle.rs. Yksi kirjanpitorivi, jonka nimiö on MODELLED, havainnon kanssa.

  • Kuun referenssiasema: kellotiedoston datavalmius. realdata::clk::rinex_clock_series ilmoittaa nyt epookkiensa aikajärjestelmän. Se on arvo TIME SYSTEM ID tai, kun sitä ei ole ilmoitettu, otsikon satelliittijärjestelmän oletus. Tulos kertoo myös, ilmoitettiinko järjestelmä. Funktio hylkää tuntemattoman aikajärjestelmän (esimerkiksi kuun aika-asteikon), ilmoittamattoman sekajärjestelmätiedoston ja tiedostot, jotka ovat keskenään ristiriidassa, sen sijaan että lukisi ne GPS-aikana. Se toimittaa synteettisen asemakellotestiaineiston. Korjaustiedostomuotoa ei ole määritelty, koska julkista muotoa ei ole.

Muutettu#

  • Moduulien fusion::ukf, fusion::tightly_coupled ja fusion::gnss_ins_ekf moduulidokumentaatio ei enää kutsu 17-tilaista UKF-navigaattoria, koko-INS-tiukkaa kytkentää ja eksplisiittistä kellotilaa tulevaksi työksi; ne viittaavat kohteisiin hybrid_ukf, tightly_coupled17 ja carrier_tc.

  • RINEX 4 ei enää hylätä (0,36, WP-07): RINEX 4 -navigointitiedosto hylättiin ennen tarkoituksella; nyt se luetaan (ks. Lisätty). Versioiden 4 ja uudempien havaintotiedostoissa otsikkonimiöt täsmätään vain sarakkeissa 61-80, jotta uudet vapaatekstitietueet eivät voi esiintyä nimiöinä.

  • ionex::parse_ionex lukee todellisia IONEX-tiedostoja (0,36, WP-07): täysi 16 arvon tietue täyttää sarakkeet 61-80, jotka lukija piti nimiönä, joten se palautti None jokaisella todellisella IONEX-tiedostolla. Se lukee nyt tietueen, jonka nimiökenttä on numeerinen, arvoina. Mikään toimitettu tuloste ei käyttänyt sitä.

  • Galileo E1- ja E5a-vastaanotetut tehot standardin OS SIS ICD Issue 2,1 mukaan (revisio, 2026-10-14). Spektrikaistat galileo-e1 ja galileo-e5a sekä LEO-signaalien GNSS-uhrit, jotka ottavat tehonsa niistä, käyttävät nyt Galileo OS SIS ICD Issue 2,1 taulukon 12 pienimpiä vastaanotettuja tehoja: −157,25 dBW (aiemmin −157,0) ja −155,25 dBW (aiemmin −155,0).

    • Yhdeksän skenaarion tulosta muuttuu: spektriesimerkit, spektrikampanja, kolme LEO-kestävyysvertikaalia ja kolme LEO-signaalisuunnitelmaa. Efektiivinen C/N0 muuttuu −0,25 dB ja J/S +0,25 dB näillä kaistoilla.
    • Jokainen muuttunut arvo (1766, vanha → uusi) on lueteltu tiedostossa docs/revisions/CAP12-galileo-icd21-power-changes.md ja sen CSV:ssä, yhdessä muuttuneiden dokumentaatiotaulukoiden kanssa. Mikään kirjanpitorivi ei muuta tilaansa.
    • Toinen osa, samana päivänä: LEO-signaalien uhrit galileo-e5b (−155,0 → −155,25 dBW, taulukko 12 E5b) ja galileo-e5-altboc (−152,0 → −152,24 dBW). ICD:ssä ei ole koko kaistan E5-riviä, joten AltBOC-arvo on taulukon 12 E5a- ja E5b-kokonaisarvojen tehosumma, rakennettu kuten vanha arvo. Kolme LEO-signaalisuunnittelun tulosta muuttuu (64 arvoa: nämä vastaanotetut tehot ja LEO:sta GNSS:ään suuntautuva C/N0-heikkeneminen kahdella uhrilla), luetteloituna samassa revisiossa (§5) ja CSV:ssä. Mikään muu ei muutu.
  • S2-ilmakehän vuorovesikorjaus (tides::atmospheric_tide). Rayn (2001) S2-ilmanpaineharmoniset ovat normalisoimattomien P_nm kertoimia kosinivaiheviiveillä; niitä käytettiin täysin normalisoituina ja viive IERS-sinijohtona. Ne tulevat nyt jaettuina arvolla N_nm, kun ε = 90° − ψ; uusi tides::s2_air_waves toistaa GFZ STR06/01 Table 5 mallin A2 kaikille 21 aallolle (pahin 0,0005 cm, 0,05°; VALIDATED). Vain vuorovesi käytössä olevat tulokset muuttuvat: Galileo CI -sovitus 0,132 → 0,133 m, Swarm-A-komponentit 1–2 mm (ennakkorekisteröity tiedostossa xval/s2-air-tide-fix/).

  • Vain dokumentaatio: propagator::solve_kepler_checked, orbit::solve_kepler ja ephem::solve_kepler dokumentoidaan vanhoiksi ratkaisijoiksi, numeerisesti ennallaan, viitaten kohteeseen kepler::solve_kepler_markley.

  • D9 kierros 3 (utck_bound) tila. BIPM Circular T 465 ilmestyi 2026-10-12. Ennakkorekisteröityä prospektiivista pisteytystä ei ole vielä ajettu: numero 465 sisältää noin 285 testiarvoa, ja pysäytyssääntö vaatii 1000, eli noin numerot 465–468. Ajo tarvitsee myös arkistoidut 2026-09-30 laboratoriokohtaiset tiedostot, koska BIPM on sittemmin kirjoittanut uudelleen niistä 87 / 113. Kirjanpitorivi ja testin otsikko kertovat tämän; testi, sen kynnykset ja sen jako ovat ennallaan.

  • Dokumentaation totuustarkistus (0,36). Tiekartta, ominaisuusrivit, suunnitteludokumenttien tilarivit ja moduulikommentit saatettu vastaamaan koodia; mikään tuloste ei muutu. Kohdat, jotka on jo rakennettu mutta jotka oli edelleen listattu avoimina, on nyt merkitty tehdyiksi: ITU-T-maskitarkistukset, holdover-skenaario, jonka pituus on 24 h, ja kellolokin sisäänluku (telecom timing), ensimmäisen minuutin pikaoppaat, Lense–Thirring ja Orekit-propagaattorin ristiintarkistus, ITRF-tarkka GCRS-ketju, golden- ja alustojen väliset tiivisteet, alkuperä, usean vian ARAIM (ADD v4.2), yhden satelliitin FDE, CRPA-kirjasto, CAI-juovaepäselvyysraja, streets-of-coverage-mitoitus ja 3D-ratanäkymä, jäykän kappaleen asennon dynamiikka, OMM-kirjoittaja ja NAIF-kernelilukija, DE440-kuun libraatio, ajon merkitys -lause playgroundissa, PositioningFom, 17-tilainen tiukasti kytketty navigaattori ja gravity-map-tyyppi. Rivit kertovat myös täsmällisesti, mikä on yhä avoinna (esimerkiksi kaksiosainen JD kohteessa orbit::Propagator, lukija src/ionex.rs todellista tuotetta vasten ja usean satelliitin poissulkeminen kohteessa raim). Puuttuva docs/design/evidence/cn0-m2m4/RESULTS.md on kirjoitettu sen testien tuoreesta ajosta (M1–M4 menevät läpi), ja kumppaneille suunnatulla IQ-validointiluonnoksella on ajantasaiset kirjanpidon luvut.

  • Galileo E1 -muistikoodit eivät enää kuulu mukana toimitettavaan aineistoon. Tiedostot data/galileo-os-sis-icd/C7_E1B.txt ja C8_E1C.txt (ICD:n liite C.7/C.8) on poistettu repositoriosta ja paketeista. ICD:n ehdot (lainattu tiedostossa LICENSING.md) sallivat käyttäjän tallentaa koodit lähde mainiten ja käyttää niitä tuotteessa, mutta sallivat uudelleenjakelun vain ei-kaupallisiin tarkoituksiin, ja Kshanaa tarjotaan myös kaupallisella lisenssillä. Funktiot galileo::e1b_table / e1c_table palauttavat nyt arvon, jonka tyyppi on Result, ja lukevat käyttäjän oman kopion ympäristömuuttujista KSHANA_GALILEO_E1B / KSHANA_GALILEO_E1C tai lähdekoodin työkopiossa hakemistosta data/galileo-os-sis-icd/, johon uusi komentosarja scripts/fetch_galileo_e1_codes.sh poimii ne ICD:n PDF-tiedostosta (tiivisteellä tarkistettuna). Vakiot galileo::E1B_TABLE_TEXT / E1C_TABLE_TEXT on poistettu. Ilman taulukoita Galileo E1 -signaalit (galileo-e1b, galileo-e1c) palauttavat virheen, joka kertoo, miten taulukot toimitetaan, ja E1-testit ohitetaan viestin kera. Kun taulukot ovat paikallaan, jokainen E1-tuloste on ennallaan. Mikään skenaario-, golden- tai spektritulosteista ei käytä kooditaulukoita. E5a-liitteen C.3/C.4 testiaineisto (LFSR-oraakkeli tiedostossa tests/iq_signals.rs) käsitellään samoin: sama komentosarja hakee sen, se on git-ignored, ja testi ohitetaan ilman sitä.

  • Siirrettävä matematiikka kaikkialla (0,36, STUDIO-15): jokainen tyypin f64 transsendenttifunktio kirjastossa sekä kirjastosta rand_distr peräisin olevat normaali-, gamma- ja eksponenttijakauman otantafunktiot laskevat nyt puhtaan Rust-toteutuksen libm kautta (portable_math::PortableFloat, portable_distr), joten natiivi- ja WebAssembly-käännös palauttavat tavu tavulta identtisen tulos-JSON-tiedoston kaikille 141 mukana toimitetulle skenaariolle ja lyhyelle IQ-ajolle. Hintana isännän matematiikkakirjastolla lasketuissa tuloksissa viimeiset bitit siirtyivät: 98 mukana toimitetusta 141 skenaariosta muuttui, 43 ei; 5 muuttui suurimmassa kentässään yli 1e-3, ja loput vähemmän. Jokainen muuttunut arvo on lueteltu muodossa vanha -> uusi tiedostossa docs/revisions/STUDIO15-portable-math-rebaseline.md (mukana CSV kaikista 136 127 muuttuneesta luvusta); mikään kynnys, toleranssi tai raja-arvo ei muuttunut. Muuttuneet julkaistut luvut: skenaarion europa-surface-pnt saatavuus Maa-etäisyydellä 0,719 -> 0,713 ja RMS-virhe 86,147 -> 86,499 m (yksi saatavuuden rajalla oleva epookki ratkeaa nyt kaikkialla samoin; macOS arm64:llä se tulosti 0,725 / 85,800 m); skenaarion lunar-joint-od-clock asemavirhe 3,541350 -> 3,536885 m VLBI:n kanssa ja 2183,558 -> 2184,021 m ilman; tiedosto paper/crossover/inertial.json, jossa kahdeksan arvoa kohteessa vibration_psd muuttui 3 yksikköä viimeisellä numerosijalla (korjaus teknisessä raportissa); julkaistu asiakirja cislunar-observability pyöristyslattian suureissa (kahdeksan arvoa kuudennen merkitsevän numeron jälkeen, suhteellisesti enintään 6.8e-5; mikään järjestys tai raja ei siirtynyt). Tavuidenttisyyssuojien (skyline_scenarios, geometry_corpus_identity, geometry_trust_no_change) kiinnitetyt tiivisteet on asetettu uudelle nimetylle ”0,36 portable” -lähtötasolle, ja arvot versiosta 0.35.0 säilytetään historiallisena tietueena; jäädytetty kuun vertailuaseman ennuste on koskematon, ja sen siirrettävällä matematiikalla tehty uusinta-ajo on tallennettu sen viereen (docs/predictions/*.portable-0.36.json). Testi tests/lunar_joint_od_numpy_oracle.rs (validoitu kuun yhteisen radanmäärityksen (OD) rivi): testiaineisto vietiin uudelleen ja numpy-vertailu ajettiin uudelleen versiolla numpy 2.4.6, rekisteröity versio, komentosarja ja kynnys ennallaan; kaikki kuusi verkkoa läpäisevät kynnyksen (docs/revisions/STUDIO15-lunar-joint-od-oracle-rerecord.md). Erän 2-3 työ, joka yhdistettiin STUDIO-15:n jälkeen, käyttää myös siirrettävää matematiikkaa (457 kutsukohtaa 62 tiedostossa); sen aiheuttamat muutokset on kirjattu tiedostoon docs/revisions/STUDIO15-batch4-rebaseline.md: 12 mukana toimitettua skenaariota (suurin suhteellinen muutos 5.2e-8, mikään tulostettu luku ei siirry), 28 skyline-suojarivin hyväksyminen uudelleen, kampanjan iq_campaign M2M4-tiiviste, vanhan kohteen gnss-ins totuustiivisteet, havaitsemattoman majakan datumin sigma (632,3769 -> 632,3772 m) sekä kaksi kirjattua löydöstä (CR3BP DRO -sulkeumat; CRPA A3, 456 linkistä 194). Greenhallin tarkka edf säilyttää validoidun kynnyksensä, kun sen ytimessä on double-double-logaritmi (docs/revisions/STUDIO15-greenhall-edf-portable.md), ja gps-sdr-sim test-bench-oraakkeli ajettiin uudelleen muuttuneille NMEA-viennille, ja kaikki kynnykset pitävät (docs/revisions/STUDIO15-testbench-gpssdrsim-rerun.md).

  • README: kuun sarjan rivi ilmoittaa kunkin osan todisteiden tason (aiemmin siinä luki, että kaikki olivat MODELLED).

  • realdata::clk::rinex_clock_series palauttaa RinexClockSeries (sarja, ruudukointiloki, aikajärjestelmä, ilmoitettiinko se, tietuetyyppi) monikon (PhaseSeries, GriddingLog) sijaan. Se palaa nyt satelliittitietueista (AS) pyydetyn nimisiin vastaanotin- tai asematietueisiin (AR).

  • Pisteet eivät muutu, ellei geometria ole heikko; merkintä raportoidaan aina. Hyvällä tai kohtalaisella geometrialla (mukaan lukien vain GPS:ää käyttävä avoin taivas, jossa on 8 satelliittia) tai tuntemattomalla geometrialla (monitori ei ole käynnissä) jokainen pistemäärä on sama kuin versiossa 0,35: testi tests/geometry_trust_no_change.rs kiinnittää molempien esimerkki-istuntojen tulosteet ja testi tests/geometry_corpus_identity.rs jokaisen tallennetun aluksen NMEA-aineiston (myös vain GPS:ää käyttävänä avoimena taivaana) sekä miehistökoulutuksen skenaariot version 0.35.0 tavuihin, kun lisätyt avaimet on poistettu; kahdessa koulutusskenaariossa, joissa häirintä heikentää geometrian, heikot epookit eroavat pelkän geometriavähennyksen verran. Heikon geometrian loki menettää enintään 15 pistettä, joita se ei menettänyt versiossa 0,35. Muut tarkoitetut muutokset ovat kaikki lisäyksiä: yllä mainitut avaimet tulos-JSON-tiedostossa ja todistepaketeissa (score_model.weights ei muutu); live-JSON-lines-skeema muuttuu versiosta 1,2 versioon 1,3 (geometry lisätty loppuun, class jokaiseen vähennykseen); otteen yhteenvetoon tulee geometry; telemetriaan tulee geometriasarjat, kentät ja merkintä class vain syötteille, jotka sisältävät ne, joten version 0,35 virta tai tulos piirtyy tavu tavulta kuten ennen. Nimi geometry on 17. monitorin nimi; se luetellaan viimeisenä kohdassa monitors_run, kun se on ratkaissut (alus, jonka loki antaa geometrian; version 0,35 luettelo säilyttää järjestyksensä ja yhteenvedon monitorien lukumäärä kasvaa yhdellä), eikä sillä ole merkintää kohdassa [score.weights] (sen asettaminen evätään: sen vähennys asetetaan kohdassa [geometry]).

  • tests/fixtures/dop/NOTICE ilmoitti kirjaston gnss_lib_py lisenssiksi Apache-2.0; julkaisu 1.0.4 on MIT-lisenssillä.

  • NMEA-lukija lukee nyt GSA:n (lyhyt GSA ohitetaan eikä lasketa ohitetuksi) ja säilyttää GSV-korkeuskulmat ja -atsimuutit, myös ilman signaalia lueteltujen satelliittien osalta; UBX-lukija säilyttää NAV-SAT-korkeuskulman ja -atsimuutin. C/N0 luetaan täsmälleen kuten ennenkin.

  • Tuloksen muutos: laajakaistaiset ja pyyhkäisevät häirintälähteet käyttävät nyt arvoa Q = 2. Häirinnänestoyhtälö käyttää näille häirintälähteille oppikirjan hajaspektrikorjausta Q, kun se aiemmin käytti arvoa 1. Q = 2 on valkoinen kohina pääkeilan yli, kun kaistan sisäinen signaaliteho on normalisoitu; se on kiinnitetty testeissä suljettuun muotoon, joka on peräisin moduulista navsignal.

    • Ennallaan: CW- ja kapeakaistaiset häirintälähteet (Q = 1), tunnistamaton häirintälähteen tyyppi (Q = 1, vahingollisin arvo) ja q_override.
    • Vaikutus: siellä, missä laajakaistainen tai pyyhkäisevä häirintälähde vaikuttaa, tehollinen C/N0 nousee enintään 3,0103 dB, johdetut J/S-kynnykset nousevat 3,0103 dB ja vapaan tilan estosäteet kutistuvat kertoimella 0,7071.
    • Muuttuneet mukana toimitetut skenaariot: 144 skenaariosta 12 muuttuu, kaikki ennakkorekisteröidysti (xval/jammer-q/PREREGISTRATION.md, tulokset tiedostossa xval/jammer-q/RESULTS.md):
      • jamming-demo: C/N0 +3,01 dB;
      • jamming-harbour-approach-skyline: min_tracking 6 → 7;
      • lunar-jamming: menetettyjä satelliitteja 26 → 0, lukituksen menetyksen turvaetäisyyden mediaani 27,4 → 19,4 km;
      • tracking-loop: silmukkadynamiikan estosäde 75,2 → 53,2 km;
      • sekä niitä sisältävät kampanjat ja spektrin ristiintarkistukset.
    • Vaikutuksen kohteet: tyypit jamming, lunar-jamming, tracking-loop ja impairment-eval, spektrityyppien tarkistus jamming_kind_cross_check, IQ-kampanjan viitekäyrä (MODELLED) ja labfit-oletus Q sekä interop-kohtauksen vienti.
  • JetBrains-lisäosa: ei käytöstä poistettuja eikä poistettavaksi ajoitettuja alustan rajapintoja. Viisi valintaikkunaa käyttää pientä luokkaa DialogWrapper, jossa on pudotusvalikko, käytöstä poistetun Messages.showChooseDialog tilalla; yhden tiedoston valitsimet käyttävät konstruktoria FileChooserDescriptor käytöstä poistetun FileChooserDescriptorFactory.createSingleFileDescriptor() tilalla; animaatio avataan kutsulla BrowserUtil.browse(Path) käytöstä poistetun browse(File) tilalla, jonka alusta 2026,3 ajoittaa poistettavaksi. Since-build pysyy arvossa 243. IntelliJ Plugin Verifier raportoi Compatible ilman käytöstä poistettujen tai poistettavaksi ajoitettujen rajapintojen käyttöä versioita 2024,3 (IC-243.21565.193), 2025,2 (IC-252.23892.409), 2026.2.3 (IU-262.10968.63) ja 2026,3 EAP (IU-263.6259.32) vastaan; tehtävä verifyPlugin tarkistaa oletuksena version 2024,3 ja minkä tahansa luettelon, joka on annettu muuttujassa KSHANA_VERIFY_IDES.

  • Funktiot gnss_sim::run_gnss_sim ja jamming::run_jamming palauttavat tyypin Result: virheellinen osio [skyline] on virhe, kun funktiota kutsutaan suoraan, kuten se jo oli kutsuttaessa funktion api::run_toml kautta, eikä hiljainen paluu tasaiseen maskiin. Rikkova muutos näiden kahden funktion Rust-kutsujille.

Korjattu#

  • Kampanjan pisteytys: todellista seurantasilmukan väärää lukitusta ei koskaan laskettu (iq::campaign). Seurantasilmukan väärän lukituksen tarkistus siirtää kanavan tilasta LOCKED tilaan LOST sen laukeamisen yhteydessä. Pisteyttäjä merkitsi kanavan seuraavan päivityksen, joka oli silloin jo lukitukseton eikä siksi koskaan tullut lasketuksi. Tilasta LOCKED raportoitu tapahtuma false-lock on nyt yksi jakso ajanhetkellään, ajossa ja jokaisessa sen sisältävässä ilmoitetussa tapahtumassa. Yksi, joka havaitaan sisäänvedon aikana, tai sellainen, jonka toistaa jo tilassa LOST oleva kanava, ei ole uusi jakso. Uusi testi ajaa todellisen väärän lukituksen: oikea GPS L1 C/A -kantoaalto, joka askeltaa 1/(2T) lukittuna ollessaan (tests/iq_campaign_false_lock.rs).

    • Tiedoston tests/iq_campaign.rs vertailukampanjassa muuttuu vain ramp/agc-3bit-ajon PRN 11 (väärän lukituksen jaksot 0 → 1, 426 ja 437 lukittua tuntia kohti).
    • Sen solujen DIGEST-arvot kiinnitetään uudelleen.
    • Ennakkorekisteröity pisteytettyjen tulosten kiinnitys pysyy voimassa ja toistuu edelleen täsmälleen: sen tiivisteessä vain nämä kuusi kenttää, joita rekisteröinnin jälkeen tehty korjaus muutti, kuvataan takaisin korjausta edeltäviin arvoihinsa. Korjatut arvot kiinnitetään erikseen.
    • Mitään kynnystä ei muutettu, eikä mikään VALIDATED-rivi, kuva tai verkkosivun luku siirtynyt.
  • lunar-frame-campaign: majakka ilman havaintoa raportoidaan nyt (löytyi MR-05:llä). Raporttiin tulevat unobserved_beacons ja warning vain silloin, kun jollakin majakalla ei ole havaintoa, ja tällöin havaittujen majakoiden sigmat tulevat niiden omasta informaatiosta sen sijaan, että ne olisivat kaikki null. Datumi ei muutu, eikä mikään oletus-, mukana toimitettu tai julkaistu tuloste siirry (docs/revisions/BEACON-unobserved-cell-changes.md).

  • Kuun pääakselikoordinaatisto (lunar_frame::icrf_to_moon_pa, jota käyttävät lunar_od ja LRO-sovitus): tiedoston moon_080317.tf DE421:n keskimääräisen Maan ja pääakselin välinen siirtymä oli sovellettu väärään suuntaan ja väärällä Eulerin kiertojärjestyksellä, joten analyyttinen PA-koordinaatisto oli noin 208″ päässä PA:sta sen päällä olemisen sijaan. Se on nyt kirjattu siten kuin SPICE:n Frames Required Reading sen määrittää, ja se vastaa SPICE:n kutsua pxform('MOON_ME','MOON_PA') tarkkuudella 2.6e-16 rad; analyyttinen PA-koordinaatisto on 6″–8″ päässä DE440:n PA:sta (ennakkorekisteröity e1ead19b, rekisteröity uudelleen be33382e sen jälkeen, kun ensimmäinen ehdotettu muutos ei täyttänyt kynnystä 1e-12; docs/design/evidence/fut05b-me-pa-offset-sign/). Muuttuvat julkaistut luvut: LRO-sovitus (tests/agency_lro.rs), raaka päällekkäisyys 53,8 → 39,9 m, dynaaminen 12,6 → 12,05 m, redusoidusti dynaaminen 6,65 → 6,67 m (kynnykset ennallaan). Analyyttinen pino vastaa nyt ANISE DE -luokan ristiinvalidointia (12,0 / 6,67 m) molemmilla tasoilla; aiempi dynaamisen tason ero johtui tästä virheestä.

  • MCP-palvelin kieltäytyy asetuksesta [terrain] dem_hgt (CAP-06b-jatkotoimi). Häirintätyypin maastolaatan polku on nyt kohdassa inline_only::FILE_SOURCE_KEYS. Inline-rajapinta kieltäytyy skenaariosta, joka nimeää sellaisen, viestillä, jossa ei ole polkua eikä käyttöjärjestelmän virhettä. Tiedostolähteen suojatesti merkitsee nyt myös kentät, jotka päättyvät merkkijonoon _hgt.

  • Kutsu Jd2::from_parts murtoluvullisella päiväosalla pudotti murto-osan UTC-, TAI-, UT1- ja Maan kiertymisen muunnoksissa (yhden tunnin päiväosa käänsi Maata 15° väärin); päiväosa normalisoidaan nyt kokonaisluvuksi. Mikään moottorin kutsuja ei kärsinyt: jokainen välittää kokonaisen päivän, ja jokainen toimitettu tuloste on bitti bitiltä identtinen.

Suunniteltu#

  • Geometria ilmoitetusta horisonttiprofiilista (0,36 kohta 1, nyt moottorissa kohdassa src/skyline.rs): sky-blocked ja open_fraction horisonttiprofiilista, kun syöte antaa sellaisen (atsimuuttiaukko varana), luonnollisen heikkenemisen (vuono tai terminaali) tapahtuma skenaariossa nmea-scenario sekä suunnitteluhuomautuksen kaksi maskattua geometriaa sigma_UERE x DOP -rivillä, ennakkorekisteröitynä lisäyksenä.
  • Geometria RINEX-lokeille navigoinnilla (moottorin oman paikkaratkaisun perusteella) ja Android-lokeille (rivien Status perusteella); molempien arvo on nykyisin unknown. Geometria kohteessa $PKSHT (versio 1 ennallaan versiossa 0,36) sekä Signal K- ja OpenCPN-integraatiot.
  • Olemassa ollut aukko, ei versiossa 0,36 tuotu: kun jokaisen satelliitin SNR-kenttä on tyhjä, ei laukea mikään vähennys kohteesta loss-of-lock eikä C/N0:n perusteella; täydellinen signaalin menetys näkyy vain geometriamonitorin arvon signal_loss kautta (luokka environment). Vähennys sitä varten on suunniteltu.
  • Skeemaversion 1,3 virta ulkoisissa telemetria-oraakkeleissa (Prometheusin tekstimuodon jäsennin ja OTLP-keräin), jotka kattavat nykyisin vain version 1,2 virrat.
  • Kaksipuolinen peitto (kanjoni tai kapea vuono) luetaan signaalin menetykseksi eikä estetyksi taivaaksi, kunnes horisonttiprofiili on integroitu.

[0.35.0] - 2026-10-12#

Kolmannen osapuolen tekoälyasiakkaita nimeävä kohta on jätetty tästä pois; se on tiedostossa CHANGELOG.md GitHubissa.

Galileo OSNMA -varmennin#

  • Uusi moduuli kshana::osnma ja komento kshana osnma verify <input>: avoin, puhtaasti Rustilla toteutettu vastaanottimen puolen varmennin Galileo OSNMA:lle. Se lukee I/NAV-sivuja ja raportoi satelliittia ja epookkia kohti, onko navigointidata todennettu, ja antaa syyn jokaiselle epäonnistumiselle tai viiveelle: HKROOT:n ja MACK:n jäsennys, DSM-KROOT:n ja DSM-PKR:n uudelleenkokoaminen, julkisen avaimen Merkle-varmennus, TESLA-avainketjun varmennus, MACSEQ:n ja tunnisteiden varmennus ADKD 0, 4 ja 12 ristiintodennus mukaan lukien, sekä tulos muodossa $PKSOS vastaanottimen luottamusmonitorille. Tuloste sisältää ohjeellisen huomautuksen, että tila ei ole navigoinnin eheyspalvelu. Tiedosto docs/OSNMA.md kertoo, mikä varmennetaan ja mitä ei, aikavaatimuksen ja sen, ettei Kshana myönnä mitään oikeuksia EU:n OSNMA ICD:n immateriaalioikeuksien (IPR) nojalla (käyttäjät nojaavat ICD:n liitteen E valtuutukseen). Toteutettu SIS ICD:n version 1,1 ja Receiver Guidelines -ohjeen version 1,3 mukaan. Sivut CRC-tarkistetaan, ja u-bloxin UBX-RXM-SFRBX-tavuvirran voi lukea suoraan (--format ubx). Oletustestit käyttävät synteettistä dataa ja julkaistuja primitiivien tunnetun vastauksen testejä; erikseen käyttöön otettava testi lukee paikallisesti ladatun kopion virallisista testivektoreista. Riippumattoman katselmoinnin jälkeen varmennin ottaa aikansa vain varmennetuista TESLA-avaimista (harhautettu kaukaiseen tulevaisuuteen osoittava alikehys ei enää voi pyyhkiä pois epäonnistumista), antaa todennuksen vanhentua ja seurata käytössä olevaa IODnav-arvoa, noudattaa varmennettuja hälytysviestejä (joiden Merkle-lehti sisältää nyt satunnaisen NPK-kentän) ja NMA-tilaa ”älä käytä”, pitää täytetunnisteet pois satelliitin tilasta, säilyttää ketjut CID:n mukaan peruutuksen ja uusinnan kanssa, tarkistaa KROOT-täytteen tiivisteen sekä rajoittaa UBX-kehysten pituuksia ja TESLA-varmennuksen työmäärää. Satelliitti luetaan todennetuksi vain niin kauan kuin sen lähettämä uusin efemeridi- ja kellodata on bitti bitiltä sama data, joka todennettiin (ei pelkästään saman IODnav-arvon alla), todentamattoman NMA-otsakkeen tila tai peruutus lasketaan vain, kun kaksi satelliittia on samaa mieltä tai varmennettu KROOT kantaa sen, toistettu vanhempi KROOT ei voi korvata ketjua, ja pysähtynyt avainvirta raportoidaan.

Lisätty (MCP-palvelimen kanavat)#

    Kolmannen osapuolen tekoälyasiakkaita nimeävä kohta on jätetty tästä pois; se on tiedostossa CHANGELOG.md GitHubissa.

  • kshana-mcp --http <addr>, suoratoistettava HTTP, itse ylläpidetty. Oletuksena vain loopback; ei-loopback-osoite vaatii asetuksen --allow-remote ja bearer-tunnuksen muuttujassa KSHANA_MCP_HTTP_TOKEN; mikään työkalu ei lue eikä kirjoita polkua (IQ-tiedostotyökalut ovat pois päältä); pyynnön koon, ajan ja samanaikaisuuden rajat; ei CORS-otsaketta; Host- ja Origin-tarkistukset. Kshana ei ylläpidä päätepistettä (docs/deploy/mcp-http.md, mukana Docker-, Fly.io- ja Cloud Run -mallit).

Lisätty (rajapinnat)#

  • osnma_verify Pythonissa ja WebAssemblyssä. Komennon kshana osnma verify takana oleva varmennin muistissa oleville tavuille, joka palauttaa JSON-tuloksen, jonka --json tulostaa (ohjeellinen huomautus kentässä advisory; vain todennuksen tila, ei navigoinnin eheyspalvelu). Samat kieltäytymiset kuin komentorivillä. Ei MCP:ssä: syöte on pitkä raaka vastaanotinvirta, jolle CLI ja Python sopivat paremmin. Tiedostot docs/SURFACES.md ja docs/OSNMA.md kertovat tämän.

  • trust_telemetry WebAssemblyssä, Pythonissa ja MCP:ssä, mukana lisäosan komento ja JetBrains-toiminto. Renderöi luottamusvirran tai tuloksen receiver-trust Prometheus-tekstinä, CEF- tai LEEF-syslog-riveinä tai OTLP JSON -hyötykuormana käyttäen koodereita, joita komento kshana trust-telemetry käyttää (kshana::surface::trust_telemetry); ei socketia eikä kelloa. Lisäosa: /kshana-trust-telemetry ja skill trust-telemetry. JetBrains: Render Trust Telemetry. Ominaisuudet wasm ja python sekä MCP-palvelin ottavat nyt käyttöön myös ominaisuuden otlp, joka ei lisää yhtään crate-pakettia.

  • Pariteettipyyhkäisy. JetBrains-toiminnot Validate Scenario, List Scenario Kinds ja Assess Receiver Stream; komento kshana --help luettelee nyt receiver-trust evidence, evidence, trust-telemetry ja nmea-scenario; notebook compliance-and-test-bench (compliance-kartoitus ja test-bench-vienti); ja jokainen jäljellä oleva JetBrainsin ”vain CLI” -solu tiedostossa docs/SURFACES.md on nyt nimenomainen N/A perusteluineen.

  • Kolmannen osapuolen tekoälyasiakkaita nimeävä kohta on jätetty tästä pois; se on tiedostossa CHANGELOG.md GitHubissa.

Lisätty (todistepaketit)#

  • kshana receiver-trust evidence ja kshana evidence verify: allekirjoitetut, varmennettavat todistepaketit GNSS-luottamustapahtumalle. Paketti sisältää raakalokin viipaleen ja koko lokin SHA-256:n, asetukset kaikkine kynnyksineen, epookkikohtaiset tulokset ja syyt, moottorin version, hajautusketjutetun manifestin ja itsenäisen HTML-yhteenvedon, allekirjoitettuna Ed25519:llä (avain komennosta kshana evidence keygen tai oma tiedostosi; avaimia ei koskaan tallenneta pakettiin, ja *.evidence-key on git-ignored). Komento verify tarkistaa jokaisen tiivisteen, ketjun ja allekirjoituksen ja nimeää täsmälleen, mikä epäonnistuu; valitsimella --pubkey se kiinnittää allekirjoittajan. RFC 3161 -aikaleimatunniste (token) voidaan liittää, ja se luetaan ja sidotaan manifestiin (tämä koontiversio ei tarkista viranomaisen omaa allekirjoitusta; openssl ts -verify kattaa sen). Lokiviipale on ikkunan täsmälliset tavut, kun lukija raportoi lähdevälit (NMEA, UBX, RINEX 3, Android), muuten koko loki, ja manifesti kertoo kumpi. Luonti ja varmennus ovat puhtaita julkisia funktioita (kshana::evidence), jotka rakentuvat kohteelle wasm32. Paketit toteavat olevansa tekninen tallenne, eivät oikeudellinen lausunto. Uudet riippuvuudet ovat puu ed25519-dalek (BSD-3-Clause ja Apache-2.0/MIT, minimiominaisuudet) ja suora zeroize (jo siinä puussa) avainaineiston pyyhkimiseen. Katso docs/EVIDENCE-PACKS.md.

Lisätty (luottamustelemetria)#

  • kshana trust-telemetry: GNSS-luottamus tietoturvatelemetrian lähteenä. Lukee epookkikohtaisen luottamusvirran (JSON lines: pistemäärä 0-100, kaista, syyt) tai erätuloksen komennosta receiver-trust ja syöttää Prometheus-päätepistettä /metrics (oletuksena localhost), CEF- tai LEEF-muotoisia syslog-tapahtumia RFC 5424 -kehyksessä (UDP tai TCP) ja oletuksena pois päältä olevan ominaisuuden otlp takana OTLP/HTTP JSON -vientiä. Toimitus ajetaan työsäikeissä, joilla on yhteyden muodostuksen ja kirjoituksen aikarajat, rajoitettu uudelleenyhdistämisen viive ja laskuri kshana_trust_syslog_send_failures_total, joten kuollut tai jumittunut kerääjä ei voi pysäyttää reaaliaikaista arviota eikä jäädyttää päätepistettä /metrics; syytunnisteet rajataan 64 sarjaan. Ei uusia riippuvuuksia. Esimerkki-Grafana-kojelauta on hakemistossa deploy/grafana/. Mittarien nimet, tunnisteet ja CEF/LEEF-kenttäkartoitus ovat tiedostossa docs/TRUST-TELEMETRY.md. Virran muoto on eristetty tiedostoon src/telemetry/sample.rs.

Lisätty#

  • Merenkulun luottamus: reaaliaikainen luottamuspistemäärä 0-100 liikkuvan aluksen paikkaratkaisulle, vastaanottimen jo tulostamasta NMEA 0183 -datasta, erikseen käyttöön otettavalla portilla (gate). Komento kshana receiver-trust ottaa vastaan taulukon [platform] (kind = "static" tai "vessel", aluksen suurin nopeus, kiihtyvyys ja kääntymisnopeus, antennin korkeus vesilinjan yläpuolella ja valinnainen suuntima-anturi; jokainen oletus on dokumentoitu perusteluineen). Alukselle staattinen paikkahyppymonitori, joka mittaa etäisyyttä kalibrointikeskiarvosta ja on väärä liikkeellä olevalla aluksella, korvataan kausaalisilla liikkuvan alustan monitoreilla: paikan kinemaattinen johdonmukaisuus raportoituun nopeuteen ja kulkusuuntaan sekä aluksen rajoihin nähden, gyrosuuntima suhteessa maan suhteen kuljettuun kurssiin, nopeusloki suhteessa maanopeuteen, antennin korkeus suhteessa ilmoitettuun korkeuteen vesilinjan yläpuolella, C/N0-hajonnan romahtaminen ja samanaikainen nousu kalibrointilähtötasoon verrattuna sekä aikojen johdonmukaisuus (live-tilassa myös tämän tietokoneen kelloon nähden). Se lukee myös raportoidun todennustilan, kokonaisuutena tai satelliittikohtaisesti (vain raportoitu tila: ei OSNMA-kryptografiaa). Jokainen kynnys ilmoitetaan taulukossa [maritime] ennen ajoa. Sen jälkeen jokainen epookki saa pistemäärän 0–100 deterministisellä, ennakkorekisteröidyllä kuvauksella (ei oppimista, mitään ei sovitettu tapahtumiin; painot, kaistarajat ja todisteet ovat taulukossa [score]), joka kuvataan olemassa oleviin luottamustiloihin, ja mukana ovat vähennyksen tehneet monitorit pisteineen. Staattiset skenaariot eivät muutu, ja niiden tiiviste on ennallaan. Komento kshana receiver-trust live <session.toml> lukee stdinia, lisättävää tiedostoa, TCP:tä tai UDP:tä ja kirjoittaa yhden JSON-rivin epookkia kohti sekä valmistajakohtaisen lauseen $PKSHT; valitsimella --gate se päästää virran läpi muuttumattomana niin kauan kuin paikkaratkaisuun luotetaan, ja merkitsee paikkaratkaisun virheelliseksi (GGA-laatu 0, RMC- ja GLL-tila V, GNS- ja VTG-tila N), kun siihen ei luoteta. Portti on pois päältä, ellei sitä pyydetä; valitsin --listen tcp:<port> tarjoaa portitetun virran mille tahansa määrälle TCP-asiakkaita (oletuksena loopback, hidas asiakas pudotetaan sen sijaan, että se estäisi muut). Tämä on ohjeellinen ohjelmisto, ei tyyppihyväksytty navigointilaite (IEC 61108, IEC 61162); käyttäjä vastaa edelleen. Hakemisto examples/maritime-trust/ sisältää synteettisen Tallinnasta Helsinkiin kulkevan lokin, kirjoitettu vain tekstinä, ja sen puolivälissä on paikan harhautuminen (drag-off), jonka aikana vastaanotin jatkaa kelvollisen paikkaratkaisun raportointia; sen odotettu tuloste on kiinnitetty testillä. Opas: docs/MARITIME-TRUST.md. Tarkistukset eivät näe harhauttajaa, jonka paikkaratkaisu on johdonmukainen kaiken väylällä olevan kanssa; opas kertoo tämän.

Häiriökartta#

  • kshana interference-map ja kshana route-exposure: julkinen kuva siitä, missä ilma-alukset ja alukset ilmoittivat heikentyneestä navigointidatasta, ja kuinka suuren osan reitistä se koskettaa. Syötteet ovat paikallisia CSV-tiedostoja, jotka on tehty avoimesti lisensoidusta ADS-B- (adsb.lol, ODbL 1,0) ja AIS-datasta (NOAA MarineCadastre, Kystverket lisenssillä NLOD 2,0); jokainen tulostiedosto on yksi lähde ja yksi UTC-päivä GeoJSONia, ja siinä on menetelmä, sen kynnykset, datan lisenssi, tekijänoikeusmaininta ja lähteen kattavuusharha. ADS-B-menetelmä kokoaa NIC:n ja NACp:n kiinteälle ruudukolle ja kutsuu solua heikentyneeksi erillisten ilma-alusten osuuden perusteella, suojauksin laitteille, jotka eivät koskaan raportoi tarkkuutta, matalalle korkeudelle ja laajan alueen syille. AIS-menetelmä ajaa viisi ilmaisinta: sijainnit maalla (käyttäjän antamaa rantaviivaa vasten), ympyräradat, epäuskottavat hypyt, epäuskottavat nopeudet ja monta alusta samassa paikassa. Kynnykset ovat nimetyn menetelmäversion ennakkorekisteröityjä vakioita. Vain aggregaatit: tunnisteet tiivistetään muistissa eikä niitä koskaan kirjoiteta, eikä soluja, joissa on alle 5 erillistä ilma-alusta tai alusta, julkaista. Heikentynyt solu ei ole havainto häirinnästä. Oletuskomennot eivät käytä verkkoa; erikseen käyttöön otettava apuohjelma fetch-land --allow-network lataa Natural Earthin maapolygonit sitoumukseen kiinnitetystä osoitteesta ja säilyttää tiedoston vain, jos sen SHA-256 täsmää. ADS-B-syöte on CSV tai suoraan adsb.lolin readsb-historiatiedostot (uusi riippuvuus: flate2 puhtaasti Rust-taustajärjestelmällään, gzipiä varten). Molemmat menetelmät ovat versiota 2: heikentynyt tai poikkeava luokitus vaatii vähintään 5 ilma-alusta tai alusta (julkaisun vähimmäismäärä), jokainen solukohtainen lukumäärä alle 5 pidätetään arvona null, ja päivä, jonka taustaa ei voi arvioida, pidättää luokituksensa. Tulostiedostojen nimi on <source>-<dataset>-<date>.geojson, eikä niitä koskaan ylikirjoiteta; syöte luetaan virtana rivi riviltä; reittialtistus käsittelee antimeridiaanin. Testit käyttävät vain synteettistä dataa. Katso docs/INTERFERENCE-MAP.md ja lisenssikatselmointi tiedostossa docs/data/INTERFERENCE-DATA-SOURCES.md.

Lisätty (koulutusvirrat)#

  • kshana nmea-scenario: synteettinen silta-NMEA 0183 miehistön koulutukseen GNSS-häirinnän ja -harhautuksen tunnistamisessa. Skenaario-TOML:stä se kirjoittaa tiedoston tai suoratoistaa TCP:n tai UDP:n yli (unicast tai broadcast; reaaliajassa, kiihdytettynä tai niin nopeasti kuin mahdollista) koko siltasarjan GGA, RMC, VTG, GSV, GSA, GNS, ZDA, HDT ja VBW aluksen radalle, jolla on kääntymisnopeuden, kiihtyvyyden ja virran rajat, ja satelliittigeometrialla moottorin omista nimellisistä satelliittitähdistöistä. Aikajanalle käsikirjoitetut tapahtumat: häirintä, paikan harhautuminen (drag-off) (kelvollinen paikkaratkaisu, joka kulkeutuu pois), aikaharhautus ja toistoviive, kullakin alku- ja palautumisrampit. Ohjaajan loki (JSON ja teksti) kirjaa, mitä syötettiin ja milloin, sekä todellisen radan raportoitua rataa vasten. Kirjasto hakemistossa scenarios/training/ (avomeren häirintä, rannikon drag-off, satamaantulon aikaharhautus, yhdistetty) sisältää ohjaajan muistiinpanot. Tuloste on tarkistussummaltaan kelvollinen ja deterministinen siemenlukua kohti; testit kiinnittävät yhden golden-otteen skenaariota kohti ja lukevat jokaisen lauseen komennon receiver-trust NMEA-lukijalla. Vain teksti: ei RF-, IQ- eikä aaltomuototulostetta; virrat on tarkoitettu koulutukseen ja testaukseen, eikä niitä saa koskaan syöttää aluksen live-navigointijärjestelmiin. Katso docs/NMEA-TRAINING.md.

Merenkulun integraatiot (0.35.0, työnkulku B)#

  • Signal K -lisäosa (integrations/signalk/, ei julkaistu npm:ään): ajaa komentoa kshana receiver-trust live tai yhdistyy siihen (palvelimen oma NMEA-syöte, mukautetut syöteargumentit, JSON-lines-TCP-syöte tai portitetun virran lauseet $PKSHT), julkaisee luottamuspistemäärän, kaistan, syyt, hälytykset ja portin tilan nimiavaruudessa navigation.gnss.kshana.* (mukaan lukien vastaanottimen raportoima paikka kontekstina, ei koskaan kohteena navigation.position) ja nostaa Signal K -ilmoituksen (taso warn heikentyneessä ja alarm ei-luotetussa tilassa, pito-, tyhjennys- ja vanhentumiskynnyksin, kaikki asetusskeemassa). Ei npm-riippuvuuksia. Testattu tallennetulla synteettisellä tulosteella.
  • OpenCPN: portitetun tilan NMEA:n tarjoaa suoraan komento kshana receiver-trust live --gate --listen tcp:10110 (suositeltu); riippuvuuksista vapaa TCP-välittäjä (integrations/opencpn/nmea-tcp-relay.mjs) on valinnainen vaihtoehto. Kummassakin tapauksessa OpenCPN näkee virheellisen paikkaratkaisun, kun luottamus romahtaa, ja lauseen $PKSHT NMEA-vianetsintäikkunassaan; testit toistavat synteettisen portitetun virran oikean TCP-socketin kautta ja tarkistavat, mitä kuluttaja vastaanottaa. Natiivi pistemääräpaneelin lisäosa (integrations/opencpn/plugin/, lisäosan API 1,18, CMake) lukee lauseen $PKSHT OpenCPN:n omasta NMEA-virrasta ja hälyttää ei-luotetulla kaistalla; se rakentuu, sen logiikka on yksikkötestattu, ja se ajettiin OpenCPN-version 5.8.4 sisällä virtuaalinäytöllä (todisteet ja toistoskripti hakemistossa integrations/opencpn/evidence/); sitä ei ole paketoitu lisäosahallintaan.
  • Viitetoteutus (deploy/reference-build/): yleinen osaluettelo, käyttöjärjestelmän asennus, systemd-yksiköt ohjeelliselle monitorille ja erikseen käyttöön otettavalle portille (tarkistettu komennolla systemd-analyze verify skriptillä check-units.sh), konttivaihtoehto, Signal K -kytkentä.
  • Signal K -lisäosa hyväksyy live-JSON-skeeman 1,2 (perään lisättiin avain position ja sen jälkeen avain advisory; tuntemattomat perään lisätyt avaimet ohitetaan), tarkistettu oikealla 1,2-tulosteella ja oikeaa signalk-serveriä vasten.
  • Katselmointikorjaukset: systemd-yksiköt käynnistyvät aina uudelleen ja ajetaan hiekkalaatikossa (ei shelliä, ei verkkoa siellä, missä sitä ei tarvita), logrotate-pätkä, tarkistus check-units.sh epäonnistuu mistä tahansa löydöksestä; kontti ajaa portin ympäristömuuttujista terveystarkistuksella ja tiivisteellä kiinnitetyillä peruskuvilla; Signal K:n pistemäärän metadata, vanhentunut ilmoitus korvataan datan jatkuessa, lapsiprosessin virheet säilytetään ja tappamiset eskaloituvat, vaaralliset syöteargumentit (inputArgs) evätään, ja ilmoitus on polussa notifications.navigation.gnss.kshana.trust; välittäjä rajoittaa pidätetyn osittaisen rivin; lauseen $PKSHT jäsentimet hylkäävät pistemäärät alueen 0–100 ulkopuolelta; dokumentaatiolinkkien tarkistus; CI-työnkulku (marine-integrations.yml), joka ajaa kaiken, mukaan lukien oikean binäärin päästä päähän.
  • docs/MARINE-INTEGRATIONS.md. Ohjeellinen ohjelmisto, ei tyyppihyväksytty laite; käyttäjä vastaa edelleen. Vain ohjelmisto: mikään ei lähetä, eikä havaitsemis- tai väärän hälytyksen lukua väitetä.

Lisätty: compliance-kartoitus ja test-bench-vienti#

  • docs/compliance/ ja kshana compliance-report. Kartoitus Kshanan tulosteista viiteen kestävyyskehykseen ja -standardiin (Yhdysvaltain DHS:n Resilient PNT Conformance Framework v2.0, IMO:n ohjeistus aluksille, EASA:n ohjeistus ilmailulle, NIS2:n artikla 21, EN 16803, maksullinen standardi, johon viitataan osan ja muutaman luettelotekstissä näkyvän kohtanumeron perusteella), yksi taulukko kehystä kohti: viite, mitä se vaatii meidän parafraasissamme, tulosteet, jotka tukevat todisteita sille, ja aukko. Lähdeversiot, URL-osoitteet ja se, mitä luettiin ja mitä ei, on kirjattu. Komento kshana compliance-report <result.json>... täyttää kartoituksen annetuista ajoista ja merkitsee jokaisen rivin evidenced, partly-evidenced, not-evidenced tai out-of-scope, Markdownina ja JSONina, aukko säilytettynä jokaisella rivillä. Sanamuoto on ”tukee todisteita” (supports evidence for); mitään ei arvioida eikä hyväksytä. Testit käyttävät synteettisiä ajoja ja epäonnistuvat, kun tallennettu taulukko poikkeaa koodista.
  • kshana bench-export <scenario.toml>. Kirjoittaa skenaarion (tyyppi gnss-ins, jamming tai gnss-sim) ajoneuvon liikkeen ja tapahtumat laboratorion GNSS-simulaattoria varten: käyttäjäliike-CSV dokumentoiduin koordinaatistoin ja metadatasivutiedosto, NMEA 0183 GGA/RMC, reittipistetekstiä sekä tapahtumat CSV:nä ja kohteen receiver-trust lohkoina [[events]] (src/interop/testbench.rs). Vain liike ja tapahtumat: signaalia ei kirjoiteta. Jokainen tiedosto luetaan takaisin testissä tests/interop_testbench.rs ja verrataan sen ilmoitetun toleranssin sisällä. docs/TEST-BENCH.md antaa menetelmän viennin toistamiseksi simulaattorin läpi ja vastaanottimen lokin pisteyttämiseksi komennolla kshana receiver-trust.
  • Mikä lasketaan todisteeksi. Tulos lasketaan jonkin ominaisuuden todisteeksi vain, kun se sisältää kentät, jotka sen tyyppi kirjoittaa; pelkkä tyyppitunniste ei lasketa miksikään. Tuntemattomat tyypit, tulos, joka on ristiriidassa sisarskenaarionsa kanssa, ei-heksadesimaaliset tiivisteet ja virheelliset vastaanottimen luottamuslaskurit luetellaan käyttämättöminä syineen. Raportti suojaa Markdown-solut (escape) eikä kaadu (panic) ei-ASCII-tiivisteeseen. Funktiot compliance::run_from_text ja assess_texts ottavat vastaan tekstejä, eivät polkuja.
  • Test-bench-vienti. Valitsin --epoch tarkistetaan alueelle (UtcEpoch::parse_iso); reittipistetiedosto tarkistaa jokaisen välin, ja komento kertoo syyn, kun jokin jätetään pois; dokumentaatio toteaa, että suuntima tyypille gnss-ins on rungon kääntökulma eikä kurssi, paikkamerkkikentät GGA ja skenaarion oman korkeusmuutoksen. Komennot bench-export ja compliance-report ovat käyttöohjetekstissä.
  • Funktio fusion::pack::truth_trajectory paljastaa tyypin gnss-ins ajoprofiilin todellisen tilahistorian (sama askellus, jota tyypin oma totuus käyttää), ja UtcEpoch saa NMEA-päivämäärä- ja aikakentät.

Häiriökartan validointi#

  • Häiriökartan dekoodaussemantiikka ja geometria tarkistetaan riippumattomia toteutuksia vastaan synteettisillä syötteillä. NIC- ja NACp-koodien merkitykset pyModeS-dekoodausta vastaan synteettisillä ADS-B-kehyksillä, AIS:n ei saatavilla -arvot pyais-dekoodausta vastaan synteettisillä AIVDM-lauseilla, ruutusolun osoitus shapelyä vastaan, reitin pituus solutilaa kohti shapelyä ja GeographicLibiä vastaan sekä sisämaan maskaus shapelyä ja pyprojia vastaan, kukin toleranssilla, joka asetettiin ennen ensimmäistä vertailua (tests/fixtures/interference_map_ref/PREREGISTRATION.md). Tämä validoi, miten koodit ja kenttäarvot luetaan, sekä geometrian, ei sitä, että liputettu solu olisi häiriötä. Maapolygonien lukija sulkee nyt renkaan, joka ei toista ensimmäistä kärkeään ja jonka se luki aiemmin ilman viimeistä sivua. Dokumentaatio toteaa NACp:n ja NIC:n matalan tarkkuuden kynnykset rajana, jota kukin koodi edustaa (NACp 6 tarkoittaa EPU-rajaa 556 m, NIC 5 sisältymisrajaa 1 NM).

Lisätty (telemetriamuotojen ja todistepakettien validointi)#

  • Ulkoiset tarkistukset todistepakettien kryptografialle, pakettivarmentimelle ja telemetrian siirtomuodoille. RFC 8032 -standardin kohdan 7,1 Ed25519-testivektorit (1, 2, 3 ja 1024) ja FIPS 180-4 SHA-256 -esimerkit ajetaan paketin omien allekirjoitus-, varmennus- ja tiivistefunktioiden läpi, täsmälliseen yhtäsuuruuteen. Pythonilla pelkästään tiedoston docs/EVIDENCE-PACKS.md normatiivisen osan perusteella kirjoitettu varmennin (hashlib ja kirjasto cryptography) on samaa mieltä Rust-varmentimen kanssa 71 ehjällä ja peukaloidulla paketilla: johtopäätös, epäonnistumisjoukko, allekirjoituksen johtopäätös ja molemmat ketjun päät. Prometheus-esityksemme luetaan virallisen Python-asiakkaan jäsentimellä ja OTLP JSON virallisella viestityypillä opentelemetry-proto, tiukasti, ja molemmat ovat samaa mieltä tilan kanssa, josta ne tehtiin. CEF:llä ja LEEF:llä ei ole riippumatonta avointa validaattoria, ja ne pysyvät mallinnettuina. Tiedosto docs/EVIDENCE-PACKS.md sai normatiivisen pakettimuodon ja varmennusmenettelyn, josta puhtaan huoneen varmennin kirjoitettiin; tyyppi VerifyReport sai kentän signature_valid. Oraakkelit ja testiaineisto: scripts/gen_ed25519_rfc8032_ref.py, scripts/gen_evidence_pack_ref.py ja scripts/evidence_verify_cleanroom.py, scripts/gen_telemetry_formats_ref.py; testit evidence_crypto_reference, evidence_pack_reference ja telemetry_formats_reference. CI ei tarvitse Pythonia.

Lisätty (CEF-tapahtumien validointi)#

  • Telemetrian CEF-tapahtumat luetaan takaisin oikein kahdella riippumattomalla avoimen lähdekoodin jäsentimellä. pycef 1,11 ja Logstashin CEF-koodekki (logstash-codec-cef 6.2.7 Logstashissa 8.15.3) jäsentävät 157 CEF-riviä (jokaisen kaistanmuutoksen ja jokaisen epookin talletetussa telemetriavirrassa sekä vastapuolen tekstiä, joka sisältää merkin =, kenoviivoja, putkia, rivinvaihtoja, sarkaimia ja monitavuista tekstiä) ja palauttavat jokaisen otsikkokentän, vakavuuden, täsmällisen laajennusavainjoukon ja jokaisen arvon täsmälleen. Logstash-koodekki lukee myös neljä riviä, joiden otsikkoteksti vaatii escape-merkintää, mitä pycef ei osaa. Kynnys rekisteröitiin ennen kuin kumpaakaan jäsennintä ajettiin (tests/cef_reference.rs); testiaineisto hakemistossa tests/fixtures/cef/, oraakkeliskriptit scripts/gen_cef_ref.py ja scripts/gen_cef_logstash_ref.py; CI ei tarvitse Pythonia eikä Logstashia. LEEF:llä ei ole ylläpidettyä avointa jäsennintä, ja se pysyy mallinnettuna. CEF-tapahtumat kuljettavat nyt luottamuspistemäärän ja epookkisiirtymän CEF-sanakirjan liukulukuisissa mukautetuissa kentissä (cfp1, cfp2) kokonaislukukenttien cn1 ja cn2 sijaan, jotka eivät sopineet kummallekaan arvolle; CEF on uusi tässä julkaisussa, joten mikään toimitettu ei muutu.

Muutettu#

  • MCP: assess_receiver_log hyväksyy lokin muodossa text tai base64; työkalun syöte on rajattu kokoon 4 MiB.
  • Häirintäkaavio ottaa värinsä myös paletista. Moduuli src/jamming.rs oli ainoa moduuli, jonka Observatory-palettirevisio jätti omille väreilleen häirintälähteen Q-työn tullessa mukaan; sen kaaviotiedostot *.chart.svg (skenaariot jamming, maritime-strait-jamming ja muut tyypin jamming skenaariot) lukevat nyt moduulia src/palette.rs, ja sallittujen luettelo tiedostossa tests/palette_sync.rs on tyhjä. Vain värit ja fontti: kaaviot jamming-demo ja maritime-strait-jamming ovat yhtä suuret kuin aiemmin tallennetut renderöinnit, kun väri, font-family ja versioalatunniste on normalisoitu. Mikään piirretty arvo ei siirtynyt. Hakemiston web/studio/recorded/ tallennetut Studio-kopiot tallennettiin uudelleen versioiden 0.33.0 ja 0.34.0 uudelleenporttauksissa (vain versioleima): ne sisältävät yhä häirintäkaavion vanhan värityksen ja saavat palettivärityksen seuraavassa uudelleenporttauksessa.

Korjattu#

  • Kelloyhtyeen 3-sigma-raja kattaa nyt flicker-lattian, ja suodattimen terveystarkistus näkee sen. Kun asetuksena oli flicker_floor, tosikello kantoi flicker-FM:ää, mutta kaksitilainen suodatin, joka antaa eheysrajan, ei, joten mukana toimitetun skenaarion clock-ensemble 3-sigma-kattavuus oli 0,41 (klassinen) ja 0,33 (kvantti), ja NIS/NEES-tarkistus, joka veti oman totuutensa suodattimen mallista, raportoi identtiset arvot lattian kanssa ja ilman. Raja on nyt kaksitilainen varianssi plus viimeisen synkronoinnin jälkeen kertyneen flicker-vaiheen täsmällinen varianssi, laskettuna samasta generaattorijoukosta, jota tosikello käyttää; NIS/NEES-tarkistus vetää totuutensa laajennetusta mallista tällä generaattorijoukolla ja ajaa vastaavan laajennetun suodattimen (ja kaksitilainen suodatin flicker-totuutta vasten raportoi consistent = false). Tulosteen muutos vain kelloille, joilla flicker_floor on nollasta poikkeava: integrity skenaariossa clock-ensemble muuttuu arvoista 0,40866 / 0,33026 arvoihin 0,99970 / 1,0 (klassinen / kvantti), ja filter_health NIS/NEES sisältää nyt flickerin; ajoitusvirhe, holdover_s ja timing_p95_ns ovat ennallaan, ja skenaariot ilman lattiaa ovat tavu tavulta identtisiä. Myös tiedosto scenarios/orbit-gnss-challenged.toml (rata-tyyppi, siemenluku 7, lattiat 1e-16 / 2e-11) muuttuu: fom.integrity klassinen 0,7734 → 1,0 ja kvantti 0,9796 → 1,0, ja NIS/NEES-arvot kohteessa filter_health ja niiden kaistat muuttuvat. Sen kvanttiarvo filter_health.consistent kääntyy arvosta true arvoon false: otantatapahtuma 16 siemenluvun × 60 askeleen flicker-ensemblessa (NIS 0,8815 kaistaa [0,9125, 1,0914] vasten), ei vika. Kaista on 95 % kaista, joten noin 5 % siemenluvuista liputtaa vastaavan suodattimen rakenteen vuoksi (40 tuoretta siemenlukua tästä skenaariosta: kvantti 1 ja klassinen 2 liputettu); koossa 64 × 200 sama siemenluku on kaistan sisällä molemmille kelloille (NIS 0,990 ja 1,001). Tunnettu jatkotoimi: tyypillä fusion on sama aukko (klassinen eheys 0,80 lattian kanssa); tyyppi hybrid pysyy yli 0,99.

[0.34.1] - 2026-10-10#

Tietoturva#

  • MCP-palvelimen syöte koventettu. MCP-palvelimen skenaariotyökalut hyväksyvät nyt vain inline-sisältöä ja kieltäytyvät tiedostolähdekentistä; syötteen koko on rajattu. Tietoturvatiedote: GHSA-8wpf-hqg5-6xjr.

[0.34.0] - 2026-10-09#

Laboratoriotoisto (lab replay): seurantamoottori, havaitsemismonitorit ja kampanja-ajuri GNSS-IQ-tallenteille, sekä niihin kuuluvat silmukkamallit, C/N0-estimaattorit ja pisteytykset. Todistetaso: kaikki alla on MODELLED tai tarkistettu sisäisen johdonmukaisuuden suhteen suljettuja muotoja ja siemenlukuun perustuvaa simulaatiota vasten; mikään siitä ei lisää VALIDATED-riviä, ja varmennuksen kirjanpito (ledger) on ennallaan (251 riviä: 124 validoitua, 123 mallinnettua, 4 kumppanin osuutta). Se on ohjelmistopohjainen analyysikerros: mikään tässä ei syntetisoi häirintälähteen tai harhauttajan aaltomuotoa, eikä mikään lähetä.

Lisätty#

  • Laboratoriotoisto: testiolosuhteet, kampanja-ajuri ja pisteytys (0.34.0). kshana iq campaign <campaign.toml> toistaa tallenteet × etupäiden ketjut × silmukkamallit (kshana.loop-design/1) ja pisteyttää jokaisen solun tallennekohtaisen testiolosuhdetiedoston (kshana.test-conditions/1, TOML tai JSON) vasten. Tämä tiedosto kertoo, mitä laboratorio tietää tallenteesta: odotetut satelliitit ja kustakin tapahtumasta sen tyyppitunniste, alku ja loppu, kohteena olevat satelliitit ja ilmoitettu J/S- tai häirintälähteen tehoprofiili. Se on vain metadataa. Pisteet satelliittia kohti, koko ajolle ja tapahtumaa kohti ovat:

    • saatavuus, aika lukituksen menetykseen ja ilmoitettu J/S menetyshetkellä;
    • uudelleenhankinnan aika tapahtuman päättymisestä ja menetyksestä;
    • mitattu C/N0-heikkeneminen ilmoitettua J/S-lokeroa kohti;
    • väärän lukituksen jaksot lukittua tuntia kohti (seurantasilmukan lippu tai Doppler totuussivutiedostoa vasten);
    • PLL:n ja DLL:n diskriminaattorin värinä.

    Jokaisen mitatun heikkenemiskäyrän vieressä piirretään analyyttinen spektrierotteluviite (jamming::effective_cn0_dbhz tyypin arvolla Q) ja merkitään MODELLED kaikkialla, missä se esiintyy.

    Solut ajetaan rinnakkain seurantaistunnon lukitustilakoneen läpi, ja kukin kirjoitetaan atomisesti sisältötiivisteavaimen alle. Avain kattaa tallenteen SHA-256:n, ehdon, etupään, mallin, ajon ja pisteytyksen tiivisteet, vaaditun arvon data_class (synthetic | client-confidential) ja moottorin version. Kun asetus run.epochs on päällä, myös kunkin solun virta kshana.track-epoch/1 ja lukitustapahtumat säilytetään, nimettynä solun avaimen mukaan ja tiivistettynä soluun. cell_key ja report::digest ovat julkisia, joten kuluttaja voi johtaa uudelleen jokaisen avaimen ja tiivisteen. Uudelleenajo ohittaa siten valmiit solut, eivätkä tulosteet koskaan riipu työsäikeiden määrästä. Ajo kirjoittaa scorecard.csv/.json, itsenäisen report.html ja tiedoston DIGEST. Läpäisy-/hylkäyskynnykset ([scoring.bars], ohitettavissa tallennekohtaisesti) sovelletaan raporttia rakennettaessa.

    • Asetus [scoring] cn0_estimator = "m2m4" | "nwpr" (oletus "m2m4", osa pisteytyksen tiivistettä) valitsee C/N0:n, jonka perusteella raportoitu C/N0 ja heikkenemiskäyrä lasketaan. Molemmat estimaatit pisteytetään ja raportoidaan aina (koko ajon ja lähtötason mediaanit sekä J/S-lokeroittain), ja solu ja pistekortti kirjaavat estimaattorin. NWPR antaa silmukan oman värinän alla noin 8 dB × Bn·T liian pienen arvon; M2M4 ei.

    Myös uutta:

    • Komento kshana iq campaign report <dir> rakentaa pistekortit, raportin ja tiivisteen uudelleen soluista;
    • Komento kshana iq conditions <file> tarkistaa testiolosuhdetiedoston skeemaansa vasten;
    • Asetus events_from_sigmf = true tuo SigMF-tallenteen annotaatiot kshana:test_event tapahtumina;
    • Python saa funktiot iq_test_conditions, iq_campaign ja iq_campaign_report;
    • Palvelin kshana-mcp saa työkalun iq_campaign, joka on inkrementaalinen ja jatkettavissa kutsukohtaisen näytebudjetin puitteissa ja jonka jokainen tiedosto on rajattu työhakemistoon, sekä työkalun iq_campaign_status.

    Testit: tests/iq_campaign.rs ajaa synteettisen kampanjan, jossa on 3 tallennetta × 2 etupäätä × 2 mallia. Sen kohtauksissa on ilmoitetut C/N0-profiilit, ja se kattaa:

    • jokaisen mittarin tarkistuksen injektoitua totuutta vasten;
    • jatkamisen osittaisen yhden työsäikeen ajon jälkeen, jossa on korruptoitunut solu, tavu tavulta identtisesti keskeytymättömän neljän työsäikeen ajon kanssa;
    • solukohtaiset epookkitiedostot;
    • kolmen satelliitin 20 s uudelleenhankintaregressio: kun reacquire on päällä, jokainen kanava on takaisin 2 s kuluessa 2 s katkoksesta; tulos, kun reacquire on pois päältä, on kiinnitetty;
    • kynnykset arvioidaan uudelleen ajamatta uudelleen;
    • CLI;
    • ohitetut release-tilan läpisyöttö- ja muistitarkistukset, mukaan lukien tallenne kooltaan 4 GB (5,45× reaaliaika, huippumuisti 2 MB aloitus-RSS:n yläpuolella; yhden koneen mittauksia, ei kynnyksiä).

    Vain ohjelmisto: mikään ei lähetä, eikä häirintä- tai harhautusaaltomuotoa syntetisoida. Suunnittelu- ja toteutushuomautukset: docs/design/LAB-CAMPAIGN.md.

  • Seurantamoottori laboratoriotoistoon (0.34.0: B3.1, B3.2, B3.3, B6.1).

    • Silmukkamallitiedostot: kshana.loop-design/1 TOML (docs/design/LOOP-DESIGN-TOML.md; jäsennin iq::track::design). Yksi tai useampi nimetty malli asettaa jokaisen silmukkakentän:

      • kantoaaltotyyppi (PLL, FLL tai FLL-avusteinen PLL), asteet ja kaistanleveydet;
      • PLL-, FLL- ja DLL-diskriminaattorit ja kantoaaltoavustus;
      • välit ja integrointi;
      • lukituskynnykset ja C/N0-ikkunat sekä bittisynkronointi;
      • lukitustilakone;
      • luovutushankinta ("auto" tai nimenomainen).

      Mallit voivat periä toisiltaan avaimella extends. Tuntemattomat avaimet evätään. Jokaisella ratkaistulla mallilla on SHA-256-tiiviste kanonisen JSON-muodon yli (avaimet lajiteltu joka tasolla, kiinteä lukujen muotoilu), joten tiiviste ei riipu kenttien järjestyksestä; jokainen tuloste kirjaa sen. Rajapinnat:

      • kshana iq track --design <file> [--design-name], jossa nimenomaiset liput ohittavat mallin ja kirjataan;
      • kshana iq sweep --design <file>, joka ajaa jokaisen tiedoston mallin;
      • Python iq_track(design=, design_name=, reacquire=), iq_loop_designs;
      • MCP-työkalu iq_track, parametrit design/design_name.
    • M2M4 C/N0 (EpochOutput.cn0_m2m4_dbhz, seurantaepookkisarake cn0_m2m4_dbhz sarakkeen cn0_beaulieu_dbhz jälkeen; Pythonin epookkisanakirjat). Toisen ja neljännen momentin estimaatti samoissa ikkunoissa kuin NWPR, vain prompt-tehosta: NWPR antaa silmukan oman kantoaaltovärinän alla liian pienen arvon (noin 8 dB × Bn_PLL·T), M2M4 ei. GPS L2C CM -signaalilla (20 ms, nimellinen 40 dB-Hz, PLL 1–10 Hz) se lukee 39,93 dB-Hz jokaisella kaistanleveydellä, kun taas NWPR laskee arvosta 39,55 arvoon 38,22; kun L1 C/A -signaali on 45 dB-Hz, se lukee 45,34. NWPR ja kaikki muut tulosteet ovat ennallaan (bitti bitiltä -kiinnitys). Binääritietue pysyy 184 tavun kokoisena (arvo käyttää varattua float-kenttää ja lippubittiä 6).

    • Ylimääräiset korrelaattoritapit (monikorrelaattori / SQM). [design.integration] extra_taps_chips = [..] (siirtymät chippeinä promptista, positiivinen aikaiseen suuntaan; enintään 16, kukin alueella ±2) korreloi ylimääräisiä replikoita E/P/L:n rinnalla ja palauttaa ne kenttänä EpochOutput.extra ((offset, value) mallin järjestyksessä). Silmukat eivät koskaan käytä niitä. Avain jätetään pois kanonisesta JSON-muodosta, kun se on tyhjä, joten oletusmallin tiiviste ja jokainen tapiton tuloste ovat ennallaan (kshana.track-epoch/1 pysyy; tapiton CSV/JSONL/binääri on bitti bitiltä identtinen). Tapeilla: CSV/JSONL-sarakkeet ja binääritietue, jonka koko tavuina on 184 + 16 × taps ja jonka otsikko kantaa kenttää extra_taps_chips, joten vanha lukija kieltäytyy tiedostosta sen sijaan, että jäsentäisi sen väärin. --extra-taps (CLI), extra_taps (Python) ja extra_taps_chips (MCP iq_track). Yhden ajon mallien täytyy olla samaa mieltä tapeista.

    • Rinnakkaiset kanavat (iq track / iq sweep --threads <N|auto>; Rust TrackSession::with_threads). Kunkin lohkon kanavat ajetaan enintään N säikeellä (std::thread::scope; wasm32 pysyy sarjallisena). Kanavan korrelaatio ja lukitustilakone koskevat vain sitä kanavaa; sen epookit ja tapahtumat puskuroidaan ja kirjoitetaan nieluihin kanavajärjestyksessä, joten tuloste (CSV, JSONL, binääri, tapahtumat, yhteenveto) on tavu tavulta identtinen sarja-ajon kanssa millä tahansa N:llä. Oletus pysyy 1 säikeenä. Mitattu 12 kanavan, 4 s, 4,092 MHz tallenteella 4 ytimellä: 19,5 s sarjassa, 11,5 s 2 säikeellä, 6,3 s 4 säikeellä (3,1×; alkuhankinta on sarjallinen).

    • Hankintapinnan vienti (kshana.acq-surface/1; iq::acq_surface, docs/design/ACQ-SURFACE.md). iq acquire --surface <path> (yksi PRN; CSV, JSON tai binääri), Pythonin funktio iq_acq_surface ja MCP:n työkalu iq_acquire parametrilla surface_out kirjoittavat koko Doppler × koodivaihe -korrelaatiotehopinnan, jonka haku laskee (sen solut ovat funktion acquire soluja bitti bitiltä), sekä huipun ja kaksi hienon Dopplerin tarkennusta: paraabelinen estimaatti ja 1/16 lokeron hieno haku (≈5 Hz, kun koherentti aika on 4 ms, verrattuna 167 Hz leveisiin lokeroihin). Itse acquire ja kaikki oletukset ovat ennallaan.

    • Suoratoistettu epookkitulostus (kshana.track-epoch/1; iq::track::sink). Jokainen silmukkapäivitys sisältää:

      • aikaisen, promptin ja myöhäisen korrelaattorit;
      • kaikki kolme diskriminaattoritulostetta;
      • PLL-, FLL- ja DLL-NCO-tilat ja kantoaallon vaihe;
      • PLI- ja lukituslipukkeet;
      • molemmat C/N0-estimaatit ja bitit;
      • lukitustila.

      Se kirjoitetaan sitä mukaa kuin se tapahtuu, CSV:nä, JSON Linesinä tai versioituna binäärimuotona, ja lukijat ovat Rustissa (BinaryEpochReader) ja Pythonissa (iq_read_epochs).

      • Komento iq track saa valitsimet --epochs, --events ja --summary (kshana.track-summary/1), ja komento iq sweep saa valitsimet --epochs ja --events. MCP-työkalu iq_track saa parametrit epochs_out/events_out ja rakentaa vastauksensa rajatun muistin yhteenvedosta.
      • Ajon keko ei enää kasva tallenteen pituuden mukana: tests/iq_track_memory.rs mittaa sen laskevalla allokaattorilla (6× pituus, sama huippu 64 KiB:n tarkkuudella) ja kontrollilla, joka osoittaa, että muistinsisäinen polku kasvaa.
      • Suoratoistettu tuloste on bitti bitiltä identtinen muistinsisäisen toiston kanssa.
    • Lukitustilakone (iq::track::lock, TrackSession): sisäänveto → lukittu → menetetty → uudelleenhankinta → sisäänveto, tai poistettu käytöstä, kun menetys kestää yli reacq_window_s (oletus 30 s). Epäonnistuneita hakuja toistetaan asetuksen reacq_interval_s (0,1 s) mukaisin, tasavälein sijoitetuin yrityksin, joten uudelleenyritysaikataulu lisää mitattuun uudelleenhankinta-aikaan enintään 0,1 s. Valinnainen perääntyminen (reacq_max_interval_s yli reacq_interval_s) on oletuksena pois, ja max_reacq_attempts on valinnainen yläraja (0, ei mitään, oletuksena). 2 s kestävä katko kolmella PRN:llä nopeudella 4,092 MS/s päättyy nyt siihen, että jokainen kanava on hankittu uudelleen ja lukittu. 3 yrityksen budjetilla jokainen kanava poistettiin käytöstä 0,2 s kuluessa menetyksestä.

      • Kynnykset (loss_dwell_s, pull_in_max_s, uudelleenhankinnan Doppler-ikkuna) tulevat mallista. Jokainen siirtymä on tapahtuma syineen.
      • Väärän lukituksen tarkistus hakee seurattua Dopplerin arvoa sen ±1/(2T) FLL/PLL-aliasta vasten. Se havaitsee väärän lukituksen, jonka PR #38 mittasi (seurattu −2400 Hz, 500 Hz pielessä). Kun uudelleenhankinta on päällä, kanava päätyy lukittuna injektoidulle Dopplerille.
      • 0,8 s signaalikatko julistetaan menetetyksi ja hankitaan uudelleen viimeistään 0,3 s kuluttua signaalin paluusta.
      • --summary Kenttä final_state (ja taulukon sarake) on tila viimeisen siirtymän jälkeen, joten kanava, joka poistettiin käytöstä viimeisen silmukkapäivityksensä jälkeen, näyttää arvoa RETIRED.
      • FLL-avustus vain sisäänvedon aikana ([design.carrier] fll_assist = "pull-in", oletus; "always" säilyttää aiemman käyttäytymisen bitti bitiltä). FLL luovuttaa PLL:lle, kun tasoitettu PLI on pysynyt arvossa fll_off_pli (0,8) tai sen yli ajan fll_gate_dwell_s (0,1 s), ja palaa, kun se laskee alle arvon fll_on_pli (0,6). Päälle jätettynä 10 Hz FLL -polku rikkoi vaihelukituksen alle noin 38 dB-Hz puhtailla signaaleilla: tasolla 35 dB-Hz vaihelukitusosuus oli 10–16 %, todellisen vaihevirheen ollessa 38–41°. Portitettuna oletus pitää 100 % tasolla 35 dB-Hz virheellä 4,5°, samoin kuin pelkkä PLL. Sisäänveto 100 Hz luovutusvirheestä on ennallaan. Todisteet ennakkorekisteröidyillä kynnyksillä: docs/design/evidence/carrier-lock/. Oletussilmukat eivät siksi ole bitti bitiltä samoja kuin oletusmallin aiemmat ajot. Käytä asetusta fll_assist = "always" niiden toistamiseen. Tunnettu rajoitus: tasolla 35 dB-Hz luovutus tapahtuu 1,9–2,6 s seurannan alkamisesta, ja tasolla 33 dB-Hz 10 Hz FLL pitää PLI:n luovutuskynnyksen alapuolella, joten sisäänveto ei koskaan valmistu.
      • Uudet silmukkamallin avaimet ja API, lueteltuna:
        • [design.carrier]: fll_assist, fll_off_pli, fll_on_pli, fll_gate_dwell_s;
        • [design.lock]: reacq_window_s, reacq_interval_s, reacq_max_interval_s, ja max_reacq_attempts muutettu oletusarvosta 3 valinnaiseksi ylärajaksi (oletus 0);
        • Rust: LoopConfig.fll_assist (FllAssist, FllGate), LoopCore::set_fll_enabled, EpochOutput.fll_active, ChannelSummary.final_state.
      • Mallin tiiviste lasketaan kanonisen JSON-muodon yli, ja sisäänrakennetun oletuksen tiiviste on 33261cd171a53803a6c262686e878e01f37d902a93d5918c20a44297b8ef8e80 (kiinnitetty testillä).
      • Tulosteen yhteensopivuushuomautukset:
        • taulukossa iq track on lopussa sarake final_state;
        • komennon iq sweep CSV:ssä on lopussa sarake design_hash, ja sen JSON-tuloksessa on design_hash ja warnings;
        • pyyhkäisyn kenttä mean_cn0_dbhz on nyt keskiarvo kaikista päivityksistä, joilla on NWPR-estimaatti (rajatun muistin yhteenveto), ei enää ajon jälkimmäiseltä puoliskolta.
      • Uudelleenhankinta on pois sisäänrakennetussa oletuksessa, jossa tilakone vain tarkkailee ja silmukat toimivat bitti bitiltä kuten ilman sitä. (Oletussilmukat itse kuitenkin muuttuivat: katso FLL-avustus yllä.) Ota se käyttöön mallikohtaisesti ([design.lock] reacquire = true), valitsimella --reacquire tai asetuksella reacquire=True.
      • Varoitus commensurate_sampling: kun fs on 1e-6 sisällä puolen chip-nopeuden monikerrasta (iq::track::commensurate_samples_per_chip), komennot iq track/iq sweep (tuloste, --summary, pyyhkäisyn JSON), työkalun iq_track MCP-vastaus ja funktion iq_track Python-tulos varoittavat, että koodisilmukan värinä ja harha eivät ole edustavia. Perimmäinen syy on dokumentoitu ennakkorekisteröidyin kynnyksin hakemistossa docs/design/evidence/dll-jitter/. Täsmälleen 2 näytteellä chippiä kohti ja 0.5 chipin välillä DLL:n S-käyrä on yksittäinen askel ja silmukka väpättää: ≈ 0,09 chipin RMS-koodivirhe (≈ 26 m) tasolla 45 dB-Hz, kun taas ≈ 0,004 chipiä epäkommensuraabelilla nopeudella. ~2 dB liian matala NWPR-C/N0 tällä nopeudella johtuu samasta syystä. Kun koodi-Doppler on täsmälleen 0 Hz ja näytteitä on 4 chippiä kohti, koodi ei koskaan ylitä ±0.21 chipin kuollutta aluetta, joten jopa noin 0,2 chipin koodivaiheharha voi säilyä näkymättä värinässä (mitattu: 0.5 chipin väli antaa 2,0× kontrollin koodivirheen keskiarvolla +0,011 chipiä; 0.25 chipin väli antaa +0,125 chipiä); varoitus kattaa nopeuden.
      • Tunnettu rajoitus: oletusmalli ei luovuta FLL→PLL alle noin 35 dB-Hz (~35 dB-Hz sisäänvetolattia; katso FLL-avustus yllä ja docs/design/evidence/carrier-lock/).
      • Väärän lukituksen tai uudelleenhankinnan haku, jota ei voi ajaa (nopeus, jolla ei ole kokonaislukua näytteitä koodijaksoa kohti), ei enää pysäytä seurantaa.
      • Testit: tests/iq_track_engine.rs, tests/iq_cli.rs, iq::track::design::tests, tests/python ja MCP:n IQ-kiertotesti.
  • C/N0-profiilit synteettisissä kohtauksissa (0.34.0). iq::channel::cn0_profile ajoittaa ajassa vaihtelevan C/N0:n satelliittia kohti Kshanan omissa kohtauksissa, dB-siirtyminä suhteessa kohtauksen C/N0:aan. Muodot: askel, ramppi, paloittain lineaarinen sekä siemenlukuun perustuvat scintillaation kaltaiset Rice-häipymät ilmoitetulla S4:llä ja dekorrelaatioajalla. Ne sovelletaan olemassa olevan kohtauskanavan koukun (Cn0ProfileChannel) kautta, yhdistettynä ionosfääri-, troposfääri-, scintillaatio- ja monitie-eteneminen-vaikutuksiin, ilman muutoksia kohtauksen ytimeen. Totuussivutiedoston kenttä cn0_dbhz seuraa profiilia.

    • Rajapinnat: kshana iq scene … --cn0-profile <toml> ja kshana.iq_scene(…, cn0_profile="<toml>").
    • Mihin se on tarkoitettu: silmukat, monitorit ja kampanjapisteytys voidaan stressitestata tunnettua totuutta vasten. Se muuttaa vain laillisten signaalien voimakkuutta.
    • Tarkistukset (tests/iq_cn0_profile.rs). Kynnykset: häipymän keskimääräisen intensiteetin poikkeama arvosta 1 enintään 5 %, S4:n poikkeama tavoitteesta enintään 8 % (kun S4 = 0,3, 0,7 ja 1), intensiteettikorrelaatio yli 0,9 kohdassa 0,05 τ ja alle 0,05 kohdassa 5 τ; totuus täsmälleen ilmoitettu C/N0 plus profiili; seurattu NWPR-C/N0:n pudotus, jonka poikkeama askeleesta 6 dB on enintään 0,7 dB. Mitattu: S4:n poikkeama tavoitteesta 1,3 %, ja seurattu pudotus 6,26 dB.
  • IQ-polun havaitsemismonitorit (0.34.0 ”Lab replay”). Uusi moduuli iq::monitor, komento kshana iq monitor ja sidonta kshana.iq_monitor(path, ...). Ne tarkkailevat tallennetta ja raportoivat aikasarjoja sekä liputettuja tapahtumia (alku-, hälytys- ja loppuajat, huippu, kynnys). Ne vain havaitsevat ja mittaavat; mikään tässä ei generoi signaalia.

    • Kokonaisteho / AGC: lohkoteho ja vahvistus, jonka ideaalinen AGC soveltaisi; liputtaa nousut ja laskut.
    • Esikorrelaatiospektri: Welchin PSD lohkoa kohti opittua lähtötasoa vasten. Ylitekynnys tulee väärän hälytyksen tavoitteesta. Myös kompleksinen kurtoosi ja pulssi-ilmaisin. Pulssi-ilmaisin laskee kynnyksen ylittävät näytteet kussakin lohkossa ja nostaa tapahtuman, kun tämän lukumäärän tarkka binomiyläpyrstö on alle pulse_pfa (oletus 1e-4 lohkoa kohti), ei kun z-arvo ylittää rajan: lyhyiden lohkojen pienillä odotetuilla lukumäärillä yksi näyte on jo useita sigmoja.
    • Kanavakohtainen C/N0: kaksi yksipuolista CUSUM-muutosilmaisinta (lasku ja nousu), joille syötetään riippumattomat estimaatit (askelväli asetetaan silmukan C/N0-ikkunan mukaan).
    • SQM korrelaattoreista: delta (I_E − I_L)/I_P ja suhde (I_E + I_L)/(2 I_P) sekä epäsymmetriatestit lisäkorrelaattoreista, kun kanava tarjoaa niitä.
    • Lukitusindikaattorisarjat: PLI ja taajuuslukitusindikaattori peräkkäisistä prompteista raakasignaaleina. Lukitus- ja lukituksen menetyksen päätökset jäävät seurantamoottorin lukitustilakoneelle.

    Yksi suoratoistoajo (iq::monitor::run::run_monitors) ajaa kaiken TOML/JSON-asetustiedostolla (MonitorConfig); kampanja-ajuri käyttää samaa sisäänmenopistettä. Kaikki ovat MODELLED. Jokainen tilasto tarkistetaan suljettua muotoaan vasten siemenlukuun perustuvalla simulaatiolla (tests/iq_monitor.rs):

    • lohkotehon ylitykset Gamma-hännän suhteen;
    • kurtoosin keskiarvo 2 ja hajonta 2/√N;
    • pulssiosuus e^{−t};
    • CUSUM-ajopituudet Siegmundin approksimaatiota vasten (mitattu 330 ja 8,46 näytettä, kun approksimaatio antaa 338 ja 8,34);
    • vaihelukitusindikaattori Rician-vaiheen keskiarvoa vasten;
    • seurattavalla C/A-signaalilla SQM-deltan ja -suhteen hajonnat poikkeavat ensimmäisen kertaluvun suljetuista muodoista noin 6 % (mitattu 5,97 %; testin kynnys 12 %).

    Spektriylitteen väärän hälytyksen kaava on approksimaatio; mitattu osuus oli 1,3× kaava. Päästä päähän monitorit liputtavat:

    • C/N0-askeleen 6 dB (muutoksen ajoitus yhden estimaatin tarkkuudella);
    • tallenteen puolivälissä ilmaantuvan heijastuneen reitin (suhdetesti);
    • signaalikatkon (PLI putoaa arvosta 0,999 arvoon −0,3 ja FLI arvosta 0,93 arvoon 0,03 sen aikana);
    • kapeakaistaisen sävyn ja harvat suuriamplitudiset näytteet (spektri-, pulssi- ja kurtoositestit). Nämä ovat yleisiä DSP-testisyötteitä, eivät häiriömalleja.

Muutettu#

  • iq track/iq sweep suoratoistavat uuden istunnon kautta (katso Lisätty).
    • Valitsin --csv säilyttää version 0,32 sarakkeensa mutta suoratoistetaan nyt, joten usean kanavan rivit lomittuvat aikajärjestyksessä sen sijaan, että ne ryhmiteltäisiin kanavittain. Valitsin --json säilyttää version 0,32 muotonsa ja pitää yhä jokaisen epookin muistissa: käytä pitkille tallenteille valitsinta --epochs.
    • Komento iq sweep mittaa värinän ajon keston jälkimmäisen puoliskon päivityksistä (aiemmin päivitysmäärän jälkimmäinen puolisko), ja sen CSV/JSON saa sarakkeen design_hash.
    • Seurantataulukko saa sarakkeen final_state.
    • Käyttöohjeteksti ei enää väitä, että iq track ottaa etupään liput; vain iq acquire soveltaa niitä.
    • Pythonin funktion iq_track asetukset acq_noncoherent ja doppler_max ovat nyt oletuksena None (mallin arvot, 1 ja 5000 Hz sisäänrakennetussa mallissa). Sen epookit saavat aikaiset ja myöhäiset korrelaattorit, carrier_phase_cycles, bit_edge, bit ja state, ja tulos saa design ja events.

Korjattu#

  • Oletushankinta-askel ei enää anna Galileo E1 -seurannalle jäännöstä, jota FLL ei pysty vetämään sisään. Askel 2 / (3 · N · T_code) jättää luovutushetkelle enintään 1 / (3 · N · T_code) Doppler-virhettä, mutta oletuksena oleva kaksikvadrantti-FLL vetää sisään vain 1 / (4 T_track). Jokaiselle koodille, jonka pituus on 4 ms tai enemmän (N = 1), mukaan lukien Galileo E1-B ja E1-C, jäännös (83,3 Hz, kun koodi on 4 ms) oli sisäänvedon 62,5 Hz ulkopuolella ja seuranta lukittui väärin kohtaan +125 Hz, ja vaihelukitusindikaattori 0,97 peitti sen. Oletusaskel rajataan nyt myös arvoon 0.2 / T_track (kshana::iq::acq::default_step_hz), 0,8 kertaa sisäänveto, joten luovutus pysyy sen sisällä, vaikka viereinen lokero voittaisi. (0,4 kokeiltiin ensin: se lukittui väärin 1 / 42 ajossa E1-B:llä, ja koherentti 1 ms GPS L1 C/A -haku valitsi lokeron, joka oli 350 Hz pielessä, ja lukittui kohtaan +500 Hz; 0,25 ja 0,2 eivät aiheuttaneet yhtään samoissa ajoissa.) Hinta: Galileo E1-B/E1-C siirtyvät lokeroista 166,7 Hz lokeroihin 50 Hz, lokeroita 201 alueella ±5 kHz eikä 61; koodit, joiden pituus on 1 ms (166,7 Hz, N = 4), ovat ennallaan. "auto" silmukkamallissa tarkoittaa tätä; nimenomaista doppler_step_hz tai --doppler-step käytetään sellaisenaan, ja iq acquire (ei seurannan luovutusta) säilyttää oppikirjan askeleen. Epookkiotsake ja yhteenveto (--summary) kirjaavat nyt ratkaistun askeleen ja silmukan kaistanleveydet kutakin kanavaa kohti (resolved). Oletusmallin tiiviste on ennallaan. Tulosteen muutos: koodeilla, joiden pituus on 4 ms tai enemmän, havainnot voivat osua eri Doppler-lokeroihin.

  • GPS L2C CM (20 ms silmukkapäivitys) pitää lukituksen oletusmallilla. Oletuksena olevan 15 Hz PLL:n ja 10 Hz FLL:n Bn · T on 0,3 ja 0,2 arvolla T = 20 ms, ja silmukka menetti lukituksen jopa täydellisestä alusta (PLI −0,08, M2M4 15,8 dB-Hz). Uusi mallin avain carrier.bn_t_max (oletus 0,1) rajaa PLL:n ja FLL:n kohinakaistanleveydet arvoon bn_t_max / T, kun silmukan päivitysaika on pidempi kuin 4 ms (Design::loop_config_for): 5 Hz ja 5 Hz arvolla 20 ms, 10 Hz ja 10 Hz BeiDou B1C:llä, jonka päivitys on 10 ms; koodit, joiden pituus on 1 ms ja 4 ms, säilyttävät 15 ja 10 Hz. Se koskee myös nimenomaisia kaistanleveyksiä; bn_t_max = 0 kytkee sen pois. Avain jätetään kanonisesta muodosta pois oletusarvossaan, joten oletustiiviste on ennallaan; malli, joka asettaa jonkin muun arvon, saa eri tiivisteen. Tasolla 45 dB-Hz L2C CM antaa nyt PLI 0,996, Doppler-virheen 0,00 Hz ja M2M4 42,71 dB-Hz. Tunnettu avoin kohta: NWPR-C/N0 lukee siellä 1,76 dB liian matalaa (ja 2,45 dB liian matalaa B1C:llä, kun päivitys on 10 ms), joten matriisin T5 L2C:lle pysyy ohitettuna löydöksenä.

  • Kuva docs/assets/clock-ensemble-band.svg generoitu uudelleen: tallennettu kuva oli vanhentunut oman skenaarionsa suhteen (datan muutos, ei uudelleenpiirto). Kaavio piirrettiin 2026-06-02 tiedostosta scenarios/clock-ensemble.toml; kaksi päivää myöhemmin 67fed19e asetti flicker-FM-lattiat siihen skenaarioon (kvantti flicker_floor = 1e-16, CSAC flicker_floor = 2e-11), eikä kuvaa koskaan piirretty uudelleen. Se näytti lattiaa edeltävän ajon: y-akseli 0–47 ns, CSAC:n ajokohtainen katkon p95 10,5–47,6 ns (keskiarvo 25,2 ns), klassinen holdover 4050 s keskiarvo. Toimitettu skenaario (kuten opas ja CLI-yhteenveto jo toteavat) antaa y-akselin 0–407 ns, CSAC:n ajokohtainen p95 40,8–374,0 ns (keskiarvo 167,0 ns), klassinen holdover 844 s [220–2130 s]; 20 ns spesifikaatioviiva on edelleen tasolla 20 ns, mutta noin yhdeksän kertaa korkeammalla akselilla. Moottori on ennallaan: nykyinen moottori kesäkuun skenaariotiedostolla toistaa vanhan kuvan akselin täsmälleen. Kuvaan ei viitata READMEstä eikä dokumentaatiosta.

Tunnetut rajoitukset#

  • NWPR-C/N0 lukee liian matalaa suurella prompt-kohtaisella C/N0·T-arvolla, ja BOC(1 1) nopeudella 5 MS/s menettää noin 1 dB. NWPR on harhaton ideaaleilla prompteilla, mutta silmukan oma PLL-värinä maksaa noin sovitetun 8 dB × Bn·T (yksi kohtaus, neljä pistettä: −0.24/−0.44/−0.77/−1,58 dB arvoilla 1/2.5/5/10 Hz ja 20 ms; noin −1 dB oletusasetuksella bn_t_max = 0.1); M2M4 ei ole herkkä. BeiDou B1C -data nopeudella 5 MS/s menettää myös noin 1 dB prompt-tehoa kaistanrajoituksen vuoksi (käytä 10 MS/s tai enemmän). Kumpikaan ei ole estimaattorin vika; signaalimatriisin T5-rivit GPS L2C:lle ja BeiDou B1C:lle pysyvät ohitettuina löydöksinä näillä syillä.

[0.33.1] - 2026-10-08#

Tietoturva#

  • Kaavioteksti ja Studion kaavioiden käyttöönotto koventettu. Teksti, jonka skenaario kuljettaa generoituun kaavioon, escapetetaan nyt yhdenmukaisesti yhdellä jaetulla rutiinilla, ja Studio ottaa kaaviosta käyttöön vain piirtomerkinnät. Studion osoiteparametrit, tyyppiavaimiset haut ja skenaarionoudot rajataan tunnettuihin arvoihin. Mukana toimitetut kaaviot, tallennetut tulokset ja julkaistut luvut ovat ennallaan. Päivitystä suositellaan kaikille, jotka avaavat skenaariotiedostoja epäluotettavista lähteistä Studiossa tai upottavat generoituja kaavioita verkkosivuille. Tietoturvatiedote: GHSA-h25h-cg9f-v2cg.

[0.33.0] - 2026-10-08#

Dokumentaatio#

  • IQ-kerroksen häirintä- ja harhautusalue, kuvattuna tarkasti. Alla olevat versioiden 0.31.0 ja 0.32.0 merkinnät sanovat, että IQ-kerros lisää ”ei häirinnän tai harhautuksen aaltomuodon synteesiä”. Se pitää paikkansa IQ-kerroksesta itsestään (moduuli iq::scene generoi vain laillisia GNSS-signaaleja), mutta se luettiin lausumana koko moottorista, eikä se ole sellainen: versiosta 0.29.0 lähtien tyypin spectrum osio [iq] kirjoittaa SigMF-tilannekuvan analyyttisestä mallistaan, jossa on määritetyt häirintälähteet (kohinan kaltaiset lähteet lokero lokerolta, sävyt ja chirpit aaltomuotoina), ja asetus spoof_capture summaa aidon ja harhauttajan replikasignaalin muistissa silmukan sieppauksen testaamiseksi (komposiittia ei koskaan kirjoiteta ulos). Moottorilla on ollut myös ohjelmistopohjainen GNSS-vastaanotin versiosta 0.20.0 lähtien (sdr: hankinta ja seuranta; versiosta 0.31.0 myös iq::acq ja iq::track). Mikään Kshanassa ei lähetä eikä ohjaa radiolaitteistoa. README:n tilarivi, docs/POSITIONING.md, docs/SPECTRUM.md ja IQ-suunnitteluhuomautukset sanovat tämän nyt; julkaistut merkinnät on jätetty sellaisiksi kuin ne julkaistiin. Käyttäytyminen ei muutu.
  • Tunnettu rajoitus: kommensuraabeli näytteenotto. Näytteenottonopeudella, joka on chip-nopeuden kokonaisluku- tai puolikokonaislukumonikerta, näytteet osuvat samoille chip-vaiheille jokaisessa chipissä, ja koodidiskriminaattorista tulee porrasfunktio. Synteettisellä GPS L1 C/A -signaalilla tasolla 45 dB-Hz ja 0.5 chipin välillä 2,046 MHz (2 näytettä/chip) antaa ≈ 0,09 chipin (≈ 26 m) RMS-koodivirheen ja −0,09 chipin harhan, kun taas ≈ 0,003 chipiä epäkommensuraabelilla nopeudella. NWPR-C/N0 lukee siellä ≈ 2,4 dB liian matalaa. Nopeudella 4,092 MHz se riippuu välistä ja koodi-Dopplerista. Arvolla 0,5 chipiä se on vaaraton Dopplerilla 1500 Hz, mutta 2× koodivirhe harhalla 0,011 chipiä Dopplerilla 0 Hz, ja välillä 0,25 tai 0,1 chipiä se on 8–10× koodivirhe. Kantoaaltoseuranta ei kärsi. Tiedosto docs/design/iq-notes/receiver.md sisältää mittaukset.

Lisätty#

  • GNSS-IQ-kerros MCP-palvelimella (vaihe B.1). Palvelin kshana-mcp saa kuusi työkalua, jotka ohjaavat kerrosta kshana iq agentilta: iq_signals (hyväksytyt signaalinimet ja IQ-asetukset), iq_info (kuvaa tallenne), iq_scene (generoi ilmoitetun profiilin tai broadcast-efemeridin kohtaus, valinnaisella signaalitason kanavalla), iq_acquire (FFT-hankinta, valinnaisesti etupään vaiheiden takana), iq_track (hanki, sitten DLL/PLL/FLL-ryhmä) ja iq_frontend (kaistanpäästö, lovisuodatus, tyhjennys, poisto, AGC, kvantisoija). IQ-näytteet eivät koskaan kulje protokollan yli: jokainen työkalu ottaa tiedostopolkuja yhden työhakemiston sisällä, jonka asettaa ympäristömuuttuja KSHANA_MCP_IQ_DIR (asettamatta jättäminen jättää IQ-tiedostotyökalut pois päältä ja kaikki muut työkalut ennalleen), kieltäytyy poluista, jotka ratkeavat sen ulkopuolelle, ja jo olemassa olevista tulosteista, ellei overwrite ole asetettu, valvoo kutsukohtaista näytebudjettia (KSHANA_MCP_IQ_MAX_SAMPLES, oletus 50 000 000) ennen mitään työtä, kieltäytyy tuntemattomista argumenteista ja vastaa tiiviillä JSON-yhteenvedolla (havainnot, C/N0, lukitustila ja jokainen kirjoitettu tiedosto tavumääränsä kanssa). Epookkikohtainen tuloste menee vain tiedostoihin, jotka kutsuja nimeää. Työkalut ajavat saman koodipolun kuin CLI uuden julkisen saumakohdan kshana::iq::cli::execute kautta, joka palauttaa CLI:n viestin sen tulostamisen sijaan (stdout on MCP:n JSON-RPC-kanava); iq::cli::build_code ja iq::cli::signal_names ovat nyt myös julkisia. Vain ohjelmistoa ja lisäävä: IQ-kerros ei lisää häirinnän tai harhauttajan synteesiä, mitään ei koskaan lähetetä, eikä uusia riippuvuuksia ole. Tiedosto server.json ilmoittaa nämä kaksi ympäristömuuttujaa. Tiedoston mcp/kshana-mcp/tests/iq_round_trip.rs kiertotestit generoivat lyhyen kahden satelliitin kohtauksen ja tarkistavat hankinnan kohtauksen oman totuussivutiedoston suhteen, seurannan lukituksen ja C/N0:n, etupään, SigMF-tulosteen, budjetin, polkujen rajauksen ja pois päältä -tilan.

  • GNSS-IQ-kerros varmennuksen kirjanpidossa (ledger). Ennakkorekisteröity ristiintarkistus gps-sdr-simiä vastaan (riippumaton GPS L1 C/A -kantataajuusgeneraattori, MIT, commit 28ca29a6) kuuluu nyt aina päällä olevaan testisarjaan (tests/iq_gpssdrsim_cross_generator.rs). Sen tallennettu vertailutuloste (tests/fixtures/iq_gpssdrsim_cross_generator/: 20 ms gps-sdr-simin omaa 8-bittistä I/Q:ta, sen kanavaluettelo ja sen takana oleva kanavatila samaan koontiversioon linkitetystä harnessista) generoidaan skriptillä scripts/gen_iq_gpssdrsim_ref.sh. Mikään testiaikana ei tarvitse verkkoa tai ulkoista työkalua. Kaksi kirjanpidon riviä lisätään (251 riviä: 124 validoitua, 123 mallinnettua, 4 kumppanin osuutta):

    • GNSS-IQ-kohtauksen signaaligeometria riippumatonta kantataajuusgeneraattoria vasten: validoitu. Broadcast-efemeridikohtauksen totuus (näkyvä joukko, pseudoetäisyys, koodivaihe, Doppler, katselukulmat) vastaa gps-sdr-simin kanavatilaa kaikilla 11 kanavalla: pahin 1,6 mm, 5.5e-6 chip, 7.4e-5 Hz, 4e-9 astetta, kynnyksiä 0,05 m, 2e-4 chip, 0,02 Hz ja 1e-4 astetta vasten, jotka asetettiin ennen ajoa.
    • GNSS-IQ-hankinta riippumattomasti generoiduilla I/Q-näytteillä: mallinnettu, löydöksellä. iq::acq löytää jokaisen simuloidun satelliitin gps-sdr-simin näytteistä rekisteröityjen kynnysten sisällä (koodivaihe enintään 0,195 chipiä, Doppler enintään 72 Hz). Rekisteröity kynnys ”ei muuta PRN:ää havaittu” kuitenkin epäonnistuu: gps-sdr-simin kohinattomassa tulosteessa Gaussin kohinan kynnyksen ylittää muiden satelliittien ristikorrelaatio kaikilla 21 poissaolevalla PRN:llä. Tiukka testi säilytetään, ohitettuna löydöksen kera, ja kiinnitetty testi kirjaa sen. Mikään moottorin koodi tai julkinen API ei muutu. Näyte-I/Q:ta ei vertailla näyte näytteeltä: gps-sdr-simin kokonaislukusinitaulukko, vahvistukset, nollan alkukantoaaltovaihe ja katkaistut LNAV-kentät eivät ole suureita, joista vastaanottimen tarvitsee olla samaa mieltä. Vertailu tehdään havaintosuureilla, joita vastaanotin mittaa.

Muutettu#

  • Komento iq track luovuttaa oletuksena ≈4 ms hankinnasta (käyttäytymisen muutos). Hankinta, joka alustaa kunkin seurantakanavan, integroi nyt koherentisti ceil(4 ms / T_code) koodijaksoa yhden sijaan, missä T_code on koodin täysi jakso (monitasoiselle koodille primäärin ja sekundäärin pituuden tulo, yksikkö, jonka yli hankinta integroi). Yksitasoiset 1 ms koodit (GPS L1 C/A, BeiDou B1I, GLONASS L1OF) hakevat nyt 4 jaksoa (4 ms), joten oletus-Doppler-askel 2 / (3 · N · T_code) on ~167 Hz eikä ~667 Hz. Jokainen koodi, jonka täysi jakso on jo 4 ms tai pidempi, säilyttää 1 jakson: Galileo E1-B (4 ms), BeiDou B1C (10 ms) sekä monitasoiset GPS L5-I/L5-Q, Galileo E5a-I/E5a-Q ja E1-C (10–100 ms peittokoodeineen) ja GPS L2C. Jokainen signaali siis integroi vähintään ~4 ms. Yhden jakson haku saattoi luovuttaa kanavan jopa ~333 Hz pielessä, FLL:n sisäänvedon ulkopuolella, ja se seurasi sitten väärää lukitusta ~500 Hz päässä raportoiden puhdasta seurantaa. Siemenlukuun perustuvassa pyyhkäisyssä 180 GPS L1 C/A -kanavalla (Doppler välillä ±5 kHz, 38–47 dB-Hz, puolella navigointidata; docs/design/evidence/iq-track-acq-default/, uudelleenajettavissa) väärät lukitukset putoavat luvusta 27 / 180 lukuun 1 / 180 ja ohi menneet hankinnat luvusta 102 lukuun 11, ~40 ms lisähaulla PRN:ää kohti GPS L1:llä (11 → 52 ms). Ainoa jäljelle jäävä väärä lukitus on tasolla 38 dB-Hz, 36 Hz pielessä. Jokainen rajapinta on yhtenäinen: kshana iq track ja kshana iq sweep (--acq-coherent), Pythonin kshana.iq_track (acq_coherent=None on nyt auto; stub päivitetty) ja MCP-työkalu iq_track. Käyttäjät, jotka nojasivat vanhaan oletukseen, voivat antaa acq_coherent=1 (--acq-coherent 1). Komennon kshana iq acquire oma oletus valitsimelle --coherent pysyy arvossa 1. Uudet julkiset iq::acq::auto_coherent_periods ja iq::acq::AUTO_COHERENT_S; regressiotesti tests/iq_cli.rs::track_default_handoff_does_not_false_lock_where_one_period_did.
  • Jokainen generoitu grafiikka noudattaa nyt sivuston Observatory-teemaa: jokaisen kaavion tavut muuttuvat. Tämä on julkaistujen kuvien harkittu revisio, vain värit ja fontit; mikään piirretty arvo, koordinaatti tai nimiö ei siirtynyt. Jokaisen skenaarion kaaviotiedosto *.chart.svg (ja siten Studion kaaviovientien ja READMEn demokaavioiden), ajoraportti-HTML (*.report.html), aikajana-animaatio (--animate), skenaariotulos- ja tutkimus-HTML-sivut, validointiyhteenveto sekä dokumentaation kuvat ja kaaviot käyttivät lämmintä tummaa heinäkuun palettia (#0c0b08 pohja, #e0bd84 kulta) ja lämpimän paperin raporttiteemaa. Ne ottavat nyt jokaisen värin ja fontin yhdestä moduulista, src/palette.rs, joka peilaa tiedostoa web/theme.css: kaaviot piirretään instrumenttitummina Observatory-pohjalle (#060A14) Geist-kirjasinpinolla; raportti, animaatiosoitin ja tulossivut seuraavat katsojan vaalea/tumma-asetusta Observatoryn vaaleilla ja tummilla tunnuksilla. Kuusi vika-aluetta säilyttää yhden värin kukin (häiriö koralli, harhautus magenta, ajoitus sininen, radat syaani, eheys lime, navigointi meripihka), ja todistetasot luetaan seuraavasti: validoitu limenvihreä, mallinnettu meripihka, kumppani magenta. Vesiputouksen rampit säilyttävät havainnollisen (inferno) järjestyksensä, uudelleenankkuroituna uuteen pohjaan.
    • Testi tests/palette_sync.rs sitoo moduulin vastaamaan tiedostoa web/theme.css molemmissa teemoissa, tarkistaa, että docs/assets/palette.json ja docs/diagrams/mermaid-config.json (molemmat generoitu moduulista Python-kuvatyökaluille ja mermaid-clille) ovat ajan tasalla, ja epäonnistuu, jos heksavärivakio esiintyy hakemistossa src/ paletin ulkopuolella.
    • Testi tests/published_figures_still_reproduce.rs saa kolmannen diagnoosin, ”vain värit ja fontit siirtyivät”, jotta palettirevisio erotetaan siirtyneestä piirretystä arvosta. Jokaisen uudelleenrenderöidyn READMEn kaavion tarkistettiin olevan yhtä suuri edeltäjänsä kanssa tämän normalisoijan alla.
    • Komentosarja tools/gen_validation_figures.py lukee paletin ja generoi nyt myös kolme README-tuloskuvaa, joilla ei ollut tallennettua generaattoria (domain-coverage-map, scenario-fom, sgp4-regime-bars), oikeilla tekstielementeillä, tiedostosta web/capabilities.json, tuloksesta clock-holdover ja tiedostosta tests/fixtures/sgp4_comparison.md. Komentosarja tools/gen_readme_assets.py lukee saman paletin, mikä korjaa sen vaalean teeman ajautumisen sivustosta. Kuvan sgp4-regime-bars arvot ovat tuon testiaineiston pahimman tapauksen sarake kshana↔ref (7.31e-9, 8.05e-9, 8.18e-9 ja 4.12e-6 km), ennallaan Matplotlib-kuvasta, ja tests/figures_doc_sync.rs epäonnistuu nyt, jos tallennettu kuva ja testiaineisto eivät täsmää.
  • Kuva docs/assets/figures/domain-coverage-map päivitetty ajan tasalle (datan muutos, ei uudelleenpiirto). Kuva ilmoitti 28 ominaisuutta 8 alueella (11 validoitua, 17 mallinnettua), vanhentuneena oman ilmoitetun lähteensä suhteen; nyt uuden generaattorinsa piirtämänä tiedostosta web/capabilities.json se ilmoittaa 46 ominaisuutta 8 alueella (17 validoitua, 29 mallinnettua).

Korjattu#

  • CW-/kapeakaistahäirintälähteen Q on nyt 1,0, ei 1,5. Oppikirja-arvo kantoaallolla olevalle sävylle on 1 (sävy säilyttää signaalin spektrihuipun, κ = T_c, Q = 1/(R_c κ)); vanha 1,5 teki sävystä vähemmän vahingollisen kuin laajakaistakohina yhtä suurella J/S:llä. Tulosteen muutos: noin −1,8 dB tehollinen C/N0 CW-/kapeakaistahäirintälähteillä suurella J/S:llä tyypeissä jamming, lunar-jamming ja interop (mukana toimitetun esimerkin spectrum sävy: 17,98 dB-Hz taulukosta, oli 19,74). Laajakaistainen Q pysyy 1,0 (konservatiivinen, noin 3 dB oppikirjan ~2 alapuolella) odottamassa version 0,34 katselmointia. Aseta q_override säilyttääksesi vanhan arvon 1,5.

  • Komennon kshana iq scene kokonaislukutuloste käyttää kokonaislukualuetta. Yksikkötehoisella kohinalla ja kirjoittajan skaalalla 1 kohtaukset muodoissa ci8/ci16 tulivat noin {-1, 0, 1} ja 2-bittisten kohtausten kynnykset olivat tasolla 2,8 sigmaa. Kokonaislukumuodot skaalataan nyt niin, että odotettu komponenttikohtainen RMS on neljännes täydestä asteikosta (31,75 LSB muodossa ci8, 8191,75 muodossa ci16) tai 2 LSB 2-bittisessä. Skaala ja leikattujen alkioiden määrä tulostetaan ja kirjoitetaan sivutiedostoon. Liukulukutuloste on ennallaan.

  • Kahdeksan fikstuuripinnausta seitsemässä testitiedostossa ei enää epäonnistu macOS:llä viimeisen bitin eroista (osa issuea #36). Pinnaukset, jotka tarkistavat, että moottori yhä rakentaa oraakkelin talletetut syötteet (Jacobiaanit, tilataulukko, laukaisuazimuutit), vertasivat bitti bitiltä ja epäonnistuivat macOS arm64:llä erolla, joka oli 2–muutama tuhat viimeisen sijan yksikköä. Ne vertaavat nyt toleranssilla 1e-12 fikstuurista otettuun mittakaavaan nähden; kokonaisluvut, avaimet ja pituudet vertaillaan yhä täsmälleen, ja mutaatiotesti osoittaa, että suhteellinen muutos 1e-6 yhä epäonnistuu. Laukaisuazimuutin pinnaus vertaa arvoa sin az ja nousevaa/laskevaa haaraa itse azimuutin sijaan, koska asin vahvistaa argumenttinsa yhden ulpin noin 3e-9 radiaaniin, kun inklinaatio on yhtä suuri kuin paikan kolatitudi. Oraakkelin toleranssia tai ennakkorekisteröityä kynnystä ei muutettu. Kahta testiä (kuun yhteinen radanmääritys, kuun havaittavuus) ei kata: macOS:llä niiden ennakkorekisteröidyt vertailut itse liikkuvat, ja se jätetään jatkotoimeksi.

  • Komennot kshana iq track ja kshana iq sweep soveltavat etupään lippuja. Käyttöohjeteksti mainosti valitsimia --bandpass/--notch/--blank/--excise/--agc/--bits komennolle track, mutta komennot track ja sweep eivät koskaan rakentaneet ketjua: liput ohitettiin hiljaa, ja arvoton lippu kuten --notch nielaisi sitä seuraavan lipun. Molemmat komennot jäsentävät ne nyt kuten iq acquire ja asettavat tuoreen etupään ketjun hankintakierroksen ja seurantakierroksen eteen. Tuloste on sama kuin komennon ajaminen tiedostolla, jonka iq frontend kirjoittaa samoille lipuille.

  • IQ-kohtauksen data sijoitetaan signaalikohtaisesti. kshana iq scene --data (ja NavData::Seeded) panivat bitit nopeudella 50 bit/s jokaiselle signaalille, pilotit mukaan lukien, ja GPS LNAV -nopeudella Galileolle ja BeiDoulle. Data seuraa nyt kunkin signaalin omaa symbolien ajoitusta, jonka ilmoittaa uusi SpreadingCode::data_modulation() (DataModulation, jonka jokainen konstruktori moduulissa iq::signals asettaa). Se on 10 ms L5-I5:llä, 4 ms E1-B:llä, 2 ms BeiDou B1I GEO:lla (D2) ja bitit, joiden pituus on 20 ms, ja 10 ms meander GLONASS L1OF:llä. Data evätään pilotilta, GPS L2C:ltä yhtenä CM/CL-virtana, ja NavData::Lnav evätään kaikilta muilta kuin L1 C/A -signaaleilta. Mukautetut koodit säilyttävät aiemman ajoituksen 20 ms oletuksena. Ohjelmallinen kohtaus Scene, joka pyysi NavData::Lnav muulla kuin L1 C/A -koodilla tai NavData::Seeded pilotilla, generoi aiemmin hiljaa ja palauttaa nyt virheen ensimmäisellä lukemisella.

  • GLONASS L1OF -kanavat hankitaan ja seurataan niiden omalla FDMA-kantoaallolla. Funktio iq::acq::acquire ja seurantakanavat sekoittivat jokaisen koodin alas pelkästään arvosta if_hz. Usean kanavan GLONASS-tallenteessa kanavan +3 haku löysi siksi kanavan 0 signaalin (kaikki kanavat jakavat yhden etäisyyskoodin) eikä koskaan katsonut 1,6875 MHz korkeammalle. Molemmat käyttävät nyt lauseketta SampleSpec::baseband_hz(carrier) = if_hz + (carrier − center_hz). Kantoaaltotermi on nolla jokaiselle tallenteelle, jonka keskitaajuus on signaalin oma kantoaalto, ja se jätetään pois, kun keskitaajuus ei ole tiedossa, joten CDMA-käsittely ei muutu. Jos kierrit vanhan käyttäytymisen sisällyttämällä carrier − center sivutiedoston arvoon if_hz, poista tuo termi: siirtymä sovelletaan nyt kantoaallosta ja keskitaajuudesta, joten sen jättäminen paikalleen soveltaa sen kahdesti. Tunnettu rajoitus, ennallaan tässä: GLONASS-kohtaus tunnistaa jokaisen satelliitin taajuuskanavansa k mukaan, ja satelliitin tunnus tyypissä u32 kiertää negatiivisen kanavan ympäri. Totuussivutiedosto kirjoittaa arvon k = -7 kentässä sat_id muodossa 4294967289 (k + 2^32). Lue se takaisin arvona k tyyppimuunnoksella i32.

[0.32.0] - 2026-10-05#

Lisätty#

  • GNSS-IQ-kerros CLI:ssä ja Pythonissa (0.32.0 vaihe A). Olemassa oleva moduuli iq on nyt käytettävissä ilman Rustin kirjoittamista. Viisi uutta komentoa komentoryhmässä kshana iq liittyy datankäsittelyryhmään: scene generoi pitkän usean satelliitin IQ-kohtauksen tiedostoon totuussivutiedoston kanssa; acquire ajaa yhden tai useamman PRN:n FFT-hankinnan tallenteen yli ja raportoi jokaisen havainnon (PRN, Doppler, koodivaihe, tilasto, kynnys); track hankkii ja ajaa sitten DLL/PLL/FLL-ryhmän tallenteen yli ja tuottaa epookkikohtaisen seurantatulosteen (CSV/JSON) säädettävillä silmukan kaistanleveyksillä, integrointiajalla ja korrelaattoriavälillä; sweep toistaa yhden tallenteen usean silmukkamallin läpi ja raportoi syntyvän värinän ja lukitusmittarit mallia kohti; ja labfit sovittaa seurantasilmukan lukituksen menetyksen mallin vastaanottimen luottamusaikajanaan. Sama ydin on tarjolla Pythonille (kshana.iq_scene, iq_acquire, iq_track, iq_labfit, iq_signals), ja se palauttaa NumPy-ystävällisiä listoja ja sanakirjoja. Vain ohjelmistoa ja lisäävä: ei uusia riippuvuuksia, ei lähetystä, ei häirinnän tai harhautuksen aaltomuodon synteesiä; moottori, hankinta, seuranta ja silmukkamallit ovat paketin omia, joten CLI- tai Python-kutsuja saa samat bitit kuin Rust-testit. Uusi moduuli iq::cli; kohtauksen oma totuussivutiedosto on riippumaton oraakkeli tiedostossa tests/iq_cli.rs (hankinta palauttaa jokaisen injektoidun koodivaiheen ja Dopplerin, seuranta suppenee injektoituun Doppleriin). Julkaistu skenaariotyyppien määrä tai varmennusmatriisin rivi ei muutu.
  • Jäljellä olevat GNSS-IQ-kirjaston ominaisuudet komentoryhmässä iq CLI:ssä ja Pythonissa (0.32.0 vaihe A.2). Rakentuu vaiheen A päälle ja tuo esiin loput kerroksesta iq ilman Rustin kirjoittamista:
    • Etenemiskanava komennossa iq scene (ja Pythonin funktiossa iq_scene): ensimmäisen asteen ionosfääri (--iono-stec/--iono-vtec tai --iono-klobuchar), Saastamoinen/Niell-troposfääri (--tropo), Cornellin scintillaatiomalli (--s4, --scint-tau0, --sigma-phi), peilimäinen maan monitie-eteneminen (--multipath-height/--multipath-ground), kolmitilainen land-mobile-kanava (--land-mobile) ja ei-näköyhteyslohko (--nlos) vaikuttavat jokaiseen satelliittiin uuden crate-sisäisen sillan (iq::channel::SceneChannelAdapter) kautta, joka muuntaa kanavamallien absoluuttiset polut kohtauksen geometrian ylittävän lisäosan muotoon.
    • SigMF-tuloste komennossa iq scene (--format sigmf): kirjoittaa näytteet parina .sigmf-data/.sigmf-meta capture- ja satelliittikohtaisilla annotaatioilla; acquire/track lukevat jo SigMF:ää, joten kohtaus kiertää edestakaisin.
    • Etupään DSP: uusi komento iq frontend <in> <out> ja samat liput komennoilla acquire/track (--bandpass, --notch, --blank, --excise, --agc, --bits 1/2/3/8/14) ajavat vaiheet moduulista iq::frontend (kaistanpäästö-FIR, adaptiivinen lovisuodin, pulssien tyhjennys, taajuusalueen poisto, AGC, kvantisoija); peilattu Pythonissa nimellä iq_frontend.
    • Broadcast-efemeridikohtaukset: iq scene --nav <rinex_nav> --rx-pos lat,lon,alt (valitsimilla --start/--window/--prn) sijoittaa jokaisen terveen GPS-satelliitin sen todelliseen lähetettyyn geometriaan moottorin RINEX-lukijalla, joten totuussivutiedosto kantaa todellisen satelliittikohtaisen etäisyyden, Dopplerin ja koodivaiheen; peilattu Pythonissa nimellä iq_scene_broadcast. Vain ohjelmistoa ja lisäävä: ei uusia riippuvuuksia, ei lähetystä, ei häirinnän tai harhautuksen aaltomuodon synteesiä (kanavan etenemisvaikutukset vaikuttavat vain laillisiin signaaleihin). Jokainen numeerinen väite testataan riippumatonta viitettä vasten (suljettu muoto tai injektoitu totuus) kanava- ja etupääyksikkötesteissä sekä tiedostossa tests/iq_cli.rs.

[0.31.0] - 2026-10-04#

Lisätty#

  • GNSS-IQ-kerros: signaalitason simulaatio ja ohjelmistovastaanottimen käsittely. Uusi moduuli iq vie Kshanan yhden satelliitin, lyhyen lohkon L1 C/A -etupäästä täyteen signaalitason kerrokseen, joka on tavoitettavissa komentoryhmästä kshana iq. Se generoi pitkiä usean satelliitin raaka-IQ-kohtauksia epookkikohtaisella totuussivutiedostolla (iq::scene); soveltaa etenemistä signaalitasolla — ionosfääri koodi-kantoaaltoerkaantumisella, troposfääri, amplitudi- ja vaiheen scintillaatio (Cornell-malli), Fresnel-monitie ja kolmitilainen land-mobile-kanava, ei-näköyhteydellä (iq::channel); hankkii ja seuraa FFT-hankinnalla ja usean kanavan DLL/PLL/FLL-ryhmällä, toistaen yhden tallenteen monen silmukkamallin läpi (iq::acq, iq::track); mallintaa etupään — FIR/IIR-suodatus, 1–14-bittinen kvantisointi, AGC, lovisuodin, pulssien tyhjennys ja taajuusalueen poisto (iq::frontend); suoratoistaa suuria tallennettuja aineistoja rajatulla muistilla — int8/int16/float32/pakattu 2-bittinen ja reaali-IF-muodot, usean tiedoston SigMF, uudelleennäytteistys, aineistoluettelo tiedostokohtaisella SHA-256:lla ja eräajuri (iq::io); lisää hajotuskoodit GPS L5/L2C:lle, Galileo E1:lle (CBOC, todelliset ICD-muistikoodit) ja E5a:lle, BeiDou B1C/B1I:lle ja GLONASS L1OF:lle, kukin tarkistettuna oman rajapintakuvauksensa (ICD) suhteen (iq::signals); ja sovittaa seurantasilmukan lukituksen menetyksen mallin todellisen vastaanottimen havaittuun käyttäytymiseen laboratorioajoissa, pois jätettävän ajon holdout-virheellä (leave-one-run-out) ja ekstrapolaatiolla, joka on merkitty ennusteeksi (iq::labfit). Jokainen numeerinen väite testataan riippumatonta viitettä vasten (ICD-taulukko, suljettu muoto tai riippumaton vastaanotin, joka palauttaa injektoidun totuuden); fysikaalinen kanava ja silmukkamallit pysyvät MODELLED. Tämä on vain ohjelmistokerros: se kirjoittaa IQ-tiedostoja ohjelmistovastaanottimille eikä syntetisoi häirinnän tai harhautuksen aaltomuotoja eikä ohjaa radiolaitteistoa. Julkaistu skenaariotyyppien määrä tai varmennusmatriisin rivi ei muutu. Suunnittelu: docs/design/GNSS-IQ-PLAN.md.
  • Vastaanottimen luottamus: arvioi todellinen GNSS-vastaanottimen loki. kshana receiver-trust <scenario.toml> lukee u-bloxin UBX-, RINEX 3 (valinnaisella broadcast-navigointitiedostolla), Android GnssLogger- tai NMEA 0183 -lokin yhdeksi aikaleimatuksi aikajanaksi ja ajaa sen yli luottamusmonitoreja: kantoaalto-kohinatiheyden (C/N0) lasku, lukituksen menetys, automaattinen vahvistuksensäätö (AGC), u-bloxin häirintäindikaattori, paikkahyppy ja, RINEX:llä ja navigoinnilla, moottorin oma yhden pisteen paikkaratkaisu pariteettipohjaisella vastaanottimen autonomisella eheyden valvonnalla (RAIM) ja kelloavusteinen monitori. Jokainen epookki on nominaali, heikentynyt tai ei-luotettu, ja tulos kertoo milloin ja miksi. Skenaariossa ilmoitetut tapahtumat ja ennustetut C/N0-laskut pisteytetään samassa tiedostossa ilmoitettuja toleransseja vasten: havaittu, myöhässä tai havaitsematta jäänyt, sekä samaa mieltä tai eri mieltä. Tulosteet ovat tulos-JSON, epookkikohtainen CSV ja kaavio; tulos kantaa lokin SHA-256:n ja jokaisen kynnyksen. Tavoitettavissa myös Pythonista (kshana.receiver_trust), WebAssembly-paketista (receiver_trust, lokit inline) ja Model Context Protocol (MCP) -palvelimen uudesta työkalusta assess_receiver_log. Opas: docs/RECEIVER-TRUST.md; esimerkki: examples/receiver-trust/. JammerTest 2024 -harhautuslokeilla moottoripolku toistaa ennakkorekisteröidyn oraakkeliputken ensimmäisen hälytyksen jokaisella julkaistulla alkuhetkellä (tests/receiver_trust_jammertest.rs). Monitorit pysyvät MODELLED; mikään varmennusmatriisin rivi ei muutu.

0.30.0 - 2026-10-03#

Pienempi julkaisu. Validointikierrokset 2 ja aallon 1 paketit nostavat varmennusmatriisin 223 rivistä (93 VALIDATED) versiossa 0.29.3 249 riviin (123 VALIDATED, 122 MODELLED, 4 PARTNER); jokainen ylennys tarkistettiin riippumatonta oraakkelia vasten toleranssilla, joka asetettiin ennen ajoa, ja jokainen ristiriita julkaistaan löydöksenä. Uutta: natiivi NAIF-kernel-lukija ja DE440-polku, yksi validoitu SGP4:stä ITRS:ään -propagointi- ja aikapolku, mitattu kellokirjasto, LunaNet AFS -vertailugeneraattori, laajennetun tarkkuuden ja neliöjuuri-informaatioratkaisijat sekä todellinen kuun IQ-käsittely LuGRE-datalla. Muuttuneet julkaistut luvut on lueteltu alla revisioina.

Kaksikymmentäseitsemän varmennusmatriisin riviä muuttuu VALIDATED-tasoisiksi, kun riippumaton oraakkeli oli samaa mieltä toleranssin sisällä, joka asetettiin ennen ensimmäistä vertailua (ylennyssääntö tiedostossa docs/VALIDATION.md): kymmenen ensimmäisellä validointikierroksella ja seitsemäntoista toisella. Viisikymmentäyksi MODELLED-riviä vietiin ulkoiselle oraakkelille ensimmäisellä kierroksella ja jäljellä olevat reititettävät rivit toisella; jokainen ristiriita kirjataan alla löydöksenä eikä viritetä pois. Kolme riviä jaettiin niin, ettei validoitu osa kanna validoimatonta jäännöstä, mikä nostaa matriisin 223 rivistä 226 riviin; sen jälkeen yhdistetyt validointipaketit nostavat sen 249 riviin. Luvut luetaan generoidusta tiedostosta docs/VERIFICATION-MATRIX.md.

0.29.0 kierroksen 1 jälkeen Julkaisematon
Varmennusmatriisin rivit 223 223 249
joista VALIDATED ulkoista oraakkelia vasten 83 93 123
joista MODELLED 136 126 122
joista PARTNER 4 4 4
Tässä merkinnässä käytetyt lyhenteet
Lyhenne Merkitys
ADD, ARAIM, MAAST Airborne Design Document (ARAIM:n); edistynyt vastaanottimen autonominen eheyden valvonta; Stanfordin yliopiston Matlab Algorithm Availability Simulation Tool
ADEV, VRW, ARW Allanin poikkeama; nopeuden satunnaiskävely; kulman satunnaiskävely
ANISE, SPICE, NAIF, PCK avoimen lähdekoodin astrodynamiikkatyökalupaketti (Nyx Space); NASA:n Navigation and Ancillary Information Facility -yksikön Spacecraft, Planet, Instrument, C-matrix, Events -työkalupaketti; planeettavakiokernel
BCRS, TDB, TT barysentrinen taivaallinen koordinaatisto; barysentrinen dynaaminen aika; maanpäällinen aika
BIPM, UTC(k) Kansainvälinen paino- ja mittatoimisto; laboratorion toteutus yleisestä koordinoidusta ajasta
CCSDS, OEM, LTC, TCL Consultative Committee for Space Data Systems (avaruusdatajärjestelmien neuvoa-antava komitea); Orbit Ephemeris Message; kuun aikajärjestelmät, jotka kirjoitetaan viestin TIME_SYSTEM-kenttään
CRLB Cramér–Rao-alaraja
CW Clohessy–Wiltshire-suhteellinen liike
DE440 Jet Propulsion Laboratoryn kehitysefemeridi 440
DOP, PDOP tarkkuuden heikkenemiskerroin; paikan tarkkuuden heikkenemiskerroin
EKF, UKF, INS, GNSS, IMU laajennettu Kalman-suodatin; unscented Kalman -suodatin; inertianavigointijärjestelmä; maailmanlaajuinen satelliittinavigointijärjestelmä; inertiamittausyksikkö
EMT, VPL, HPL tehollinen monitorikynnys; pystysuuntainen ja vaakasuuntainen suojaustaso
EOP, IERS, PCC, MAE Maan orientaatioparametrit; International Earth Rotation and Reference Systems Service; Prediction Comparison Campaign; keskimääräinen itseisvirhe
ERFA, SOFA Essential Routines for Fundamental Astronomy; Standards of Fundamental Astronomy
GMAT NASA:n General Mission Analysis Tool
NTN, SSB ei-maanpäällinen verkko (3GPP); synkronointisignaalilohko
IGS, ILRS, ITRF2020 International GNSS Service; International Laser Ranging Service; International Terrestrial Reference Frame 2020
ILS, LAMBDA kokonaislukujen pienimmän neliösumman menetelmä; Least-squares AMBiguity Decorrelation Adjustment
ISB järjestelmien välinen harha
LEO matala Maan kiertorata
MHSS, PL, TPL usean hypoteesin ratkaisuerottelu; suojaustaso; ajoituksen suojaustaso
PSD, IQ, SigMF tehotiheysspektri; vaihe- ja kvadratuurinäytteet (in-phase ja quadrature); Signal Metadata Format
QPN kvanttiprojektiokohina
RAIM vastaanottimen autonominen eheyden valvonta
SBAS, WAAS, DFMC, GEO satelliittipohjainen täydennysjärjestelmä; Yhdysvaltain Wide Area Augmentation System; kaksitaajuinen usean tähdistön; geostationaarinen SBAS-satelliitti
RMS, SISRE neliöllinen keskiarvo; signal-in-space-etäisyysvirhe
RTKLIB avoimen lähdekoodin GNSS-paikannuskirjasto
TCXO lämpötilakompensoitu kideoskillaattori
VLBI erittäin pitkän kantaviivan interferometria

Validoitu#

Jokainen alla oleva rivi nimeää oraakkelinsa lajin (Kirjasto: riippumaton kolmannen osapuolen kirjasto, joka laskee yksikäsitteisesti määritellyn suureen; Mitattu: todellinen mitattu data; P2: riippumaton numeerinen kirjasto, joka laskee lineaarialgebran suureen uudelleen talletetuilla syötteillä), oraakkelin, ennen ajoa asetetun toleranssin ja tuloksen. Jokainen ylennys ajettiin uudelleen toisen katselmoijan toimesta, joka generoi testiaineiston uudelleen tavu tavulta ja osoitti, että harkittu moottorimutaatio värjää testin punaiseksi.

  • GNSS/INS-sensorifuusio (Kirjasto), rajattuna löyhästi kytkettyyn 15-tilaiseen virhetila-EKF:ään: NaveGo v1.4 (LGPL-3.0, ajettu GNU Octavella) omalla todellisella Ekinox IMU/GNSS -ajollaan. Kshanan vaaka-, pysty- ja paikkainnovaation RMS ovat 0,912, 0,940 ja 0,861 NaveGon vastaavista (kynnys 1,2) ja sen keskimääräinen normalisoitu innovaatio on 0,395 (kynnys 1,5). GNSS on läsnä koko ajon, joten katkoa ei testata. Tiukasti kytketty UKF ja kytketty kellosuodatin jäävät väitteen ulkopuolelle.
  • 3-DOF-asento ja osoitusvirhebudjetti (Kirjasto), rajattuna gravitaatiogradienttimomentin huippuun: Basilisk 2.9.1 GravityGradientEffector, 40 tapausta, suhteellinen poikkeama enintään 1e-12 (pahin 2.1e-15). RSS-osoitusbudjetti on kutsujan antamien lukujen summa ja jää sen ulkopuolelle.
  • Kuun yhteinen viestintä- ja navigointigeometria (Kirjasto), rajattuna paikan sijoitukseen, atsimuuttiin, korkeuskulmaan ja etäisyyteen: ANISE 0.10.2, 768 näytettä, enintään 1e-6 astetta ja 1 mm (pahin 2.2e-12 astetta ja 5.6e-9 m). Etäisyysmittauksen tarkkuusparametri on suunnittelusyöte väitteen ulkopuolella.
  • Vääntömomentiton jäykän kappaleen asentodynamiikka (Kirjasto): Basilisk 2.9.1 -avaruusaluksen runko, 1e4 s kahdella yleisellä inertiatensorilla, kvaternio ja kulmanopeudet enintään 1e-9 (pahin 3.3e-11 ja 3.4e-12 rad/s).
  • GNSS-kantoaallon vaiheen kokonaislukuepävarmuuden ratkaisu (LAMBDA) (Kirjasto), rajattuna ILS-ratkaisuun ja sen kahteen parhaaseen normiin: RTKLIB v2.4.2-p13, funktio lambda(), 300 kovarianssia, 0 kokonaisluvun ristiriitaa, normit suhteellisesti enintään 1e-9 poikkeamalla (pahin 5.6e-13). Bootstrap-onnistumisosuus pysyy vain sisäisesti tarkistettuna.
  • Koostettu ajoituksen PL, skalaari-MHSS (P2): numpy 2.3.5 ja scipy 1.18.1 300 talletetulla syötteellä, PL suhteellinen poikkeama enintään 1e-9 (pahin 1.2e-10), ajava osajoukko identtinen.
  • GLS-yhteismuotovalkaisu ja Mahalanobis-identiteetti (P2): numpy 2.3.5 LAPACK 201 talletetulla kovarianssilla, suhteellinen poikkeama enintään 1e-12 (pahin 7.9e-16); ehtoluvut enintään 19,3.
  • DE440 kuun pääakselin orientaatiolähde (Kirjasto): SPICE:n funktio pxform binäärisellä PCK:lla 2 000 solmun ulkopuolisella epookilla, enintään 1.7e-5 rad (pahin 1.7e-6 rad, noin 3 m pinnalla), kohdassa ”Korjattu” luetellun korjauksen jälkeen.
  • SigMF-tallenteen syöte ja tuloste sekä Welchin spektrit (Kirjasto), rajattuna SigMF:n lukuun ja kirjoitukseen sekä funktioon welch_psd: scipy 1.18.1 signal.welch suhteellinen poikkeama enintään 1e-12 lokeroa kohti (pahin 6.0e-14); sigmf-python 1.13.0 -tallenteet dekoodattu bitti bitiltä identtisesti; paketin metadata kelvollinen SigMF v1.2.6 -skeemaa vasten. IQ-synteesi ja sen mallivertailut jäävät sen ulkopuolelle.
  • LEO-broadcast-efemeridisovitin ja SISRE sovitusvälin suhteen (Mitattu), rajattuna 16-parametriseen Kepler-sovitukseen ja sen pelkän radan SISRE:hen: TU Grazin ITSG-tarkat radat neljälle satelliitille Liu ym. 2025 tilastoja vasten, komponentit 1.5x sisällä (0,804–1,087) ja SISRE 1.5x sisällä (0,716–0,809).

Löydökset#

Oraakkeli oli eri mieltä näiden rivien kanssa, joten ne pysyvät MODELLED. Jokainen löydös kirjataan myös rivin oraakkelitekstiin (ja siten tiedostoon docs/MODELLED-RATIONALE.md), ja testi kiinnittää sen.

  • Satelliittiin sijoitetun kellon tilan estimointi: pidätetyillä (holdout) IGS-kelloilla 11 GPS Block IIF -satelliitille kolmitilainen suodatin on johdonmukainen yhden askeleen eteenpäin mutta ylivarma tunnin kohdalla satelliiteilla 9 / 11 (jaksolliset ja flicker-termit eivät ole mallissa).
  • Harhautuksen havaitseminen: JammerTest 2024 -aineistossa mikään havaintotason monitori ei hälyttänyt 10 s:n kuluessa yhdestäkään 8 julkaistusta alkuhetkestä, ja kolme ennen alkua olevaa ikkunaa sisälsi vääriä hälytyksiä.
  • Ajoituksen suojaustaso harhautuksessa: mitattu havaitsematon aikavirhe ylittää TPL:n 3 / 8 havaitusta alkuhetkestä (1.9x–5.3x); 60 s:n kellokalibrointi ei kata vastaanottimen TCXO:n vaellusta.
  • Laukaisuikkuna ja nousun geometria: Orekit 12,2 vasten geometria täsmää pyöristykseen asti, mutta Maan pyörimisen paikkanopeus ei täytä suhteellista toleranssia 1e-6 leveysasteella 62,9 astetta (1.12e-6, napaliike, jonka pallomalli jättää pois). Kierros 2: todellisen navan nopeus epookilla täsmää, oletusnopeus ilman epookkia ei vieläkään täytä toleranssia (katso alla).
  • Ballistinen paluukäytävä (Allen–Eggers): ennustettu huippuhidastuvuus Stardust-paluulle on 61,8 g rekonstruoitua 32,89 g vasten (+88 %, toleranssi 15 %).
  • Yhteinen UT1- ja napaliikevirhe: 178 IERS Bulletin A -numeron tulostamaa tarkkuuskaavaa vasten napa täsmää 1.5x sisällä, mutta UT1 ei (0,48 10 päivän kohdalla, 1,59 40 päivän kohdalla). Korvattu kierroksella 2: rivi on nyt VALIDATED (katso alla).
  • Offline-oletuksena oleva Maan orientaatiotieto: astropy vahvistaa rivimäärän, mutta 12 riviä, joita crate kutsuu Bulletin A:n ennusteiksi, on merkitty mitatuiksi (I), ei ennustetuiksi (P). Operatiivisen ennustimen rivin yhtäpitävyysluvut olivat siis mitattuja rivejä vastaan. Korvattu kierroksella 2: moottori luokittelee rivit lipun mukaan ja rivi on VALIDATED.
  • Operatiivisen tyylinen Maan orientaation ennustevirhe: ennustimen UT1-virhe on 2.4x–12.6x Bulletin A:n virheeseen verrattuna ajanjaksolla 1–10 vrk, ja 5,32 ms 10 vuorokauden kohdalla, mikä on 2. EOP PCC:n 0,36–3,13 ms:n vaihteluvälin ulkopuolella.
  • Kuun geodeettinen VLBI: ANISE:n DE440:n kautta laskemia valoaikoja vastaan yksikään viive ei ole 1 ps:n sisällä; suurin ero on 24 µs, pääosin analyyttisen Kuun keskipisteen takia (noin 200 km DE440:stä). Kierros 2: kernel-polku on VALIDATED omalla rivillään; tämä analyyttinen polku pysyy MODELLED-tasolla.
  • Kuun yhteentoimivuusvienti: Orekit 12,2 kieltäytyy LTC- ja TCL-aikajärjestelmistä, joten Kuun OEM-tiedostojen vaihtoa toisen lukijan kanssa ei ole osoitettu.
  • Clohessy–Wiltshiren suhteellinen liike: Orekitin epälineaariseen liikkeeseen verrattuna 100 m:n kohdalla ero on 1,2–6,3 mm eli yli 1 mm; se skaalautuu pois jätetyn toisen kertaluvun termin mukana, joten ennakkorekisteröity toleranssi oli linearisointivirheen alapuolella. Korvattu kierroksella 2: toisen kertaluvun korjaus on VALIDATED samaa kynnystä vasten.
  • INS/TRN-vapaaliikkumisen virheen kasvu: NaveGon vapaa-inertiaalista Monte Carlo -ajoa vastaan kasvulait pitävät 5 %:n tarkkuudella 600 s asti ja yliarvioivat sen jälkeen (2.2x–8x tunnin kohdalla), koska ne jättävät pois Schuler-takaisinkytkennän. Korvattu kierroksella 2: Schuler-virhemalli on VALIDATED.
  • Kuun palvelualue todellisesta tähdistögeometriasta: 4 julkaistusta 12 saatavuustilastosta poikkeaa yli 2 prosenttiyksikköä (enimmillään 22,5).
  • Heterogeenisen UTC(k)-jäljitettävyysharhan ylärajaus: 105 024 BIPM-rivillä ylärajaus ylittyy 50,8 %:ssa riveistä; julkaistu epävarmuus rajaa BIPM:n suorittaman poikkeaman mittauksen, ei itse poikkeamaa.
  • Kuun datumin nolla-avaruuden luokittelu: julkaistulla viiden heijastimen geometrialla korrelaatio on -0.78 verrattuna arvoon -0.97, ja origon CRLB on 96–98 % alempi kuin artikkelissa.
  • Kuun LLR-datumin geometria-alusta: 192 ILRS:n vuoden 2024 Kuun normaalipistettä vastaan yksisuuntaisen residuaalin RMS oli 96 m aiemmalla orientaation interpoloinnilla ja on 22,7 m jäljempänä kuvatun korjauksen jälkeen, edelleen yli 10 m:n kynnyksen (pyöristetyt asemakoordinaatit, ei napaliikettä). Orientaatiosarja katkaisee arvot äänettömästi vuosien 2024–2025 ulkopuolella. Kierros 2: mitatun etäisyyden malli on VALIDATED omalla rivillään (2,81 m); sarja kattaa nyt vuodet 2014–2030 ja antaa virheen sen ulkopuolella.
  • Relativistinen kellotaajuuden ja koordinaatiston kytkentä: itsepotentiaalitermi on 3.18e-4 julkaistun arvon yläpuolella (toleranssi 1e-4); artikkeli arvioi eri potentiaalin, joten tämän suljetun muodon julkaistua arvoa ei ole. Korvattu kierroksella 2: asteen 2 päiväntasaajapotentiaali on VALIDATED samaa artikkelia vastaan.
  • Kaikkien aurinkokunnan kappaleiden fysikaaliset vakiot: 12 lisättyjen kappaleiden 84 vakiosta poikkeaa NAIF:n pck00011- ja gm_de440-arvoista (vanhemmat Marsin kuiden elementit; muut GM-ratkaisut Uranukselle, Neptunukselle ja Plutolle). Kierros 2: vakiot noudattavat nyt NAIF:ia (siirto sellaisenaan, ei lasketa), ja laskettu orientaatio vastaa SPICEa; rivi pysyy MODELLED-tasolla.
  • Valittavat LEO-efemeridimallit: 22 parametrin sovitus jättää 1.71x ja 1.86x julkaistusta ratasuuntaisesta virheestä 20 min:n kaarilla, yli 1.5x. Korvattu kierroksella 2: 22 parametrin malli ja sovitus ovat VALIDATED omalla rivillään.
  • Yhteinen GNSS- ja LEO-paikannus: järjestelmien välinen harha vastaa RTKLIBiä, mutta 93,2 % epookeista on 3 m:n sisällä ITRF2020:sta verrattuna lukuun 95 %; RTKLIB itse yltää aineistolla 88,2 %:iin (93,6 % kierroksen 2 ryhmäviivekorjauksen jälkeen).
  • Yhteismuotoinen eheyssokeus ja kattavuus- ja DOP-kartat: molemmat vertailut menivät läpi, mutta ne hylättiin katselmoinnissa, koska tarkoituksellisesti väärä moottori läpäisee ne myös (ensimmäinen tarkistaa vain sisäisen identiteetin; toisen julkaistut alarajat eivät huomaa kaksinkertaistettua PDOPia). Kierros 2: yhteismuotoinen eheyssokeus on VALIDATED pariteettia sisältävillä syötteillä; kattavuuskartat pysyvät löydöksenä (katso jäljempänä).

Validointikierros 2#

Toinen kierros otti mukaan jokaisen rivin, jonka ensimmäinen kierros jätti reitittävissä olevaksi: tuoreet ennakkorekisteröinnit tallennettiin ennen kuin yhtään fixturea haettiin tai oraakkelia ajettiin, vastakkainen toinen katselmoija ajoi jokaisen vertailun uudelleen, ja tarkoituksellinen moottorimutaatio piti saada jokaisen testin punaiseksi. Omistaja hyväksyi Omegan ulkopuolisen rajan rivin korjatun sanamuodon 2026-10-02 ennen sen ylentämistä (sen vanha teksti oli ristiriidassa koodin kanssa).

Ylennetty tasolle VALIDATED (17). Oraakkelin laji sulkeissa; toleranssi asetettu ennen ajoa.

  • Relativistinen kellotaajuuden ja koordinaatiston kytkentä (Viite): Ashby ja Patla 2024 L_m 2.8e-6:n sisällä (kynnys 1e-4) artikkelin siteeraamien kahden kentän asteen 2 päiväntasaajapotentiaalista; pyshtoolsin asteen 350 painovoima radiaalimerkinnälle (8.3e-5); DE441:n Kuun nopeus (2.5e-3).
  • Offline-oletuksena oleva Maan orientaatiotieto (Kirjasto): astropy 8.0.1 ja IERS Bulletin A No. 039 vahvistavat uudelleenleikatun otteen 30 lopullista, 54 nopeaa ja 90 ennustettua riviä.
  • Yhteinen UT1- ja napaliikevirhe (Kirjasto): astropyn ja pyerfan täydet rotaatiot toistavat yhteistaulukon (UT1 ja napa 6e-16:n sisällä, yhdistelmä 1.9e-7:n sisällä); IERS Annual Report 2019:n toteutuneet virheet antavat suhdeluvut 1,001–1,100.
  • EO-hyötykuorman jalanjälki ja kattavuus (Kirjasto): Orekit 12,2 ja GeographicLib 2,1 jokaisella ennakkorekisteröidyllä kynnyksellä, J2-solmuregressio nyt mukana solmuvälissä.
  • Clohessy–Wiltshiren suhteellinen liike (Kirjasto): suljetun muodon toisen kertaluvun korjauksella 1.2e-7 m:n sisällä Orekitin epälineaarisesta liikkeestä kynnyksellä 1e-3 m; pelkkä lineaarinen matriisi pysyy luonnehdittuna (1,2–6,3 mm).
  • B-tason kohdistus ja patched-conic-painovoima-apu (Kirjasto): GMAT R2026a B-taso, asymptootit, C3 ja heliosentriset elementit; sbpy 0.6.0 sekä Kasuga ja Jewitt 2019 Tisserandin parametrille.
  • INS/TRN-vapaaliikkumisen virheen kasvu (Kirjasto): yhdeksän tilan Schuler-virhemalli 5 %:n sisällä korjatuista NaveGon vapaaliikeajoista kaikissa 48 pisteessä (pahin 3,70 %).
  • Yhteismuotoinen eheyssokeus (P2): numpy lstsq 1464 pariteettia sisältävällä syötteellä 1e-12:n sisällä (pahin 1.06e-14).
  • Kuun yhteinen monitekniikkainen OD ja kello (P2): numpy laskee uudelleen jokaisen Gauss–Newton-askeleen, sigman ja asemavirheen kuudessa verkossa (2.4e-11:n sisällä) QR-ratkaisun korjauksen jälkeen.
  • Kuun VLBI-asemakoordinaattien kovarianssi (Kirjasto): SPICEllä rakennettu Jacobin matriisi toistaa aikataulun, spektrin, sigmat ja nolla-avaruuden 1 %:n ja 0,1 asteen sisällä; numpy 2e-13:een.
  • Omegan ulkopuolisen residuaalin havaitsematon yhteismuotoinen raja (P2, omistajan päätöksellä korjattu sanamuoto): numpy LAPACK 256 tapauksessa 1e-12:n sisällä, kuusi tarkkaa äärettömyyttä.
  • Kantainvariantti nolla-avaruuden luokittelu (P2): SciPyn ja NumPyn aliavaruuksien leikkaus 72 konstruoidulla matriisilla, kokonaisluvut tarkat, projektorin normi 6.0e-15:n sisällä.
  • LEO-navigointisanoman yksitaajuiset ionosfääri- ja UTC-palvelut (Kirjasto): GNSSTk 15.3.1 Klobucharille, atsimuutille ja UTC-ajautumalle; ERFA kolmelle karkaussekuntitapaukselle.
  • 5G:n ei-maanpäällisen verkon paikannusraja (P1): Bachlin, Lein ja Nabeelin 2026 yhden SSB:n rajat puolen painetun numeron sisällä; numpy paikkaratkaisun kovariansseille.
  • LLR:n mitatun etäisyyden malli (Mitattu, uusi LLR-datumialustan rivistä erotettu rivi): 192 ILRS:n Kuun normaalipistettä 2,81 m RMS vastaan 10 m:n kynnys, IERS 2010:n barycentrisellä valoajalla; kynnyksen alle jäävät osatekijät ratkaistaan ei yksitellen, ja rivi sanoo sen.
  • Kuun geodeettinen VLBI, kernel-polku (Kirjasto, uusi Kuun VLBI -rivistä erotettu rivi): SPICEn konvergoituneet valoajat 1 ps:n sisällä ja osittaisderivaatat 1e-6:n sisällä J2000:n lähellä olevilla epookeilla; analyyttinen oletuspolku pysyy MODELLED-tasolla.
  • Liun ym. 2025 22 parametrin LEO-efemeridimalli ja sen sovitus (Mitattu, uusi valittavien mallien rivistä erotettu rivi): oikeat tarkat radat 1.5x:n sisällä julkaistuista tilastoista artikkelin päivinä ja pidätetyillä päivillä (0,683–1,186); n_dot-skaalauskonventio on kopioitu eikä tämä vertailu validoi sitä, ja pysäytyssääntö on Kshanan parametrikonvergenssisääntö, ei artikkelin RMS-muutossääntö. ATOMIC-polynomi ja viiden korkeuden taulukko pysyvät MODELLED-tasolla.

Olemassa olevat VALIDATED-rivit tuettu uudelleen (määrä ei muutu).

  • Planeettojen paikat JPL:n Standish-elementeistä ja valoaika aurinkokunnan kappaleiden välillä: jälkikäteen asetetut kaksinkertaisen nimellisarvon kynnykset korvataan ennakkorekisteröidyillä vertailuilla JPL Horizons DE441:een (RMS enintään Explanatory Supplementin taulukon 8.10.1 luku, pahin 0,778, Maan jako ja ICRF-rotaatio mukaan lukien; valoajat 1e-6 s:n sisällä Horizonsista DE441-paikoilla, pahin 6.7e-9 s). Niiden lippu "raja asetettu vertailun jälkeen" poistetaan.
  • Eheys (RAIM/ARAIM/SBAS): rivi ei enää nojaa uskottavuustarkistuksiin. Se kertoo nyt: ADD v4.2:n ARAIM-monihypoteesinen ratkaisuerotus vastaa Stanford MAASTia ARAIM 2:lle 270 todellisessa tapauksessa (pahin VPL-ero 2.2e-3 m kynnyksellä 0,05 m); hetkellinen RAIM-havaitseminen ja -poissulkeminen vastaavat RTKLIBin raim_fde 2016:ta 2016:sta päätöksestä, kaltevuussuojaustaso 2.7e-12 m:n sisällä; SBAS DO-229E:n L1-suojaustasot vastaavat Stanford MAASTia todellisilla WAAS-lähetyksillä (2868 paria 1.6e-5 m:n sisällä). Se toteaa suoraan, että tasasigmaiset funktiot raim::araim_raim ja raim::araim_dual_raim EIVÄT vastaa ADD-määritystä (vastaavilla syötteillä erot 0.75/4.04 m ja 0.39/1.93 m VPL/HPL, löydös), että DFMC L5 SBAS -vertailu on löydös (308 paria, joissa ei ole GEO-satelliittia näkyvissä, Kshana suojaa mutta MAAST ei) ja että raim::solution_separation_raim ei ole ulkoista vertailua. Sen itselippu poistetaan.
  • LEO-lähetysefemeridin sovitin: integroitu totuusrata lisätään validoituun osaan (Orekit 12,2 4,55 mm:n sisällä 6 tunnin aikana, kynnys 2 cm); korjauspolynomit, kellosovitus ja päivitysjakson kompromissi pysyvät mallinnettuina.

Löydökset ja estyneet rivit (pysyvät MODELLED-tasolla). Jokaisen rivin oraakkelitekstissä on löydös ja sen kiinnitetty testi.

  • Navigointisignaalin modulaatio (Betz 2001, Hein 2006): spektrit ja korrelaatiot vastaavat; 24 MHz:n sivukeilat ja jokainen monitie-etenemisen harha (11–15 % liian pieni) eivät vastaa, syy ratkaisematta.
  • TDOA/FDOA-paikannus: rajat vastaavat Hon ja Chanin sekä Hon ja Xun tuloksia ja kirjoittajien koodia 3e-12:n tarkkuudella; Monte Carlosta painetut Ottawan kertoimet poikkeavat 1,3 % ja 4,4 %.
  • Maan GNSS Kuun etäisyydellä: GENESIS-seniittikeskiarvot vastaavat Montenbruck ym. 2023 tuloksia 5:ssä 6:sta; nadiirikeskiarvot ovat 1,0–2,4 satelliittia liian korkeita.
  • Kattavuus- ja DOP-kartat: Maan mallit vastaavat Orekitia, gnss_lib_pyta ja numpya jokaisella kynnyksellä; Kuun ja Marsin mallit ylittävät 1e-9 vain lähes singulaarisissa soluissa.
  • Yhteinen GNSS-paikannus: kaksitaajuinen 79,9 % ja tarkat tuotteet 94,2 % 3 m:n sisällä verrattuna lukuun 95 % (RTKLIB 67,9 % ja 94,1 %); tarkkojen tuotteiden ISB-ero johtuu siitä, että RTKLIB ohittaa antennipoikkeamat.
  • Seurantasilmukat (GNSS-SDR 0.0.19): vastaavat tasolla 35–45 dB-Hz; tasolla 30 dB-Hz PLL +21 %, DLL -32 %, kynnykset +1,5 dB; liukumisajat 0,5–2 dekadia lyhyempiä.
  • Kuun palvelualue (Orekit ja Hipparchus): 155 arvoa 160:stä vastaa; huonoimman otoksen vaatimus ei täyty lähes singulaarisessa LNCSS B -geometriassa.
  • Kvantti-inertiasensori: pelkän QPN:n lattia on 21–31 % Gauguetin 2009 mitattua kohinaa alempi (kynnys 30 %, ylitetty 0,5 prosenttiyksiköllä).
  • Oskillaattoriesiasetukset: mitatut yksilöt ylittävät rubidiumin holdoverin, cesiumin lyhytaikaisen ja CSAC:n huonoimman yksilön esiasetukset; OCXO-esiasetukselle ei ole mitattua tallennetta.
  • Avaruussäätiheys: Jacchia 1971 on kertoimen 2 sisällä kiihtyvyysmittaritiheyksistä aurinkomaksimissa mutta noin 1.7x liian tiheä vuoden 2008 minimissä.
  • Geometriavapaa vinoTEC: 33 kaarta 36:sta 3 TECU:n sisällä CODE-kartasta (pahin 6,84).
  • Harhautuksen havaitseminen ja TPL virallista JammerTest 2024 -lokia vastaan: 4 alkamishetkeä 10:stä havaittiin ajoissa; TPL ylitetään 4:ssä 10:stä.
  • Kellosuodin tuoreilla IGS-kelloilla: kaksi 11 satelliitista ei täytä innovaatiosummakriteeriä.
  • Pienimmän neliösumman ja autoregressiivinen EOP-ennustin: UT1 1,73–2.11x Bulletin A:han verrattuna 2–10 vuorokauden kohdalla.
  • UTC(k):n toteutuneen poikkeaman ylärajaus: yhdistetty ylitys 0,0333 verrattuna lukuun 1e-2.
  • Kuun koordinaatiston datumi kampanjasta: SPICE-haara vastaa; asemat estimoiva P2-haara ei yllä tasolle 1e-9 ehtoluvun 2.1e8 tehtävässä.
  • Kuun koordinaatiston datumi todellisesta LLR:stä: 15 lukua 16:sta vastaa SPICEa; z-translaation sigma on 1,03 % liian suuri kynnykseen 1 % nähden.
  • Paluu ilmakehään (Allen–Eggers): pistemassaratkaisu vastaa virastojen rekonstruktioita (vain ristiintarkistus); kiihtyvyysmittarivertailu on estetty, kunnes luettava Hayabusa2-lähde on saatavilla.
  • ITU-T-maskit: painetut laskuesimerkkiarvot vastaavat; G.8273.2-luokkarajoilla ei ole sellaisia (estetty).
  • Laukaisuikkunan geometria: todellisen navan paikan nopeus epookin kanssa vastaa Orekitia (4.9e-8); oletusarvoinen epookiton nopeus ei vielä täytä kynnystä (1.12e-6). Ei ylennetty; jatkotoimi kesken.
  • Kaikkien kappaleiden fysikaaliset vakiot: nyt 0/84 poikkeaa NAIF:sta (siirto sellaisenaan), ja laskettu orientaatio vastaa SPICEa tarkkuudella 1.4e-10 rad. Ei ylennetty; jatkotoimi kesken.
  • Estetty omistajan rajauspäätökseen, kustakin sitoutettuna vastaava vertailu: Kuun absoluuttisten asemien havaittavuus, pintamajakan DOP, akselin ulkopuolinen vienti, ristimodaliteettisen havaitsemisen teho, yhteismuotoinen yhdenmukaisuustunnusluku ja polaarisen LEOn kattavuus.
  • Estetty datan vuoksi: ajansiirron virhebudjetointi (tarvitsee todellisen datan redusoinnin), JammerTestin C/N0 (antennin paikkaa ja tehojakoa ei ole dokumentoitu).

Revisiot (siirtyneet julkaistut luvut, vanha -> uusi).

  • snapshot_raim-suojaustasot ovat nyt geodeettisella paikallistasolla radiaalisen sijaan: enintään 0,31 m HPL ja 0,14 m VPL asemalla ABMF (16 astetta N); mikään golden ei siirtynyt, mutta gnss-sim-tutoriaalin tallennettu yhteenveto siirtyy keskiarvosta HPL 22,1 m / VPL 40,0 m arvoihin 22,2 m / 39,9 m (docs/tutorials/scenarios/gnss-sim.toml).
  • Kuun nopeuskoordinaatiston kytkennän oletukset: d_alpha/d_scale 3.139807e-11 -> 3.138801e-11; d_alpha/d_radial 1.807187e-17 -> 1.806185e-17 metriä kohti.
  • Offline-oletus-EOP-ajo (realtime-frame-eop, solut luetteloitu tiedostossa docs/revisions/M035-default-eop-recut-cell-changes.md): predicted_rows 12 -> 90; napalattia 0,06776 -> 0,05550 mas; eop_term_m 14,01601 -> 14,01583; total_m 20,09759 -> 20,09746; total_time_ns 67,03834 -> 67,03790; tiedoston tests/golden/realtime-frame-eop.csv taulukon 2 rivit; operatiivisen ennustimen yhtäpitävyys 0.256/0.695/1.252/3.885 ms -> 0.133/0.421/0.839/2.786 ms.
  • docs/LEO-NAVMSG.md liu22 SISRE rata/kellon kanssa: 60 s 0.011/0.046 -> 0.014/0.046 cm; 300 s 0.068/0.139 -> 0.074/0.142 cm; 600 s 0.269/0.299 -> 0.258/0.290 cm.
  • Liun korkeustaulukko, Kshana (suhde): GRACE-A 5,40 (0,61) -> 4,25 (0,48); GRACE-C 4,12 (0,66) -> 2,87 (0,46); Sentinel-2A 2,95 (1,03) -> 2,20 (0,77); HY-2A 2,38 (1,13) -> 1,25 (0,59); Sentinel-6A 0,70 (0,94) -> 0,51 (0,67).
  • LEO-navigointisanoman nDot-skaala 2^-60 -> 2^-58 (ei ennakkorekisteröity, ilmoitettu; sovitusvertailun ulkopuolella); liu22-näytekehyksen CRC 0x62373A -> 0xDED99C.
  • docs/LEO-NAVMSG.md-varmennustaulukko: Liun ja ATOMICin rivi jaettu VALIDATED 22 parametrin riviin ja MODELLED ATOMICin ja viiden korkeuden riviin.
  • DE440:n Kuun pääakseliorientaatiorivin teksti: jakso 2024-2025 / 731 riviä -> 2014-2030 / 6 209 riviä; "katkaisee äänettömästi" -> virhe jakson ulkopuolella.
  • eo-coverage-skenaario: equatorial_ground_track_spacing_km 2756,37 -> 2752,17 km; uudet kentät inclination_deg (98,19) ja nodal_period_min (98,893).
  • constellation-multi-gnss-coverage (TDOP/GDOP-vertailukello on nyt näkyvissä olevan pienimmin numeroidun tähdistön kello): globaali GDOP max 2,2236 -> 2,1205, keskiarvo 1,122 -> 1,131, mediaani 1,115 -> 1,125, p90 1,255 -> 1,265, p95 1,305 -> 1,315, p99 1,41 -> 1,42 sekä solukohtainen GDOP-kartta; mean_visible_by_constellation summataan kokonaislukuina (noin 1e-12 suhteellisesti, näkymätön 4 desimaalilla).
  • Yhteinen yksitaajuinen GNSS-paikkaratkaisu lähetetyn ryhmäviivekorjauksen jälkeen: 93,2 % -> 93,6 % 3 m:n sisällä; ISB:n mediaani -0.351 -> -0.114 ns.
  • tracking-loop jitter_table log10_mean_time_to_cycle_slip_s (Costas-silmukan SNR rho/4): kynnyksellä 25,47 dB-Hz 11,58 -> 2,10; tasolla 25 dB-Hz 9,55 -> 1,60; tasolla 22 dB-Hz 2,24 -> -0.14.
  • ins-trn-coast: jokainen tuloste siirtyy Schuler-virhemallin mukana; mukana toimitetun skenaarion TRN-huippu 52,932679 -> 44,711834 m (tests/conflict_resilience_architecture_guard.rs).
  • lunar-vlbi-raportti: uusi avain geometry_path ("analytic" oletusajossa, mikään numeerinen arvo ei muuttunut); uudet valinnaiset kentät planetary_kernel_path, earth_orientation_kernel_path ja moon_orientation_kernel_path, kernel-polulla epoch_partials; lajin kuvaus on kirjoitettu uudelleen. Varmennusrivin kernel-polun oraakkeli on SPICE (0,06 ps); ANISE (0,12 ps) muuttuu kernel-evaluoinnin ristiintarkistukseksi.
  • Kappalevakiot: Phobos GM 7.087e5 -> 7.087546066894452e5; Deimos 9.62e4 -> 9.615569648120313e4; Uranus 5.7939506103e15 -> 5.793951256527211e15; Neptune 6.83509997e15 -> 6.835103145462294e15; Pluto 8.69326e11 -> 8.696138177608748e11 (m^3/s^2); Phoboksen päiväntasaajasäde 13,1 -> 13,0 km; Phoboksen ja Deimoksen napa ja nollameridiaani pck00011:stä; aurinkokunnan prime_meridian_deg sisältää nyt toisen asteen ja jaksolliset termit.
  • europa-surface-pnt (body-pnt Europalla), Europan täydestä pck00011-orientaatiosta (7cfd66b4; orientaatio vastaa SPICEn pxformia tarkkuudella 1.4e-10 rad), joka siirtää laskeutujaa inertiaalitilassa: saatavuus pelkät releet / Maan etäisyyden kanssa 0,485 / 0,725 -> 0,480 / 0,719 (83 -> 82 / 171 epookista pelkät releet), PDOP:n mediaani 5,266 -> 5,360, paikkaratkaisun RMS-virhe 129,516 / 100,983 m -> 112,742 / 86,147 m, formaalin sigman mediaani 5,266 / 4,272 m -> 5,360 / 4,239 m. Tiedoston docs/SOLAR-SYSTEM.md taulukko ja tiedoston mcp/kshana-mcp/tests/round_trip.rs kiinnitys seuraavat; mars-orbit-pnt ei muutu.
  • space-weather (f107 180, f107a 165, kp 4), kalibroitu kerroin korvattu Jacchia 1971:llä: activity_density_kg_m3 korkeuksilla 300/400/500/600/800 km 2.602e-11 -> 3.608e-11, 4.176e-12 -> 6.929e-12, 8.136e-13 -> 1.618e-12, 1.769e-13 -> 4.189e-13, 1.544e-14 -> 3.781e-14; activity_factor 1.076/1.121/1.168/1.216/1.320 -> 1.492/1.860/2.322/2.881/3.232; reference_exospheric_temperature_k poistettu, mean_exospheric_temperature_k lisätty (1186,7 K); tests/space_weather_reference.rs: 800 km:n aurinkosyklin heilahdus on nyt 10.4x (NRLMSISE-00 13.6x) ja korkeusväite seuraa NRLMSISEn nousua korkeuteen 500 km ja laskua korkeudella 800 km.
  • ntn-5g-positioning toa_median_sigma_3d_m: NR 5 MHz 2,0903959 -> 2,0903962 m; NB 200 kHz 25,938613 -> 25,938839 m (yhteenvetoteksti ennallaan 2,09 / 25,94 m).
  • lunar-joint-od-clock (QR-ratkaisu): with_vlbi.station_pos_err_m 3,541344 -> 3,541350 m; without_vlbi.station_pos_err_m 2183,119 -> 2183,558 m.
  • docs/field-units-schema.json kirjoitettu uudelleen yllä olevia uusia ja poistettuja kenttiä varten.

Validointipaketit#

D12, laajennettu tarkkuus ja neliöjuuriratkaisija (kaksi uutta VALIDATED-riviä: 226 -> 228 riviä, 110 -> 112 validoitua).

Osa 1, laajennetun tarkkuuden oraakkeli:

  • Kuun koordinaatiston datumi asemat estimoituna: 50-numeroinen mpmath-laajennetun tarkkuuden oraakkeli (ennakkorekisteröity 804662d5, ehtoluvulla skaalatut kynnykset a priori -taaksepäinvirhekaavasta) vastaa uutena kampanjapäivänä (2026-03-18) ja alkuperäisessä 2024-01-01-skenaariossa; uusi VALIDATED-rivi tasolla P2. Se ratkaisee aiemman kaksoistarkkuuden kiistan: moottorin datumisigmat poikkeavat enintään 9.7e-6, NumPyn käänteis- ja ominaisarvoreitit enintään 6.2e-6, ja sen Cholesky- ja QR-reitit noin 1e-8. Moottori on virherajansa sisällä mutta noin tuhat kertaa epätarkempi kuin faktorointireitti.
  • Oraakkeliympäristö: mpmath 1.3.0 lisätty.
  • Revisiot: ei yhtään. Mikään golden-tiedosto tai julkaistu luku ei muutu; rivi "Kuun koordinaatiston datumi havaintokampanjasta" pysyy MODELLED-tasolla (perustajan päätös 2026-10-02, vaihtoehto A: se ei lainaa erillisen rivin tilaa); sen testiteksti viittaa uuteen testiin ja sen löydökseen.

Osa 2, neliöjuuri-informaatiodatumiratkaisija:

  • Uusi valinnainen neliöjuuri-informaatioratkaisija (linalg_sr; solver = "srif" lunar-frame-campaign-skenaariossa): Householder-QR, marginalisointi kolmiotekijän kautta, Jacobin SVD spektrille ja kompensoidut tulot vain oikein pyöristetyistä operaatioista. 50-numeroista oraakkelia vastaan (ennakkorekisteröity b41908c9) sen datumisigmat vastaavat 3e-13:n tarkkuudella uutena päivänä (2026-06-09); päivien 2026-03-18 ja 2024-01-01 syötteillä oletusratkaisija poikkeaa enintään 1e-5. Uusi VALIDATED-rivi tasolla P2. Oletusratkaisija ja sen tuloste eivät muutu. Ennakkorekisteröidyt kynnykset osoittavat luotettavasti virheet vasta noin 2e-7 suhteellisen tason yläpuolella: ne hylkäävät oletusratkaisijan mutta eivät käännettyä Householder-merkkiä, kompensoimatonta pistetuloa tai spektristä loppukäänteistä, ja rivi sanoo sen.
  • Valinnaiset neliöjuurireitit muuttumattomien oletusten rinnalla: fim::crlb_srif, batch_ls::gauss_newton_srif, orbit_determination::determine_orbit_batch_srif, lunar_combination::formal_covariance_srif, precise_od::fit_srif ja cislunar_srif::srif_cross_validation_sqrt, uusilla linalg_sr::weighted_lstsq ja covariance_from_sqrt_information. Jokainen vastaa oletustaan, missä molemmat ovat tarkkoja (sisäinen tarkistus, ei riviä; niille ei väitetä validointia). precise_od::fit delegoi nyt jaetulle rutiinille; sen tuloste ja jokaisen skenaarion oletustuloste ovat ennallaan.
  • Kuun koordinaatiston kampanjan astepäätökset: ennakkorekisteröity laajennetun tarkkuuden tarkistus 40 päivälle vahvistaa jokaisen ratkaistavissa olevan asemalohkon ja täysiasteisen Helmert-päätöksen. A priori -raja ei voi varmentaa 20 asteeltaan vajaata Helmert-päivää; tarkassa aritmetiikassa niiden vajaus on geometrinen, ja 1e-9 kynnys on kampanjan ominaisarvosuhteiden luonnollisella vaihteluvälillä. Ei riviä.
  • Laajennetun tarkkuuden kampanjarivin väite rajataan muotoon "pahimman tapauksen rajan sisällä", ja sen asemat kiinteinä -heikoimman suunnan tarkistus mittaa nyt todellisen kulman (6.6e-16 rad; vertailija vaihdettiin funktiosta acos jänteeseen, kynnys ei muuttunut).
  • Revisiot: ei yhtään. Mikään golden-tiedosto tai julkaistu luku ei muutu; rivi "Kuun koordinaatiston datumi havaintokampanjasta" on ennallaan ja pysyy MODELLED-tasolla (perustajan päätös 2026-10-02, vaihtoehto A).

D4, JPL:n kernel-efemeridirunko, vaihe 1 (neljä uutta VALIDATED-riviä: 228 -> 232 riviä, 112 -> 116 validoitua).

  • NAIF-kernelin lukijalla on oma rivinsä. naif_kernel (DAF-säiliö, SPK-tyyppi 2, binäärinen PCK-tyyppi 2) vastaa SPICE Toolkitia (CSPICE N0067 spiceypyn 8.2.0 kautta) ja ANISE 0.10.6:ää kaikissa 600 DE440-tilassa ja 200 Kuun orientaatiorotaatiossa satunnaisessa ruudukossa, joka on arvottu ennakkorekisteröintikommitin oman tiivisteen (abcd9133) perusteella, kynnysten sisällä, jotka johdettiin etukäteen kaksoistarkkuuden Chebyshev-evaluoinnista (pahin 0,6 % kynnyksestä, 1.95e-3 m). Rivi väittää, että moottori lukee JPL-kernelit oikein, ei että DE440 tai analyyttinen sarja olisi tarkka (tests/naif_reader_spice_oracle.rs).
  • ephem_provider::KernelEphemeris: DE440:n (tai minkä tahansa tyypin 2 SPK:n) paikat moottorin oman lukijan kautta, kaksiosaisilla TDB-epookeilla ja kernelin SHA-256 talletettuna raportteja varten; se ei koskaan korvaa planeettaa järjestelmän barycentrellä. LunisolarSource antaa geometriapolun valita analyyttisen sarjan (oletus) tai kernelin.
  • Valinnainen kernel-Kuu kohteille lunar-llr-datum ja lunar-vlbi-fim: avain planetary_kernel_path lukee geosentrisen Kuun keskipisteen kernelistä; muu ei muutu, ja raportti saa moon_ephemeris-lohkon, joka nimeää kernelin ja sen SHA-256:n. Ilman avainta molemmat raportit ovat tavu tavulta samat kuin ennen.
  • Kuun pintapisteen kovarianssi kernel-polulla (uusi VALIDATED-rivi): kun jokainen asema on kiinteä ja majakka DE440:n Kuussa, majakan kovarianssi vastaa SPICEn valoaikaa koskevaa Jacobin matriisia (pahin 1.7e-3 kynnyksellä 1 %) ja NumPyn käänteismatriisia (4e-14 kynnyksellä 1e-9), ennakkorekisteröity 4a51256 (tests/lunar_vlbi_surface_point_spice_oracle.rs). Analyyttisen polun rivi pysyy MODELLED-tasolla: analyyttisellä Kuulla pienin majakan sigma on 3,9 % oraakkelia pienempi.
  • Kuun koordinaatiston datumi todellisesta kampanjasta, kernel-Kuun keskipiste (uusi VALIDATED-rivi): 447 näkemättömällä 2019-Q2-normaalipisteellä, ennakkorekisteröity 830d945a ennen kuin yhtään pistettä haettiin, datumin kovarianssi kernel-polulla vastaa muuttumatonta SPICE- ja NumPy-oraakkelia 7.6e-5:n sisällä kynnyksillä 1 % ja 2 % (tests/validate_llr_datum_kernel_moon_fresh.rs). Perustaja päätti, että tämä rivi ylennetään vain tuoreilla pisteillä; nähdyn datan diagnostiikka (c51f8b2) on löydös, ei todiste. Kynnys ei erottele Kuun malleja: analyyttinenkin Kuu läpäisee saman osajoukon (pahin 3.8e-3), suunniteltua mutaatiota (kernel-Kuu tunnin myöhässä) ei havaittu, ja taitekohdassa noin 4 650 km väärä Kuun keskipiste (Kuu otettuna Maan ja Kuun barycentren ympäri) läpäisi myös. Rivi väittää kovarianssin kyseisellä polulla, ei Kuun keskipistettä, ja sanoo sen.
  • Auringon, Kuun, Merkuriuksen ja Venuksen paikat DE440:stä UTC-epookeilla (uusi VALIDATED-rivi): KernelEphemeris::relative_position_utc vastaa Skyfieldiä 1,54 600 paikalla vuosien 1973 ja 2026 välillä, pahin 2,96 m, ennakkorekisteröidyn kynnyksen (0bfafe6d) sisällä, jonka asettaa kaksitermisen TDB − TT -sarjan (tests/kernel_ephemeris_skyfield_oracle.rs). Planeettojen paikat saavat tämän uuden kernel-rivin nyt; Standish-rivi ja planeettakuiden rivi ovat ennallaan, ja kuut odottavat skenaariota, joka tarvitsee niitä (perustajan päätös).
  • Löydökset: LLR-datumivertailun ainoa ohitus (z-translaation sigma 1,025 % kynnyksellä 1 %) putoaa arvoon 0,049 %, kun vain Kuun keskipiste luetaan DE440:stä, nähdyllä datalla (tests/validate_llr_datum_kernel_moon.rs); tuoreella 2019 osajoukolla analyyttinen Kuu läpäisee myös, joten vuoden 2015 ohitus oli marginaalinen kyseisen neljänneksen geometrialle. Analyyttiset rivit "Kuun koordinaatiston datumi TODELLISESTA havaintokampanjasta" ja "Kuun pintapisteen koordinaattikovarianssi … erillään Maan asemasta" pysyvät MODELLED-tasolla; niiden oraakkelitekstit osoittavat nyt kernel-polun riveihin.
  • lunar_ephemeris ei enää sano, ettei moottorilla ole binäärikernelin lukijaa; se osoittaa lukijan riviin ja selittää, miksi avaruusalusten kernelit (tyypit 13 ja 21) tulevat edelleen Horizonsin kautta.
  • Revisiot: ei yhtään. Mikään golden-tiedosto, julkaistu luku tai olemassa olevan testin arvo ei muutu; analyyttiset lunar-llr-datum-, lunar-vlbi-fim- ja kaikki asemat kiinteinä -lunar-vlbi-fim-raportit ovat tavu tavulta samat kuin ennen (tuloksen SHA-256-etuliitteet 9927aac2, cf1d2671, 25c357e4).

D9, mitattu kellokirjasto "Clock Atlas" (kolme uutta riviä, yksi VALIDATED: 232 -> 235 riviä, 116 -> 117 validoitua).

  • Mitattu kellokirjasto (clock_library). Laitekortit (valkoinen vaihe, valkoinen, flicker- ja random-walk-taajuusmodulaatio, lineaarinen taajuusajautuma ja valinnaisesti kerran–neljä kertaa kierrosta kohti -vaihetermit) sovitettuina nimettyyn mitattuun kellotallenteeseen ja pisteytettyinä pidätetyllä datalla; aukkotietoiset Allanin ja Hadamardin varianssit; ehdollistusilmaisin, joka kirjaa jokaisen aukon, vaihepoikkeaman, vaihehypyn, purskeen ja taajuushypyn eikä tiedä mitään tiedosto- tai vuorokausirajoista; kortin muunnos paikka-ajoituksen kohinamalliksi, laajennetuksi Kalman-kellomalliksi ja harhautusvalvonnan kohinatasoiksi. Lukijat RINEX- ja IGS-kellotiedostoille, BIPM:n laboratoriokohtaisille tiedostoille ja Circular T:n osalle 1 (realdata::clk); UTC(k):n yhdistetty hierarkkinen ikääntymisraja (utck_bound, ei vielä pisteytetty).
  • Viive-1-autokorrelaatiokohinan tunnistus (allan::lag1_noise_id, Riley ja Greenhall 2004), uusi VALIDATED-rivi (Kirjasto): vastaa allantoolsia 2024,6 autocorr_noise_id 140 tapauksessa, kokonaisluvut identtiset, pahin ero 9.6e-13 kynnyksellä 1e-9 (ennakkorekisteröity 2ec76864; tests/clock_library_lag1_noise_id_allantools.rs).
  • Mitatut laitekortit pidätetyllä ennusteella, uusi MODELLED-rivi (löydös): sovitus yhdellä kolmanneksella, kahden muun kolmanneksen Allanin poikkeaman ennuste kertoimen 1,5 sisällä (ennakkorekisteröity 2ec76864). GPS Block IIF tuoreessa IGS-ikkunassa (2026-03-01–14): 10/11; G27 on optimistinen kahden tunnin skaalalla (pahin kerroin 1,510). Cesium (sisällä, 1,070), OCXO (ulkopuolella, 2,348) ja strontium (sisällä) raportoidaan, ei sokkona. JammerTest-vastaanottimen kortti sekä Galileon maserin ja Deep Space Atomic Clockin kortit ovat estetty. ZED-F9P-vastaanottimen TCXO-mallilaji 12 staattisella Wroclawin asemalla (Zenodo 6488497) ei täytä kynnystä: 1/11 sokea asema ilmoitetussa korjatussa uusintaajossa (tests/clock_library_device_cards_oracle.rs, tests/clock_library_f9p_cards_oracle.rs).
  • GPS Block IIF -kortit kierroskohtaisilla termeillä, uusi MODELLED-rivi (löydös): toisessa tuoreessa ikkunassa (2026-04-01–14) 9/11 kynnyksen sisällä; G03 (1,947) ja G25 (1,581) ovat optimistisia, koska niiden pidätetyt tallenteet ovat kohinaisempia kuin niiden sovituskolmannekset; jaksollisten termien pudottaminen epäonnistuu kaikilla 11 (ennakkorekisteröity fb475550; tests/clock_library_periodic_cards_oracle.rs).
  • M002, kellotilan estimointi aluksella, kierros 3 (löydös, pysyy MODELLED-tasolla): jäädytetyn ehdollistusilmaisimen jälkeen kierroksen 2 laajennettu suodin, viritys ja kriteerit muuttumattomina täyttävät (a) ja (c) kaikilla 11 satelliitilla ensimmäistä kertaa; (b) ei täyty G09:llä (0,894) ja G26:lla (0,876) (ennakkorekisteröity fb475550; tests/clock_state_ext_igs_conditioned_oracle.rs).
  • M010, harhautuksen havaitseminen, kierrokset 3–4b (pysyy MODELLED-tasolla): kierros 3 estynyt (167 harjoitusepookkia JammerTest-yksikön muista sessioista vaaditun 3600 sijaan); ZED-F9P-mallilajikortilla (kierrokset 4 ja 4b) kellovalvonta antaa nolla ennen alkua tulevaa väärää hälytystä kaikilla 10 kirjatulla alkamishetkellä (kierros 2: 86) ja 6/10 alkamishetkestä havaitaan 10 s:n sisällä (kierros 2: 4); samat neljä jäävät edelleen myöhäisiksi (tests/clock_library_tcxo_card_jammertest_oracle.rs).
  • M083, UTC(k):n ylärajaus, kierros 3: ennakkorekisteröity ennakoivasti (fb475550) Circular T -numeroille alkaen 465, ei vielä ajettu (tests/utck_bound_prospective_oracle.rs).
  • Oraakkeliympäristö: Wroclawin ZED-F9P-tallenne on datalukittu kohteessa $KSHANA_ORACLES/data/wroclaw_f9p (CC BY 4,0, noin 1,5 GB); IGS-kellofixturet on mukana toimituksessa (IGS-tuotteet, lähdeviittauksella).
  • Revisiot: ei yhtään. Mikään golden-tiedosto, julkaistu luku tai olemassa olevan testin arvo ei muutu; M001:een (holdoverin uudelleenankkurointi) ei ryhdytä toimiin, koska mikään kelloluokka ei ylennetty.

D8, yksi validoitu propagointi-, koordinaatisto- ja aikapolku (kolme uutta VALIDATED-riviä ja M131 ylennetty: 235 -> 238 riviä, validoituja 117 -> 121).

Maan kiertoratalajit, joilla oli omat kahden kappaleen, sekulaarin J2:n tai pelkän sideraaliajan mallinsa, jakavat nyt yhden polun: SGP4/SDP4-elementtijoukot kaksiosaisilla juliaanisilla päivämäärillä, vietynä GCRS:ään ja ITRS:ään (International Terrestrial Reference System) IAU:n (International Astronomical Union) 2006/2000A-ketjun kautta, valinnaisilla Maan orientaatioparametreilla.

  • Uudet sgp4::MeanElementSet, sgp4::SgpOrbit, sgp4::Eop, sgp4::teme_to_itrs_matrix[_eop] ja sgp4::gcrs_to_itrs_matrix[_eop]; Sgp4::new_at ja Sgp4::propagate_at ottavat kaksiosaiset epookit. Uudet jd2::Jd2::from_utc_calendar (SOFAn dtf2d-konventio karkaussekuntipäiville), jd2::utc_to_tai, tai_to_utc, utc_to_ut1 (TAI:n kautta, kuten SOFAn utcut1), tai_to_tt ja kaksiosainen jd2::earth_rotation_angle.
  • Tilan leo-pvt polaarimoodi propagoi SGP4:llä hetkellä 2026-01-01T00:00:00 UTC IAU-ketjussa (leo_fusion::polar::latitude_sweep_at ottaa minkä tahansa epookin); SGP4-Walker-generaattori kiertää Maahan kiinnitettyyn koordinaatistoon IAU-ketjun kautta.
  • Laji passes ajaa uutta näennäisen ylilennon ennustinta (passes::predict_passes_apparent, apparent_look_angles): SGP4 IAU-ketjussa, ITU-R P.834-9 -refraktio ja alalinkin valoaika (uudet refraction- ja light_time-kytkimet, oletuksena päällä), Maan orientaatioparametrit (ut1_minus_utc_s, xp_arcsec, yp_arcsec, oletus 0), ylitykset ratkaistu 1e-7 s:n tarkkuudella ja kulminaatio kultaisen leikkauksen haulla. Geometrinen passes::predict_passes ei muutu.
  • tests/no_private_models.rs estää paketin geometria-, aika- ja propagointiytimiä sisältämästä yksityistä Kepler-propagointia, sekulaareja J2-nopeuksia tai pelkkää sideraaliaikaa käyttävää rotaatiota; nimetyt nopeat tasot ja fysiikka, joka on rivin aihe, ovat perusteltuja poikkeuksia.
  • Uusi VALIDATED-rivi "Kaksiosaiset juliaaniset päivämäärät ja karkaussekunnit Maan kiertoradan aikapolulla": pyerfa 2.0.1.5 dtf2d/utctai/taiutc 224 hetkellä kaikkien 27 karkaussekunnin ympärillä 1e-6 s:n sisällä (ennakkorekisteröity e947e69d); pahin 1.9e-11 s.
  • Uusi VALIDATED-rivi "Yksi Maan kiertoradan polku": 232 elementtijoukon TEME-paikat python-sgp4 2,24:ää (Vallanon vertailu-SGP4) vastaan 6.1e-8 m:n sisällä (kynnys 1 cm) sekä GCRS -> ITRS- ja TEME -> ITRS-rotaatiot ERFAa vastaan: c2t06a, pnm06a ja ee06a 2.9e-6 mas:n ja 0,41 mas:n sisällä (kynnykset 0,1 ja 2 mas), Maan orientaatioparametreilla (ennakkorekisteröity 72ea9eb0). Ilmoitettu: ensimmäinen ajo epäonnistui hetkellä 2016-12-31T23:59:59,5 yhden sekunnin rotaatiolla; UT1 otettiin UTC:n kvasijuliaanisesta päivämäärästä karkaussekuntipäivänä, moottori kulkee nyt TAI:n kautta, ja toinen ajo vastaa muuttumattomilla kynnyksillä.
  • M131 "LEO:n kattavuus ja tarkkuuden heikkenemiskerroin polaarisille ja arktisille käyttäjille MEO GNSS:ään verrattuna" muuttuu VALIDATED-tasoiseksi: Orekit 13.1.8 ottaa moottorin GCRS-tilat, kiertää ne ja laskee näkyvyyden ja DOP:n (NumPy usean kellon ryhmille); paikat 6.8e-5 m:n sisällä (kynnys 0,2 m), näkyvien lukumäärät identtiset 4040/4040 otoksessa, DOP:n mediaani 2.3e-11 suhteellisesti sisällä.
  • Uusi VALIDATED-rivi "Maa-aseman näennäisen ylilennon ennuste refraktiolla ja valoajalla": Orekit 13.1.8 propagoi samat elementtijoukot itse rakentamassaan TEMEssä ilmoitetun määritelmän mukaan, ITU-R P.834 -refraktiolla ja sen valoajan mittausmallilla, 60 tapauksessa merenpinnan tasolla olevilla asemilla: 1210 ylilentoa, ylitykset 3.4e-6 s:n sisällä (kynnys 5 ms), maksimikorkeuskulma 5.5e-7 asteen sisällä, näennäinen suunta 8.8e-7 asteen sisällä (kynnys 1e-4 astetta).
  • Löydökset, pidetty kiinnitettynä: ensimmäiset koko väitteen vertailut Orekitiin päästä päähän ohittivat paikka- ja suuntakynnyksensä, ei moottorin vuoksi vaan koska Orekit 13.1.8:n SDP4 poikkeaa vertailu-SGP4:stä pyöreillä (e = 0) syvän avaruuden radoilla (enintään 67 m) ja sen oletus-TEME on rakennettu IERS 1996 (IAU 1980) -nutaatiolle, noin 72 millikaarisekuntia IAU 2006/2000A -ketjusta (2,7 m LEO:ssa). Orekitin ITU-R P.834 -kerroin termille h*theta0^2 on 0,011380, kun suositus painaa 0,01380; vertailu tehdään merenpinnan tasolla, jossa termi katoaa, ja ero sen yläpuolella on kiinnitetty.
  • "Maa-aseman ylilentoennuste (maasegmentti)" pysyy VALIDATED-tasoisena, väite rajattuna geometriseen passes::predict_passes-polkuun; laji passes kuuluu uudelle riville.
  • Oraakkeliympäristö: Orekit 13.1.8 ja Hipparchus 4.0.3, pyerfa 2.0.1.5, python-sgp4 2,24 (xval/d8-orekit13/setup.sh).
  • Revisiot: mukana toimitettu scenarios/passes.toml kokonaissaatavuus 1675 s -> 1659 s (viisi ylilentoa kuten ennen; paras maksimikorkeuskulma 73,25 astetta -> 70,08 astetta), ja jokainen passes-tuloste siirtyy uuden polun mukana (tiedoston docs/examples/multi-tool-pipeline.md painettu rivi ja tiedoston docs/CAPABILITY.md merkintä passes kertovat sen nyt); mukana toimitettu polar-arctic-leo-coverage GNSS VDOP päiväntasaajalla 1,19669 -> 1,19710, 89,9 asteessa 1,50645 -> 1,50590, yhdistetty VDOP 89,9 asteessa 1,14388 -> 1,14250 (julkaistut kahden desimaalin luvut 1,20, 1,51 ja 1,14 ovat ennallaan). Mikään golden-tiedosto ei muutu.
  • Ei vielä reititetty: leo_pass, doppler-, joint- ja timing-tilat kohteessa leo-pvt ja leo_navmsg-totuusrata (niiden mallit ovat kohteissa leo_link::geometry ja leo_fusion::geom) sekä Maan mallit kohteessa constellation-design (nimetty kahden kappaleen nopea taso).

D6, LunaNet AFS -vertailugeneraattori, LSIS V1.0 (neljä uutta riviä, kaksi VALIDATED: 238 -> 242 riviä, validoituja 121 -> 123).

  • LunaNet Augmented Forward Signal (AFS) -vertailugeneraattori (lunar_afs), kiinnitetty LunaNet Signal-In-Space Recommended Standardin (LSIS) V1.0:aan päivämäärältä 29 January 2025 ja nimeää tämän version jokaisessa tulosteessa: 2492,028 MHz:n kantoaalto; AFS-I BPSK(1) -datakanava 500 symbolilla sekunnissa ja sen 2046 chipin Gold-koodi; AFS-Q BPSK(5) -pilotti sen 10230 chipin Weil-primäärikoodilla, 4 chipin sekundäärikoodilla ja 1500 chipin tertiäärikoodilla; kehystunniste 0 -kehys (synkronointikuvio, BCH (51, 8) -alikehys 1, CRC-24, puolen koodinopeuden LDPC-alikehykset 2–4, 60 x 98 -lohkolomittaja) tyhjentävällä alikehyksen 1 dekooderilla ja pelkästä pariteettitarkistusmatriisista kirjoitetulla min-sum-LDPC-dekooderilla; sekä kantataajuinen IQ-synteesi totuusmerkinnöin kirjoitettuna SigMF-tallenteeksi. Koodit generoidaan standardin siirtorekistereistä ja Legendre/Weil-konstruktioista. Mitään standardista kopioitua ei levitetä edelleen (siinä ei ole uudelleenkäyttöehtoja): AFS-Q:n primääri-indeksit tulevat IS-GPS-800J:stä, ja se, mikä määritellään vain standardin liitteissä (AFS-I G2 -viiveet, tertiäärikoodit, LDPC-aliatriisit), luetaan ajon aikana paikallisesta välimuistista, jonka xval/lunar-afs/fetch_lsis.sh täyttää NASAn isännöimästä PDF:stä, jokainen tiedosto tarkistettuna kiinnitettyä SHA-256:ta vastaan (lunar_afs::lsis). Malli on standardinmukaisuuden vertailugeneraattori, ei kanava-, etenemis- tai linkkibudjettimalli.
  • sigmf::meta_to_json_with_extensions ja sigmf::annotation_extension_fields: tallenne voi sisältää nimiavaruudellisia laajennuskenttiä, jotka on ilmoitettu kohteessa core:extensions.
  • Uusi VALIDATED-rivi "LunaNet AFS:n kantataajuinen renderöinti riippumatonta generaattoria vastaan sen kanavatilan perusteella": LANS-AFS-SIMiä vastaan (BSD-2-Clause, commit 480c6bf3, S-kaistan build) nolla chip-eroa PRN-koodeissa 1–210, nolla symbolieroa ajon kolmessa kehyksessä ja normalisoitu kompleksikorrelaatio 0,999990 oman 23,9 s:n näytteistön yli (huonoin 2 ms:n lohko 0,999948), ennen vertailua asetettujen kynnysten sisällä (ennakkorekisteröity 986ac280). Se ohjaa renderöijää simulaattorin omalla kanavatilalla eikä kata tehonjakoa kantoaalto-kohinatiheydestä eikä SigMF- ja 8-bittistä kirjoitusta.
  • Uusi VALIDATED-rivi "LunaNet AFS:n kehyksen kanavakoodaus, FID 0": 6000 symbolin kehykset ovat symboli symbolilta samat kuin LANS-AFS-SIMin (ennakkorekisteröity 986ac280); alikehyksen 1 koodi toistaa LSIS:n kuvan 8 laskuesimerkin ja CRC-24 CRC-24/LTE-A-luettelon tarkistusarvon.
  • Molemmat ylennetyt rivit ovat datalukittuja LSIS-välimuistiin: niiden oraakkelitesti ohitetaan ilmoituksella, kunnes xval/lunar-afs/fetch_lsis.sh on ajettu.
  • Löydös (uusi MODELLED-rivi), "LunaNet AFS:n levityskoodien generointi": 2 937 232 generoidusta chipistä ja bitistä, joita verrattiin standardin taulukoihin ja liitteen 3 tiedostoihin, yksi poikkeaa: taulukon E-5 tertiääriselle PRN 147:lle painamat "viimeiset 24 chipiä", jotka kopioivat PRN 151:n solun, kun taas standardin oma liitteen 3 tiedosto vastaa generaattoria. Nollapoikkeaman kriteeri ei täyty.
  • Löydös (uusi MODELLED-rivi), "LunaNet AFS:n suljetun silmukan dekoodattavuus": kolme ennakkorekisteröityä ajoa PocketSDR-AFS:ää vastaan; kolmas täytti seuranta- ja dekoodauskynnyksensä täysin mutta ei suojaehtoaan, että vain tulostava vastaanotinbuild toistaa kiinnitetyn buildin lokin, koska kaksi muokkaamattoman vastaanottimen ajoa poikkeavat jo hankintatietueissaan.
  • Korjattu: kohteiden lunar_service (export_antenna.carrier_hz), lunar_jamming ja attack_surface oletuskantoaalto oli pyöristetty 2,4 GHz; se on nyt LSIS-020 AFS -kantoaalto, 2492,028 MHz. Vanhalla oletuksella vapaan tilan vaimennus aliarvioitiin 0,327 dB.
  • Revisiot: ei yhtään. Jokainen mukana toimitettu skenaario nimeää kantoaaltonsa, ja kaikkien 138 skenaariotiedoston tulokset ovat tavu tavulta samat kuin edellisellä main-haaralla.

D7, todellinen Kuun IQ ja GPS LNAV (seitsemän uutta riviä, yksikään ei VALIDATED: 242 -> 249 riviä, validoituja 123 ennallaan).

  • portable_math::FftPlan: sekaradiksinen pikafourier-muunnos (FFT), jonka tuloste on samat bitit jokaisella alustalla; 8000- ja 24000-pisteisten muunnosten SHA-256-kiinnitys läpäisee x86_64:llä ja wasm32-wasip1:llä (ajuri kohteessa xval/portable-fft-wasm/).

  • acquisition: rinnakkainen koodivaiheen haku näytteistetyllä IQ:lla (pcps_acquire, pcps_grid) koherentilla laskostuksella, epäkoherentilla akkumuloinnilla, khii-toiseen-kynnyksellä koko haun väärän hälytyksen todennäköisyydelle ja solukeskiarvotilastolla kaistarajoitetulle kohinalle; refine, prompt_series koodi-Dopplerilla sekä M2M4- ja ruudukon huippuun perustuvat kantoaalto-kohinatiheyden (C/N0) estimaattorit.

  • gps_lnav: IS-GPS-200:n legacy-navigointisanoman (LNAV) kooderi alikehyksille 1–3 taulukon 20-XIV pariteetilla ja kenttädekooderilla.

  • realdata::ion_sdr: lukija ION GNSS SDR Metadata Standardille (.sdrx) ja sen näytetiedostoille, ja to_mid_rise kahden komplementin tasoille.

  • realdata::lugre: LuGRE-vastaanottimen (Lunar GNSS Receiver Experiment) IQS-erän otsikko, RAW-, ACQ- ja NAV-telemetria sekä CLK-tiedostot, ja tarkistus, joka luettelee, missä .sdrx-metadata on ristiriidassa binääriotsikon kanssa.

  • antenna::GainPattern2D ja kohteessa earth_gnss_lunar yaw-ohjattu runkokoordinaatisto, lähetysatsimuutti ja nadiirista poikkeamakulmat sekä transmit_side_db suhteelliselle C/N0:lle mitatuilla keilakuvioilla.

  • GPS LNAV -navigointisanoman koodaus (uusi rivi, pysyy MODELLED-tasolla integraattorin jälkitarkistuksen jälkeen): 2 March 2025 IGS-lähetystiedostolla, RTKLIB v2.4.2-p13:n jäsentämänä ja dekoodaamana, kaikki 960 sanaa läpäisevät pariteetin, kaikki 96 alikehystä dekoodautuvat ja kaikki 608 lähetettyä kokonaislukua vastaavat Kshanan lukuja (tests/gps_lnav_rtklib_integer_oracle.rs), mutta ennakkorekisteröinti (d4d9eb9d) saapui julkiseen haaraan kaksi sekuntia tuloksen sisältävän commitin jälkeen, joten järjestystä "rekisteröity ennen tiedoston hakua" ei voida osoittaa eikä riviä ylennetä.

  • realdata::ion_sdr täyttää sanat merkitsevimmästä bitistä alkaen (I korkeassa nibblessä LuGRE-tavussa; aiempi luenta tuotti konjugaattisignaalin), säilyttää vanhan luennan nimellä SdrLayout::fill_lsb_first ja lukee sanaa leveämpiä näytteitä.

  • acquisition::refine_doppler_coherent: vaihekoherentti Dopplerin tarkennus (0,2 Hz RMS tasolla 30 dB-Hz 200 ms:n yli simulaatiossa).

  • GPS L1 C/A gps-sdr-simiä vastaan: chipit ja pariteettibitti bittitarkasti; 230/1152 LNAV-kentästä poikkeaa yhdellä yksiköllä, koska gps-sdr-sim katkaisee, missä lähetetty kokonaisluku vaatii pyöristyksen.

  • LNAV RTKLIBillä dekoodattuna: kaikki pariteetit ja alikehykset läpäisevät ja jokainen parametri on puolen kvantin sisällä; 41 skaalattua arvoa poikkeaa muutamalla viimeisen numeron yksiköllä RTKLIBin desimaalisen 2^-43-vakion kautta, rekisteröidyn kynnyksen yläpuolella.

  • LuGRE-hankinta GNSS-SDR 0.0.19:ää vastaan: 266/266 päätöstä vastaa, 250 sijoittuu samaan soluun; useimmat positiiviset ovat artefakteja paljaiden 4-bittisten tasojen −0,5 keskiarvosta; C/N0-haaralla ei ollut samanaikaista lentodataa. Kaksi erää (OP5, OP12) jätettiin virheellisesti pois: niiden metadata vastaa niiden otsikoita, mutta lukija ei tuolloin voinut lukea sanaa leveämpää näytettä.

  • LuGRE-hankinta kiertoradalta ennustettua Doppleria vastaan: näytetehopäätöksellä jokainen haku ylittää kynnyksen kaistarajoitetulla kohinalla; solukeskiarvopäätöksellä vahvimmat parit vastaavat suuruudeltaan käänteisellä etumerkillä, mikä osoittaa rekisteröidyn I/Q-järjestyksen olevan datan konjugaatti.

  • Sokea hankinta Kuun pinnan erissä: neljä erää hankkii kukin yhden satelliitin (ennustettu näkyväksi, ei väärää hälytystä tasolla 1e-7), yksikään ei kahta, joten Doppler-erokynnyksellä ei ole pisteytettävää paria.

  • Suhteellinen C/N0 Kuun etäisyydellä (M039 uudelleenmuotoiltuna): 15 Block IIR/IIR-M -tallennetta ja yksi pari, liian vähän rekisteröidylle kynnykselle.

  • Revisiot: ei yhtään; mikään julkaistu luku, golden-tiedosto tai dokumentaation luku ei muuttunut.

  • M039-rivi "Maan GNSS Kuun etäisyydellä" muotoilee väitteensä Kuun etäisyydellä uudelleen satelliittien väliseksi suhteelliseksi C/N0:ksi yhtenä epookkina sekä näkyvyydeksi (absoluuttista C/N0:aa ei väitetä); se pysyy MODELLED-tasolla. Ylimmän tason NOTICE sisältää LuGREn CC BY 4,0 -lähdeviittauksen.

Korjattu#

  • DE440:n Kuun pääakseliorientaatio interpoloidaan nyt geodeettisesti päivittäisten solmujen välillä. Aiempi alkiokohtainen interpolointi oli virheellinen enintään 2.0e-4 rad (340 m Kuun pinnalla) kunkin päivän neljännespisteiden lähellä, ei "noin 14 m", kuten rivi väitti. Sen käyttäjät (Kuun laseretäisyysmittauksen geometria, Kuun datumi, Kuun vikojen havaittavuus) saavat korjatun orientaation.
  • Kierroksen 2 moottorikorjaukset, kukin ajettu uudelleen muuttumatonta ennakkorekisteröityä toleranssiaan vastaan: EOP-rivin IERS-vintage luetaan sen I/P-lipuista tyhjän Bulletin B -lohkon sijaan; snapshot_raim käyttää geodeettista paikallistasoa; Kuun nopeuskoordinaatiston kytkentä käyttää päiväntasaajasädettä, J2:ta ja pyörimistä; liu22-sovitus alkaa nollakorjauksista ilman priorit ja käyttää artikkelin keskiliikkeen nopeutta; EO-solmuväli sisältää J2-solmuregression; Costas-silmukan liukumisaika käyttää kaavaa rho/4; yhteinen paikkaratkaisu soveltaa parin lähetettyä ryhmäviivettä; Kuun yhteinen ratkaisu käyttää QR-askelta; NTN-raja arvioidaan todellisessa paikassa; tähdistösuunnittelun kellovertailu on näkyvissä oleva pienimmin numeroitu tähdistö; DE440:n orientaatiosarja kattaa vuodet 2014-2030 ja antaa virheen sen ulkopuolella katkaisun sijaan.

Lisätty#

  • leo_navmsg::truth::TruthOrbit::from_ecef_states, taulukoiduista Maahan kiinnitetyistä tiloista rakennettu totuusrata, jota käytetään todellisen radan sovitinvertailussa.
  • Yllä olevien vertailujen testitiedostot ja fixturet, kukin generaattorinsa ja tiedoston NOTICE.md kanssa, joka antaa lähteen, lisenssin, hakupäivän ja SHA-256:n.
  • Kierros 2: araim_reference::add_v42_protection_levels ja _ecef (ADD v4.2:n vianhavaitseminen, Stanford MAASTia seuraten ARAIM 2:lle, BSD-3-ilmoitus lähteessä); raim::snapshot_raim_fde; cw_dynamics::second_order_correction ja propagate_second_order; yhdeksän tilan INS-virhemalli inertial::coast::ErrorDynamics; lunar_vlbi::KernelGeometry-osittaisderivaatat ja kernel-polun lunar-vlbi-syötteet; naif_kernel, lukija SPK-tyypille 2 ja binäärisille PCK-kerneleille; lunar_llr_geometry::llr_bcrs_one_way_m ITRF2020-asemilla; Jacchia 1971 -tiheys; solar_system::link_on minkä tahansa efemeridin tarjoajan yli; launch::site_rotation_speed_at; eo_payload::j2_nodal_period ja ground_track_spacing_equator_j2; batch_ls::gauss_newton_qr; precise_products (RINEX-kello-, ANTEX- ja DCB-lukijat).

[0.29.3] - 2026-10-01#

Paikkausjulkaisu versiolle 0.29.2. Kshana Studio on rakennettu uudelleen kahden näkymän ympärille: Yksinkertainen näkymä, joka vastaa ensin ja selittää tavallisin sanoin, ja Laaja näkymä, jossa on koko hallintapaneeli. Mukana tulee kaksi pientä korjausta sivustolle kshana.dev. Moottori ei muutu: jokainen mukana toimitettu skenaario antaa tavu tavulta saman tuloksen kuin 0.29.2 versiotunnusta lukuun ottamatta.

Muutettu#

  • Kshana Studiossa on Yksinkertainen näkymä. Studio avautuu siihen.
    • Vastaus tulee ensin: skenaario avautuu tulokseensa, joka esitetään yhdellä selkeällä lauseella. Jokaisella mukana toimitetulla skenaariolla on oma lauseensa, kirjoitettu sen mukaan, mitä kyseinen skenaario mittaa.
    • Enintään viisi asetusta on esillä, ne, jotka muuttavat vastausta eniten. Loput ovat kohdassa "Lisäasetukset", taitettuna piiloon, kunnes avaat ne.
    • "Miten tämä lasketaan" selittää menetelmän muutamalla rivillä, ja "Tutkijoille" antaa moottorin omat luvut, skenaariotiedoston ja tuloksen taustalla olevat todisteet.
  • Koko hallintapaneeli on Laaja näkymä. Aiemman Studion jokainen paneeli, kaavio, vienti ja raportti on siellä.
  • Kytkin siirtää näkymästä toiseen ja säilyttää paikkasi. Skenaario, näkymä, jossa olit, ja muokkaamasi asetukset siirtyvät mukana. Studio muistaa, kumpaa näkymää käytit viimeksi. Sivuston ja dokumentaation linkit avaavat Yksinkertaisen näkymän; linkki, jossa on view=advanced, avaa Laajan näkymän, ja jokainen aiempi Studio-linkki avaa edelleen saman skenaarion ja näkymän.
  • Nopeampi ensimmäinen näkymä hitailla yhteyksillä. Skenaarion tallennettu vastaus piirretään ennen kuin loppu Studiosta latautuu, joten hitaalla mobiiliyhteydellä vastaus näkyy noin kahdessa sekunnissa noin yhdeksän sijaan.
  • Parempi haku. Haku listaa nyt ensin skenaariot, joiden alue tai otsikko vastaa sanoja, ennen skenaarioita, jotka mainitsevat ne vain tiedostonimessä tai tekstissä.

Korjattu#

  • Etusivun maapallo ei enää tyhjene, kun vähennetty liike on päällä. Kun järjestelmän asetus vähennetylle liikkeelle on päällä, ikkunan koon muuttaminen saattoi jättää etusivun maapallon tyhjäksi, kunnes sivu vieritettiin. Maapallo piirtyy nyt uudelleen samassa ruudussa kuin koonmuutos.
  • Etusivun L-kaistakonsoli selittää tyhjän kaistansa. Kohdassa "Watch a jammer take the band" GPS L5 / Galileo E5a -paneeli pysyi tummana koko minuutin, mikä näytti rikkinäiseltä. Tässä skenaariossa mikään häirintälähetin ei lähetä kyseisellä kaistalla, ja satelliittisignaalit ovat kohinalattian alapuolella, joten mikään ei nouse sen yläpuolelle. Hiljainen merkintä kertoo nyt tämän jokaisessa paneelin jaksossa, jossa mikään ei ole lattian yläpuolella (L5 / E5a -paneeli ja L2C-paneeli ennen kuin sen kohinahäirintälähetin käynnistyy), ja näyttää jokaisen kaistan C/N0:n ja lukitustilan samasta ajosta. Se sijoitetaan vain sinne, missä mikään ei ole lattian yläpuolella, joten se ei koskaan peitä häirintälähettimen energiaa.

0.29.2 - 2026-10-01#

Paikkausjulkaisu versiolle 0.29.1. Se poistaa päällekkäistä koodia LEO-navigointisanoman, fuusion ja spektrin moduuleista, lisää vaalean teeman sivustolle kshana.dev, siirtää Kshana Studion omaan osoitteeseensa, tekee sivustosta luettavan hakukoneille ja tekoälyavustajille, korjaa useita pieniä asioita Studiossa ja antaa npm-julkaisujen julkaista ilman tallennettua tokenia. Mikään moottorin tuloste ei muutu: jokainen mukana toimitettu skenaario antaa tavu tavulta saman tuloksen kuin 0.29.1 versiotunnusta lukuun ottamatta.

Lisätty#

  • Vaalea teema sivustolle kshana.dev. Jokaista sivua voi lukea vaaleana tai tummana. Sivusto noudattaa lukijan järjestelmäasetusta, ja siinä on kytkin sen vaihtamiseen.
  • Hakukoneet ja tekoälyavustajat voivat lukea sivuston. Jokaisella sivulla on nyt oma otsikko, kuvaus, kanoninen osoite, sosiaalisen median korttien tunnisteet ja schema.org-jäsennelty data sekä pelkkää tekstiä osioille, jotka skripti piirtää. Sivusto julkaisee robots.txt-tiedoston, sitemap.xml-tiedoston, jossa on kunkin sivun viimeisin muutospäivä, sekä llms.txt ja llms-full.txt (lyhyt ja täysi pelkkä tekstiopas tekoälyavustajille) ja IndexNow-avaimen, jotta julkaisu voi kertoa hakukoneille, mikä muuttui.
  • npm-julkaisut voivat julkaista ilman tallennettua tokenia. npm-työ ajaa nyt Node 24:ää ja npm 11.5.1:tä tai uudempaa, jotka tukevat npm trusted publishingia: npm vaihtaa julkaisutyön GitHub-identiteetin lyhytikäiseen tunnistetietoon. Salaisuus NPM_TOKEN toimii edelleen ja sitä käytetään, kun se on asetettu, joten mikään ei muutu ennen kuin trusted publishing on otettu käyttöön paketille npmjs.comissa. Tiedosto docs/RELEASING.md luettelee vaiheet.

Muutettu#

  • Etusivun otsikko on luettavissa maapallon päällä. Pehmeä varjostus on nyt otsikon ja sen tekstin takana ja himmentää animoidun maapallon ratojen viivat ja satelliittipisteet kohdissa, joissa ne ylittävät sen.

  • Kshana Studiolla on oma osoitteensa: https://kshana.dev/studio/. Jokainen sivuston ja dokumentaation linkki osoittaa sinne. Vanha osoite /playground/ toimii edelleen ja ohjaa uuteen säilyttäen skenaarion, näkymän ja muut linkin asetukset.

  • Studio-korjaukset. Moottoritiedosto ladataan kerran kahden sijaan. Latauksen aikana Studio näyttää skenaarion tallennetun tuloksen heti, merkittynä tallennetuksi, tyhjän ruudun sijaan. Puhelimessa otsikko on yksi tiivis rivi. Keskeiset luvut rivittyvät kaksi riviä kohti, jotta mikään ei jää piiloon ruudun reunan taakse. Kenttien nimet käyttävät skenaarion omia sanoja, kentän nimi niiden vieressä, ja haku löytää kentät kummallakin.

  • Vähemmän päällekkäistä koodia. LEO-navigointisanoman yksikkötaulukko kirjoitti samat kymmenen SISRE-tilastoriviä neljälle sovitusyhteenvedolle. Makro kirjoittaa ne nyt kerran. Kaksi spektrin vesiputouskaaviota jakavat yhden aika-akselin, värimittarin ja C/N0-palkkipaneelin. Pääruudukon alasnäytteistys käyttää uudelleen kohdetta downsample_grid, ja Simpsonin integraali käyttää uudelleen kohdetta navsignal::simpson. LEO-ylilentolajin kaksi sisääntulopistettä jakavat yhden alustusvaiheen. leo_link::geometry tuo leo_fusion::geom-vektoriapurit kopioinnin sijaan. Laaja raportti tuo API-raportin HTML-escapen kopioinnin sijaan. Jokainen kansion scenarios/ 139 skenaariotiedostosta ajettiin versiolla 0.29.1 ja tällä koodilla, ja jokainen tulostetiedosto on tavu tavulta sama.

  • leo-navmsg- ja leo-pvt-yksikkötaulukoilla on omat tiedostonsa. Ne siirrettiin moduuleista, joissa on myös logiikkaa, tiedostoihin src/leo_navmsg/units.rs ja src/leo_fusion/pvt_units.rs. PVT_UNITS säilyttää julkisen polkunsa. Vain nämä kaksi taulukkotiedostoa liitetään kopiointitunnistuksen poikkeuksiin deklaratiivisille katalogeille tiedostossa sonar-project.properties, jota tests/sonar_cpd_exclusions_are_justified.rs tarkistaa.

Korjattu#

  • READMEn CI-merkki näyttää mainiin tehtyjen pushien tuloksen. Merkki laski jokaisen tapahtuman ajot mainissa, joten se saattoi näyttää "failing", vaikka jokainen push-ajo oli vihreä; se pyytää nyt vain push-ajoja (event=push).

0.29.1 - 2026-10-01#

Paikkausjulkaisu versiolle 0.29.0: mitattu kattavuusluku, projektin nimirivi sivustolla kshana.dev, nopeampi kattavuustyö ja päivitetty README. Mikään moottorin tuloste ei muutu: jokainen skenaario antaa saman tuloksen kuin versiolla 0.29.0.

Julkaistujen lukujen revisiot#

  • Rivikattavuus: ~96 % → ~95 %. Kattavuustyö mittasi julkaistun 0.29.0-koodin uudelleen (commit db796dd, CI-ajo 36809850252, 2026-10-01): 95.35 %, 55 970/58 697 riviä hakemistossa src/. Julkaistu luku oli 95,63 % (37 697/39 419 riviä), mitattuna commitilla b1d350d ennen versiota 0.28.0; se pyöristyi lukuun ~96 %. Uusi luku pyöristyy lukuun ~95 %, joten kaikki pinnat, jotka tests/coverage_figure_doc_sync.rs kiinnittää, siirtyvät yhdessä: docs/COVERAGE.md, READMEn merkki, Evidence-rivi ja CI-taulukko, crates.io-, PyPI- ja npm-merkit, tekninen raportti ja kshana.devin kattavuussivu. 85 %:n lattia ei muutu.

Lisätty#

  • Nimirivi sivustolla kshana.dev. "Kshana · क्षण · the precise instant" avaa nyt Home-herotilan ja on kunkin sivun alatunnisteessa tuotenimen alla. kshana.dev ei edelleenkään tee pyyntöjä toiselle isännälle: devanagari on itse isännöity Noto Sans Devanagari -osajoukko kolmesta क्षण-sanan kirjaimesta (1 692 tavua, web/fonts/, SIL Open Font License -teksti ja sen SHA-256 tiedostossa web/fonts/FONTS.json). web/tools/fetch_third_party.py osaa nyt tallentaa Google Fontsin text=-osajoukon sisältöosoitteistetulla tiedostonimellä.

Muutettu#

  • Sivuston linkit päätyvät sinne, minne ne osoittavat, siisteillä osoitteilla. Linkki osioon asettaa nyt osion juuri otsikon alle sekä puhelimella että työpöydällä: Missions-sektorin linkki avaa sektorin paneeli ylhäällä; Capabilities- ja Editions-linkit pitävät paikkansa, kun niiden yläpuolella olevat kaaviot piirtyvät; Editions ei enää lisää toista otsikkosiirtymää; ja linkki dokumenttisivun taitettuun osaan avaa sen. Jokaiseen sivuun linkitetään sen siistillä osoitteella (/evidence#research, /docs/changelog, / etusivulle), ja kanoniset linkit, sivukartta ja vanhojen osoitteiden uudelleenohjaukset nimeävät samat; .html-osoitteet toimivat edelleen. Research-sivulla on oma linkkinsä otsikossa Evidencen ja Developersin välissä sekä alatunnisteessa. Dokumentaatio ei enää näytä tiekarttaa (ROADMAP.md pysyy repositoriossa): Project-ryhmä on Changelog, Licensing, Security, Contributing, Governance ja Code of conduct, ja Glossary siirtyi kohtaan Get started.
  • Kattavuustyö on nopeampi. Versiolla 0.29.0 se kesti 143 minuuttia, kun terve aika oli 91 –
    1. tests/property.rs-fuzzer, edellisen kerran syyllinen, vei niistä 4. Mukana toimitettu korpus kasvoi 74:stä 139 skenaarioon, ja kolme testibinääriä kävi läpi sen kaiken yksi tiedosto kerrallaan (determinism kahdesti, advanced_report ja animation kerran): yhteensä 37 minuuttia kattavuusinstrumentoinnin alla, kun versiolla 0.27.2 se oli 3. Ne jakavat nyt tiedoston tests/support/corpus.rs, joka ajaa skenaariokohtaisen työn kaikilla ytimillä ja palauttaa tulokset lajiteltuina; jokainen skenaario ja jokainen väite säilyy. Arm64-kannettavalla, debug-buildilla: determinism kestää 143 s 14 ytimellä verrattuna 612 s:iin asetuksella KSHANA_CORPUS_THREADS=1 (vanha sarjakäynti).
  • README, päivitettynä. Se alkaa samalla nimirivillä kuin sivusto; Studio-kuvakaappaukset on otettu uudelleen versiosta 0.29.1 Studio, uusi kuva Studiosta puhelimella ja sen alareunan vaihepalkki; uusi "The site" -kaista näyttää kolme kshana.dev-sivua versiosta 0.29.1 (tools/capture_site_shots.mjs, koostettu tiedostolla tools/readme_shots.py ja tallennettu tiedostoon docs/assets/readme/site/SHOTS.json); kattavuusluku on ~95 %; ja tutkimuskuvan alt-teksti, joka toisti arkkitehtuurikuvan tekstiä, kuvaa nyt artikkeleita. Otsikkomerkit ovat pienempiä ja lyhyempiä (18 px korkeita; "~95%", "83/223", "quality", "AGPL-3.0", "zenodo.20528627"), joten kaikki yksitoista mahtuvat kahdelle riville; jokainen linkki ja alt-teksti säilyttää täyden merkityksensä.
  • Konttikuvatyö saa 90 minuuttia. Versiolla v0.29.0 kuvan kshana-mcp emuloitu linux/arm64-build ylitti vanhan 45 minuutin rajan viimeistä crate-pakettiaan käännettäessä, joten kuva, MCP-rekisterimerkintä ja kanavatarkistus eivät julkaistuneet. Raja on nyt 90 minuuttia; kuva ei muutu.
  • Kahdeksan liukulukuvakiota ryhmitelty uudelleen tiedostoissa src/ephem.rs ja src/sgp4.rs (0.323_273_64 → 0.323_273_640): SonarQube Cloud luki viimeisen ryhmän _64 tai _32 puuttuvaksi f64- tai f32-päätteeksi (sääntö S7454). Arvot ovat samat luvut, joten jokainen tulos pysyy ennallaan.

0.29.0 - 2026-10-01#

Kaksitoista uutta skenaariolajia ja kolme uutta tapaa lukea ajo. Moottori kattaa nyt radiospektrin, koko aurinkokunnan, tähdistöt minkä tahansa kappaleen ympärillä, kampanjat, jotka ketjuttavat skenaariot yhdeksi tehtäväksi, sekä paikannuksen, navigoinnin ja ajanmäärityksen (PNT) matalalta Maan kiertoradalta (LEO) signaalista paikkaratkaisuun. Jokainen ajo voidaan myös kirjoittaa animaationa, täytenä raporttina ja joukkona yhteentoimivuustiedostoja muille työkaluille.

Moottorin ympärillä: uudistettu kshana.dev (monisivuinen sivusto ja uusi Kshana Studio -hallintapaneeli, joka ajaa jokaisen ominaisuuden selaimessa), uudelleenkirjoitettu README, neljätoista työkalua Model Context Protocol (MCP) -palvelimella, selainbuild, joka antaa samat luvut kuin natiivi, ja julkinen sivu Kshana Prolle.

0.28.0 0.29.0
Skenaariotyypit 63 75
Skenaariotiedostot (plus yksi sarjamanifesti) 77 138, joista 132 on toimitettu mukana komennolle kshana example
Varmennusmatriisin rivit 174 223
joista VALIDATED ulkoista oraakkelia vasten 66 83
joista MODELLED (esitetty malli, sisäinen johdonmukaisuus tarkistettu) 104 136
joista PARTNER (tarvitsee kumppanin laitteiston tai datan) 4 4

Mistä kasvu tulee:

Alue Lajit Skenaariotiedostot Matriisirivit (validoidut + mallinnetut)
Spektri 1 1 3 (1 + 2)
Aurinkokunta ja paikannus minkä tahansa kappaleen ympärillä 2 3 6 (2 + 4)
Satelliittitähdistön suunnittelu 1 3 3 (2 + 1)
Kampanjat 1 5 3 (0 + 3)
Meri-, tie- ja raidekulkuskenaariot 0 5 0
Animaatio, raportit, yhteentoimivuusviennit 0 0 0
LEO-signaalisuunnitelmat ja monikaistainen spektri 1 4 4 (2 + 2)
LEO-ylilento ja linkkibudjetti 1 6 9 (6 + 3)
LEO-navigointiviesti 1 5 9 (3 + 6)
LEO-paikannus, ajanmääritys ja fuusio 3 8 8 (1 + 7)
LEO:n päästä päähän -ketju 1 3 1 (0 + 1)
LEO:n kestävyys-, painopistealue- ja loppukäyttäjäskenaariot 0 18 3 (0 + 3)
Lisätty yhteensä 12 61 49 (17 + 32)

LEO-ominaisuus on järjestelmäagnostinen: se toimii yleisillä, ilmoitetuilla parametreilla eikä tarvitse nimettyä järjestelmää. Nimetyt järjestelmät ovat valinnaisia esiasetuksia, kukin omassa tiedostossaan ja julkisine lähteineen. Yksi esiasetus, Celeste IOD (in-orbit demonstration), käyttää lukuja, jotka esitettiin ESA NAVISP LEO-PNT -työpajassa, 2026 (ESA on Euroopan avaruusjärjestö; NAVISP on sen Navigation Innovation and Support Programme); se on yhdessä tiedostossa, src/celeste_iod.rs, viiden vain repositoriossa olevan skenaarionsa kanssa, joten se voidaan pidättää ilman lähdemuutosta, eikä yhtäkään sen työpajan lukua toisteta tässä muutosluettelossa.

Lue "Julkaistujen lukujen revisiot" ennen päivitystä. Yksi moottorin tuloste muuttuu (lajin ephemeris inertiaalikoordinaatiston sarakkeet nutaatiomatriisin etumerkkikorjauksen jälkeen), ja dokumentaatiotarkastus korjasi lukuja, jotka aiemmat dokumentit olivat painaneet.

Tässä merkinnässä käytetyt lyhenteet

Tilat: VALIDATED tarkoittaa tarkistettua riippumatonta ulkoista oraakkelia vastaan (julkaistu taulukko, toisen ryhmän ohjelmisto tai mitattu data); MODELLED tarkoittaa esitettyä mallia, joka on tarkistettu vain sisäisen johdonmukaisuuden osalta; PARTNER tarkoittaa, että tarkistus tarvitsee kumppanin laitteiston tai datan.

Lyhenne Merkitys
3GPP, 5G, NTN 3rd Generation Partnership Project; viidennen sukupolven matkaviestinverkko; ei-maanpäällinen verkko
AD, BC ajanlaskun kaudet (anno Domini, ennen Kristusta)
AIAA American Institute of Aeronautics and Astronautics
AltBOC, BOC, BPSK, MBOC alternative binary offset carrier; binary offset carrier; binary phase-shift keying; multiplexed binary offset carrier (signaalimodulaatioita)
ATOMIC Autonomous Time and Orbit Determination for Microsatellite Constellations (julkaistu LEO-efemeridimalli)
C/A, L1, L2, L2C, L5 karkea/hankintakoodi (coarse/acquisition) sekä Global Positioning Systemin kantoaallon ja siviilisignaalien nimet
C/N0 kantoaalto-kohinatiheyssuhde
CIO Celestial Intermediate Origin
CLI komentorivikäyttöliittymä
CRC-24Q 24-bittinen syklinen redundanssitarkistus (Qualcommin polynomi)
CSAC sirumittakaavan atomikello
CSS, HTML, SVG, XML Cascading Style Sheets; HyperText Markup Language; Scalable Vector Graphics; Extensible Markup Language
CSV, JSON, PDF, TOML, URL comma-separated values; JavaScript Object Notation; Portable Document Format; Tom's Obvious Minimal Language; uniform resource locator
CW jatkuva aalto
CZML, KML, GeoJSON Cesium Language; Keyhole Markup Language; Geographic JSON (kartta- ja maapallomuotoja)
DE441 Jet Propulsion Laboratoryn Development Ephemeris 441
DOI digital object identifier
DOP, GDOP, PDOP, HDOP, VDOP tarkkuuden heikkenemiskerroin: geometrinen, paikka, vaaka, pysty
E1, E5, E5a, E5b Galileon signaalien nimet
E3F paikan nimi Global Positioning Systemin tähdistötaulukossa
ECEF Maakeskinen, Maahan kiinnitetty
EE päiväntasausten yhtälö
EGM2008 Earth Gravitational Model 2008
EIRP ekvivalentti isotrooppisesti säteilevä teho
ERFA, SOFA Essential Routines for Fundamental Astronomy; Standards of Fundamental Astronomy (tähtitieteen vertailukirjastoja)
ESA, NAVISP Euroopan avaruusjärjestö; sen Navigation Innovation and Support Programme
FDMA taajuusjakoinen monikäyttö
GCRF, GCRS Geocentric Celestial Reference Frame; Geocentric Celestial Reference System
GLONASS Venäjän maailmanlaajuinen satelliittinavigointijärjestelmä
GNSS, GPS maailmanlaajuinen satelliittinavigointijärjestelmä; Global Positioning System
IAU International Astronomical Union
ICD, OS SIS ICD, OS SDD rajapintamäärittely (interface control document); Galileo Open Service Signal-In-Space Interface Control Document; Galileo Open Service Service Definition Document
ICRF International Celestial Reference Frame
IMO Kansainvälinen merenkulkujärjestö
INS, MEMS inertiaalinavigointijärjestelmä; mikrosähkömekaaninen järjestelmä
IOD in-orbit demonstration (kiertoratademonstraatio)
IQ samavaiheinen ja kvadratuuri (in-phase and quadrature)
IS-GPS-200 Global Positioning Systemin rajapintamäärittely
ISS Kansainvälinen avaruusasema
ITRF, ITRS, PEF, TEME International Terrestrial Reference Frame; International Terrestrial Reference System; pseudo-Earth-fixed; true equator, mean equinox (koordinaatistoja)
ITU, ITU-R Kansainvälinen televiestintäliitto; sen radioviestintäsektori
J/S häirintä-signaalisuhde
J2–J6, J2000 painovoimakentän zonaaliset harmoniset; epookki 2000-01-01 12:00
JPL Jet Propulsion Laboratory
LEO, MEO matala Maan kiertorata; keskikorkea Maan kiertorata
MBSE mallipohjainen järjestelmäsuunnittelu
NEES normalisoitu estimointivirheen neliö
NeQuick-G Galileon ionosfäärimalli
OEM, SP3, TLE Orbit Ephemeris Message; Standard Product 3 (tarkat radat); kaksirivinen elementtijoukko (two-line element set)
PNT, PPP paikannus, navigointi ja ajanmääritys; tarkka pistepaikannus
PSD, SSC tehospektritiheys; spektrinen erotuskerroin
RAIM, SQM vastaanottimen autonominen eheyden valvonta; signaalin laadun valvonta
RINEX, RTCM Receiver Independent Exchange Format; Radio Technical Commission for Maritime Services
RMS neliöllinen keskiarvo (root mean square)
RTKLIB avoimen lähdekoodin GNSS-paikannuskirjasto, jota käytetään tässä oraakkelina
SGP4 Simplified General Perturbations 4 (kaksirivisten elementtijoukkojen ratamalli)
SHA-256 Secure Hash Algorithm, 256-bittinen
SigMF Signal Metadata Format
SISRE avaruudessa kulkevan signaalin etäisyysvirhe (signal-in-space range error)
SPS PS Standard Positioning Service Performance Standard
SRTM Shuttle Radar Topography Mission
STK Systems Tool Kit (sen .e-efemeriditiedostomuoto)
STL Satellite Time and Location
SVID avaruusaluksen tunniste (space vehicle identifier)
T/P/F Walker-tähdistön satelliittien kokonaismäärä, tasot ja vaiheistus
TEC elektronien kokonaismäärä (total electron content)
UHF ultrakorkea taajuus
UTC Coordinated Universal Time (yleisaika)
WGS 84 World Geodetic System 1984
X1, X5 Xona Pulsar -järjestelmän signaalien nimet

Julkaistujen lukujen revisiot#

Muuttunut julkaistu luku on revisio, ja se kirjataan, eikä sitä koskaan korjata äänettömästi. Tämä julkaisu sisältää yhden moottorin tulosteen revision ja useita dokumentaatiossa painettujen lukujen revisioita.

Moottorin tuloste

  • TEME→GCRS-redusointi kiertyi 2·Δψ: nutaatiomatriisissa Δψ:n etumerkki oli käännetty. nutation::numat rakensi Rx(−(ε̄+Δε))·Rz(Δψ)·Rx(ε̄) siellä, missä SOFAn iauNumat rakentaa Rx(−(ε̄+Δε))·Rz(−Δψ)·Rx(ε̄), joten nutation_matrix, nutation_matrix_2000a, teme_to_gcrs ja gcrs_to_teme kiersivät kaksinkertaisen pituuskulman nutaation verran, noin 25 kaarisekuntia. Jokainen ketjun tarkistus oli ominaisuustesti (aito rotaatio, edestakainen muunnos, nollasta poikkeava nutaatiopanos), jonka etumerkkivirhe läpäisee; päästä päähän -Vallado-testi kattoi TEME→PEF, TEME→ITRF ja GCRS→ITRS mutta ei TEME→GCRS. Vallanon esimerkissä (AIAA 2006-6753, 2004-04-06) ketju ohitti julkaistun GCRF:n 1 145 m:llä; se on nyt 0,11 m:n päässä siitä, ja matriisi vastaa ERFAn numat:ää tarkkuudella 1e-14. tests/frame_reference_vectors.rs::teme_to_gcrs_matches_vallado_gcrf ja nutation::tests::nutation_matrix_matches_erfa_numat epäonnistuvat molemmat vanhalla etumerkillä. Tiedoston src/cio.rs CIO-yhdenmukaisuustesti (Celestial Intermediate Origin) oli selittänyt tuloksena olleen ~130 m:n poikkeaman "≈ 2·EE":llä; residuaali on nyt 5 cm ja sen raja on tiukennettu 250 m:stä 1 m:iin. Tämä siirtää julkaistuja lukuja, jotka kirjataan tähän revisiona: lajin ephemeris sarakkeet gcrs_r_m ja gcrs_v_m_s (noin 0,8–1,0 km mukana toimitetussa ISS-skenaariossa (International Space Station); sen TEME-, Maahan kiinnitetyt, maanpintajälki-, katselukulma- ja Doppler-sarakkeet eivät muutu) sekä Propagator::position_in_frame / state_gcrs GCRS- ja ITRS-koordinaatistoille. Minkään mukana toimitetun skenaarion yhteenvetorivi, kaavio tai golden-tiiviste ei lue näitä sarakkeita. Uudet yhteentoimivuusviennit käyttävät korjattua ketjua: ensimmäisen orbit-sgp4-gps-satelliitin CZML-paikka vastaa saman TLE:n ERFA-redusointia (propagoituna sgp4-Python-paketilla) 2,3 cm:n tarkkuudella.
  • Laji leo-navmsg, natiivisti ja selainbuildissa. Laji laskee nyt jokaisen transkendenttifunktion yhden siirrettävän matematiikkakirjaston kautta, joten sen kehys on samat tavut jokaisella alustalla ja jokaisessa buildissa (katso Korjattu). Jokainen leo-navmsg-luku siirtyy sen mukana, samoin navmsg-vaihe tiedostossa leo-pnt-chain. Laji on uusi tässä julkaisussa, joten mikään aiemmasta julkaisusta ei siirry, mutta ennen korjausta painetut luvut siirtyvät: tiedoston docs/LEO-NAVMSG.md tarkistusarvo koodaus-ja-dekoodaus-skenaariolle oli 0x110315 ja on 0x19105F, ja dekoodatun sanoman SISRE on 0,129 cm. Sivustolla kshana.dev Missions-kortti kohteelle leo-navmsg-fit-interval-trade näytti pahimmaksi etäisyysvirheeksi 1,6 mm 60 s:n sovituksella ja 40,3 mm 900 s:n sovituksella; sivusto rakennetaan nyt tämän julkaisun moottorilla ja näyttää 1,8 mm ja 46,6 mm.
  • Häirinnän jalanjälkikartta sivustolla kshana.dev (Missions). Jokainen sen 875 solusta on yksi ajo kohteesta maritime-strait-jamming, jossa vain vastaanottimen paikka muuttuu. Solut lasketaan nyt samoista kolmen desimaalin koordinaateista, jotka solun "avaa tämä ajo" -linkki antaa Kshana Studiolle, joten solu näyttää täsmälleen sen, minkä sen linkki toistaa. 30 solun keskimääräinen häirintä-signaalisuhde (J/S) siirtyy 0,1 dB, ylös tai alas; minkään solun seurantasaatavuus ei muutu. Moottori antaa identtiset tulokset jokaiselle solulle versioissa 0.28.0 ja 0.29.0.
  • Siemennetty uudelleenotanta WebAssembly (WASM) -paketissa. Selainbuild arpoi samasta siemenluvusta eri bootstrap- ja sekoitusindeksit kuin natiivibuild (katso Korjattu). Käyrän alle jäävän alan quantum-anomaly-detect-väli selaimessa oli [0.9901265, 0.9938305] ja on nyt natiivi [0.99035875, 0.993861]. Mikään natiiviluku ei siirry.

Dokumentaatiossa painetut luvut

Dokumentaatio tarkastettiin sana sanalta tämän julkaisun moottorin ajoja vasten. Missä painettu luku ei vastannut ajoa, dokumentti korjattiin, ja jokainen korjaus on lueteltu tässä muodossa vanha → uusi. Kaikissa alla olevissa tapauksissa moottorin tuloste ei muuttunut; dokumentti oli lukenut väärin, pyöristänyt väärin tai jäänyt tuloksesta jälkeen.

  • Spektri-, tähdistö-, kampanja-, animaatio-, raportti- ja yhteentoimivuussivujen dokumentaatiotarkastus sekä uusi docs/SOLAR-SYSTEM.md. Jokainen luku ajettiin uudelleen tällä moottorilla. Kaksi julkaistua lukua siirtyy: docs/CONSTELLATION-DESIGN.md antoi 5 000 satelliitin kattavuustestin ajaksi "noin 0,13 s debug-buildissa"; tämä ei toistunut (1,24 s kuormitetulla kannettavalla), joten sivu antaa nyt esisuodattimen osuuden, jonka testi tulostaa (9,9 % 19 440 000 paritestistä), ja release-binäärin 0,14 s mukana toimitetulle leo-pnt-mega-shell:lle. Sama sivu antoi E3F:n ylityksen "0,050 asteen poikkeamana"; mikään testi ei tulosta tätä lukua, joten sivu toteaa nyt vain testin valvoman 0,06 asteen kynnyksen ja sen taustalla olevan johdon 7,30 vastaan 7,36 astetta. Mikään moottorin tuloste ei muutu.
  • LEO-PNT-dokumentit: korjatut julkaistut luvut (ajettu uudelleen tämän julkaisun moottorilla). docs/LEO-SIGNAL.md kaistakompromissi: kohteen generic-s ensimmäisen kertaluvun ionosfäärinen viive on 3,24 m (painettu 3,25 m) ja kohteen generic-c-wide 0,77 m (oli 0,78 m). docs/LEO-NAVMSG.md koodaus ja dekoodaus: dekoodatun sanoman SISRE oli painettu 0,119 cm, kun ajo antoi 0,122 cm; sivu painaa nyt 0,129 cm, luvun alustariippumattomuuskorjauksen jälkeen (katso Korjattu alla). docs/LEO-PASS.md LEO vastaan GNSS -ylilento: 32 dB vähemmän vapaan tilan vaimennusta ylilennon huipulla (oli "26–32 dB"). Signaali- ja ylilentoluvuille moottorin tuloste ei muuttunut; dokumentit olivat lukeneet tai pyöristäneet sen väärin.
  • Tutoriaalit, läpikäyty putkiesimerkki ja komento /kshana-run, tarkastettu tämän julkaisun moottoria vasten. Julkaistujen lukujen revisiot, vanha → uusi: lajeja, jotka kirjoittavat <scenario>.table.csv, on kuusi, ei neljä (leo-navmsg ja telecom-timing puuttuivat; docs/tutorials/README.md, commands/kshana-run.md); kylmäatomien ½bT²-ylitys Tutoriaalissa 3 on 18 443 s, ei 18 440 s; oem-interop-edestakaisvirhe tiedostossa docs/examples/multi-tool-pipeline.md on mitattu 4.88e-7 km, ei "~1e-7 km"; Tutoriaalin 2 CSAC-holdover-kaista on testin väittämä 2000–3200 s, ei "~2600–4400 s"; Tutoriaali 1 siteeraa SP3-rivit ja geometrialohkon tarkkuudella, jolla moottori ne kirjoittaa. Mikään moottorin tuloste ei muuttunut.
  • Validointi-, kvantti-, SGP4-, animaatio-, väite- ja eheyssivut. docs/VALIDATION.md: valkoisen taajuuskohinan kellon simuloidun yhden sekunnin Allanin poikkeaman valvottu raja on 20 % (painettu 25 %; 25 %:n raja on käyrän raja kohdissa 1, 10 ja 100 s); nopeuden satunnaiskulun rivi toteaa nyt valvotun 20 %:n rajansa havaitun noin 12 %:n vieressä; ja sirumittakaavaisen atomikellon saatavuus kohteessa orbit-gnss-challenged on noin 0,73 (painettu noin 0,83). docs/QUANTUM.md: tärinän rajoittama laukauskohtainen kohina sivun kylmäatomiesimerkissä on noin 46 kertaa sen laukauskohinalattia (oli "~45×"; 46,49 laskettuna uudelleen), ja alue "1–50 µg/√Hz" kenttälaitteille, joka oli ristiriidassa laitteen kanssa, jonka sivu itse siteeraa, korvataan kahden siteeratun laitteen julkaistuilla luvuilla. docs/SGP4-VALIDATION.md: pahin paikkaero on 4,12 mm (oli "≈ 4 mm"), satelliitti nimettynä. docs/ANIMATION.md: videokooderiesimerkki luki 24 ruutua sekunnissa -kehykset arvolla 12; se käyttää nyt arvoa 24, jonka kehysmanifesti ilmoittaa. docs/CLAIMS-VS-REALITY.md: häirintämallilla on 10 testiä (oli 8), ja kytketyn suodattimen "2,97 m vastaan 48,8 m" korvataan sillä, mitä sen testi väittää (kytketty paikkavirhe alle 0,6 kertaa irrotetun virhe, voittaen vähintään 90/100 kokeesta). docs/INTEGRITY.md: "Today"-leima luki v0.22.0; se nimeää nyt tämän julkaisun, ja kaksi sen jälkeen rakennettua ominaisuutta (tähdistön laajuinen vikatila ja eheystukisanoma) poistuvat sen aukkoluettelosta.

Lisätty#

Spektri

  • Skenaariolaji spectrum: L-kaistan spektrimalli ja vesiputous (src/spectrum.rs, src/sigmf.rs, docs/SPECTRUM.md). Koko GNSS:n L-kaista yhtenä tehospektritiheytenä (PSD): GPS L1 coarse/acquisition (C/A) ja L2 civil (L2C) (BPSK(1)), Galileo E1 (multiplexed binary offset carrier, MBOC(6,1,1/11), tai BOC(1 1)), GPS L5 ja Galileo E5a (BPSK(10)), kT-kohinalattia vastaanottimen kohinaluvulla sekä jatkuva-aaltoiset (CW), kapeakaistaiset, chirp- ja sovitetun kohinan häirintälähettimet käsikirjoitetulla aikajanalla. Jokainen häirintälähetin pisteytetään kaistakohtaisesti spektrisellä erotuskertoimellaan (SSC), mikä antaa häirintä-signaalisuhteen (J/S) ja tehollisen kantoaalto-kohinatiheyden (C/N0) kaistaa ja riviä kohti. Kaavio on SVG-vesiputous C/N0-palkeilla; result.json sisältää ruudukon tehossa lohkokeskiarvoistettuna. Valinnainen [iq] piirtää mallin IQ-näytteinä, kirjoittaa ja lukee Signal Metadata Format (SigMF) -tallenteen (cf32_le, ci16_le) ja vertaa Welch-estimaattia malliin; valinnainen [recording] estimoi todellisen SigMF-tiedoston. Mukana toimitettu esimerkki scenarios/l-band-waterfall-jamming.toml: chirp vie L1 C/A:n ja E1:n tasolla 10 s, L1-kantoaallolla oleva CW-sävy pitää C/A:n tasolla 17,98 dB-Hz chirpin loppumisen jälkeen, kun taas E1, jonka spektrissä on siinä nolla, toipuu; L5 ja E5a eivät kärsi.
    • Uusi VALIDATED-rivi: signaalien PSD:t ja SSC:t, verrattuna BPSK(n):n pääkeilaan 2n x 1,023 MHz, BOC(1 1) -keiloihin keskitettynä +/-1.023 MHz:iin, Parsevalin suljettuihin muotoihin julkaistujen -61.8 / -64.8 / -67.8 dB/Hz SSC:iden takana sekä oppikirjan arvoihin Q = 1 (CW) ja 1,5 (sovitettu). BOC(1 1) -PSD:n maksimi on kohdassa +/-0.759 MHz, ei keilan keskellä; testi kiinnittää molemmat.
    • Kaksi uutta MODELLED-riviä: vesiputous ja C/N0-aikajana, jotka palautuvat täsmälleen lajin jamming ketjuun (ristiintarkistettu jokaisessa raportissa), sekä SigMF-kodekki ja Welch-estimaattori. Mitään kolmannen osapuolen tallennetta ei ole repositoriossa.
    • navsignal: MBOC-variantti ja spectral_separation_coeff_offset.
    • Raportti painaa C/N0:n, jonka lajin jamming edustava Q-taulukko antaisi, spektristä johdetun vieressä; C/A-kantoaallolla olevalle CW-sävylle ne poikkeavat 1,8 dB. Kolme uutta matriisiriviä: yksi validoitu (signaalispektrit ja spektriset erotuskertoimet) ja kaksi mallinnettua.

Aurinkokunta

  • Aurinkokunnan efemeridi ja paikannus minkä tahansa kappaleen ympärillä. Kaksi uutta skenaariolajia.
    • solar-system: Aurinko, kahdeksan planeettaa, Pluto, Kuu, Phobos, Deimos, Io, Europa, Ganymede, Callisto ja Titan yhtenä epookkina: heliosentrinen paikka ja nopeus International Celestial Reference Framessa (ICRF), gravitaatioparametri, säteet, J2 (toinen zonaalinen harmoninen) missä julkaistu, sideerinen pyöriminen, International Astronomical Unionin (IAU) napa ja nollameridiaani, rataviiva yhden kierroksen yli sekä valoaika, yksisuuntainen ja kaksisuuntainen etäisyys, Auringon Shapiro-viive ja Auringon etäisyys havaitsijakappaleesta ja mille tahansa lisälinkille. Planeetat tulevat Jet Propulsion Laboratoryn (JPL) Standishin ja Williamsin Kepler-elementeistä (taulukko 1, 1800 AD–2050 AD; taulukot 2a/2b, 3000 BC–3000 AD); kuut JPL:n keskielementeistä IAU:n synkronisella pyörimisnopeudella ja Titan IAU:n pyörimismallista. Esimerkki: scenarios/solar-system-tour.toml.
    • body-pnt: kiertoradalla oleva alus tai pintalaskeutuja minkä tahansa näiden kappaleiden ympärillä, navigoiden pseudoetäisyyksillä kappaleen ympärillä olevasta Walker-tähdistöstä ja kellovapaalla kaksisuuntaisella etäisyydellä Maasta; tarkkuuden heikkenemiskerroin, formaali epävarmuus ja siemennetyt pienimmän neliösumman paikkaratkaisut Maa-yhteyden kanssa ja ilman. Esimerkit: scenarios/mars-orbit-pnt.toml, scenarios/europa-surface-pnt.toml.
    • Body saa Merkuriuksen, Venuksen, Jupiterin, Saturnuksen, Uranuksen, Neptunuksen, Pluton ja seitsemän kuuta, nimihaun ja fysikaalisen tietueen; AnalyticSolarSystem antaa minkä tahansa kappaleen suhteessa mihin tahansa toiseen olemassa olevan EphemerisProvider-liitännän kautta.
    • VALIDATED JPL Horizonsia (Development Ephemeris DE441; fixturet ja kyselyt kansiossa tests/fixtures/solar_system/) vastaan: Merkurius–Saturnus ja Maa taulukosta 1 kaksinkertaisen ilmoitetun nimellisvirheen sisällä (pahin 1,87 kertaa), kaikki kahdeksan planeettaa taulukoista 2a/2b (pahin 1,71 kertaa) sekä Maan ja Marsin sekä Jupiterin valoaika. MODELLED: Uranus ja Neptunus taulukosta 1, jotka ylittävät ilmoitetun virheen DE441:ää vastaan (2,0 ja 5,2 kertaa), Pluto, kuut, kappalevakiot ja body-pnt-tulokset.
    • Löydös: Montenbruckin & Gillin Kuun sarja tiedostossa src/ephem.rs on jo viitattu J2000-päiväntasaukseen oman prekessiotermin avulla (0,05 astetta Horizonsista), joten sitä käytetään ilman lisäprekessiorotaatiota. Kuusi uutta matriisiriviä: kaksi validoitua (planeettojen paikat, valoaika) ja neljä mallinnettua.

Tähdistöt minkä tahansa kappaleen ympärillä

  • Tähdistösuunnittelu mittakaavassa (laji constellation-design, src/constellation.rs). Walker delta- ja Walker star -kuviot (T/P/F), eksplisiittiset elementtilistat ja monikuorisuunnitelmat, useita tähdistöjä ajoa kohti, Maan, Kuun, Marsin tai minkä tahansa muun planeetan, Pluton tai suuren kuun ympärillä lajin solar-system lisäämistä kappalevakioista. Esiasetukset julkaistuista nimellisistä elementeistä: Global Positioning Systemin (GPS) perustaso ja laajennettava 24 paikan tähdistö (Standard Positioning Service Performance Standard, SPS PS, 2020), Galileo Walker 24/3/1 (Open Service Service Definition Document, versio 1,1), BeiDou keskikorkea Maan kiertorata Walker 24/3/1 sekä geostationaariset ja kallistetut geosynkroniset satelliitit (Open Service Performance Standard 3,0) ja GLONASS 24/3/1 (Interface Control Document 5,1). Kattavuus ja tarkkuuden heikkenemiskerroin (DOP) leveys-/pituusasteruudukossa: näkyvät satelliitit, GDOP, PDOP, HDOP ja VDOP (geometrinen, paikka, vaaka, pysty) ja saatavuus soluittain, globaalisti ja huonoimmalla paikalla, yksi vastaanottimen kello tähdistöä kohti. Näkyvyyden esisuodatin (kattavuuden puolikulma plus sub-satelliittileveyskaista, tarkka pallomaisella kappaleella) ajaa 5 000 satelliittia 10 asteen ruudukossa noin 0,13 s:ssa debug-buildissa.
    • VALIDATED: Walker-generaattori toistaa Galileo OS SDD:n taulukon 23 ja GLONASS ICD:n paikkakaavan; GPS-esiasetus toistaa SPS PS:n päiväntasaajan ylityssarakkeen (35/36 paikasta 0,0108 asteen sisällä; E3F 0,06 asteen sisällä, taulukon oma rivi on epäyhtenäinen); GPS-perustason globaali HDOP-jakauma vastaa SPS PS:n liitettä B (mediaani 0,940 vastaan 0,94, 95 % 1,255 vastaan 1,25, keskiarvo 0,965 vastaan 0,96; kynnys 0,03).
    • MODELLED: mielivaltaiset suunnitelmat, muut kappaleet, BeiDoun vaihe ja kallistetut geosynkroniset solmut, kahden kappaleen radat valinnaisella J2:lla, vain geometria.
    • Skenaariot: constellation-multi-gnss-coverage (102 satelliittia, saatavuus 100 %, PDOP:n mediaani 0,95, 31,0 näkyvissä yli 10 asteen), leo-pnt-mega-shell (5 000 satelliittia, saatavuus 99,22 % PDOP:lla 3 tai pienemmällä yli 20 asteen, 0 % napa-alueilla, esisuodatin säilyttää 11,5 % paritesteistä), lunar-relay-constellation (14 satelliittia Kuun ympärillä, saatavuus 21,33 % kokonaisuudessaan ja korkein etelänapa-alueella). Kaikki kolme on toimitettu mukana komennolle kshana example. Huomautukset: docs/CONSTELLATION-DESIGN.md. Kolme uutta matriisiriviä: kaksi validoitua (Walker-generaattori ja GNSS-esiasetukset, GPS:n globaali DOP) ja yksi mallinnettu.
  • Spektrimallin ohjaama kampanja ja tähdistöt minkä tahansa kappaleen ympärillä. scenarios/campaign-spectrum-holdover-integrity.toml ketjuttaa lajin spectrum kellon holdoverin ja eheysvalvonnan kanssa (chirp vie L1 C/A:n ja E1:n; CW-sävy pitää sitten C/A:n alhaalla, kun E1 toipuu ja vastaanotin siirtyy pelkkää Galileoa sisältävään taivaaseen), kiinnitettynä itsenäiseen vesiputousesimerkkiin tiedostossa tests/campaign_composition_reference.rs. constellation-design ratkaisee nyt keskuskappaleensa kohteen Body::by_name kautta, joten tähdistö voidaan sijoittaa minkä tahansa planeetan, Pluton tai suuren kuun ympärille lajin solar-system käyttämillä vakioilla.

Kampanjat

  • Kampanjat: monta skenaariota koottuna yhdeksi ajoksi. Uusi laji campaign (src/campaign.rs, dokumentoitu tiedostossa docs/CAMPAIGNS.md) ajaa olemassa olevien lajien jäseniä saman komentorivin dispatchin kautta ja lukee numerot takaisin niiden tuloksista. Neljä osiota, missä tahansa yhdistelmässä:
    • [[phases]]: ketjutettu tehtävä yhdellä aikajanalla. Lajikohtaiset esiasetukset lukevat kellon aikavirheen sen vartijaa vastaan, keskimääräisen tehollisen kantoaalto-kohinatiheyssuhteen (C/N0) seurantalattiaa vastaan, pystysuuntaisen suojaustason hälytysrajaa vastaan, paikkavirheen, seuraavat satelliitit ja hälytyslippuja, pidettyinä yhteisessä ruudukossa vaiherajojen ja tapahtumien kanssa. Tila siirretään eteenpäin kohteilla carry, handoff ja end_at.
    • [sweep]: yhdestä kolmeen pisteavainta mistä tahansa lajista, valinnaisesti siemennetyllä ensemblellä jokaisessa solmussa.
    • [monte_carlo]: realisaatio k perussiemenellä + k, keskiarvolla, hajonnalla, persentiileillä ja kiinteällä siemenellä toteutetulla bootstrap-95 %:n luottamusvälillä.
    • [compose]: jaetut arvot sidottuina useisiin jäseniin, yhdistetyllä parhaan ja huonoimman yhteenvedolla. Jokainen tulos sisältää kampanjatiivisteen ja tiivisteen kaikkien jäsentulosten yli. Neljä mukana toimitettua skenaariota: campaign-jam-spoof-holdover-integrity (nimellinen, häirintä, harhautus päättyen kellovalvonnan 370 s:n havaitsemiseen, holdover kantaen 37,0 ns:n harhautettua poikkeamaa inertiayksikön vapaaliikkuessa, eheyshälytys, toipuminen), campaign-sweep-jammer-power, campaign-shared-jammer-sea-road ja campaign-monte-carlo-clock-holdover. tests/campaign_composition_reference.rs kiinnittää koostamisidentiteetit: yksivaiheinen kampanja toistaa itsenäisen ajon bitti bitiltä kolmella lajilla, kiinteällä siemenellä toteutettu ensemble on tavutason vakaa, ja valkoisen taajuuskohinan kellolla ensemblen keskiarvo on ilmoitetun välin sisällä ja hajonta khii-toiseen-välin sisällä arvolle sqrt(q_wf * tau) = 16,459 ns. Kolme uutta mallinnettua matriisiriviä.

Animaatio

  • Animaatiovienti (--animate svg|html|frames|all, src/animation.rs, docs/ANIMATION.md). Mikä tahansa ajo, jonka tulos sisältää aikasarjan, voidaan nyt kirjoittaa animoituna Scalable Vector Graphics (SVG) -tiedostona (Cascading Style Sheets -avainkehykset, ei skriptiä: jäljet piirtyvät liikkuvan aikakursorin taakse), yhtenä itsenäisenä HyperText Markup Language (HTML) -soittimena (toisto ja tauko, kelaus, nopeus, jokainen paneeli yhdellä synkronoidulla kursorilla, tapahtumamerkit, jotka hakevat napsautuksella; ei ulkoista resurssia) tai numeroituna SVG-kehysjonona, jossa manifest.json ilmoittaa kuvataajuuden, keston ja kehysten ajat videokooderia varten. Kampanja toistetaan vaiheinaan hälytyksineen merkittyinä; spektriajo animoi vesiputouksensa rivi riviltä. Soitin noudattaa asetusta prefers-color-scheme, ja asetuksella prefers-reduced-motion sekä SVG että soitin näyttävät valmiin kuvan liikkumisen sijaan. --animate-fps ja --animate-duration asettavat toiston; kshana::api::animate_toml ja kshana::animation::animate_result ovat kirjastojen sisääntulopisteet, ja result.json saa animation-lohkon vain, kun --animate ajetaan. Tuloste on puhdas funktio tuloksesta ja asetuksista, tavu tavulta sama uusintaajossa, ilman aikaleimaa. Laji, jolla ei ole näytteistettyä aika-akselia, kieltäydytään käsittelemästä viestillä "no time series to animate" eikä mitään kirjoiteta. Viejä piirtää ajon omat näytteet eikä lisää mitään lukua, joten se on MODELLED (sisäinen johdonmukaisuus) eikä sillä ole varmennusmatriisin riviä; mikään julkaistu luku ei muutu. Testit: tests/animation.rs (determinismi, kehysmäärä, ei ulkoista osoitetta, hyvin muodostettu XML, vähennetyn liikkeen polku ja jokainen mukana toimitettu aikasarjallinen skenaario animoituu).

Raportit

  • Laajat ajoraportit (src/advanced_report.rs, docs/REPORTS.md). Jokainen komentorivikäyttöliittymän (CLI) ajo kirjoittaa nyt <scenario>.report.html:n, tulostettavan HyperText Markup Language (HTML) -raportin, ja <scenario>.report.json:n, saman sisällön koneluettavana JavaScript Object Notation (JSON) -dokumenttina. Osiot: tiivistelmä; jokainen skenaarion syöte yksikköineen, luettuna kenttäyksikkökaaviosta (tuloksen units-lohko), muuten kentän nimen jälkiliitteestä, muuten ilmoitettuna ilmoittamattomaksi; tulokset ajon kaavion, jokaisen skalaarin ja jokaisen numeerisen sarakkeen yhteenvedon kanssa; kampanjalle sweep-solmutaulukko, Monte Carlo -keskiarvo, keskihajonta, 5., 50. ja 95. persentiili ja bootstrap-luottamusväli histogrammin kanssa jokaista metriikkaa kohti, ketjun vaihetaulukko tai koostamisen jäsenet ja yhdistetty yhteenveto (sekä lajin sweep tai sweep-nd ajon ruudukko); tapahtumien aikajana; ajon lajien käyttämän jokaisen varmennusmatriisin rivin VALIDATED / MODELLED / PARTNER -merkintä, oraakkeli ja testitodisteet, luettuna matriisista laji-rivi-ristiintaulukon kautta (rivi, joka arvioi yhden syöttöpolun, kuten lajin orbit Simplified General Perturbations 4 (SGP4) -polun tai lajin slot-timing mitatun tallenteen polun, luetellaan vain, kun ajo kulki sen polun, ja Shuttle Radar Topography Mission (SRTM) -lukijan rivi luetellaan millekään lajille, koska mikään skenaariokenttä ei lue SRTM-ruutua); ei-mallinnetut väitteet ja oletukset, kukin lainattuna lähteineen; sekä toistettavuustietue (moottorin versio, lähde-commit, kun build asettaa KSHANA_GIT_COMMIT:n, skenaariotiedoston ja tulosdokumentin Secure Hash Algorithm 256-bit (SHA-256) -tiivisteet, siemenluku, alusta ja tarkka komento). Raportti ei lue kelloa: sama skenaario, siemenluku ja moottoribuild antavat tavu tavulta saman raportin, ja ainoa aikaleima, jonka se voi näyttää, on se, jonka --study-name jo kirjoittaa. Tulostustyylitiedosto sopii A4:ään ja US Letteriin, toistaa taulukkojen otsikot ja pitää rivit ja kuvat eheinä sivujen yli; Portable Document Format (PDF) -tiedosto tehdään selaimen "Tallenna PDF:ksi" -toiminnolla. Valintaa --report pdf ei ole, koska kaavioiden renderöinti PDF:ään vaatisi uuden, raskaan riippuvuuden. Testit: tests/advanced_report.rs raportoi jokaisen mukana toimitetun skenaarion (ei tyhjää osiota, ei paikkamerkkitekstiä, merkinnät vastaavat matriisia, skenaarion tiiviste vastaa tiedostoa, tavu tavulta sama uusintaajossa) ja tests/advanced_report_cli.rs ajaa tallennetun komennon uudelleen tuoreessa hakemistossa ja vaatii tavu tavulta saman tiedoston result.json. Mikään julkaistu luku ei muutu, eivätkä laji-, skenaariotiedosto- ja matriisirivimäärät muutu.
  • Raportti, animaatio ja viennit toimivat yhdessä. Laaja raportti saa osion "Animation and exports": ajon animoitu piirros upotettuna passiivisena kuvana (tai syy, miksi sellaista ei ole), linkit sen viereen kirjoitettuihin animaatio- ja vientitiedostoihin sekä jokainen yhteentoimivuusmuoto sen kanssa, soveltuuko se, miksi ei, ja sen määritys; report.json sisältää saman companions-lohkon. HTML-animaatiosoitin luettelee sen viereen kirjoitetut vientitiedostot. Komentorivikäyttöliittymä (CLI) renderöi nyt viennit ennen raportin kirjoittamista, jotta molemmat voivat nimetä tiedostot.

Yhteentoimivuusviennit

  • Yhteentoimivuusviennit ja -tuonnit (--export, src/interop/, docs/INTEROP.md). kshana <scenario.toml> --export <format> kirjoittaa skenaarion geometrian CZML:nä (Cesium Language), KML:nä (Keyhole Markup Language 2,2, Open Geospatial Consortiumin standardi, gx:Track-aikaleimatuilla radoilla), GeoJSONina (Internet Engineering Task Force Request for Comments 7946) ja Ansys STK:n (Systems Tool Kit) .e-efemerideinä (EphemerisTimePosVel, metriä, yksi tiedosto liikkuvaa kohdetta kohti) sekä lajin spectrum syntetisoidun IQ-näytteen (in-phase and quadrature) SigMF-parina (Signal Metadata Format) olemassa olevan src/sigmf.rs:n kautta. --export all kirjoittaa jokaisen soveltuvan muodon ja tulostaa, miksi muut eivät sovellu; --export list raportoi ajamatta. Liikkuvat kohteet kirjoitetaan Geocentric Celestial Reference Systemissä (CZML INERTIAL, STK ICRF) ja Maahan kiinnitettynä WGS 84 (World Geodetic System 1984) -pituutena, leveytenä ja korkeutena (KML, GeoJSON); kiinteät paikat CZML:ssä ovat FIXED. Laji jamming lisää kaksi häirintälähettimen jalanjälkeä omista linkkiyhtälöistään. --import-route <file.geojson> kirjoittaa GeoJSON-geometrian LineString lajien terrain-nav, terrain-slam, gravity-map ja combined-altpnt ratasyötteisiin. Viennit ovat tavutasolla deterministisiä eivätkä sisällä aikaleimaa. tests/interop_formats.rs validoi jokaisen viennin julkaistua määritystään vasten, vertaa viedyt satelliittitilat moottorin omiin 1 mm:n tarkkuudella ja ajaa jokaisen mukana toimitetun skenaarion jokaisen muodon läpi, kukin joko vie tai ilmoittaa miksi ei (taulukko tiedostossa docs/INTEROP.md). Mikään julkaistu luku ei muutu: lajin spectrum IQ-synteesi siirtyi yhteen jaettuun funktioon ja sen tulosdokumentti on tavu tavulta sama, ja PassesScenario saa propagator() ja epoch_calendar(), joita sen oma ajo käyttää. Laji-, skenaariotiedosto- ja varmennusmatriisimäärät eivät muutu. Rata- tai eheysskenaario ilman epoch ajoitetaan sen satelliittien omalla datalla: t = 0 on varhaisin TLE (two-line element set), lähetysefemeridi tai SP3 (Standard Product 3) -epookki, ja jokainen tällainen satelliitti kierretään GCRS- ja Maahan kiinnitettyihin koordinaatistoihin omalla hetkellään; 2000-01-01T00:00:00Z käytetään vain, kun mikään satelliitti ei sisällä epookkia. SP3- ja OEM-(Orbit Ephemeris Message) viennit säilyttävät merkintänsä 2000-01-01. Tämän tukemiseksi lisätään Sgp4::epoch_jd_utc, Sp3Interpolator::jd_ut1 ja Propagator::own_jd_utc; mikään aiemmin olemassa ollut ei lue niitä.

Matalan Maan kiertoradan navigointi: signaali

  • LEO-PNT-signaalisuunnitelmat ja monikaistainen spektri. Uusi laji leo-signal ja laji spectrum, joka ulottuu L-kaistan ulkopuolelle: yksi laji, neljä skenaariotiedostoa (kolme mukana toimitettua; Celeste IOD -tiedosto on vain repositoriossa) ja neljä matriisiriviä (kaksi VALIDATED, kaksi MODELLED).
    • leo-signal: parametrisoidut matalan Maan kiertoradan (LEO) paikannus-, navigointi- ja ajanmääritys (PNT) -signaalisuunnitelmat mille tahansa järjestelmälle (kaista, lähetyskaistanleveys, ITU-allokaatio; hankinta-, data- ja pilottikomponentit BPSK(n)-, BOC(m,n)-, MBOC- tai tasaspektrein, tehoosuudet, FDMA-aliaaltoalueet, koodipituudet ja datanopeudet), käännettyinä mukaan julkisista esiasetustiedostoista kansiossa data/leo-signals/ (Xona Pulsar X1/X5, Iridium STL, Starlink-opportunistinen signaali, CentiSpace, edustava C-kaistan suunnitelma ja edustavat UHF/L/S/C/leveä-C-suunnitelmat, kukin kukin lähde-URL:ineen) tai kirjoitettuina suoraan. Signaalia kohti: kaistarajoitettu PSD ja kaistansisäiset tehoosuudet, Gaborin kaistanleveys, kaistarajoitettu early-late-koodiseurannan jitter suhteessa C/N0:aan ja välistykseen (Betz & Kolodziejski 2009) ja etäisyysmittaustarkkuus, hankinnan hakuavaruus, havaitsemistodennäköisyys ja keskimääräinen sarja- ja koodirinnakkaishankinta-aika, SSC GPS L1 C/A:han, Galileo E1:een, GPS L5:een, Galileo E5a:han, E5b:hen ja AltBOC:iin ja niistä C/N0-häviöllä, CW-, laajakaistainen ja sovitettu J/S-sieto spektrilajin SSC-koodista, kaistakompromissi (ionosfäärinen viive, vapaan tilan vaimennus, etäisyysmittaus yhtäläisellä C/N0:lla ja yhtäläisellä EIRP:llä, häirinnänsieto) sekä valinnaiset muototarkistukset kuvattua mittausta vasten. Esimerkit: scenarios/leo-band-trade.toml, scenarios/xona-pulsar-signals.toml, scenarios/celeste-iod-classical-pilot-signals.toml (Celeste IOD -kaistat ja signaalikonfiguraatio, jotka esitettiin ESA NAVISP LEO-PNT -työpajassa, 2026; pidätetty Celeste IOD -esiasetuksen mukana, katso "LEO-PNT end to end" alla). Huomautukset tiedostossa docs/LEO-SIGNAL.md.
    • spectrum: kaistat voivat nyt olla esiasetettu signaalisuunnitelma (jokainen komponentti piirretty, kaistarajoitettu, C/N0 ja J/S viitattu seurattuun komponenttiin) tai mukautettu kantoaalto ja modulaatio; [[panels]] lisäävät vesiputouksia muille taajuusalueille yhdellä aikajanalla; wideband (barrage) -häirintälähetin liittyy neljään aaltomuotoon. Raportti lisää bands[].tracked_power_dbw, bands[].design ja panels sekä yhden not_modelled-merkinnän. Tavalliset kaistat antavat samat luvut kuin ennen. Esimerkki: scenarios/multi-band-jamming-waterfall.toml.
    • Moduuliin navsignal on lisätty sinin integraali, BPSK:n kaistan sisäisen tehon ja kaistarajoitetun Gaborin kaistanleveyden suljetut muodot, kaistarajoitettu early-late-jitter mille tahansa spektrille ja sen Gaborin raja, siirretyn BPSK:n SSC:n suljettu muoto, Galileo E5 AltBOC(15 10) -spektri ja modulaatiotunnisteen jäsennin; Modulation::label tulostaa tunnisteen BPSK(1/3) murtolukuna.
    • Neljä matriisin riviä: VALIDATED kaistarajoitetut suljetut muodot (90,3 % BPSK-tehosta pääkeilassa, jitter palautuu Kaplanin ja Hegartyn koherenttiin muotoon, 0,0039564 chipiä tasolla 45 dB-Hz, B_L 1 Hz, d 1 chip, T 20 ms, ja sen Gaborin rajaan, sekä BPSK:n oma SSC 2/(3 R_c); Gaborin suljettu muoto ja siirretty SSC suhteessa sen Parsevalin muotoon on ilmoitettu sisäisinä ristiintarkistuksina); VALIDATED suurin LEO-Doppler (Xona X1 33,2 kHz julkaistun välin 32–34 kHz sisällä, Iridium 0,5 kHz:n päässä arvosta 36 kHz); MODELLED leo-signal; MODELLED monikaistainen spektri.
  • LEO-PNT-ylilento ja kaistakohtainen linkkibudjetti: tyyppi leo-pass. LEO-PNT on paikannus, navigointi ja ajanmääritys matalalla Maan kiertoradalla (LEO) olevien satelliittien avulla. Käyttäjä (maalla, merellä, ilmassa tai sisätiloissa, paikallaan tai liikkeessä) ja yksi tai useampi LEO-satelliitti, jotka tulevat suunnitellusta ylilennosta, suorista radanelementeistä, kaksirivisestä radanelementtijoukosta (TLE) SGP4:n kautta tai Walker-satelliittitähdistöstä, jonka tuottaa koodi constellation-design. Satelliittia, kaistaa ja epookkia kohti: katselukulmat, etäisyys, suljetussa muodossa lasketut etäisyysmuutosnopeus ja etäisyyden kiihtyvyys (tarkistetaan jokaisella ajolla keskeisdifferensseillä), Doppler ja Dopplerin muutosnopeus, vapaan tilan vaimennus, EIRP (ekvivalentti isotrooppisesti säteilty teho) isoflux-, Gaussin keila- tai tasaisella satelliittikuviolla, patch-käyttäjäantenni, ITU-R P.676 -kaasuvaimennus, ITU-R P.838/P.618 -sadevaimennus, P.618-troposfäärin tuikinta, ITU-R P.2109 -rakennuksen läpäisyvaimennus sisätilakäyttäjälle, polarisaatiosovittamattomuus, järjestelmän kohinalämpötila ja C/N0 (kantoaalto-kohinatiheys); ensimmäisen kertaluvun ionosfääriviive kaistaa kohti Klobucharin tai pystysuuntaisen TEC:n (kokonaiselektronipitoisuus) vinosta TEC:stä satelliitin alapuolella sekä ionosfääristä vapaat kaistaparit kohinan vahvistumisineen. Galileo- tai GPS-satelliitit arvioidaan samalla vastaanottimella rajapintadokumenttien vastaanotetuilla tehoilla, joten kellonmuotoinen LEO-ylilento ja tasaiset MEO-kantoaallot (keskikorkea Maan kiertorata) jakavat yhden kuvaajan. Osio [iot] antaa ajan ensimmäiseen paikkaratkaisuun, energian ratkaisua kohti ja akun eliniän suhteessa käyttösuhteeseen (MODELLED).
    • Järjestelmäriippumaton: moottori ei tarvitse esiasetusta. Valinnaiset esiasetukset, kukin omassa tiedostossaan ja merkittynä PUBLIC (URL-osoitteen kera), REPRESENTATIVE tai WORKSHOP: yleinen monikaistainen (UHF, L, S, C), yleinen C-kaista, Xona Pulsar X1/X5 (arXiv 2509,19551), Iridium STL, Starlink pelkkänä Doppler-opportunistisena signaalina, CentiSpace ja Celeste IOD (kiertoratademonstraatio), jonka signaaliparametrit esiteltiin ESA NAVISP LEO-PNT -työpajassa 2026 ja jotka sijaitsevat tiedostossa src/celeste_iod.rs, jotta ne voidaan pidättää (katso jäljempänä ”LEO-PNT päästä päähän”).
    • Julkiset rakennuspalikat moduulissa src/leo_link/ (geometry, antenna, itu, iono, energy, presets) muiden moduulien kutsuttaviksi.
    • Skenaariot: leo-pass-vs-gnss-cn0, leo-indoor-uhf, leo-iot-energy, leo-pass-xona-pulsar, leo-pass-iridium, leo-pass-celeste-iod-multiband.
    • Yhdeksän matriisin riviä. VALIDATED (6): ITU-R P.838-3 -kertoimet suhteessa sen taulukkoon 5; P.618-14:n sadevaimennus ja tuikinta suhteessa ITU-R:n tutkimusryhmän 3 validointiesimerkkeihin; P.2109:n rakennuksen läpäisyvaimennus suhteessa tutkimusryhmän 3 työkirjaan; ensimmäisen kertaluvun ionosfäärin skaalaus suhteessa IS-GPS-200:n ryhmäviiveen suhteeseen sekä vapaan tilan vaimennus; ympyräradan paikallaan olevan käyttäjän suurin Doppler suhteessa arXiv 2509,19551 taulukkoon 1. MODELLED (3): ylilento ja linkkibudjetti, esiasetukset sekä pienenergiaisen paikannusratkaisun budjetti. Yksi tyyppi ja kuusi skenaariotiedostoa. Huomautukset tiedostossa docs/LEO-PASS.md.

Matalan Maan kiertoradan navigointi: navigointiviesti

  • LEO-navigointiviesti (tyyppi leo-navmsg, src/leo_navmsg/). Matalan Maan kiertoradan (LEO) PNT-satelliitin (paikannus, navigointi ja ajanmääritys) lähettämä efemeridi- ja kelloviesti mille tahansa radalle, kantoaallolle ja mallille; nimetyt esiasetukset ovat valinnaista dataa, ja jokainen ominaisuus toimii ilman niitä. Yksi tyyppi, viisi skenaariotiedostoa ja yhdeksän matriisin riviä (kolme VALIDATED, kuusi MODELLED). Katso docs/LEO-NAVMSG.md.
    • Viestin sisältö: SVID, datan versio, kaista ja signaalin terveys; viikko, viikon aika ja toisen asteen kellopolynomi; efemeridi yhtenä neljästä mallista — Galileo OS SIS ICD:n 16-parametrinen Kepler-joukko, kyseinen joukko sekä rataa pitkin, rataa vastaan kohtisuoraan ja radiaalisuunnassa vaikuttavat korjauspolynomit, Liun ym. 2025 22-parametrinen malli (doi 10.3390/rs17162894) tai ATOMICin nollakellon ECEF-polynomi — sekä Klobuchar-joukko, NeQuick-G-kertoimet tehollisen ionisaatiotason kanssa ja järjestelmäajan ja UTC:n väliset parametrit ICD:n karkaussekuntitapauksineen.
    • Sovitin: totuusrata, joka on integroitu vyöhykkeisellä J2–J6- tai EGM2008-gravitaatiolla ja ilmanvastuksella, siemenluvulla arvottu vapaa tai ohjattu kello, Levenberg–Marquardt-sovitus ei-singulaarisille elementeille, sitten lineaariset pienimmän neliösumman korjauspolynomit ja kello, joka on sovitettu käyttäjän relativistinen termi vähennettynä.
    • Neljä analyysia ja skenaariota: leo-navmsg-fit-interval-trade (signaali-avaruudessa-etäisyysvirhe (SISRE) suhteessa sovitusvälin ja päivitysjakson pituuteen), leo-navmsg-model-comparison (neljä mallia, bitit ja Kshanan 22-parametrinen sovitus Liun ym. korkeuksilla julkaistujen lukujen rinnalla, MODELLED), leo-navmsg-midpass-update (jatkuvuus jokaisessa viestinvaihdossa ylilennon aikana) ja leo-navmsg-encode-decode (Kshanan oma dokumentoitu binäärikehys CRC-24Q:lla ja kvantisointibudjetilla, RINEX-4-tyylinen lohko, joka on merkitty Kshanan laajennukseksi, sekä CSV-taulukko).
    • VALIDATED: globaalin keskiarvon SISRE-painot suhteessa Montenbruckin ym. 2018 julkaisemaan keskikorkean ja geostationaarisen radan taulukkoon; Galileon käyttäjäalgoritmi suhteessa RTKLIB:iin neljällä todellisella Galileon lähetysefemeridillä (tests/leo_navmsg_reference.rs); CRC-24Q suhteessa luettelon tarkistusarvoon ja RTCM 10403 1005 -esimerkkikehykseen.
    • Esiasetukset, kukin omassa tiedostossaan lähteineen: Xona Pulsar ja Pulsar-0, Iridium, Starlink, CentiSpace, edustava C-kaistan järjestelmä, ATOMIC ja Celeste IOD (ainoa esiasetus, joka käyttää ESA NAVISP LEO-PNT -työpajassa 2026 esitettyä aineistoa; se säilytetään tiedostossa src/celeste_iod.rs skenaarioineen, jotta se voidaan pidättää).

Matalan Maan kiertoradan navigointi: fuusio

  • Fuusioitu MEO- ja LEO-paikannus, -navigointi ja -ajanmääritys: leo-pvt, leo-ppp ja ntn-positioning. Kolme uutta skenaariotyyppiä moduulissa src/leo_fusion/, järjestelmäriippumattomia: jokainen satelliittitähdistö on Walker-kuoria, radanelementtijoukkoja tai GNSS-esiasetus, jokainen signaali on kantoaalto, chip-nopeus ja kantoaalto-kohinatiheyden (C/N0) verhokäyrä, jokainen virhebudjetti on nimenomainen yhden sigman arvo, ja nimetyt matalan Maan kiertoradan (LEO) järjestelmät ovat valinnaisia esiasetuksia, kukin omassa tiedostossaan ja lähteet merkittyinä julkisiksi, työpajalähteiksi tai johdetuiksi (Xona Pulsar X1/X5, Iridium Satellite Time and Location (STL), Starlinkin opportunistiset signaalit, CentiSpace, edustava C-kaistan järjestelmä, ATOMICin nollakellon efemeridimalli ja yksi ESA:n Celeste-kiertoratademonstraation esiasetus, jonka työpajasta johdetut parametrit sijaitsevat tiedostossa src/celeste_iod.rs, jotta ne voidaan pidättää).
    • Tyypillä leo-pvt on neljä tilaa: Doppler-paikannus (eräkohtainen pienimmän neliösumman menetelmä etäisyysmuutosnopeudelle kellodriftin ja nopeuden tiloilla, pelkkään Doppleriin perustuva opportunististen signaalien tila, yhden ylilennon rataa pitkin ja sitä vastaan kohtisuora tarkkuus sekä Dopplerin, Dopplerin muutosnopeuden ja nykäyksen verhokäyrä); yhteinen GNSS + LEO -painotettu pienimmän neliösumman menetelmä yhdellä kellolla järjestelmää kohti (järjestelmien välinen bias) tai tunnetulla siirtymällä, mittauskohtaiset sigmat syötteinä ja DOP suhteessa LEO-satelliittien määrään; napa- ja arktinen kattavuus suhteessa leveysasteeseen; sekä LEO-ajansiirto koordinoituun yleisaikaan (UTC) suhteessa C/N0:aan ja vastaanottimen oskillaattoriin IS-GPS-200:n järjestelmäaika–UTC-lausekkeella.
    • leo-ppp: liukuvan ratkaisun tarkka pistepaikannus (PPP) laajennetulla Kalman-suodattimella ionosfääristä vapaalla koodilla ja vaiheella, pelkällä GNSS:llä ja LEO-täydennyksellä, konvergenssiaikoineen ja Monte Carlo -NEES-johdonmukaisuustestillä (normalisoitu estimointivirheen neliö). Mukana toimitettu skenaario antaa 7,4 min neljällä MEO-järjestelmällä sekä 4,8, 3,2, 2,7 ja 2,3 min, kun LEO-satelliitteja on 60, 96, 192 ja 288, Li ym. arvojen 9,6, 7,0, 3,2, 2,1 ja 1,3 min rinnalla (J. Geod. 93:749, 2019) MODELLED-vertailuna suuntauksesta.
    • ntn-positioning: 5G:n ei-maanpäällisen verkon (NTN) paikannus 3GPP:n n256-matkaviestintäsatelliittien S-kaistalla Cramér–Rao-rajasta saapumisajalle ja Dopplerille.
    • Skenaariot: leo-doppler-positioning, starlink-sop-doppler-positioning, meo-leo-fused-pvt, leo-ppp-convergence, ntn-5g-positioning, polar-arctic-leo-coverage, leo-timing-utc (mukana toimitettu) ja celeste-iod-fused-pvt (vain repositoriossa, pidätetty Celeste IOD -esiasetuksen mukana).
    • Kahdeksan matriisin riviä: LEO-Dopplerin verhokäyrä VALIDATED julkaistuja Iridium- (±36 kHz: 35,9 kHz, 5%:n sisällä) ja Xona Pulsar X1 -lukuja (32–34 kHz: 33,6 kHz 97 asteen kuoresta, ilman levenemistä) vasten (tests/leo_doppler_reference.rs); Doppler-paikannus, yhteinen pseudoetäisyyspaikannus, PPP-konvergenssi, NTN-rajat, LEO-ajoitus, napa-alueiden kattavuus ja esiasetukset MODELLED. Kolme tyyppiä ja kahdeksan skenaariotiedostoa. Dokumentaatio: docs/LEO-PNT-FUSION.md.
  • LEO-PNT päästä päähän: tyyppi leo-pnt-chain ja yhteen kytketyt LEO-vaiheet. Yksi matalan Maan kiertoradan (LEO) PNT-järjestelmä (paikannus, navigointi ja ajanmääritys) seurattuna signaalisuunnittelusta käyttäjän sijaintiin, kukin vaihe moottorin oma tyyppi omalla skenaariotaulukollaan, arvot välitetään koodissa (docs/LEO-PNT.md):
    • Tyypissä leo-pass kaista voi nimetä tyypin leo-signal suunnitelman (signal = "xona-x5"): kaista ottaa suunnitelman keskitaajuuden, lähetyskaistanleveyden ja seurattavan komponentin chip-nopeuden, jakaa EIRP:nsä (ekvivalentti isotrooppisesti säteilty teho) suunnitelman komponenttien kesken ja raportoi jokaisen epookin seurattavan komponentin C/N0:n (kantoaalto-kohinatiheys) ja kaistarajoitetun koodinseurannan jitterin (etäisyysvirhe; sitä käyttää myös parin iono_free kohina). Kaista ilman suunnitelmaa antaa saman tulosteen kuin ennen.
    • Tyyppi leo-pnt-chain ajaa: signaali -> ylilento -> navigointiviesti -> fuusioitu yhteisratkaisu tyypillä leo-pvt -> valinnainen leo-ppp. Jokainen paikannusvaiheen LEO-järjestelmä, joka jättää ne asettamatta, saa sin(korkeuskulma)-muotoisen C/N0-suoran, joka on sovitettu ylilentoon, viestin signaali-avaruudessa-etäisyysvirheen (SISRE: sen esitysvirhe ylilennon satelliitin radalla, ilmoitettu radanmääritystermi od_sisre_m neliösumman neliöjuurena) sekä suunnitelman kantoaallon ja chip-nopeuden; tarkan pistepaikannuksen (PPP) tapaukset ottavat SISRE:n. Jokainen luovutus luetellaan arvoineen ja yksikköineen, ja tests/leo_pnt_chain.rs tarkistaa, että kukin vastaa ylävirran tulostetta ja että ylävirran muutokset siirtävät alavirran lukuja. LeoNavmsgScenario::broadcast_sisre on viestin uusi sisääntulopiste.
    • Skenaariot: leo-pnt-end-to-end (yleinen 1080 km:n satelliittitähdistö ja edustava signaali generic-l), xona-pulsar-end-to-end (julkinen X5-signaali), molemmat mukana toimitettuja, sekä valinnainen, vain repositoriossa oleva celeste-iod-end-to-end.
    • Celeste IOD -esiasetukset (kiertoratademonstraatio) ylilennon, viestin ja fuusiopaikannuksen alueilla sijaitsevat nyt yhdessä tiedostossa, src/celeste_iod.rs, jonka build.rs kääntää mukaan vain, jos se on olemassa (konfiguraatiolippu kshana_celeste). Sen viisi skenaariota (scenarios/*celeste-iod*.toml) ovat vain repositoriossa, joten tuon tiedoston ja noiden skenaarioiden poistaminen pidättää jokaisen ESA NAVISP LEO-PNT -työpajassa 2026 esitetyn luvun ilman lähdekoodin muokkausta; testi tests/workshop_preset_isolation.rs tarkistaa, mitkä tiedostot saavat nimetä esiasetuksen tai sisältää sen kaistasuunnitelman lukuja.
    • Jokainen LEO-tyyppi laajennetun raportin ristiviittauksessa, polkukohtaiset rivit lueteltuna vain, kun ajo kulki kyseisen polun (sadeintensiteetti, rakennus, analyysi tai tila, joka ajettiin). Tyypin leo-pvt Doppler-ikkunoihin tulee t_s ja tyypin leo-ppp tapauksiin t_min, joten molemmat animoituvat; tyypit leo-pass ja leo-pnt-chain vievät CZML-, KML-, GeoJSON- ja STK-efemeridejä, ja muut LEO-tyypit kertovat, miksi jokin muoto ei päde.

Matalan Maan kiertoradan navigointi: kestävyys, painopistealueet ja loppukäyttäjäskenaariot

  • LEO-PNT-kestävyys, yksi skenaario kutakin kokeen painopistealuetta ja yksi kutakin loppukäyttäjän toimialaa kohti, sekä docs/LEO-PNT.md yleiskatsauksena jokaiseen LEO-tyyppiin ja -skenaarioon. Jokainen skenaario ajetaan ilman Celeste-dataa, ja jokainen on mukana toimitettu.
    • Tyyppi leo-pass saa osion [spoofer]: harhauttaja väärentää etäisyyden ja etäisyysmuutosnopeuden suhteen sisäisesti johdonmukaisesti väitetyn sijainnin signaalit, ja väitetty sijainti hyppää ja/tai työntyy pois todellisesta alkamishetken jälkeen (LEO-kaistaa kohti sekä MEO-GNSS-signaali), ionosfäärin kanssa tai ilman. Kaksi monitoria toimii ilmoitetulla väärän hälytyksen todennäköisyydellä: Doppler- ja ylilentogeometrian johdonmukaisuus (mitatut etäisyysmuutosnopeudet suhteessa niihin, jotka ennustetaan radoista ja riippumattomasta ennakkosijainnista ja -nopeudesta; ikkunan yli laskettu yleistetyn pienimmän neliösumman khiin neliö GNSS-, LEO- ja kaikilla kanavilla, taajuuslukitussilmukan kohina johdettuna C/N0:sta) sekä kaistojen välinen johdonmukaisuus (kunkin LEO-kaistaparin mallikorjatun geometriavapaan yhdistelmän askel). Tulos antaa tilastot epookkia kohti (joten se animoituu), jokaisen parin ja sen, milloin kukin monitori havaitsee. Rakennuspalikat moduulissa leo_link::spoof. Jos osio puuttuu, tuloste on ennallaan.
    • Jokainen tyypin leo-pass kaistapari raportoi myös vinon kokonaiselektronipitoisuuden (TEC), jonka sen geometriavapaa yhdistelmä palauttaa ylilennon huipulla, sekä tämän arvion koodikohinan sigman (ionosfäärin luotaus). Tämä lisää kaksi kenttää jokaiseen tyypin leo-pass monikaistaiseen tulokseen; mikään olemassa oleva luku ei muutu.
    • Tyypin leo-pvt ajoitustila ottaa asetuksen trace = true: jokainen rivi raportoi silloin aikavirheensä ja ennustetun sigmansa joka epookilla samoilla arvonnoilla, joten rivitilastot eivät muutu ja ajo animoituu ja ketjuuntuu kampanjassa.
    • Kampanja vie nyt jokaisen geometriaa sisältävän jäsenskenaarion (vaiheajot, pyyhkäisyn ja Monte Carlon perusskenaariot, koostetut jäsenet, joiden jaetut arvot on sidottu) omana tiedostojoukkonaan, jäsenen tunniste tiedostonimessä; aiemmin kampanja ei viennyt mitään. Tiedoston docs/INTEROP.md yhteentoimivuustaulukko muuttuu vastaavasti.
    • Kampanjan pyyhkäisyavain voi indeksoida taulukoiden taulukon sijainnin mukaan (system.2.sisre_m).
    • Kestävyysskenaariot: leo-resilience-multiband-diversity (L5-kaistan 50 MHz:n laajakaistahäirintä, jonka teho pyyhkäistään: jokainen L-kaistan signaali putoaa, UHF-, S- ja C-kaistan LEO-signaalit säilyttävät C/N0:nsa), leo-resilience-js-margin (J/S-marginaali vastaanotetusta tehosta: GPS L5, Galileo E5a ja Xona X5 katoavat tasoilla -105, -100 ja -95 dBW, yleinen -135 dBW:n LEO-signaali seuraa vielä tasolla -90 dBW), leo-resilience-spoof-doppler (pelkän GNSS:n Doppler-testi ei havaitse 30 m:n hyppyä, ja kaikkien kanavien testi havaitsee sen 105 s alkamisen jälkeen), leo-resilience-spoof-monitors (neljä harhauttajaa molempia monitoreja vastaan) ja leo-resilience-gnss-jammed-leo-carries (GNSS häiritty, S- ja C-kaistan LEO-kerros seurataan, vastaanottimen autonominen eheyden valvonta pelkällä LEO-kerroksella hälyttää 2 epookissa, kun epookkeja on yhteensä 30).
    • Painopistealueiden skenaariot: leo-focus-ppp-altitude, leo-focus-ntn-bandwidth, leo-focus-iot-eirp, leo-focus-science-iono-sounding, leo-focus-data-services, leo-focus-indoor-uhf, leo-focus-fused-pnt-sisre (kestävyys L-, S- ja C-kaistalla on leo-resilience-multiband-diversity).
    • Toimialakampanjat, kukin animoitu ja vie LEO-ylilentonsa: leo-vertical-autonomous-vehicle, leo-vertical-rail-maritime (mukana toimitetut meri- ja raideskenaariot sekä LEO), leo-vertical-critical-infrastructure-timing, leo-vertical-polar-arctic, leo-vertical-5g-network-timing, leo-vertical-asset-tracking-iot. Yhden rivin tulokset tiedostossa docs/LEO-PNT.md.
    • Kolme matriisin riviä, kaikki MODELLED: Doppler- ja ylilentogeometrian harhautusmonitori, kaistojen välinen harhautusmonitori ja ionosfäärin luotaus. Testi tests/leo_resilience_verticals.rs tarkistaa monitorit (hiljaa ennen alkamishetkeä, Doppler-tilasto hypyn neliöllinen funktio, maassa olevan harhauttajan ionosfäärinen askel ja ei yhtään ionosfääritietoiselta), luotausidentiteetin, ajoitusjäljen rivitilastoja vasten sekä sen, että kampanjan vienti on sama kuin kunkin jäsenen oma.
    • Tyypin leo-pass sivu siirtyy tiedostoon docs/LEO-PASS.md; docs/LEO-PNT.md on yleiskatsaus.

Meri-, tie- ja raidekulkuskenaariot

  • Meri-, tie- ja raideskenaariot. Viisi mukana toimitettua esimerkkiä olemassa olevilla tyypeillä, jotta laivoilla, tieajoneuvoilla ja junilla on kullakin läpikäyty tapaus. Jokainen luku on MODELLED; yhtäkään ei ole validoitu mitattua dataa vasten.
    • scenarios/maritime-strait-jamming.toml (jamming): 50 W:n laajakaistahäirintälähetin 30 m korkeassa mastossa, 30 km:n päässä aluksesta avovesien yli. Keskimääräinen häirintä-signaalisuhde (J/S) noin 48 dB, ja saatavuus laskee arvosta 1,00 arvoon 0,00.
    • scenarios/maritime-port-approach-coast.toml (ins-trn-coast): navigointiluokan inertianavigointijärjestelmä (INS) nopeudella 12 solmua, GNSS menetettynä ja ilman tukea. Se ylittää 10 m, kun 281 s on kulunut, ja 100 m, kun 833 s on kulunut; nämä ovat Kansainvälisen merenkulkujärjestön (IMO) päätöslauselman A.1046(27) satamaanajon ja valtamerialueiden luvut, joita käytetään tässä budjetteina.
    • scenarios/maritime-spoof-position-push.toml (spoof-detect): +2 dB:n, ei kantoaaltoon kohdistettu harhauttaja, joka työntää neljää satelliittia raahatakseen alusta 500 m. Yhdistetty monitori havaitsee sen (pistemäärä 0,70 kynnystä 0,50 vasten) vastaanottimen autonomisella eheyden valvonnalla (RAIM) ja signaalin laadun valvonnalla (SQM); pelkkä tehon valvonta ei havaitse sitä.
    • scenarios/automotive-urban-canyon.toml (gnss-ins): auto kulkee 15 s:n alikulun ja 60 s:n tienvarsihäirintälähettimen katkon läpi, vastaten 1,5 m:n puolikaistabudjettia. Fuusioitu katkon neliöllinen keskivirhe (RMS) on 1,9 m autoluokan mikromekaaniselle (MEMS) yksikölle ja 0,7 m taktisen luokan vertailuyksikölle; vapaasti käyvänä MEMS-yksikkö ajautuu arvoon 850,8 m.
    • scenarios/rail-tunnel-coast.toml (ins-trn-coast): taktisen luokan INS junassa nopeudella 160 km/h tunnelissa. Se ylittää 2 m (raiteen erottelu), kun 35,8 s on kulunut, noin 1,6 km sisällä, ja 20 m, kun 107,3 s on kulunut. Tämä on pelkkä INS: moottorilla ei ole matkamittarimallia, joten se on pessimistinen raja. README:n skenaariotiedostojen lukumäärä muuttuu luvusta 77 lukuun 82. Kaikki viisi on liitetty mukaan komentoa kshana example varten ja ne on lueteltu selaimen kokeilualustassa.

Model Context Protocol -palvelin

  • Model Context Protocol (MCP) -palvelin ulottuu jokaiseen tyyppiin ja ajon jokaiseen näkymään: seitsemän uutta työkalua, yhteensä neljätoista. Työkalu run_scenario ohjasi jo jokaiseen tyyppiin; agentilta puuttui keino saada tyypin kelvollinen skenaario ja ne kolme tulostetta, jotka komentorivi kirjoittaa tuloksen viereen. Uudet työkalut:

    • Työkalut list_example_scenarios ja get_example_scenario tarjoavat mukana toimitetut vertailuskenaariot (taulukko kshana example), kukin tyyppinsä ja oman otsakkeensa ensimmäisen lauseen kanssa, tavu tavulta tiedosto hakemistossa scenarios/. Skenaario, joka on repositoriossa mutta ei mukana toimitettu, hylätään syyn kera. Jokaisella tyypillä paitsi lunar-llr-datum (jonka dataosio toimitetaan vain repositorion mukana) on vähintään yksi esimerkki.
    • Työkalu report_scenario palauttaa ajon raportin JSON-muodossa (JavaScript Object Notation) tai tulostettavana HTML-sivuna (HyperText Markup Language) (docs/REPORTS.md).
    • Työkalu animate_scenario palauttaa ajon aikasarjan animoituna SVG-piirroksena (Scalable Vector Graphics), HTML-soittimena tai numeroituina kuvina, JSON-yhteenvedon jälkeen siitä, mitä piirrettiin (docs/ANIMATION.md). Vastaus sisältää enintään 120 kuvaa; komentorivi kirjoittaa minkä tahansa pituisen.
    • Työkalut list_export_formats, export_interop ja import_route tarjoavat yhteentoimivuusviennit ja GeoJSON-reittituonnin (docs/INTEROP.md): CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, STK (Systems Tool Kit) -efemeridi .e ja SigMF (Signal Metadata Format), tiedostojen JSON-hakemistolla (tiedostopääte, koko ja SHA-256, 256-bittinen Secure Hash Algorithm -tiiviste) ja binäärisellä SigMF-näytetiedostolla base64-muodossa.

    Kirjasto saa oletuksena pois päältä olevan ominaisuuden bundled-scenarios, joka tarjoaa vertailuskenaariotaulukon nimellä kshana::bundled_scenarios; vain MCP-palvelin ottaa sen käyttöön, joten Python-wheel ja WebAssembly-moduuli eivät edelleenkään sisällä skenaarioiden tekstiä. Tutkimussarjat (--study) pysyvät vain komentorivillä, koska sarja nimeää levyllä olevia tiedostoja eikä palvelin lue mitään. Edestakaiset testit ajavat jokaisen uuden työkalun mukana toimitetuilla skenaarioilla ja tarkistavat moottorin luvut: spektri, aurinkokunta, Kuun ja Europan ympärillä olevat satelliittitähdistöt, kampanjan pyyhkäisy sekä matalan Maan kiertoradan (LEO) signaali-, ylilento-, navigointiviesti-, fuusiopaikannus-, tarkan pistepaikannuksen, ei-maanpäällisen verkon ja päästä päähän -tyypit. Jokainen pinta, joka ilmoittaa MCP-työkalujen lukumäärän tai luettelee työkalut, sanoo nyt neljätoista, paitsi hakemiston web/ alla oleva kokeilualustasivu, joka korvataan sivustolla.

kshana.dev, Kshana Studio ja README

  • Uudistettu kshana.dev. Yksittäinen kokeilualustasivu on korvattu monisivuisella sivustolla: Etusivu, Tehtävät, Ominaisuudet, Todisteet, Kehittäjät, Versiot ja Dokumentaatio, ja Kshana Studio on yhden napsautuksen päässä. Jokainen sen kaavio, kartta ja luku on tämän julkaisun moottorin tallennettu ajo, skenaarion ja linkin kera, joka avaa saman ajon uudelleen Studiossa; sivuston rakennus hylkää tallenteen, jonka on tehnyt toinen moottorin commit. Dokumentaatiosivut generoidaan repositorion hakemistosta docs/ ja asennusvaihtoehdot sen kanavista. Fontit ja skriptikirjastot palvelee kshana.dev itse, joten mikään sivu ei pyydä mitään kolmannen osapuolen isännältä. Vanhat osoitteet (/#playground, /#ledger, jakolinkit /#s=<scenario>, upotuslinkit /?embed=1&… ja loput) ohjautuvat uuteen paikkaansa, ja tuntemattomasta osoitteesta näytetään sivu, jonka virhekoodi on 404.
  • Kshana Studio, kojelauta jokaiselle ominaisuudelle. Studio avautuu aloitusnäyttöön, jossa on aluelaatat ja hyviä ensimmäisiä ajoja, ja vie sitten ajon viiden numeroidun vaiheen läpi: Valitse skenaario, Aseta sen parametrit, Aja moottori paikallisesti selaimessa, Lue tulokset (ensin keskeiset luvut, joista jokaisella on merkki PASS tai FAIL, kun ajo ilmoittaa kynnyksen, sitten paneelit) ja Jaa tai vie. Yksi hakukenttä löytää skenaariot, alueet ja niiden sisällä olevat kentät ja hyppää säätimeen; ajoja voi kiinnittää ja verrata; leipäpolku kertoo, missä olet; puhelimella vaiheista tulee vaihepalkki. Jokaisella skenaariotyypillä on oma näkymänsä, mukaan lukien spektrin vesiputous, aurinkokunta, satelliittitähdistön kattavuus, kampanjat, animaatio, ajoraportti, yhteentoimivuusviennit ja matalan Maan kiertoradan ketju. Syvälinkki (?scenario=…&tab=…) avaa saman ajon nimetyssä paneelissa.
  • Tutkimus ja viittaaminen. Todisteet-sivu luettelee viisi Kshana-artikkelia arXivissa (2606,22054, 2606,24210, 2607,02566, 2607,05415 ja 2607,06212), kustakin yhteenvedon, tämän moottorin laskeman kuvion, sen toistavan komennon, Studio-linkin ja BibTeXin, sekä ohjeen ohjelmiston viittaamiseen. README saa saman Tutkimus-osion.
  • Julkinen sivu tuotteelle Kshana Pro. Tiedosto docs/PRO.md ja sivuston Versiot-sivu kertovat, mitä suljettu Pro-kerros lisää samaan moottoriin (suunnitteluoptimoija, epävarmuus ja herkkyys, tehtäväkansio, kampanjan seuranta, spektrin rinnakkaiselo, paikallisesti ajettava työpalvelu, vaatimusten jäljitettävyys), mitä kukin tuottaa ja mitä se ei tee. Jokainen sivuston näyttämä Pro-luku on ilmoitettu tuossa julkisessa sivussa. Pro ei lisää fysikaalista mallia, ja avoin moottori pysyy kokonaisena ja ilmaisena.
  • Uudistettu README. Lyhyet osiot, yksi kuva osiota kohti, Kshana-tunnus, kaksi merkkiriviä, generoidut arkkitehtuuri-, skenaariovirta-, matalan Maan kiertoradan ketju- ja verifiointikuvat (tools/gen_readme_assets.py, joka epäonnistuu vanhentuneen kuvan tapauksessa) sekä Studio-kuvakaappaukset, jotka tools/capture_studio_shots.mjs on ottanut käynnissä olevasta Studiosta. crates.io-, PyPI-, npm- ja MCP-palvelimen README:t noudattavat samaa rakennetta. Pitkä viiteaineisto on taitettu tai siirretty hakemistoon docs/.

Muutettu#

  • Tiedosto <scenario>.report.html on nyt laajennettu ajoraportti, joka on kuvattu kohdassa Lisätty, ja komentorivin rivi wrote … nimeää myös tiedoston <scenario>.report.json. Sen korvaama yksisivuinen tuloskortti on ennallaan nimellä RunOutput::html_report(), jonka Python- ja WebAssembly-sidokset edelleen palauttavat. Funktio OracleKind::modelled_reason() paljastaa lauseen, jonka docs/MODELLED-RATIONALE.md tulostaa jokaiselle riville, jonka tunnus on MODELLED; kyseinen dokumentti on ennallaan.
  • README kertoo, mille Kshana Pro rakentuu. Versiot-osio ja Kshana Pro -rivi kohdassa ”Support & professional services” kertovat nyt, mitä Pron mallipohjainen järjestelmäsuunnittelu (MBSE) ja ohjelmatyökalut tekevät ja mitä avoimen moottorin julkaistuja tulosteita ne lukevat (kunkin ajon result.json ja report.json, skenaariotiedosto, kenttäyksikköskeema ja varmennusmatriisin tunnisteet) sekä minkä varaan kellojen digitaaliset kaksoset, vaihtoehtotutkimukset ja todistepaketit avoimessa moottorissa nojaavat. Vain sanamuoto: mikään moottorin tuloste tai julkaistu luku ei muutu.
  • Yhteensopivuus. Julkinen enum navsignal::Modulation saa variantin Mboc, mikä on rikkova muutos kutsujalle, joka täsmäyttää sen tyhjentävästi. Tyypin ephemeris sarakkeet gcrs_r_m ja gcrs_v_m_s muuttuvat (katso ”Julkaistujen lukujen tarkistukset”). Ajo toistetaan edelleen sillä moottoriversiolla, joka sen teki.

Korjattu#

  • Työkalu export_table_csv MCP-palvelimella nimesi neljä tyyppiä ainoiksi, joilla on CSV-taulukko (pilkuin erotetut arvot); kuusi julkaisee sellaisen. Työkalu palautti aina taulukon tyypille telecom-timing ja tyypille leo-navmsg (sen analyysi encode-decode viestimallilla kepler16 tai kepler-rac), mutta sen kuvaus, kieltäytymisviesti ja tyypit luetteloivat dokumentit jättivät molemmat pois, joten agentille kerrottiin, ettei kannata pyytää. Ne on nyt nimetty, ja edestakainen testi hakee molemmat taulukot.

  • Matalan Maan kiertoradan (LEO) navigointiviestin kehys ei ollut samat tavut jokaisella alustalla eikä jokaisessa saman alustan koontiversiossa. Skenaario scenarios/leo-navmsg-encode-decode.toml koodasi kehyksen, jonka syklinen toistotarkistus (CRC) oli 0x110315 julkaisukoonnissa aarch64 macOS -alustalla, 0x898BD8 saman lähdekoodin debug-koonnissa samalla koneella ja 0x6A82D9 WebAssembly (WASM) -koonnissa; leo-navmsg-celeste-iod.toml antoi natiivisti 0x6EDB2D, mutta selaimessa 0xC6E4F0. Kolme syytä, kukin jäljitetty ensimmäiseen eroavaan arvoon:

    • Alustojen välillä. Totuusrata oli bitti bitiltä identtinen molemmilla; sovituksen lähtöpiste ei ollut. Funktio truth::state_to_elements ottaa oskuloivan kaltevuuden funktiolta acos ja perigeumin argumentin funktiolta atan2, ja nämä kaksi matematiikkakirjastoa pyöristävät ne eri tavoin viimeisessä numerossa (yli 20 000 argumentin ne ovat eri mieltä 781 sinin, 858 kosinin, 1 931 eksponenttifunktion ja 1 899 kahden argumentin arkustangentin kohdalla).
    • Koontiprofiilien välillä. Optimoitu koonti macOS:llä yhdistää saman argumentin sinin ja kosinin yhdeksi kutsuksi järjestelmän yhdistettyyn rutiiniin, ja sen sini ei ole yksinäisen kutsun sin tulos 379 argumentilla 200 000 argumentista; optimoimaton koonti tekee kaksi kutsua. Tyyppi ottaa sinin ja kosinin yhdessä kolmessatoista paikassa.
    • Kellossa. Kirjaston rand_distr normaalijakaumanäytteistäjä kutsuu isännän funktioita exp ja ln kahdessa harvinaisessa haarassaan: neljästä miljoonasta siemenluvulla arvotusta otoksesta kolme erosi viimeisessä bitissä natiivin ja WASM-koonnin välillä.

    Levenberg–Marquardt-sovitus, joka tällä kaarella pysähtyy 80 iteraation rajaansa eikä minimiin, kuljettaa yhden viimeisen numeron yksikön eri kvantisoituihin kenttiin. Tyyppi laskee nyt jokaisen transkendenttifunktion uuden moduulin src/portable_math.rs kautta, joka kutsuu puhtaasti Rustilla kirjoitettua kirjastoa libm (jo riippuvuuspuussa, nyt nimetty tiedostossa Cargo.toml), käännettynä yhdestä lähteestä jokaiselle kohteelle eikä optimoijan uudelleenkirjoittamana kirjastokutsuna: leo_navmsg::{truth, fit, elements, codec, sisre, services} ja skenaariokoodi. Kokonaislukupotenssit tällä polulla on kirjoitettu auki neliöinti-ja-kertominen-menetelmäksi, koska funktion f64::powi tarkkuutta ei ole määritelty, ja totuuskello arpoo normaalijakautuneet poikkeamansa funktiosta portable_math::standard_normal (Marsaglian napamenetelmä generaattorin raakatulosteelle). Yhteiset rutiinit, joiden kautta totuusrata integroidaan, on kirjoitettu kerran, matematiikkakirjastosta riippumattomina, ja olemassa olevan sisääntulopisteen rinnalla on paketin sisäinen sisääntulopiste _portable: pallofunktiokehitelmän kiihtyvyys, vyöhyke- ja ilmanvastuskiihtyvyydet, J2:n sekulaarinopeudet ja Klobucharin viive. Olemassa olevat sisääntulopisteet ovat ennallaan viimeistä bittiä myöten, joten minkään muun tyypin luku ei muutu. Testi leo_navmsg::tests::the_encoded_frame_is_the_same_bytes_on_every_platform kiinnittää koko 171-tavuisen kehyksen ja yhden tarkistusarvon efemeridimallia kohti tavallisessa (optimoimattomassa) testiprofiilissa jokaisella alustalla ilman perustason isäntäkoneen porttia; testi the_kind_never_calls_the_host_mathematics_library lukee tyypin lähteet levyltä ja epäonnistuu, jos löytyy sisäänrakennettu transkendenttikutsu, näytteistäjä rand_distr tai kutsu moduuliin, jota ei ole tarkistettu. Muutoksen jälkeen debug-koonti, julkaisukoonti ja WASM-koonti tuottavat tavu tavulta identtiset tulosasiakirjat kaikille viidelle skenaariolle (tyyppi leo-navmsg). Tämä muuttaa lukuja, ja se kirjataan tähän tarkistuksena. Tyyppi leo-navmsg on uusi tässä julkaisussa, joten mikään aiemmassa julkaisussa julkaistu ei muutu, mutta jokainen tyypin leo-navmsg luku muuttuu, sekä natiivisti että WASM-koonnissa, ja sen mukana tyypin leo-pnt-chain vaihe navmsg: rataluvut siksi, että sovitus alkaa nyt siirrettävistä elementeistä, kelloluvut siksi, että totuuskello on saman prosessin toinen realisaatio. Tiedosto docs/LEO-NAVMSG.md generoidaan uudelleen uusista tuloksista; sen julkaistu tarkistusarvo koodaus- ja purkuskenaariolle oli 0x110315 ja on 0x19105F (sijainti on enintään 1,126 mm tarkasta viestistä, kun se oli 0,665 mm, kello enintään 0,185 mm, kun se oli 0,451 mm). Muutosten suuruus millimetriä pienemmissä luvuissa on sovituksen herkkyyttä, ei virhe kummassakaan joukossa: sovitus on ennallaan ja pysähtyy edelleen iteraatiorajaansa.

  • Siemenluvulla toteutettu uudelleenotanta arpoi eri indeksit 32-bittisellä kohteella. Kutsu Rng::gen_range tyypille usize ottaa generaattorilta 64 bittiä 64-bittisellä isännällä ja 32 bittiä 32-bittisellä, joten sama siemenluku antoi muita indeksejä ja jätti virran muualle WASM-koonnissa. Kolme paikkaa arpoi näin: prosenttipisteiden bootstrap-menetelmät kohdassa eval_stats (bootstrap_ci, bootstrap_auc_ci), sekoitus ennen jokaista koulutuskierrosta kohdassa impairment_ml ja permutaatiotesti kohdassa impairment_study. Ne arpovat nyt funktion portable_math::uniform_index kautta, joka ottaa näytteen aina tyyppinä u64: täsmälleen kuten 64-bittinen isäntä teki, joten mikään natiiviluku ei muutu. Tämä muuttaa WASM-paketin julkaistuja lukuja, ja se kirjataan tähän tarkistuksena: käyrän alle jäävän pinta-alan bootstrap-luottamusväli tyypille quantum-anomaly-detect (quantum_auc_ci, trade.foms[0].ci95) oli selaimessa [0.9901265, 0.9938305] ja on nyt natiivi [0.99035875, 0.993861].

  • STK-efemeridin tiedostonimet liikkujien tunnuksista. Liikkujan tunnus, joka sisälsi merkin / tai välilyönnin (satelliittitähdistön kuori ja satelliitti, Pulsar inclined/S1-0163), sai komentorivin kaatumaan paniikkiin komennolla --export stk; kukin tunnus kulkee nyt turvallisen tiedostonosan läpi (kirjaimet, numerot, -, _).

  • TEME→GCRS-nutaation etumerkki, kuvattu edellä kohdassa ”Julkaistujen lukujen tarkistukset”, koska se muuttaa julkaistua tulostetta.

0.28.0 - 2026-09-26#

Lisätty#

  • Skenaariotyyppi slot-timing (src/slot_timing.rs): sekunnit, kunnes vapaasti käyvä kello poistuu aikaindeksoidun reitityksen tai tehtävänannon aikaikkunan suoja-ajasta, jokainen vaikuttava termi sillä hetkellä dominoivan nimettynä, viimeisestä korjauksesta jäljellä oleva aika ja suurin korjausväli, jonka sisällä kello pysyy, vähennettynä korjauksen viiveellä. Kello tulee luokan oletuksesta, telealan ajoituksen datalehden esiasetuksesta, rivinsisäisestä datalehdestä (Allanin poikkeaman maksimit, ikääntyminen, lämpötilakerroin) tai mitatusta vaihetallenteesta. Ylitys, joka on pidempi kuin pisin keskiarvoistusaika, jota lähde tukee, merkitään ekstrapoloiduksi. Mukana toimitettu esimerkki: slot-timing-ocxo-leo. Katso docs/SLOT-TIMING.md.
  • Mitattu punaisen kohinan lattia. Vaihetallenteen päällekkäinen Allanin poikkeama sovitetaan painotetulla pienimmän neliösumman menetelmällä valkoisen vaihekohinan ja IEEE Std 1139 -taajuusmodulaatiokohinan kannassa (slot_timing::fit_weighted), kukin piste painotettuna vastaavilla vapausasteillaan, jotta holdover-vastaus voi perustua kellon omaan lattiaan eikä luokkaoletukseen. Painottamaton sovitus asetti valkoisen kohinan testitallenteelle harhaisen flicker-lattian ja lyhensi ylitystä, joka oli 2 000 s, 30 %.
  • Holdout-validointi holdover-inversiolle oikealla kellolla (tests/slot_timing_cs5071a_holdout.rs): kun sovitus tehtiin 5071A-cesiumin ja vetymaserin vertailutallenteen ensimmäiseen kolmannekseen, ennustetut yhden sigman ylitykset kuudella kynnyksellä välillä 0,5–2,5 ns osuvat välille 0,84–1,03 toisella kahdella kolmanneksella mitatuista ylityksistä, kun kynnys (hyväksymiskriteeri) oli 1,5 ja se kiinnitettiin ennen testin ensimmäistä ajoa. Verrokki (yhden sekunnin Allanin poikkeama luettuna valkoisena kohinana) ohittaa kohteen noin kertoimella 1 000 ja epäonnistuu kynnyksessä. Uusi kirjanpitorivi, jonka taso on VALIDATED; työnkulku realdata-clock ajaa sen nyt.
  • Sama ennuste oikealla kideoskillaattorilla (tests/slot_timing_ocxo_holdout.rs, scripts/fetch_ocxo.sh): mitatulla uunistabiloidulla kideoskillaattorilla holdout-ennuste on konservatiivinen, välillä 0,59–0,70 mitatusta ylityksestä eikä koskaan myöhemmin, ja enimmäkseen kynnyksen 1,5 ulkopuolella, koska tuon oskillaattorin kohinalattia puolittui 5.5 tunnin tallenteen aikana; otoksen sisällä sovitettuna se osuu välille 0,98–1,17. Kideoskillaattoritapaus ei ole validoitu ja pysyy tasolla MODELLED. Ajo paljasti myös puuttuvan termin: kiteen taajuus vaeltaa, joten malli kantaa nyt mukanaan korjauksen hetkellä tunnetun taajuuden epävarmuuden (fix_frequency_sigma); ilman sitä ennuste oli optimistinen jopa 2,5×.
  • Sama ennuste kiertoradalla olevilla atomikelloilla (tests/slot_timing_igs_holdout.rs, scripts/fetch_igs_clocks.sh): 14 päivää International GNSS Servicen lopullisia kelloja GPS Block IIF -satelliiteille, protokolla kirjattu ennen datan lataamista. Kahdeksan kymmenestä satelliitista osuu kynnyksen 1,5 sisään; G25 ja G30 ennustavat ylitykset jopa noin kaksi kertaa niin myöhään kuin mitattu. Protokolla vaatii, että jokainen satelliitti läpäisee, joten kiertoradan tapaus ei ole validoitu ja pysyy tasolla MODELLED; tulos on lukittu.
  • Lämpötilakompensoidun kideoskillaattorin (TCXO), uunistabiloidun kideoskillaattorin (OCXO) ja rubidiumatomitaajuusnormaalin (RAFS) kelloluokat (ClockClass::Tcxo, Ocxo, Rafs), osat, joita kaupallinen piensatelliittialusta tai maa-asemayhdyskäytävä käyttää, kukin viittaa yhteen julkiseen datalehteen (ClockClass::source). Lisätty ClockClass::ALL, id ja from_id. Tyypin quantum-trade asetus baseline_clock_class hyväksyy kolme uutta tunnusta. Varianttien lisääminen julkiseen enumiin on rikkova muutos kutsujalle, joka täsmäyttää sen tyhjentävästi.
  • Ajoituksen suojaustaso kiertoradalla olevalle vastaanottimelle (src/orbital_timing.rs, tyypin slot-timing valinnainen osio spoofing): kuinka kauan maassa oleva harhauttaja ylettää matalan Maan kiertoradan satelliittiin yhdellä ylilennolla, vetovaikutus, jonka harhauttaja ilmoitetulla enimmäisrampinopeudella kerryttää ennen kuin satelliitti poistuu sen ulottuvilta tai riippumaton tarkistus ajetaan, ja onko kukin maayhteyden tai ristiinlinkin tarkistus riippumaton kyseisestä harhauttajasta. Sievenee täsmälleen muotoon tpl::timing_protection_level_ns kellolle, jolla ei ole flicker-, valkoista vaihe- tai satunnaiskulkukohinaa. MODELLED.
  • Kolme huomautusta: docs/SLOT-TIMING.md (sisältäen sen, minkä ajautumismittarin mukaan aikaikkuna tulee hyväksyä: suurin absoluuttinen aikavirhe, ei suurin aikavälivirhe tai aikapoikkeama, ja miksi), docs/DECEIVED-TIME.md (harhautetulla ajalla annettu allekirjoitettu komento johtaa silti väärään reititykseen) ja docs/DEPLOYMENT-TARGETS.md (missä Kshana toimii; lentoydintä ympäristöön no_std ei tarjota).

0.27.4 - 2026-09-26#

Julkaisu v0.27.3 saavutti crates.io:n (kshana ja kshana-mcp) ja PyPI:n, ja pysähtyi sitten npm:ään, joten npm, ghcr.io:n MCP-kuva, MCP-rekisteri, JetBrains Marketplace ja kshana.dev eivät koskaan saaneet sitä. Julkaisu 0.27.4 sisältää saman moottorin, alla kuvatun julkaisukorjauksen kanssa, jokaiseen kanavaan.

Korjattu#

  • npm-julkaisuvaihe nimeää tar-paketin eksplisiittisellä polulla. npm lukee paljaan npm-dist/kshana-0.27.3.tgz GitHubin lyhennemerkintänä owner/repo, joten julkaisun v0.27.3 npm-työ yritti kloonata github.com/npm-dist/kshana-0.27.3.tgz ja epäonnistui virheeseen ”Permission denied (publickey)”. Itse tar-paketti oli rakennettu ja attestoitu. Vaihe julkaisee nyt ./npm-dist/*.tgz. Kaikki npm:n jälkeen julkaisujärjestyksessä (MCP-kuva, JetBrains-liitännäinen, kanavapariteettitarkistus ja sivusto) ohitettiin suunnitellusti.

Muutettu#

  • Telealan ajoituksen yksikkökatalogit ja tyypin gnss-ins yksikkökatalogit on vapautettu kopioi-liitä-tunnistuksesta, saman käytännön ja perustelutestin mukaisesti kuin muut katalogit. SonarCloudin laatuportti oli muuttunut punaiseksi uuden koodin toistuvuuden vuoksi (4,0 % vastaan 3 %), ja jokainen toistuva lohko oli yksikkörivi tai ITU-T-maskin merkintä.

0.27.3 - 2026-09-25#

Lisätty#

  • scenarios/small-uas-jammed-nav.toml: kuinka kauan pienen dronen navigointi kestää GNSS:n häirinnän jälkeen. Se ajaa lentokontrolleriluokan mikromekaanista (MEMS) inertiayksikköä, Bosch BMI088, taktisen luokan yksikköä vastaan. GNSS-signaali (Global Navigation Satellite System) on nimellinen 100 s ajan, sitten estetty 60 s ajan (tiedosto jamming-demo.toml näyttää, miksi lähellä oleva häirintälähetin tekee niin). BMI088:n biasit ovat käynnistyskalibroinnin jälkeen jäävät jäännökset, otettu datalehden lämpötilakertoimista (BST-BMI088-DS000-19 rev 1,9): 0,015 °/s kelviniä kohti gyrolle ja < 0,2 mg kelviniä kohti kiihtyvyysanturille. Tiedostoon on merkitty kaksi oletusta: 10 K:n lämpeneminen kalibroinnin jälkeen ja jatkuva lämpeneminen 1 K minuutissa lennon aikana. Lennon aikainen ajautuma on virhe, jota suodin ei ehdi oppia ennen häirinnän alkua, ja se päättää inertiakulun. Jokainen luku on mallinnettu; sen validointi vaatii lentolokeja häirityltä ympäristöltä. Komento kshana example small-uas-jammed-nav tulostaa sen.

  • Jokainen tyypin gnss-ins anturi voi asettaa oman suodattimen priorinsa ([imu_quantum.filter_prior] tai [imu_classical.filter_prior], arvoilla sigma_accel_bias ja sigma_gyro_bias). Oletus on ennallaan, joten jokainen olemassa oleva skenaario antaa saman tuloksen. Kuluttajaluokan yksikön gyron jäännösbias on noin 26 sigmaa taktisen luokan oletuksen ulkopuolella, jolloin suodin ei koskaan oppisi sitä. Prior, joka ei ole äärellinen ja positiivinen, hylätään, ja tulos kaiuttaa priorin, kun se on asetettu.

  • Komento kshana example [<name>] antaa rekisterikäyttäjälle ajettavan skenaarion. Käyttäjällä, joka asensi komennolla cargo install kshana, on suoritettava tiedosto mutta ei hakemistoa scenarios/, joten ensimmäinen jokaisen pikaoppaan antama komento epäonnistui. Komentorivikäyttöliittymä (CLI) sisältää nyt 75 vertailuskenaariota, jotka toimivat sellaisinaan, tavu tavulta käännettynä mukaan hakemistosta scenarios/ (src/bundled_scenarios.rs; taulukko on CLI-binäärissä, joten Python-wheel ja WebAssembly-moduuli eivät kasva). Komento kshana example luettelee ne; komento kshana example clock-holdover > clock-holdover.toml kirjoittaa yhden. Kaksi muuta tiedostoa ovat vain repositoriossa: lunar-llr-datum lukee arkistoitua Kuun laseretäisyysmittausdataa, joka toimitetaan vain repositorion mukana, ja quantum-pnt-demonstrator.suite on tutkimusmanifesti, joka ajaa kolme sisarustiedostoa komennolla --study. Kumman tahansa pyytäminen kertoo syyn ja päättyy koodiin 2 sen sijaan, että tulostaisi jotain, mitä ei voi ajaa sellaisenaan. Testi tests/cli_first_run.rs pitää taulukon ja hakemiston yhteneväisinä molempiin suuntiin, joten uusi skenaariotiedosto, joka ei ole mukana eikä nimetty vain repositorioon kuuluvaksi, epäonnistuu.

  • Jokainen laatumittari kello-, rata-, hybridi- tai fuusiotuloksessa kertoo nyt, onko se VALIDATED vai MODELLED, itse tuloksessa. Tulosasiakirjaan tulee lohko figure_tiers, aina sen viimeinen avain. Se luettelee jokaisen raportoidun luvun (esimerkiksi quantum.fom.timing_p95_ns) tasoineen — VALIDATED tarkoittaa tarkistettua riippumatonta ulkoista oraakkelia vasten, MODELLED tarkoittaa ensimmäisistä periaatteista johdettua mallia, jota testataan sisäisesti — sekä varmennusmatriisin rivin, josta taso luetaan. Taso tulee tiedostosta src/verification.rs tiedoston src/fom_label.rs kautta, joten ei ole toista taulukkoa, joka voisi ajautua epäsynkroniaan. Ennen tätä sanat ”validoitu” ja ”mallinnettu” esiintyivät nolla kertaa kello-holdover-tuloksessa, eikä raa'an JSONin (JavaScript Object Notation) lukijalla ollut keinoa erottaa näitä kahta toisistaan. Tyyppien hybrid ja fusion sijaintiluvuilla ei ole omistavaa matriisiriviä, joten ne luetellaan kohdassa untiered eikä niille anneta tasoa. Lohko ei sisällä lukuja. Sen additiivisuus on todistettu, ei oletettu: sen poistaminen palauttaa muutosta edeltävän asiakirjan tavu tavulta kaikille viidelle tyypille (moottoritesti), ja molemmat golden-testikehykset (tests/registry_golden.rs, tests/cross_platform_golden.rs) poistavat nyt täsmälleen tämän avaimen, ja vain silloin kun se on viimeinen, ja laskevat sitten loppuosan tiivisteen verrattuna muuttumattomiin jäädytettyihin vakioihinsa. Kunkin testikehyksen luettelo kiinnittää, mitkä skenaariot saavat sisältää lohkon, joten poikkeus ei voi hiljaa laajeta.

  • Tyyppi telecom-timing vastaa ajoitusinsinöörin yksiköissä: aikavirhe, suurin aikavälivirhe (MTIE) ja aikapoikkeama (TDEV), kullekin PASS tai FAIL ja marginaali Kansainvälisen televiestintäliiton telealan standardointisektorin (ITU-T) maskeja vasten. Maskit on litteroitu voimassa olevista painoksista: G.8272 (07/2025) ensisijaisen vertailuaikakellon (PRTC) luokille A ja B, G.8272.1 (2024) Amd. 1 (07/2025) parannetulle PRTC:lle lukitussa tilassa ja holdover-tilassa (mukaan lukien sen aikavirheen verhokäyrä, joka nousee arvosta 30 ns arvoon 100 ns holdover-jakson aikana, jonka määrää se, kuinka kauan kello oli lukittuna), G.8273.2 (2023) Amd. 2 (11/2025) telealan rajakelloille ja aikaorjakelloille, luokat A–D, sekä G.8271.1 (2022) Amd. 3 (05/2025) verkon rajoille vertailupisteessä C. Jokainen merkintä, jonka nuo suositukset jättävät ”jatkotutkimukseen”, puuttuu eikä sitä ole arvioitu, ja docs/TELECOM-TIMING.md luettelee jokaisen luvun taulukkonsa tai kohtansa kera sekä jokaisen pois jätetyn kohdan. Raportti antaa myös ajan, jossa kukin aikavirhebudjetti ylittyy: oletuksena ePRTC:n holdover-oletus 100 ns, verkon holdover-varaus 400 ns, pisteen C raja 1 100 ns ja luokan 4 päästä päähän -vaatimus 1,5 mikrosekuntia.

    Syöte on joko synteettinen holdover tai oma sarja. Synteettinen käyttää yhtä neljästä oskillaattorin esiasetuksesta (uunistabiloitu kideoskillaattori, rubidiumnormaali, cesiumnormaali ja sirumittakaavan atomikello), kukin nimetyn Microchip-datalehden vakaus-, ikääntymis- ja lämpötilalukuineen. Se, miten nämä luvut muuttuvat valkoiseksi, flicker- ja satunnaiskulkutaajuuskohinaksi, ikääntymiseksi ja lämpötilatermiksi, ilmoitetaan jokaisessa raportissa ja merkitään MODELLED. Oma sarja koostuu pareista [time_s, time_error_ns], joko riviin upotettuna (näin se toimii selaimessa) tai natiiveissa koonneissa pilkuin erotettujen arvojen tiedostosta. MTIE/TDEV-taulukko, jonka vieressä on jokaisen valitun maskin raja, kirjoitetaan ajon CSV-artefaktina.

    Skenaario scenarios/telecom-prtc-holdover-24h.toml on 24 tunnin rubidium-holdover, jossa on ikääntyminen, flicker ja päivittäinen lämpötilasykli: sen suurin aikavirhe on 603,2 ns, se ylittää 100 ns, kun menetyksestä on kulunut 8 206 s, ja pysyy koko päivän 1,5 mikrosekunnin sisällä, ja se epäonnistuu parannetun PRTC:n holdover-verhokäyrässä, kuten ei-cesiumluokan kellon kuuluukin. Skenaario scenarios/telecom-tie-ingest.toml näyttää rivinsisäisen syötteen. Tyypin raportoimat MTIE ja TDEV on tarkistettu allantools-pakettia vasten commitoidulla 2 048 näytteen holdover-sarjalla, täsmälleen MTIE:lle ja tarkkuudella 1.1e-15 TDEV:lle, joten matriisiin tulee yksi rivi, jonka taso on VALIDATED, ja kaksi riviä, joiden taso on MODELLED (maskin litterointi ja esiasetukset), ja se on nyt 171 riviä — 65 VALIDATED, 102 MODELLED, 4 PARTNER. Kenttäyksiköiden kattavuus: aiemmin 60 tyyppiä kaikkiaan 61 tyypistä, nyt 61 tyyppiä kaikkiaan 62 tyypistä, ja kuvattuja kenttiä aiemmin 1 742, nyt 1 788. Tyyppi on uusi ja additiivinen: mikään olemassa oleva skenaario, kiinnitys tai julkaistu luku ei muutu.

  • Kokeilualusta ajaa moottoria taustalla Web Workerissa, joten hidas skenaario ei enää jäädytä sivua. Tiedosto web/engine-worker.mjs isännöi WebAssembly-moottoria, ja web/engine.mjs välittää sille jokaisen skenaarion suorituksen — ajot, parametripyyhkäisyt ja SP3 / OMM / OEM / CSV -viennit. Ajo, joka kestää yli 150 ms, näyttää varattu-tilan (Käynnistä poissa käytöstä, ”Käynnissä… N s”) ja Peruuta-painikkeen, joka lopettaa ja käynnistää työntekijän uudelleen; selain, joka ei voi käynnistää moduulityöntekijää, palaa vanhaan pääsäiepolkuun. Skenaario cislunar-arc-recovery, joka jätettiin pois luettelosta, koska se jäädytti sivun, on takaisin siinä, merkittynä hitaaksi: se kestää noin 13 s Chromessa (neljä moottorikutsua, kukin noin 3 s), jona aikana sivu pysyy reagoivana.

  • Jokainen tyypin cislunar-observability raportoitu suure kantaa nyt yksikön, alkuperäluokan ja määritelmän — viimeinen tyyppi paketin laajuisella poikkeusluettelolla yhtä lukuun ottamatta. Kaikki JULKAISTUN asiakirjan 41 numeerista kenttää on kuvattu, joten kenttäyksiköiden kattavuus: aiemmin 59 tyyppiä kaikkiaan 61 tyypistä, nyt 60 tyyppiä kaikkiaan 61 tyypistä, ja kuvattuja kenttiä aiemmin 1 698, nyt 1 742, ja määritelmätön jäämä pysyy ennallaan lukumäärässä 239.

    Tämän esti kiinnitys, joka jäädyttää julkaistun asiakirjan ja joka nimesi units avaimeksi, jota asiakirja ei saa koskaan saada. Sellaisen lisääminen olisi tarkoittanut kyseisen väittämän poistamista ja kolmen tiivisteen uudelleenperustamista kolmessa tiedostossa — muoto, jota ei voi erottaa regression peittelystä. Sen sijaan kaksi tätä asiakirjaa mittaavaa kiinnitystä todistavat nyt lisäyksen olevan additiivinen: kumpikin poistaa lohkon units takaisin ja laskee tiivisteen uudelleen vakiota vasten, joka jäädytettiin ennen lohkon olemassaoloa, ja molemmat vakiot ovat ennallaan. Mutaatio vahvistaa takuun todelliseksi — siirrä julkaistua arvoa ja perusta koko asiakirjan tiiviste uudelleen kuten huolimaton korjaus tekisi, ja poisto-ja-uudelleentiivistys epäonnistuu silti. Kolmas kiinnitys, yleisessä rekisterin golden-testikehyksessä, perustetaan uudelleen kuuden sisaruksen tapaan, jotka perustettiin uudelleen täsmälleen tästä syystä, ja sen arvoa kantava literaali expect_summary ei muutu.

  • Tyyppi realtime-frame-eop raportoi, mitä totuutta vasten kukin Maan orientaatiorivi pisteytettiin ja kuinka usein varajärjestely laukesi. Kenttiin table3_joint_eop[].{ut1, polar_motion,combined} tulee truth_source ja truth_fallback_rows. Lattia final pisteytetään Bulletin B:n lopullista arvoa vasten, ja se voi käyttää vain epookkeja, jotka julkaisevat sellaisen; jokainen rivi dN pisteytetään funktioita truth_pm()/truth_ut1() vasten, jotka putoavat takaisin Bulletin A:n nopeaan arvoon. Mukana toimitetussa 2026 -otteessa se on yhden päivän kohdalla 12 näytettä kaikkiaan 31 näytteestä, kun lattialla luku on 0 — joten lattiarivi ja sen vieressä olevat ennusterivit perustuvat mitattavasti eri totuuteen, minkä raportti nyt ilmoittaa sen sijaan, että jättäisi sen pääteltäväksi näytemäärästä, joka kasvaa siellä, missä sisäkkäisten horisonttien mukaan se ei voi.

  • Tyyppi moonlight-service-volume tuottaa kokovastaavan Kepler-vertailutason. Kenttä ephemeris_comparison.keplerian_matched ajaa havainnollistavan satelliittitähdistön uudelleen HAETUN joukon omalla satelliittimäärällä, ja se on läsnä vain, kun määrät eroavat. Määrä on osa kyseisen suunnitelman geometriaa — RAAN ja keskianomalia on molemmat jaettu muodossa 360k/n — joten ilman sitä viiden satelliitin haettu joukko pisteytettiin kahdeksan satelliitin havainnollistavaa vastaan, ja suunnittelu sekoittui kokoon. Viiden satelliitin LANS-vertailujoukolla 8,68 14.24 pisteen kattavuuserosta osoittautuu kolmen puuttuvan satelliitin vaikutukseksi ja vain 5,56 pistettä suunnittelun; neljällä avaruusaluksella, jotka todella ovat Kuun kiertoradalla, tarkoitusta varten rakennettu neljän satelliitin joukko saavuttaa 4,86 %, kun ne saavuttavat 0 %. Testi kiinnittää, että vastaava rivi on uudelleen rakennettu satelliittitähdistö eikä konfiguroitu, jota nimettiin uudelleen, mikä oli sen ensimmäinen kirjoitustapa ja mitä ajo sitten raportoi.

  • Yhdeksän ominaisuuskorttia julkiselle sivustolle, jotka kattavat 22 varmennusmatriisin riviä, jotka oli toimitettu ilman tuotetason korttia. Moottoriin oli kertynyt joukko ominaisuuksia — ARAIM-tarkistus julkaistuja Working Group C -vertailuvektoreita vasten, todellinen haettu Kuun satelliittitähdistön geometria, Kuun häirintäkontuuri mitatulla C/N₀-kaistalla, VLBI-aikataulusta aseman kovarianssiin -vaihe, optinen ja RF-luovutus modaliteettien välisellä vikainjektiolla, reaaliaikainen Maan orientaation ennustus arkistoitua Bulletin A:ta vasten, navigoinnin ja viestinnän apertuurin jako, INS/TRN-inertiakulku sekä yksikkö- ja alkuperäkattavuus — kullakin matriisirivi ja mukana toimitettu skenaario, eikä yhtäkään ollut nimetty sivustolla kshana.dev. Kortti–rivi-kattavuus nousee luvusta 72 / 168 riviä lukuun 94.

  • Kahdeksan skenaariota lisättiin kokeilualustan luetteloon. Ominaisuuskortin Aja-painike näkyy vain, kun myös web/app.js sisältää tiedoston; kuusi korttia nimesi skenaarion, jota se ei sisältänyt, joten ne piirtyivät ilman tapaa ajaa niitä — yksi niistä, todellisen laseretäisyysmittauksen datumi, oli ollut tässä tilassa julkaisustaan lähtien. Testi tests/scenario_examples_doc_sync.rs vartioi nyt invarianttia molemmilta puolilta: kortin kohteen run on oltava mukana hakemistossa scenarios/ ja luettelon tarjoama. Mutaatiotestattu molempia virhetiloja vastaan.

  • Tyyppi moonlight-service-volume tuottaa satelliittikohtaisen geometriansa tiedostona <scenario>.table.csv, kun vientipaikka on määritetty (G11). Se on suurin taulukko, jonka paketti julkaisee — 2304 riviä julkaistussa yhteisessä viestintä- ja navigointitaulukossa — ja se tavoitti kuluttajat vain JSON-muodon sisällä, siinä muodossa, joka typisti sisarskenaarion 57 pisteen käyrän 23 pisteeseen sarakkeen alla, joka väitti sisältävänsä ne kaikki. Yksi rivi linkkiä kohti, rivimäärä otsikkorivillä, antennisarakkeet vain silloin, kun antenni oli määritetty. Ajo ilman vientipaikkaa on tavu tavulta ennallaan eikä kirjoita tiedostoa.

  • SBOM kuvaa nyt sen, mitä toimitetaan: komponenttien määrä nousi luvusta 60 lukuun 66. Skripti scripts/gen-sbom.sh listasi jokaisen oletusominaisuuksien ratkaisun paketin, kehitysriippuvuudet mukaan lukien. Se toi materiaaliluetteloon paketit sgp4 ja chrono — vain testeihin tarkoitetut paketit, jotka eivät käänny mihinkään artefaktiin — ja jätti pois ketjun --features python, jonka PyPI-wheel linkittää (pyo3, pyo3-ffi, pyo3-macros, pyo3-macros-backend, pyo3-build-config, portable-atomic, target-lexicon, heck), joka on kyseisen wheelin ulkoisten funktioiden rajapinta. Skripti kulkee nyt ratkaisugraafin kshana-paketista vain tavallisia ja koonnin kaaria pitkin ominaisuusjoukkojen (oletus, python ja wasm) yhdisteessä (npm-paketti sisältää saman SBOM:n) jokaiselle kohdealustalle. Kiinnitetty CycloneDX-yhdenmukaisuuden tulos perustetaan uudelleen sen commitoidun generaattorin kautta: 60 → 66 komponenttia, 53 → 60 yhdistettyä lisenssilauseketta, ja edelleen nolla skeemavirhettä, kun ne on sijoitettu standardiin muotoon expression.

  • CSV-toistettavuustaulukko ulottuu jokaiseen sisäänkäyntiin, ei vain CLI:hin ja Python-wheeliin. MCP-palvelin saa seitsemännen työkalun, export_table_csv, joka ajaa skenaarion ja palauttaa tavuvakaan taulukon, jonka CLI kirjoittaa tiedostona <scenario>.table.csv — tai virheen, joka nimeää tyypit, jotka julkaisevat sellaisen (realtime-frame-eop, lunar-time-budget, lunar-jamming ja moonlight-service-volume vain, kun export_site_lat_deg + export_site_lon_deg on asetettu). WebAssembly-moduuli saa funktion table_csv, joka palauttaa saman tekstin tai arvon undefined. MCP:n edestakainen testi ja Python-sidoksen testit kiinnittävät nyt palautetun CSV:n tavu tavulta tiedostoon tests/golden/realtime-frame-eop.csv ja kiinnittävät, että RunOutput.write_csv palauttaa kirjoitetut tavut, ja arvon 0 ilman luotua tiedostoa tyypille, jolla ei ole taulukkoa. Jokainen pinta, joka ilmoittaa MCP-työkalujen lukumäärän tai luettelee työkalut, sanoo nyt seitsemän.

  • Funktio run_all WebAssembly-moduulissa: yksi moottoriajo kaikille tulosteille. Funktiot run, chart_svg, summary ja table_csv kukin suorittavat skenaarion alusta alkaen, joten kokeilualusta maksoi neljä täyttä ajoa napsautusta kohti — noin 12 s eikä 3 s skenaariolle cislunar-arc-recovery selaimessa. Funktio run_all palauttaa {json, svg, summary, csv} yhdestä ajosta, ja kokeilualusta käyttää sitä nyt. Se vastaa neljää erillistä kutsua tavu tavulta.

Korjattu#

  • TARKISTUS: GNSS/INS-suodattimen gyrobiasin kytkennän etumerkki oli väärä, ja tyypin gnss-ins katkoluvut muuttuvat. Virhetilan laajennettu Kalman-suodin (EKF) pitää molemmat inertiabiasit residuaaleina (todellinen miinus käynnissä oleva estimaatti, palautetaan takaisin lisäämällä). Kiihtyvyysanturin sarake ohjasi nopeusvirhettä termillä +C_b^n b_a, mutta gyrosarake ohjasi asentovirhettä termillä −C_b^n b_g. Jäännösgyrobias todellisuudessa kiertää laskettua asentoa termillä +C_b^n b_g, joten jokainen gyrobiasestimaatti työntyi väärään suuntaan. Skenaariopaketti pysyi vakaana vain siksi, että sen oletusgyrobiasprior (1e-4 rad/s, 1-sigma) oli riittävän tiukka pitämään nämä tilat paikallaan. Leveämmällä priorilla suodin hajaantui, vaikka todellinen gyrobias oli nolla: 93 m fuusioitua katkovirhettä muuttui arvoon 4,3 km. Tiedoston scenarios/gnss-ins.toml julkaistut luvut muuttuvat seuraavasti:

    gnss-ins.toml ennen (≤ 0.27.2) jälkeen
    kylmäatomi-IMU, fuusioitu katkon RMS 96,1 m 1,9 m
    kylmäatomi-IMU, määrittelyn sisällä oleva inertiakulku (50 m) 30 s 60 s (koko katko)
    taktisen luokan IMU, fuusioitu katkon RMS 62,5 m 3,1 m
    taktisen luokan IMU, määrittelyn sisällä oleva inertiakulku (50 m) 37 s 60 s (koko katko)

    Vapaasti käyvät luvut (130,7 m ja 314,3 m) eivät muutu; ne eivät koskaan käyttäneet suodinta. Paketin aiempi tulkinta, että fuusioitua inertiakulkua rajoittaa luovutushetken asentolattia eikä se siksi parane paremmalla anturilla, oli tämän vian aiheuttama artefakti ja se peruutetaan. Kun biasit ovat vakioita ja kohinattomia, suodin oppii ne GNSS:n ollessa käytettävissä, joten fuusioitu inertiakulku on paras tapaus. Ulkoinen filterpy-vertailu (tests/gnss_ins_sensor_fusion_reference.rs) tarkistaa vain mittauspäivitykset, minkä vuoksi se ei koskaan nähnyt etenemistä. Kaksi testiä tarkistaa nyt etumerkin suoraan, ja molemmat epäonnistuvat vanhalla. Ensimmäinen, tiedostossa closed_loop.rs, syöttää tunnetun jäännösgyrobiasin strapdown-laskennan läpi ja vaatii, että suodin ennustaa syntyvän asentovirheen enintään 2 % poikkeamalla. Toinen vaatii, että leveä prior oppii 1e-3 rad/s gyrobiasin ja pysyy 6 m rajan sisällä. Tyypin gnss-ins alustojen välinen golden on kiinnitetty uudelleen tästä syystä eikä mistään muusta.

  • Jokainen rekisterin pikaopas toimii nyt sellaisenaan puhtaalla koneella. Ennen tätä muutosta mitattuna crates.io- ja PyPI-esimerkit (Python Package Index) lukivat scenarios/clock-holdover.toml, jota rekisteriasennuksessa ei ole, ja npm-esimerkki kaatui Node.js:ssä virheeseen TypeError: fetch failed, koska paketin init() hakee WebAssembly-binäärinsä ja Noden fetch ei voi lukea paikallista tiedostoa. Nyt:

    • Tiedostot README.crates.md ja README.pypi.md sisältävät tuon skenaarion rivinsisäisesti, kuten README.npm.md jo teki. Rust-koodilohko on kokonainen ohjelma, jolla on oma main, koska rustdocissa piilotettu rivi # Ok::<…>, johon se päättyi, näkyy crates.io:ssa eikä käänny liitettäessä. Testi tests/readme_code_fences_doc_sync.rs kääntää sen edelleen tavu tavulta ja hylkää nyt myös piilotetun rivin koodilohkossa.
    • Tiedosto README.npm.md erottaa selaimen Node.js:stä ja antaa Node-reseptin, joka lukee binäärin levyltä ja välittää sen funktiolle initSync. Doc-sync-testi hyväksyy funktion initSync wasm-bindgenin generoimana lataajana.
    • Kaikki kolme upottavat skenaarion alkuperämerkkijonoineen lyhentämättöminä, joten skenaarion tiiviste on 5ba83a232b94 kaikilla pinnoilla. npm-esimerkki lyhensi niitä aiemmin, mikä antoi sille eri tiivisteen kuin CLI:llä.
    • Toistettu tämän puun paikallisista koonneista: tuore projekti, luotu komennolla cargo new, polkuriippuvuudella paketoituun crateen koonti ja ajoi Rust-esimerkin; maturinilla paketoiduista lähteistä rakennettu wheel, asennettuna uuteen virtuaaliympäristöön, ajoi Python-esimerkin; ja komennolla wasm-pack --target web tuotettu paketti, pakattuna ja asennettuna npm:llä, ajoi Node-reseptin. Kaikki kolme tulostivat saman yhteenvetorivin.
  • Komento cargo run -- <scenario.toml> toimii kloonista. Tiedosto Cargo.toml asettaa default-run = "kshana". Ilman sitä cargo kieltäytyi viestillä ”could not determine which binary to run”, johon osui jokainen dokumentaation rivi cargo run --.

  • CLI:n ensimmäisen minuutin virheet kertovat, mitä tehdä seuraavaksi. Skenaariopolku, jota ei ole olemassa, lisää nyt vihjeen, joka osoittaa komentoon kshana example, ja toinen paikkaparametri tulostaa käyttöohjeen sen lisäksi, että nimeää parametrin. --help, --version, tuntemattoman option virhe (poistumiskoodi 2) ja komennon --validate yhden rivin ok: onnistumisen yhteydessä olivat jo haarassa main. Testi tests/cli_first_run.rs kattaa nyt kaikki, koska mikään testi ei ennen ajanut binääriä millekään niistä.

  • Funktio list_kinds() Pythonissa on dokumentoitu palauttavaksi yhden JSON-merkkijonon, ei listaa. Se palauttaa saman metadatan kuin scenario_kinds(), sarjallistettuna, joten sen läpikäynti kulkee merkkejä pitkin. Se säilyttää merkkijonopaluunsa, jotta nykyiset kutsujat eivät hajoa. Tiedosto kshana.pyi, sidoksen dokumentaatiokommentti, docs/PYTHON_API.md ja README.pypi.md sanovat nyt niin ja osoittavat funktioon scenario_kinds().

  • Kolme rekisterin README:tä avaa jokaisen lyhenteen ensimmäisellä käyttökerralla. PNT on nyt avattu tagline-rivillä, jossa se ensimmäisen kerran esiintyy, ja CLI, TOML, JSON, SVG, CSV, CSAC, HTML, URL ja API avataan tiedostoissa, jotka niitä käyttävät. Oraakkelitaulukon otsikko ei enää sano ”CI-gated” ennen kuin CI on määritelty.

  • Korjattu julkaistu luku: kahden satelliittitähdistön ARAIM-saatavuus vendoroiduilla Celestrakin GPS- ja Galileo-TLE:illä. Tiedosto docs/CAPABILITY.md väitti, että Galileon yhdistäminen nostaa saatavuuden arvosta 0,21 arvoon 0,67 VAL-arvolla 12 m ja että tähdistövikasietoinen tila on rajoitettu vain kahdella tähdistöllä. Se johtui siitä, että tests/araim_dual_real_data.rs eteni jokaisen satelliitin omasta TLE-epookistaan (parse_propagators pudottaa epookin), ja noiden tiedostojen epookit kattavat 70,6 h (GPS) ja 335,7 h (Galileo), joten satelliitit olivat keskenään epäjohdonmukaisina ajanhetkinä. Testi säilyttää nyt jokaisen epookin (parse_tle) ja arvioi jokaisen satelliitin yhtenä yhteisenä UTC-hetkenä, joukon viimeisimpänä TLE-epookina (2026-06-07T07:21:04). Mitattu saatavuus samalla 24 h ajalla ja 289 näytteen ruudukolla muuttuu: vain GPS 0,993 (oli 0,208), yhdistetty 1,000 (oli 0,671) ja tähdistövikasietoinen kaksoistila 0,990 (oli 0,031); APV-I-rajalla kaksoistila nousee arvosta 0,180 arvoon 1,000. Johtopäätös kääntyy päinvastaiseksi: johdonmukaisella taivaalla kaksi tähdistöä kantaa tähdistövikahypoteesin VAL-arvolla 12 m. Samat luvut saadaan käyttämällä vertailuna aikaisinta TLE-epookkia. Testin itsetarkistus kiinnittää sen saatavuussilmukan näyte näytteeltä tunnukseen araim_dual_constellation_availability, joten ainoa ero on ajallinen kohdistus. Tiedostot docs/CAPABILITY.md ja docs/REAL_TLE_GUIDE.md §3 sisältävät uudet luvut; alla oleva merkintä 0.13.0 jätetään sellaiseksi kuin se julkaistiin.

  • Julkiset pinnat eivät enää esitä RINEX-versiota 4 validoituna. Moottori hylkää nyt RINEX 4 -navigointitiedoston nimeltä sen sijaan, että purkaisi sen väärin, mutta standardiruudukko näytti edelleen kortin ”RINEX 3 / 4” validoitu-merkillä, joka oli sidottu navigointijäsentimen RINEX-3-todisteisiin. Kortti on nyt ”RINEX 3”, ja README, docs/CAPABILITY.md, docs/STANDARDS.md, ROADMAP.md ja ominaisuusyhteenveto kertovat, mikä on totta: RINEX 3.0x -havaintotiedostot jäsentyvät, 4,00 -havaintoasettelun odotetaan jäsentyvän mutta yhtään 4,00 -tiedostoa ei ole luettu koodin läpi, ja RINEX 4 -navigointitiedostot hylätään.

  • Komento --validate kertoo, milloin ”ok” tarkoittaa, ettei ollut mitään tarkistettavaa. Noin kaksi kolmasosaa katalogista ei julkaise yhtään pakollista kenttää — nämä paketit ajavat viitekonfiguraationsa tyhjästä rungosta — joten lint-työkalu saattoi tulostaa niille vain ”ok”, samoin sanoin kuin kuuden kentän tarkistuksen jälkeen. Onnistumisrivi ilmoittaa nyt löytämiensä läsnä olevien pakollisten kenttien lukumäärän tai sen, ettei tyyppi vaadi yhtään.

  • Skripti scripts/gate.sh hylkää ei-numeerisen arvon REPEAT tai TEST_THREADS. Bash-versiossa 3,2 arvo REPEAT=no sai numeerisen vertailun antamaan virheen ja arvioitumaan epätodeksi, joten portti ilmoitti ”repeatability loop SKIPPED (REPEAT=0)” arvolle, joka ei ollut 0, ja kirjoitti silti kuittauksen. Molemmat säätimet päättyvät nyt koodiin 2, ellei niiden arvo ole pelkkä kokonaisluku.

  • MSRV ilmoitetaan arvona 1,85 kaikkialla, missä ihminen sen lukee. Tiedosto Cargo.toml siirtyi versioon 1,85 viime julkaisussa; README-merkki, asennus- ja vianmääritysteksti, codemeta.json ja MCP-paketin oma perustelu sanoivat edelleen 1,75.

  • Funktio RunOutput.__repr__ Python-sidoksessa raportoi tavuja, ei ”merkkejä”. Se tulosti UTF-8-merkkijonojen tuloksen len(), joka on tavumäärä: 710 ”merkkiä” 708 merkin taulukolle.

  • README ei enää dokumentoi valitsimia --study --study-name yhdessä. Valitsin --study-name koskee yhtä skenaariota, ja se ohitetaan valitsimen --study kanssa (binääri varoittaa). Kaksi kopioi-liitä-esimerkkiä tiedostoissa README.md ja README.crates.md näyttävät nyt pelkän tutkimuskomennon.

  • Sivuston kellovakauden todisteet ilmoittavat molemmat havaitut toleranssit. 5071A-cesiumsarja toistetaan tarkkuudella ≤ 3e-5 ja PHASE.DAT tarkkuudella ≤ 5e-5; kappale antoi 3e-5 molemmille.

  • Kahta moottorin tulostiedostoa ei enää seurata. Tiedostot scenarios/quantum-pnt-demonstrator.study.{json,html} leimasi moottori 0.20.0 kaikki laatumittarit tyhjinä, ja README:n oma tutkimuskomento ylikirjoitti ne, sotkien työpuun ja estäen push-portin. Kuviot *.study.json / *.study.html sivuutetaan nyt kuten muut neljä moottorin tulostetta.

  • Siemenlukupyyhkäisy kokeilualustassa ei enää epäonnistu joka ajolla. Pyyhkäisy askelsi kokonaislukusäädintä seed lineaarisesti (1, 10,9, 20,8, …), ja moottori, joka luki sen tyyppinä u64, hylkäsi jokaisen murtoluvun. Kokonaislukusäätimet pyyhkäisevät nyt erillisiä kokonaislukuja.

  • Jokainen kokeilualustan lataus kertoo, mikä moottori ja mikä syöte sen tekivät. Muutama tyyppi (esim. realtime-frame-eop) ei tuota engine_version eikä scenario_hash, joten niiden lataukset nimettiin pelkästään kshana-csv.csv. Nimi putoaa nyt takaisin ladatun moottorin versioon ja skenaarion tekstin 12-heksan FNV-1a-64-sormenjälkeen.

Muutettu#

  • Julkaistu crate on alle puolet entisestä koostaan, ja komento cargo install kshana rakentaa pelkän CLI:n. Paketti sisälsi aiemmin artikkelit, niiden toimituspaketit, artikkelikuvien artefaktit, muistikirjat, hakemiston docs/, ylläpitäjän skriptit ja esimerkkiohjelmat. Kirjasto tai CLI ei käännä mitään niistä. Se sisälsi myös kolme sisäistä generaattoria hakemiston src/bin/ alla (crossover_study, gen_validation_artifacts, validation_report), joten rekisteriasennus käänsi ja asensi neljä suoritettavaa tiedostoa, joista kolme oli hyödyllisiä vain työkopion sisällä. Nuo puut ja kolme generaattorilähdettä on nyt jätetty pois. Cargo luettelee paketin binäärit sen sisältämistä tiedostoista, joten julkaistu manifesti nimeää vain kshana. Klonissa generaattorit löytyvät edelleen automaattisesti, joten cargo run --bin <name> ja julkaisutyö, joka ajaa validation_report, ovat ennallaan. Mitattu komennolla cargo package: ennen 763 tiedostoa, 16,7 MiB, pakattuna 6,8 MiB; jälkeen 591 tiedostoa, 10,5 MiB, pakattuna 3,0 MiB. Sen varmistuskoonti, joka kääntää vain paketoidut tiedostot, läpäisee. Komento cargo install --path paketoidulle cratelle asensi yhden suoritettavan tiedoston, kshana.

  • Tuloste, jonka ajoitusinsinööri osaa lukea: ei enää arvoa p95 0.0ns, ei enää arvoa security 0.000 ilman hyökkäystä, ja sivuston lukumäärät vastaavat README-tiedostoja. Tämä on näyttötarkistus. Mikään julkaistu luku ei muutu; JSON-arvot ovat identtiset, minkä yllä olevat golden-tiivisteet todistavat.

    • Yhden rivin yhteenveto tulosti optisen kellon 95. persentiilin (p95) aikavirheen muodossa 0.0ns, vaikka sen vieressä oleva taulukko näytti 1.20e-4 ns. Nollasta poikkeava ajoitusluku, joka on liian pieni yhdelle desimaalille, tulostetaan nyt kolmella merkitsevällä numerolla (p95 1.20e-4ns); tarkka nolla tulostetaan edelleen muodossa 0.0. HTML-raportti (HyperText Markup Language), tutkimusten vertailutaulukko ja kokeilualustan ladattava raportti käyttävät samaa sääntöä, joten mitäkään nollasta poikkeavaa lukua ei myöskään tulosteta muodossa 0.000.
    • Suure security on analyyttinen harhautuksen havaittavuuden raja, jolla on merkitystä vain määritettyä hyökkäystä vastaan. Tyypit clock, orbit, hybrid ja fusion eivät määritä yhtään, joten niiden yhteenveto tulostaa nyt security n/a (no attack) eikä lukua kuten 0.000, joka luetaan epäonnistuneeksi havaitsemiseksi. Arvo pysyy kentässä fom.security, merkittynä applicable: false ja syy kentässä figure_tiers, ja raporttitaulukot näyttävät ”not applicable”. Tyyppi spoof pisteyttää havaitsemisen edelleen.
    • Kaksi yhteenvetokiinnitystä tiedostossa tests/registry_golden.rs muuttui täsmälleen näistä kahdesta syystä eikä muusta: golden_clock (kvantti-p95 ja molemmat arvot security) ja golden_orbit (molemmat arvot security; sen p95-arvot ovat täsmälleen nolla). Niiden koko asiakirjan tiivisteet eivät muuttuneet. README:n, kolmen opetusohjelman ja niiden opetusskenaarioiden odotetut yhteenvedot on päivitetty vastaamaan, ja tests/tutorials.rs tarkistaa opetuskopiot moottoria vasten.
    • Kokeilualustan opastettu kierros ei enää aukea ensimmäisellä latauksella. Sen modaali nappasi ensimmäiset napsautukset ja sen valokeila vieritti sivun pois kohdasta, johon vierailija oli saapunut. Se alkaa painikkeesta ”Aloita 60 sekunnin kierros” tai kelluvasta Kierros-painikkeesta.
    • Sivu ei enää vieri sivuttain puhelimella. Leveydellä 390 px tuotemerkkirivillä ja GitHub-painikkeella oli noin 410 px sisältöä, eli 4 px ylivuoto; otsake mahtuu nyt leveydestä 320 px ylöspäin, ja laatumittaritaulukko vierii oman laatikkonsa sisällä sivun levenemisen sijaan.
    • Ominaisuuksien selain nosti ensin esiin oman korttimääränsä (”46 ominaisuuskorttia … 17 ulkoisen oraakkelin tukemaa”) README-tiedostojen rinnalla, joissa lukee 64 / 168. Se nostaa nyt ensin esiin varmennusmatriisin, luettuna generoidusta tiedostosta web/data/verification-matrix.json (sama matriisi, johon README:n luvut on kiinnitetty), ja nimeää kortit sen jälkeen yhteenvetokerroksena, jota ne ovat. Tiedosto web/counts.test.mjs, jatkuvan integraation (CI) työnkulun uusi vaihe, tarkistaa laskutoimituksen ja ristiintarkistaa README.md:n ja sivun kuvaukset; tests/web_validation_counts_doc_sync.rs kiinnittää kytkennän Rust-puolelta.
  • Julkinen kuvaus nostaa nyt ensin esiin ajoituksen ja holdoverin, parhaiten validoidun alueen. README:n alku ja docs/POSITIONING.md esittävät Kshanan avoimena, toistettavana, alkuperämerkittynä PNT-kestävyyden todistemoottorina: kriittisen infrastruktuurin ajoitus ja holdover ensin (Allanin, muunnetun Allanin, aikapoikkeaman ja suurimman aikavälivirheen estimaattorit sekä holdover-jakson varianssin inversio ovat sen takana olevat rivit, joiden taso on VALIDATED), kvantti neutraalina kvantti–klassinen-vaihtoehtovertailumenetelmänä, jonka tulokset on merkitty MODELLED, sekä Kuun ja Kuun läheisen avaruuden (cislunar) sekä syvän avaruuden navigointi ylläpidettyinä ominaisuuksina pääotsikon sijaan. Molemmat sivut kertovat nyt, mitä Kshana ei ole — ei radiotaajuussignaalisimulaattori eikä hardware-in-the-loop-laitteisto, ei korvaaja MATLAB/Simulinkille, STK:lle eikä Orekitille — ja osoittavat uuteen tyyppiin telecom-timing ja tiedostoon docs/TELECOM-TIMING.md. Vanha rivi ”hyvää avointa työkalua ei ole” on poistettu: haku, joka ei löydä mitään, ei ole todiste siitä, ettei mitään ole olemassa. Tiedosto ROADMAP.md saa päiväämättömän prioriteettijärjestyksen (ajoitus ensin, kvanttivertailu toisena, Kuu ylläpidettynä) ja pudottaa kolme vanhentunutta kohtaa (Coriolis- ja valosiirtymäsysteematiikat, NRHO:n alkuehdot ja Kuu-skenaario, kaikki toimitettu); README:n rivi ”Coriolis ja valosiirtymä jäävät tiekartalle” korjataan samoin.

  • Tiedosto docs/CAPABILITY.md lakkasi väheksymästä. Maahan kiinnitettyjen koordinaatistojen rivi sanoi ”ei mitään”, vaikka matriisi antaa muunnokselle GCRS→ITRS tason VALIDATED; se on nyt ”täysi”, ja ydinkoordinaatistojen rivi kirjaa ANISE-ristiintarkistuksen toimitetuksi. Ohjattu tila oli listattu tiekartalle; kokeilualusta on toimittanut ohjatut liukusäätimet ja ohjatun kierroksen. Läpikäynti tiedostoa src/verification.rs vasten korjasi viisi muuta riviä, jotka olivat ennen niiden validointeja: Cowellin voimamalli ja eräajo-/sekventiaalinen radanmääritys Orekit-versiota 12,2 vasten, maa-aseman ylilennot Orekitin korkeuskulmailmaisinta vasten, tarkkuuden heikkenemiskertoimen (DOP) ydin gnss_lib_py:tä vasten ja OEM-tuonti riippumatonta jäsennintä oem vasten; varmennus- ja validointirivi nimeää nyt vartijat, jotka tarkistavat, että jokainen mainittu testi on olemassa.

  • Sanasto selittää, mitä tulostiedosto kertoo. Tiedosto docs/GLOSSARY.md saa selkokieliset merkinnät tulostetermeille (holdover, p95, eheys, turvallisuuspistemäärä, PDOP, sigma_y, q_wf), telealan ajoitustermeille (aikavirhe, max|TE|, cTE, dTE, MTIE, TDEV, PRTC, ePRTC, T-BC, T-TSC, OCXO, CSAC) ja kolmelle todistetasolle (VALIDATED, MODELLED, PARTNER).

  • Lyhenteet avataan ensimmäisellä käyttökerralla jokaisessa käsin kirjoitetussa julkisessa dokumentissa. README:ssä ja 24 tiedostossa hakemistossa docs/ oli useita satoja lyhenteitä käytettynä ennen niiden avaamista tai ilman sitä; kukin on nyt avattu siellä, missä se ensimmäisen kerran esiintyy kyseisessä tiedostossa. Kolme generoitua tiedostoa (docs/VERIFICATION-MATRIX.md, docs/MODELLED-RATIONALE.md, docs/SCENARIOS.md) jätetään koskematta: ne kirjoitetaan lähteistä src/verification.rs ja api::list_scenario_kinds(), joten niiden sanamuoto on muutettava lähteessä.

  • Rivikattavuudelle on virallinen mittaustulos. Tiedosto docs/COVERAGE.md kirjaa 95,63 % (37 697 riviä kaikkiaan 39 419 rivistä) CI:n työstä coverage kommitissa b1d350d, ja tests/coverage_figure_doc_sync.rs kiinnittää viisi julkista ”~96%” -pintaa siihen — ainoa otsikkoluku, joka oli ylläpidetty käsin ja joka oli jo kerran muuttunut huomaamatta.

  • Uusia doc-sync-portteja pinnoille, joita mikään ei lukenut. Testi tests/readme_code_fences_doc_sync.rs tarkistaa jokaisen import { … } from "kshana" JavaScript-koodilohkossa WebAssembly-vientejä vasten ja kiinnittää README.crates.md:n Rust-esimerkin tavu tavulta kopioon, jonka testibinääri kääntää. Testi tests/security_md_doc_sync.rs epäonnistuu, jos src/lib.rs menettää määreen #![forbid(unsafe_code)] tai SECURITY.md lakkaa ilmoittamasta sitä. Testi tests/no_overclaims.rs skannaa nyt myös tiedoston web/README.md ja kolme rekisterin README:tä, ja jokaisen sivuston standardin on ilmoitettava kenttä proof eksplisiittisesti.

  • Kaksi todellisen laitteiston kellotarkistusta ajetaan runnerilla. Työnkulku realdata-clock.yml (kuukausittain ja käsin käynnistettäessä) hakee 5071A- ja PHASE.DAT-sarjat ja ajaa molemmat testit asetuksella KSHANA_REQUIRE_REALDATA=1, joten puuttuva syöte epäonnistuu eikä ohita. Molemmat hakuskriptit on kiinnitetty yhteen allantools-kommittiin ja varmentavat SHA-256:n.

  • Python-tyyppitiedosto tarkistetaan rakennettua wheeliä vasten (mypy.stubtest sidosten työssä), minkä vuoksi csv/write_csv toimitettiin ilman tyyppimäärittelyä.

  • Sanasto määrittelee URE:n, EOP:n, FoM:n, CTI:n ja TIB:n, joita README ja kirjanpito käyttivät sellaisenaan.

  • Jokaisen tyypin julkaistu kenttäsopimus pitää nyt paikkansa, ja testi pitää sen sellaisena. Viisi tyyppiä kaikkiaan 61 tyypistä muuttui. Tyypit, joilla on ei-tyhjä required_fields, nousevat luvusta 21 lukuun 22: tyyppi ephemeris vaatii nyt tle|orbit+epoch (paljas kind = "ephemeris" läpäisi ennen komennon --validate ja epäonnistui sitten ajossa), ja tyyppi quantum-trade lisää candidate_adev_taus+candidate_adev_values|candidate_clock_class, jota sen ajo jo vaati. Pakollinen merkintä voi käyttää | (yksi näistä) ja + (kaikki nämä yhdessä); --validate ymmärtää molemmat. Tyypit lunar-joint-od-clock, pvt ja earth-gnss-lunar julkaisevat 9 todellista valinnaista kenttää, jotka ne olivat jättäneet pois. Tiedosto docs/SCENARIOS.md sanoo nyt, että kind on pakollinen jokaiselle tyypille paitsi tyypille clock. Testi tests/required_fields_are_true.rs tarkistaa jokaisen tyypin sen mukana toimitettua skenaariota vasten: minkä tahansa pakollisen merkinnän poistamisen on saatava ajo epäonnistumaan, ja asiakirjan, jossa on vain pakolliset kentät, on ajettava.

  • JetBrains Marketplace -julkaisumuistiinpanot ovat portin takana. Skripti scripts/check-version-sync.sh epäonnistuu nyt, ellei tiedoston plugin.xml uusin merkintä <change-notes> nimeä julkaistavaa versiota; seitsemän julkaistua versiota oli tarjonnut muuttumattomina muistiinpanot 0.22.0.

  • Teknisen raportin kattavuusluku on mitattu luku. Tiedosto paper/kshana-technical-report.md sanoi ”lähellä 97 %”; se sanoo nyt lähellä 96 % (95,63 % mitattu, docs/COVERAGE.md) ja on kuudes pinta, jonka kattavuustesti kiinnittää.

  • Pääsäikeen ulkopuolinen moottoriasiakas on testattu (web/engine.test.mjs, CI:ssä): lähetyksen sallittujen luettelo, peruutus ja uudelleenkäynnistys, kolme pääsäikeen varareittiä ja kaatumisesta toipuminen, valetyöntekijää vasten.

  • Mitään ei julkaista, ennen kuin merkitty kommitti on läpäissyt testinsä, eikä julkaisu ole valmis, ennen kuin jokainen rekisteri tarjoaa sen. Järjestys on nyt tagi, varmistus, julkaisu, pariteetti, sivusto, yhdellä ajolla tiedostosta release.yml (docs/RELEASING.md).

    • Julkaisu odottaa varmistuksen tulosta. Työnkulut publish.yml, mcp-publish.yml ja jetbrains-plugin.yml eivät enää käynnisty tagin työntämisestä; release.yml kutsuu niitä töistä, joilla on needs: verify. Aiemmin ne kilpailivat sen kanssa: julkaisussa v0.27.2 crates.io, npm ja Python Package Index (PyPI) olivat kaikki julkaisseet 4,5 minuutin sisällä tagista, ja verify palasi 84 minuuttia sen jälkeen; julkaisussa v0.27.0 npm ja PyPI julkaisivat, kun crates.io-työ epäonnistui. Käsin tehdyn uudelleenyrityksen tagille pysäyttää uusi scripts/check-release-verdict.sh, joka vaatii vihreän verify täsmälleen kyseiselle kommitille Actions-käyttöliittymästä ja hylkää kaiken muun (fail closed).
    • Kaikki rakennetaan ennen kuin mitään ladataan palvelimelle, ja crates.io, jonka paketointivaihe oli se, joka epäonnistui kesken julkaisun, julkaisee ensin.
    • Puuttuva rekisteritunniste epäonnistuttaa työn sen sijaan, että lataus ohitettaisiin ja onnistumisesta raportoitaisiin.
    • Pariteettitarkistus julkaisun jälkeen. Skripti scripts/check_channel_parity.py kyselee crates.io:ta (kshana ja kshana-mcp), npm:ää, PyPI:tä (lähdejakelu ja kaikki kuusi alustakohtaista wheeliä) ja ghcr.io:ta, kunnes kukin tarjoaa version, tai ajo epäonnistuu; docs.rs ja Model Context Protocol (MCP) -rekisteri raportoidaan, mutta niitä ei vaadita. Aiempia julkaisuja vasten ajettuna se havaitsee, että 0.22.0 puuttuu npm:stä ja PyPI:stä, 0.23.0 PyPI:stä ja 0.27.0 crates.io:sta.
    • Valmiiksi käännetyt komentorivibinäärit macOS:lle (Apple silicon ja Intel) ja Windows x86-64:lle, nimetty kohteen mukaan (kshana-aarch64-apple-darwin ja niin edelleen), Linux-binäärin kshana rinnalla, jonka nimi on ennallaan. Tiedosto SHA256SUMS kattaa jokaisen resurssin, ja verify-release tarkistaa sen ja ajaa macOS- ja Windows-binäärit omilla järjestelmillään.
    • kshana.dev näyttää julkaisun, ei haaraa main. Se otettiin aiemmin uudelleen käyttöön jokaisella työnnöllä haaraan main, vaikka sen sivut nimesivät viimeisimmän julkaisun. Työnkulku pages.yml rakentaa nyt vain julkaisutagin: julkaisu käynnistää sen kerran, kun jokainen kanava tarjoaa version, ja käsin käynnistys ottaa uudelleen käyttöön viimeisimmän julkaisun (tai nimetyn).
    • Yksi wheelien lähde. Tiedoston publish.yml käsin kopioitu kuuden kohteen matriisi on poistettu; se kutsuu työnkulkua wheels.yml, joten auditwheel-tagiportti ja tavutason toistettavuustarkistus arvioivat nyt wheelit, jotka PyPI vastaanottaa, ja kumman tahansa epäonnistuminen pysäyttää julkaisun.
    • Kiinnitetyt koontityökalut. Jokainen työnkulku pyytää Rustia 1.93.0 (msrv-työ oman versionsa); publish.yml ja pages.yml olivat pyytäneet @stable, ja lokista v0.27.2 näkyy rustupin asentavan 1.98.1 ja sitten kääntävän versiolla 1.93.0 vain siksi, että rust-toolchain.toml ohittaa sen etusijalla. wasm-pack on kiinnitetty versioon 0.13.1 (versio, joka rakensi julkaisun v0.27.2 ja jonka kiinnittämätön asennusskripti valitsi) tarkistussummatarkistuksella, ja mcp-publisher versioon 1.8.1 sen julkaistulla SHA-256:lla. Skripti scripts/check-toolchain.sh epäonnistuu nyt, jos työnkulku pyytää toista kääntäjää tai putkittaa ladatun skriptin shelliin. Yhtään varmistustyötä, golden-kiinnitystä tai paikallista porttiskriptiä ei poistettu eikä löysennetty.

Tietoturva#

  • Jokainen kolmannen osapuolen GitHub Action on kiinnitetty kommitin SHA:lla — 93 viittausta 15 työnkulussa, joista 92 uusia — tagi säilytettynä loppukommenttina, jotta Dependabot voi päivittää sen. Poikkeus on dtolnay/rust-toolchain, jonka tagi on työkaluketjun valitsin.

  • MCP-palvelinkuvan peruskerrokset on kiinnitetty monialustaisella digestillä, ja Dependabot seuraa nyt paketin mcp/kshana-mcp Dockerfilea, joten käyttöjärjestelmäkerrokset saavat edelleen tietoturvapäivityksiä — tarkistetun PR:n kautta.

  • Tagi–manifesti-tarkistus ajetaan kahdessa julkaisutyönkulussa, jotka toimittavat tagin version. Työnkulut mcp-publish.yml (ghcr-kuva, MCP-rekisteri) ja jetbrains-plugin.yml (Marketplace) kilpailevat työnkulun publish.yml kanssa sen odottamisen sijaan, joten väärin leikattu tagi oli portitettu vain sisarustyönkulussa. Molemmat ajavat nyt scripts/check-version-sync.sh ennen rakentamista.

  • Neljä tietoturvailmoitusta, jotka Dependabot nosti päivänä, jona sen hälytykset kytkettiin päälle, on korjattu. MCP-palvelin siirtyy kirjastosta rmcp versiosta 1,7 versioon 2,2: kolme ilmoitusta kirjastoa rmcp vastaan, versiot < 2,1 (Streamable-HTTP-istuntotaulukon vuoto, puuttuva OAuth-suojatun resurssin validointi, mukautetut otsakkeet seuraavat ristiinorigin-uudelleenohjausta) — mikään ei ole tässä saavutettavissa, koska palvelin puhuu vain stdiota, mutta julkaistun paketin ei pitäisi kiinnittää haavoittuvaa SDK:ta. Kirjaston rmcp version 2 makrot vaativat Rustin 1,88, joten vain kshana-mcp ilmoittaa nyt rust-version = "1.88"; kirjasto kshana pysyy versiossa 1,85. Yksi API-muutos (Content → ContentBlock) on sovellettu, ja edestakaiset testit läpäisevät. SonarQube-skannaustoiminto siirtyy versiosta v5 versioon v6, mikä korjaa argumentti-injektioilmoituksen (≥ 4,0, < 6,0).

0.27.2 - 2026-09-22#

Lisätty#

  • Jokainen Rust-kohde, jonka varmennusmatriisin rivi mainitsee, ratkaistaan nyt cratea vasten. Aiempi vartija tarkisti tiedostopolkujen muotoiset viittaukset; 63 riviä kaikkiaan 164 ei-kumppanirivistä nimeää todisteensa sen sijaan crate-sisäisenä kohteena — navsignal::code_tests, integrity::tpl_scalar::tests, api::tests::tracking_loop_kind_round_trips_through_the_dispatch — ja merkki, jolla ei ole päätettä .rs, oli polkuskannerille näkymätön. Nämä rivit olisivat voineet nimetä uudelleennimetyn moduulin, tyhjennetyn testimoduulin tai funktion, jota ei koskaan ollut, ja jokainen portti olisi pysynyt vihreänä.

    Testi tests/verification_rows_name_a_test_that_exists.rs ratkaisee kaikki 339 tällaista viittausta moduulipuun läpi, vaatii, että jokainen ei-kumppanirivi nimeää vähintään yhden testin, joka todella kantaa määrettä #[test], ja vaatii, että kumppanirivit eivät nimeä yhtään. Sen arvioimiseen käytettiin neljää mutaatiota: viitatun moduulin uudelleennimeäminen, rivin ainoan testiviittauksen osoittaminen ei-testifunktioon, todellisen mod tests uudelleennimeäminen ja määreiden #[test] poistaminen siitä — kukin muuttuu punaiseksi sen omistavassa väittämässä.

    Yksi rivi oli jo väärin: Vaihtoehtoinen / täydentävä PNT viittasi tiedostoon tests/*, joka on glob, eikä viittaus. Se nimeää nyt tests/alternative_complementary_pnt_reference.rs ja kolme sen takana olevaa crate-sisäistä testimoduulia.

  • Julkaistut kuviot tarkistetaan moottoria vasten uudelleen jokaisessa koonnissa (tests/published_figures_still_reproduce.rs). Kolme README:n esittelykaaviota ovat moottorin oma tuloste chart.svg, eikä mikään ajanut skenaariota uudelleen; artikkelin kaksi crossover-tutkimusta generoitiin kerran ja commitoitiin; ja README esittää neljä laatumittaria proosana tiedoston scenario-fom.png rinnalla. Kaikki kolme on nyt kiinnitetty elävään moottoritulosteeseen.

    Niiden täsmäyttäminen toi esiin hyödyllisen tuloksen: esittelykaaviot oli piirretty moottorilla 0.22.0 ja artikkelin crossover-JSON moottorilla 0.20.0, ja versiossa 0.27.1 jokainen piirretty arvo kaikissa viidessä artefaktissa on identtinen — kolme kaavio-SVG:tä eroaa tuoreesta ajosta täsmälleen kahdella merkillä kukin, alatunnisteen versioleimalla. Kaaviot on piirretty uudelleen, jotta alatunniste on tosi. Artikkelin JSON jätetään tarkoituksella leimatuksi 0.20.0: se on sen ajon tallenne, jonka kuvion julkaistu artikkeli upottaa, ja uudelleenleimaaminen väittäisi alkuperää, jota PDF:llä ei ole. Vartija väittää sen sijaan vahvemman ominaisuuden — että nykyinen moottori toistaa edelleen jokaisen julkaistun arvon.

Korjattu#

  • SonarCloud-analyysit tallennettiin muodossa VERSION=not provided, joten uuden koodin jakso previous_version ei koskaan edennyt: se oli edelleen ankkuroitu analyysiin 2026-07-02, arvioiden kahdeksankymmentäkaksi päivää työtä yhtenä deltana ja mitaten 7877 ”uutta” duplikoitua riviä 3 % kynnystä vasten. Skannaus välittää nyt crate-version. Taustalla oleva duplikaatio on todellista, eikä tämä piilota sitä: se keskittyy deklaratiivisiin rekistereihin FieldUnit, jotka toistuvat kohteissa ensemble, hybrid, fusion, inertial ja report, sekä 168-rivisessä varmennustaulukossa, ja se on nimetty tässä työksi eikä jätetty mittauksen ulkopuolelle.

  • Skriptillä scripts/gate.sh ei ollut yhden kirjoittajan lukkoa, ja jokainen ajo kirjoitti saman lokin. Se ei ole siisteyskysymys: kuitin integration_binaries, tests_passed ja tests_ignored luetaan takaisin TUOSTA lokista, ja pre-push-koukku luottaa kuittiin. Portti, joka tapettiin mutta jonka testibinääri oli yhä elossa, jatkoi kirjoittamista tiedostoon, jonka seuraava ajo oli juuri typistänyt — joten yhden ajon luvut olisi voitu esittää toisen ajon lukuina, valtuuttaen pushin sellaisen sarjan perusteella, jota ei koskaan ajettu työnnettävällä puulla. Nyt on yksi portti per työkopio (hylkää poistumiskoodilla 75 elävän portin rinnalla, tyhjentää vanhentuneen lukon, jonka pid on poissa) ja yksi loki per ajo, ja target/gate-run.log päivitetään päättyvästä ajosta poistuttaessa. Molemmat suunnat on testattu: elävä pid hylätään, kuollut tyhjennetään.

  • Tiedosto src/verification.rs väitti, että sen testit ”eivät todista, että nimetyt testi-/oraakkelimerkkijonot ratkeavat elävään koodiin”. Kaksi vartijaa tekee nyt täsmälleen niin, joten moduulidokumentti sanoi päinvastoin kuin totuus; se kertoo nyt, mikä on koneellisesti tarkistettu ja mikä jää ihmisen harkintaan. Vanhentunut viittaus kohteeseen verification::gen — moduuli on artifacts — korjataan sisarvartijan omassa dokumentaatiossa.

Muutettu#

  • Haara main kirjoitettiin uudelleen 2026-09-22 ja työnnettiin pakotetusti. Kymmenestä kommitista tuli neljä. Uudelleenkirjoitus sulautti jokaisen kommitin, joka jätti portin punaiseksi, siihen kommittiin, joka sen korjasi, joten jokaisella haaran main kommitilla on nyt puu, joka läpäisee, ja poisti peruutetut ajot, joita haaran laajuinen samanaikaisuusryhmä oli jättänyt jokaiselle korvatulle kommitille.

    Mitään ei hylätty. Uudelleenkirjoitusta edeltävät kommitit ovat edelleen tavoitettavissa niihin osoittavien tagien kautta, ja lopullinen puu on tavu tavulta identtinen puun kanssa, josta uudelleenkirjoitus lähti — git diff vanhan ja uuden kärjen välillä on tyhjä lukuun ottamatta kolmea työnkulkutiedostoa, joita tämä julkaisu muuttaa.

    Korvatut SHA:t niille, joilla on viittaus johonkin niistä:

    vanha otsikko
    9733177 docs(changelog): disclose the authorship rewrite and the two dangling crate sha1s
    5d16ea8 fix(docs): the engine-flow diagram said 6 figures of merit; the engine scores 7
    148d31d fix(test): two more cross-platform pins, and two wrong assumptions of my own
    a3a2667 feat(web): surface the lunar cluster on the site — seven capability cards
    1e8bec6 docs(lunar): document 42 public fields and ratchet the ceiling down to 985
    7bba514 chore(release): v0.27.0
    3154548 test(docs): guard the distribution diagram, the last unguarded one
    7864142 chore(release): v0.27.1

    Tageja v0.27.0 ja v0.27.1 EI siirretty, tarkoituksella. Ne osoittavat edelleen kommitteihin 7bba514 ja 7864142, täsmälleen niihin, joiden puut tuottivat nyt crates.io:ssa, npm:ssä, PyPI:ssä, ghcr.io:ssa ja MCP-rekisterissä livenä olevat artefaktit. Paketin tiedosto .cargo_vcs_info.json kirjaa sha1:n, josta se paketoitiin, rekisterit ovat muuttumattomia, ja SLSA-koontialkuperän attestaatio julkaisun v0.27.1 resursseissa on sidottu kyseiseen kommittiin. Tagien siirtäminen olisi jättänyt jokaisen noista julkaistuista artefakteista osoittamaan kommittiin, jota ei enää ole. Niiden jättäminen paikoilleen pitää vanhat kommitit tavoitettavina ja jokaisen julkaistun alkuperäketjun ratkeavana, hintana kaksi tagia, jotka eivät enää ole haaran main esivanhempia — minkä vuoksi tämä julkaisu on olemassa: v0.27.2 antaa haaralle main oman tagin, paketoituna kommitista, joka on sillä.

    Tämä on tämän historian toinen julkistettu uudelleenkirjoitus; ensimmäinen, 2026-09-21, kanonisoi tekijyyden ja on kirjattu julkaisun 0.27.0 muistiinpanoihin sen omine kahden riippuvan crate-sha1:n kera. Uudelleenkirjoitus julkistetaan tässä joka kerta, koska repositorio, joka myy todennettavaa alkuperää, ei voi hiljaa siirtää maata julkaistun artefaktin alta.

0.27.1 - 2026-09-22#

Korjattu#

  • Julkaistu crate ei kääntynyt. Tiedosto src/lunar_orientation.rs sisältää ylätason include_str! tiedostosta tests/fixtures/llr_geometry/de440_moon_pa.csv, ja manifesti sulkee hakemiston /tests/fixtures pois paketista, joten tar-paketista, jonka crates.io vastaanotti, puuttui tiedosto, jonka kirjasto itse upottaa. Julkaisun v0.27.0 julkaisu epäonnistui varmistuskoonnissaan tästä syystä, eikä mikään versio 0.27.0 päätynyt crates.io:hon; npm ja PyPI, joiden työt eivät ole siitä riippuvaisia, julkaistiin normaalisti. Poissulkemiseen on nyt poikkeus tuolle yhdelle katalogille.

    Jokainen muu fixturen include_str! hakemistossa src/ on moduulissa, jota määrittää #[cfg(test)], eikä siksi koskaan päädy paketoituun kirjastoon. Vain ylätason päätyy.

  • Mikään CI:ssä ei ajanut komentoa cargo package, minkä vuoksi tar-paketti, joka ei käänny, havaittiin ensin julkaisutyössä, kun kaksi muuta rekisteriä oli jo toimittanut. Työ package rakentaa ja kääntää nyt täsmälleen sen tar-paketin jokaisella työnnöllä.

Muutettu#

  • Kuun koordinaatiston realisaation emissiokiinnitykset eivät enää liiku versiokorotuksessa. SVG:n alatunniste sisältää moottorin version, joten jokainen julkaisu perusti kolme tiivistettä uudelleen — kahdesti samana päivänä — ja rutiinilla uudelleenotettu kiinnitys lakkaa tulemasta luetuksi. Versiomerkkijono normalisoidaan paikkamerkiksi ennen tiivistämistä, ja emissiolle väitetään erikseen, että se ilmoittaa käynnissä olevan version, joten tämä tosiasia tarkistetaan tarkemmin kuin tiiviste sitä koskaan tarkisti.

0.27.0 - 2026-09-22#

Lisätty#

  • lunar-llr-datum — Kuun koordinaatiston datumi todellisesta havaintokampanjasta. Skenaario lunar-frame-campaign korvasi ruiskutetun Helmert-muunnoksen simuloidulla kampanjalla ja sanoi niin: sen asemaverkko, aikataulu ja havaintokohtainen sigma ovat havainnollistavia syötteitä. Tämä skenaario poistaa simulaation kahdesta paikasta, joissa aikataulu ja virhemalli tulevat vastaukseen. Epookit ovat 337 arkistoidun ILRS:n Kuun laseretäisyysmittauksen normaalipisteen lähetysaikoja (2015-04-08 .. 2015-06-27, Grasse MeO 7845 ja Matera MLRO 7941, kaikki viisi retroreflektoriryhmää), ja jokaisen havainnon paino on kyseisen normaalipisteen oma arkistoitu toistotarkkuus, bin_rms / sqrt(n_raw) — mediaani 5,13 mm yksisuuntaista etäisyyttä, tiedostosta eikä tässä valittu. Asemakoordinaatit tulevat IERS ITRF2020:sta ja heijastinkoordinaatit JPL DE430:n taulukosta 7; jokainen fixture tallentaa URL-osoitteen, noutopäivän ja SHA-256:n ja generoituu uudelleen lähteestään commitoidulla generaattorilla, joka varmistaa lähteen ja keskeyttää sen sijaan, että tuottaisi luvun. Raportti nimeää, mitkä yhteydet on mitattu ja mitkä pysyvät mallinnettuina, ja mallinnetut on mitattu: havaittu-miinus-laskettu yksisuuntainen etäisyys todellisella datalla on 156 494 m RMS, minkä sama testijoukko vahvistaa JPL Horizonsia vasten samalla jaksolla (195 655 m RMS vektori, huonoin epookki 0,054° — sisäänrakennetun analyyttisen Kuun sarjan itselleen väittämän rajan ~0,3° sisällä). Lisäävä: uusi tyyppi, uusi lukija (realdata::llr_crd) ja uusi moduuli (lunar_llr); olemassa olevat Kuun koordinaatistopaketit on kiinnitetty bitti bitiltä.

  • sigma_ure_m skenaarioparametrina tyypeille lunar-integrity ja moonlight-service-volume. Signaali-avaruudessa-etäisyystarkkuus oli käännösaikainen vakio (LUNAR_SIGMA_URE_M), joten palveluvolyymin pyyhkäisy saattoi vastata vain läpäisi/epäonnistui yhdellä kiinteällä arvolla. Suojaustasot ovat siinä täsmälleen lineaarisia, joten sen paljastaminen muuttaa pyyhkäisyn etäisyystarkkuuden vaatimukseksi koko volyymissa. Oletus toistaa aiemman käyttäytymisen bitti bitiltä.

  • Satelliittikohtainen geometriavienti tyypille moonlight-service-volume: export_site_lat_deg + export_site_lon_deg lisäävät taulukon per_sat_geometry, joka antaa atsimuutin, korkeuskulman ja vinoetäisyyden jokaiseen satelliittiin jokaisella epookilla yhdelle nimetylle selenografiselle paikalle, sekä näkyvyyslipun. Koottu kattavuusyhteenveto tiivistää tarkoituksellisesti satelliittikohtaisen geometrian, mutta vinoetäisyys on täsmälleen se, mitä linkkibudjetti kuluttaa, joten yhteistä viestintä- ja navigointianalyysiä ei voinut tehdä pelkästä yhteenvedosta. Pois päältä, ellei molempia koordinaatteja anneta; puhtaasti lisäävä.

  • lunar_service::topocentric, julkinen katselukulma-apufunktio viennin takana.

  • Varmennusmatriisin rivi uudelle geometriaominaisuudelle.

  • Todellinen antennikuvio geometriavientiin. Moottorissa on ollut tasaisesti valaistun ympyräaukon kuvio P1:stä lähtien (antenna::pattern_gain_dbi, Airyn muoto [2·J₁(x)/x]²), ja mikään muu kuin antenna.rs ei käyttänyt sitä — työn teki sen sijaan pääsuunnan vahvistus yhdistettynä vahvistus-keilanleveys-peukalosääntöön. Valinnainen taulukko export_antenna tyypillä moonlight-service-volume (luetaan vain, kun vientipaikka on asetettu) antaa nyt jokaiselle viedylle riville keilan pääsuunnasta poikkeavan kulman satelliitissa ja lähetysvahvistuksen kohti paikkaa tuosta kuviosta, ja lisää lohkon antenna_pattern, joka raportoi keilassa olevien määrän todellisella kuviolla rinnakkain keilassa olevien määrän kanssa symmetrisellä approksimaatiolla (θ₃dB[deg] = √(31000/G_lin)), erotus nimettynä korjauksena. Molemmat luvut tuotetaan; kumpikaan ei korvaa toista. Mitattuna moottorin oman edustavan Kuun aukon (1 m antenni, 2,4 GHz, η = 0,60) mukaan etelänapa-alueen paikan ja havainnollistavan LCNS-luokan kuoren yli nämä kaksi eroavat toisistaan yli yhden satelliitin verran: todellinen kuvio sijoittaa 0 / 76 näkyvää linkkiä puolitehokeilan sisään, approksimaatio väittää 28 — korjaus on −2,33 satelliittia epookkia kohti, huonoin yksittäinen epookki 3. Approksimaatiolla on oma aukkohyötysuhteensa (0,641 verrattuna sääntöön 70·λ/D astetta, jolla sitä tavallisesti esitetään, 0,920 verrattuna tasaiseen ympyräaukkoon), joten η = 0,60 antennilla se palauttaa keilan, joka on 1,238× liian leveä; lohko tuottaa molemmat implisiittiset hyötysuhteet sen sijaan, että jättäisi ne pääteltäviksi. Puhtaasti lisäävä: dokumentoidussa työpisteessä mitattuna 597 aiemmin olemassa ollutta lehteä, 0 muuttunut, 0 poistettu, 494 lisätty.

  • antenna::symmetric_beamwidth_rad, antenna::symmetric_relation_implied_efficiency, antenna::within_half_power_beam, antenna::HALF_POWER_DROP_DB, antenna::SYMMETRIC_GAIN_BEAMWIDTH_CONST_DEG2, antenna::UNIFORM_APERTURE_HPBW_COEFF ja lunar_service::nadir_off_boresight_rad, sen takana olevat julkiset osat. Kuvio on nyt myös ankkuroitu julkaistuihin Airyn vakioihin eikä vain itseensä: puolitehon ylitys paikannetaan puolitusmenetelmällä ja verrataan arvoon x = 1.61634, mikä tekee tarkan puoliteholeveyden 1.02899·λ/D ja kirjaa rehellisesti, että perinteinen kerroin 1.02 asettaa funktion pattern_gain_dbi arvoon −2,955 dB, ei −3,010 dB.

  • Pitkän muodon toistettavuustaulukko tyypille lunar-time-budget. Skenaarion taulukkoarvoiset tulosteet — keskiarvoistusaikojen ruudukko, seitsemän termikohtaista käyrää x(τ) ja niiden neliösumman neliöjuuri -kokonaissumma — tavoittivat kuluttajat vain JSON-taulukoina. Yksi julkaistu taulukko typistettiin 400 merkkiin ja julkaisi 23 sen 57 keskiarvoistusajasta sarakkeen alla, joka väitti sisältävänsä ne kaikki, ja käsikirjoitus rakensi termikohtaiset käyrät uudelleen suljetuista muodoista, koska moottori ei koskaan tuottanut niitä. Tavallinen ajo kirjoittaa nyt myös <scenario>.table.csv, jossa on yksi rivi kutakin (ruudukon indeksi, keskiarvoistusaika, termi) kohden, jota ei voi typistää miltään näyttäväksi kokonaiseksi. Ruudukon indeksi on täsmällinen liitosavain; τ kirjoitetaan 13 merkitsevällä numerolla ja jokaisen x merkitsevien numeroiden määrä on 7, joten tavut eivät haaraudu saman lähteen koonneissa. Puhtaasti lisäävä: raportin JSON on tavu tavulta identtinen.

  • Tyypin hybrid-optical-rf raportti kuvaa nyt itsensä. Lohko link_configuration kaiuttaa ratkaistut linkkisyötteet — kantoaallon aallonpituus, lähetys- ja vastaanottoaukko, etäisyys, pulssin leveys, integrointiaika, hyötysuhteet ja häviöt — oletukset sovellettuina, jotta artikkeli ilmoittaa konfiguraation, jolla se ajettiin, sen sijaan että siteeraisi lähteestä luettua oletusta. Lohko units antaa jokaisen suureen yksikön ja alkuperäluokan, jonka artikkeli todennäköisesti siteeraa. Luovutuksen kovarianssijäljet ovat syy sen olemassaoloon: ne tuotettiin paljaana variance, ja käsikirjoitus päätteli neliömetrit sisäisestä johdonmukaisuustarkistuksesta. Päätelmä oli oikea, mikä juuri teki siitä vian — mikään ei olisi havainnut sen olevan väärä. Puhtaasti lisäävä: mitattuna neljän konfiguraation yli 456 aiemmin olemassa ollutta kenttää, 0 muuttunut, 0 poistettu, 196 lisätty.

  • Varmennusmatriisin rivi aikabudjetin toistettavuustaulukolle, rehellisesti InternalConsistency / MODELLED — kokonaissumma tarkistetaan saman tiedoston termien neliösummaa vasten, joka jakaa moottorin omat termimääritelmät eikä siksi ole riippumaton oraakkeli. Yhdessä nämä lisäävät kolme riviä. Tämän julkaisemattoman osion kertynyt kokonaismäärä on 168 riviä — 64 VALIDATED, 100 MODELLED, 4 PARTNER.

Muutettu#

  • Kommittien tekijyys koko historiassa on nyt yksi identiteetti, ja kaksi julkaistua cratea osoittaa kommittiin, jota ei enää ole. 2026-09-21 git-historia kirjoitettiin uudelleen siten, että jokaisen ihmisen kommitin tekijä ja kommitoija on ashfordeOU <236818772+ashfordeOU@users.noreply.github.com>. Se kantoi aiemmin kolmea saman henkilön kirjoitusasua — 688 kommittia nimellä ashfordeOU <contact@ashforde.org>, 34 nimellä Chakshu Baweja <contact@ashforde.org> ja 94 jo kanonisessa muodossa. Yksi kommitti, jonka tekijä oli dependabot[bot], jätettiin tarkoituksella omaksi tekijäkseen: botin riippuvuuspäivityksen uudelleenmerkitseminen väittäisi tekijyyttä työhön, jota kukaan täällä ei tehnyt.

    Sisältö ei muuttunut. Uudelleenkirjoitus kosketti vain tekijä- ja kommitoijaotsakkeita, ja se on tarkistettavissa eikä vain väitetty: jokaisen tagin ja jokaisen haaran puu on bitti bitiltä identtinen sen kanssa, mitä se oli ennen. Tagi v0.26.0 ratkeaa edelleen puuhun 92284e9420605568f1bfabb78cd95d383b40f3e2, aivan kuten ennenkin.

    Mitä se maksoi. Kommitin nimi on tiiviste sen puusta, vanhemmista ja tekijäotsakkeista, joten esivanhemman muuttaminen nimeää uudelleen jokaisen jälkeläisen. Julkaisun v0.26.0 kommitti oli dce2dbf7700788cf6de46260c14673c0e5347360 ja on nyt d4921f3025569e00e425e1747d0acfc261e96e18. Kaksi artefaktia tallensi vanhan nimen julkaisuhetkellä eikä niitä voi korjata, koska julkaistu rekisteriversio on suunnitellusti muuttumaton:

    • Paketti kshana 0.26.0 crates.io:ssa — .cargo_vcs_info.json tallentaa arvon dce2dbf…
    • Paketti kshana-mcp 0.26.0 crates.io:ssa — sama sha1, path_in_vcs: mcp/kshana-mcp

    Mikään muu ei vaikutu. npm-paketti ei tallenna kenttää gitHead, eikä PyPI-jakelu tallenna kommittia lainkaan; molemmat tarkistettiin eikä oletettu.

    Ei ole korjausta, joka saisi merkkijonon dce2dbf… nimeämään uudelleenkirjoitetun kommitin: tuo merkkijono on vanha esivanhempihistoria, ja ainoa tapa, jolla se ratkeaa, on pitää uudelleenkirjoitusta edeltävä historia julkaistuna, mikä palauttaisi tekijyyden, jonka uudelleenkirjoitus poisti. Version 0.26.0 alkuperä kulkee siksi tagin kautta eikä tallennetun sha1:n kautta — ja tagi toimittaa identtiset tavut, joista crate rakennettiin. Seuraava julkaisu tallentaa kelvollisen kommitin ilman toimenpiteitä.

Korjattu#

  • Tyypin realtime-frame-eop oletuksena oli EOP-tiedosto ilman ennustusrivejä (G12). Skenaario upotti viisirivisen vain lopullisia sisältävän otteen tiedostosta finals2000A offline-oletuksekseen, joten paljas ajo raportoi predicted_rows.n = 0 ja horisonttikohtainen taulukko perustui 5, 4, 3 ja 2 pariin. Moottori osasi aina lukea ennustusrivin — syötteessä vain ei ollut sellaista. Oletus on nyt sanatarkka IERS 2026 -ote (tools/finals2000A_2026.txt, MJD 61173–61204): 20 Bulletin B:n lopullista ja 12 vain ennusteita sisältävää Bulletin A:n riviä, joten paljas ajo ilman tiedostoargumenttia ja ilman verkkoa raportoi predicted_rows.n = 12 ja horisonttikohtaisen taulukon arvoilla n = 20 / 31 / 30 / 29, ja operatiivisen ennustajan vertailu ja yhtenevyys tuotteen omiin julkaistuihin ennusteisiin täyttyvät myös. Pitkän jakson 45-rivinen ote mitattiin vaihtoehtona ja hylättiin: se on myös vain lopullisia sisältävä, joten se olisi jättänyt predicted_rows.n arvoon 0. Tämä muuttaa julkaistuja lukuja, säännön R4 mukaisesti ja perustajan valtuutuksella: kymmenen kaikkiaan 22 solusta julkaistussa tiedostossa p4_frame_eop.csv ja 24 kaikkiaan 42 täytetystä solusta tiedostossa tests/golden/realtime-frame-eop.csv. Mitattu rapid-miinus-final-navan lattia muuttuu arvoon 0,0678 mas (arvosta 0,0769 mas), mikä on arvo, jonka artikkelin P4 oma napaliikkeen taulukko jo julkaisee arvolla n = 20 — nämä kaksi ovat nyt yhtäpitäviä sen sijaan, että ne erosivat 13,5 %. Jokainen muu luku, jonka P4 tulostaa tästä taulukosta, on ennallaan tulostetulla tarkkuudella. Koko vanha → uusi -luettelo, mukaan lukien kentät, jotka eivät muuttuneet, on tiedostossa docs/revisions/G12-default-eop-cell-changes.md. Vain lopullisia sisältävä ote toimitetaan edelleen, tavutasolla kiinnitettynä ja harjoitettuna: nolla ennustusriviä sillä on tiedoston ominaisuus, ja testi todistaa sen edelleen.

  • Vanhentunut satelliittirajoitin kohteessa moonlight-service-volume. Skenaario rajasi arvon n_sats lukuun 12, vaikka sen oma satelliittitähdistön rakennin tukee lukua 24 ja testi vaatii luvun 24, joten jokainen luvun 12 ylittävä pyydetty määrä pienennettiin äänettömästi ja satelliittimäärän pyyhkäisy palautti identtiset arvot luvun 12 yläpuolella; tulosta ei voinut erottaa aidosta geometrisesta kyllääntymisestä. Raja on nyt rakentimen raja. Tämä on käyttäytymismuutos vain ehdolle n_sats > 12.

  • Sama vanhentunut rajoitin kohteessa lunar-differential-pnt. lunar_dpnt rajasi arvon n_sats lukuun 12 samalla seurauksella, ja tämä päätyi julkaistuun taulukkoon: tiedosto dpnt_nsats_sweep.csv sisältää rivin n = 16, joka on tavu tavulta identtinen rivin n = 12 kanssa, koska moottori palautti kahdentoista satelliitin vastauksen kuudentoista satelliitin otsikolla. Raja on nyt rakentimen raja 24, ja uusi testi lukitsee sen: jokaisen suuremman satelliittitähdistön on sekä ilmoitettava oma määränsä että parannettava suojaustasoa ehdottomasti, jotta rajoitin ei voi palata huomaamatta. Tämä muuttaa julkaistuja lukuja: suojaustaso kohdassa n = 16 muuttuu arvosta 16,92 m arvoon 14,57 m. Kun pyyhkäisy ulotetaan lukuun 24, käyrä on ehdottomasti monotoninen (11,94 m 24 satelliitilla, 29,5 % parempi kuin luvulla 12), joten kyllääntymistä luvulla 12 ei ole: näennäinen tasanne oli rajoitin. Käyttäytymismuutos vain ehdolle n_sats > 12.

0.26.0 - 2026-09-18#

Dokumentaatio-, läpinäkyvyys- ja leikkikenttäjulkaisu. Moottorin toiminta ei muutu: varmennusmatriisissa on 102 riviä: 56 VALIDATED, 42 MODELLED, 4 PARTNER, kuten versiossa 0.25.0.

Lisätty#

  • Crate-tason rustdoc (//! tiedostossa lib.rs), joka kattaa sisääntulokohdat, rehellisyys- ja tasomallin sekä toistettavuuden, jotta docs.rs avautuu oikealle aloitussivulle eikä paljaalle moduuliseinälle.
  • docs/SCENARIOS.md – skenaariolajikohtainen viite kaikille 50 skenaariolajille; se generoidaan funktiosta api::list_scenario_kinds() (ainoa totuuden lähde) työkalulla gen_validation_artifacts, ja sitä vartioi tests/scenarios_reference_doc_sync.rs, joten se ei voi erkaantua lähettäjästä.
  • Moduulidokumentaatio 11 aiemmin dokumentoimattomalle julkiselle moduulille (allan, estimator, fom, hybrid, inertial, models, report, run, scenario, timetransfer, types).
  • Kirjallisuuslähteet viidelle kaavamoduulille, jotka esittivät yhtälön mutta eivät nimenneet lähdettä: batch_ls (Tapley/Schutz/Born; Bjorck), cr3bp (Szebehely; Koon ym.), detection (Kay), attitude_budget (Wertz; Sidi), reentry (Allen-Eggers, NACA TR-1381).
  • Julkaistu tiedosto security.txt osoitteessa kshana.dev koordinoitua haavoittuvuuksien ilmoittamista varten.
  • Ajokohtainen validointitaso leikkikentässä. Yksittäisen ajon laatumittaritaulukossa on nyt jokaiselle mittarille oma VALIDATED/MODELLED-merkki, joka luetaan samasta hausta fomTier(), jota ladattava raportti käyttää (peilaa tiedostoa src/fom_label.rs, joka itse johdetaan varmennusmatriisista), joten elävän luvun vieressä näytetty taso ei voi koskaan olla ristiriidassa kirjanpidon kanssa.
  • lunar-attack-surface leikkikentän valikossa – kaikki 50 lähetettävää lajia ovat nyt yhden napsautuksen päässä (aiemmin 49/50).
  • Viisi uutta ajettavaa ominaisuuskorttia (avaruussää, RF-häiriöarviointi, kestävyys, CCSDS OEM -yhteentoimivuus, KIF), mikä nostaa ajettavien korttien määrän luvusta 11 lukuun 16. Vain API:lle tai kirjastolle tarkoitetut kortit säilyttävät rehellisen dokumentaatiolinkin tekaistun ajopainikkeen sijaan.

Muutettu#

  • Dokumentaation kattavuus on nyt kiristyvä ehto CI:ssä. Skripti check-doc-coverage.sh kääntää kirjaston asetuksella missing_docs, laskee varoitukset ja epäonnistuu vain, jos määrä nousee kiinnitetyn katon (986) yli. Kova #![warn(missing_docs)] asetuksella -D warnings olisi muuttanut noin 1000 tällä hetkellä dokumentoimatonta julkista kohdetta yön yli rakennuksen katkoksi; näin uudet dokumentoimattomat julkiset kohteet kaatavat rakennuksen, kun taas olemassa oleva jälkijäämä puretaan harkitusti.

Korjattu#

  • MCP-työkalun list_scenario_kinds rivi mainosti ”~17 sisäänrakennettua skenaariolajia”, vaikka api::list_scenario_kinds() oli jo jonkin aikaa tarjonnut 50 lajia – agenteille tarkoitettu dokumentti aliarvioi todellisen ominaisuuden kolminkertaisesti. Korjattu todelliseen lukumäärään.
  • CycloneDX SBOM -vastaavuusoraakkeli generoitiin uudelleen päivitetylle riippuvuuskaaviolle (60 komponenttia). Vastaavuustulos ei muutu: nolla normalisoitua skeemavirhettä, ja jokainen atomaarinen lisenssitunniste kuuluu edelleen viralliseen SPDX-luetteloon.

0.25.0 - 2026-07-15#

Lisätty#

  • Viisi ominaisuutta ylennettiin ulkoisesti VALIDATED-tasolle, ja jokainen on nyt ristiintarkistettu riippumatonta kolmannen osapuolen toteutusta vastaan samalle yksikäsitteisesti määritellylle suureelle (ei kehäpäätelmää, offline-tilassa uudelleen generoitavat testiaineistot):
    • IEEE-1139-potenssilakimuunnos Allanin poikkeamaksi kirjaston allantools suljettuja muotoja vastaan kaikille viidelle kohinatyypille (tests/powerlaw_oadev_reference.rs);
    • CRPA MVDR / minimi-normin nollanohjaavan keilanmuodostimen painot numpy/scipy LAPACK -toteutusta vastaan (tests/crpa_reference.rs);
    • Wahba / TRIAD / QUEST -asennonmääritys SciPyn SVD-toteutusta Rotation.align_vectors vastaan kohinattomilla havainnoilla (tests/wahba_reference.rs);
    • CCSDS 502,0 OEM -kovarianssilohkon vaihto, kierrätetty riippumattoman kirjaston oem jäsentimen läpi (tests/ccsds_oem_covariance_reference.rs);
    • neliölakisen sieppauksen havaitsemistilastojen ydin (yleistetty Marcum-Q / P_d / P_fa / kynnys) SciPyn funktioita ncx2/chi2 vastaan (tests/acquisition_reference.rs). Koneellisesti tarkistettu validointimatriisi siirtyy tilaan 56 VALIDATED · 42 MODELLED · 4 PARTNER yhteensä 102 rivillä (aiemmin 51 · 47 · 4). Rehelliset soveltamisalan varaumat säilyvät: esimerkiksi sieppauksen ylennys kattaa vain havaitsemistilastojen ytimen; CFAR/straddling-häviö pysyy tasolla MODELLED.
  • Paikka-avaruuden laatumittarit (fom::positioning_performance): tarkka CEP, SEP ja 2DRMS navigointiratkaisun 3-D ENU -paikkakovarianssista sekä vaakasuuntainen suojaustaso. CEP/SEP ovat tarkat radiaalivirheen mediaanit (eivät lineaarisääntö 0.589·(σ₁+σ₂)), ja ne on ristiintarkistettu kirjaston scipy.stats rayleigh/maxwell-kvantiileja ja riippumatonta NumPy-Monte Carlo -mediaania vastaan (tests/positioning_fom_reference.rs). Korvaa aiemman rehellisen ei-toteutettu-tynkän – funktion allekirjoitus muuttui muodosta (), joka palautti virheen, muotoon (cov_enu, hpl_m), joka palauttaa arvon PositioningFom.
  • Luottamusvälin ekvivalenttinen vapausasteluku (EDF) on viimeistelty kaikille Allan-perheen estimaattoreille (assurance::uncertainty::edf): muokatun Allanin, Hadamardin ja kokonaisvarianssin EDF käyttää nyt Greenhallin ja Rileyn yhdistettyä EDF-algoritmia ja NIST SP 1065 taulukon 7 TOTVAR-muotoa (aiemmin vain limittäisen Allanin EDF oli toteutettu; muut käyttivät sitä äänettömästi), ja ne on ristiintarkistettu kirjaston allantools funktioita edf_greenhall/edf_totdev vastaan (tests/uncertainty_edf_reference.rs).
  • Riippumattomat ulkoiset ristiintarkistukset kuun PNT-geometrialle, DOP:lle, EOP:lle, DRO:lle ja RF-etäisyydenmittausominaisuuksille (tests/validate_p*.rs; testiaineistot ja oraakkeligeneraattorit sijaitsevat hakemistossa tests/fixtures/{p1_footprint,lunar_service,eop_prediction,rf_ranging_precision,dro_family_jpl,p2_independent_dop}/). Jokainen tarkistus ajaa jo toimitetun mallinnetun ominaisuuden sellaisen oraakkelin tuottamaa tulosta vastaan, joka on tehty eri toteutuksella, joten yhtäpitävyys ei ole kehäpäätelmä: kiertoradan lähetys- ja sieppausjalanjälki funktiota scipy.special.j1 vastaan (Cephes – aidosti eri Bessel J1); pintamajakan geometrian DOP riippumatonta NumPy-ratkaisua (HᵀH)⁻¹ vastaan; UT1/EOP-pysyvyysennusteen virheen kasvu saman sanatarkan IERS-aineiston finals2000A rivien erillistä NumPy-uudelleenjäsennystä vastaan; tasomainen kaukainen vastakulkuinen rata -perhe NASA/JPL:n kolmen kappaleen jaksollisten ratojen tietokantaa vastaan; ja RF-etäisyydenmittauksen toistotarkkuusbudjetti ensiperiaatteista johdettua vertailua vastaan. Nämä ovat lisäregressiotodisteita olemassa oleville moduuleille; näiden ristiintarkistustestien lisääminen ei sellaisenaan muuta minkään ominaisuuden merkintää (yllä olevat viisi ylennystä ovat erillisiä, oraakkelilla tuettuja tilamuutoksia tiedostossa src/verification.rs).
  • Skenaario lunar-attack-surface (src/attack_surface.rs, kind = "lunar-attack-surface"): koottu, binäärillä tavoitettava (CLI / Python / MCP / wasm kautta run_toml) P1-kuun signaaliturvallisuusajo, joka yhdistää linkkibudjetin tehovajeen ja sen 12–18 dB:n herkkyyskaistan, tarvittavan häirintä- ja harhautuslähetystehon suhteessa etäisyyteen, kiertoradan sieppausjalanjäljen todellisen antennikuvion alla, seurantasilmukan harhautussieppauksen sisäänvetotuloksen, ilmattoman kappaleen horisonttietäisyyden sekä OSNMA/TESLA-todennusbudjetin. Tyhjä runko toistaa P1-lähtötason.
  • Tehovajeen herkkyyskaista (linkbudget::deficit_sensitivity_band, deficit_power_factor): aito moniakselinen pyyhkäisy (viite × EIRP × vinoetäisyys), joka on rakennettu funktion sweep::SweepAxis varaan ja arvioitu funktion received_signal_power_dbw kautta; se toistaa P1:n 12–18 dB:n kaistan ja täsmäyttää lineaariset kertoimet 32× (pyöristetty) / 36× (pyöristämätön).
  • Kolmiulotteinen harhautussieppauskuutio (spoof_capture::capture_cube): lisää sieppauskarttaan kantoaallon/Dopplerin poikkeaman akselin (J/S × koodipoikkeama × kantoaaltopoikkeama, lukittumisaika solua kohti); nollakantoaaltoleikkaus redusoituu täsmälleen 2-D-kuvaajaksi capture_map.

Muutettu#

  • Harvan monitoriverkon havaitseminen (monitor_network) yhdistää nyt fysikaalisen AGC-tilastoon spoof_monitors ja selenografiseen näkyvyysruudukkoon lunar_service perustuvan laskennan johtaakseen kunkin aseman havaitsemistilaston ja geometrian vapaiden parametrien ja ad hoc -isoympyräpäällekkäisyyden sijaan; monitorikohtaiset ja verkon havaitsemistodennäköisyydet pysyvät kirjaston detection khiin neliö/Marcum-Q-suljettuina muotoina. Kentät SurfaceMonitor / SpoofEvent muuttuivat fysikaalisiksi (leveys/pituus/korkeus/teho) suureiksi.

Korjattu#

  • OSNMA/TESLA-todennuksen lisäkuorman mitoitus (nma_budget): sivukohtaiset OSNMA-kenttäosuudet (8-bittinen HKROOT + 32-bittinen MACK 2 s:n sivua kohti) oli merkitty virheellisesti alikehyskohtaisiksi kokonaisuuksiksi, mikä aliarvioi lisäkuorman kertoimella 15 (1,33 bit/s). Korjattu julkaistuihin SIS-ICD:n 30 s:n alikehyskohtaisiin kokonaisuuksiin (HKROOT 120 + MACK 480 bittiä ⇒ 20 bit/s). Seuraus kerrotaan nyt rehellisesti: 50 bit/s:n AFS-navigointisanomanopeudella todennuksen lisäkuorma on ensimmäisen kertaluvun ≈40 %:n kustannus eikä vähäinen muutaman prosentin osuus; kenttä auth_latency on dokumentoitu avaimen julkistamisen viiveeksi (alaraja päästä päähän -ajalle ensimmäiseen todennettuun paikkaratkaisuun).

0.24.0 - 2026-07-09#

Laaja ominaisuusjulkaisu. Se tuo kaksi täysin ulkoisesti validoitua analyysipakettia – täydellisen monikriteerisen päätösanalyysin (MCDA) perheen ja Allanin vaeltelun / pitkän τ:n kellovakauden estimaattorit – ja avaa alustan päälle uuden ajettavan kuun aikabudjetin, reaaliaikaisen koordinaatiston/EOP:n, optisen/RF-hybridin, kuunläheisen havaittavuuden ja kerrostetun PNT:n konfliktikestävyyden skenaariokerroksen sekä kuun pintamajakan ja signaaliturvallisuuden ominaisuusalustan. Koneellisesti tarkistettu validointimatriisi kasvaa tilaan 51 VALIDATED · 47 MODELLED · 4 PARTNER yhteensä 102 rivillä (aiemmin 40 · 47 · 4 yhteensä 91 rivillä): kaikki yksitoista uutta riviä ovat päätösanalyysin ja ajoitusestimaattorien ulkoisia oraakkelivalidointeja, jotka on tarkistettu riippumattomia kirjastoja (SciPy, pymcdm, pyDecision, allantools) vastaan tiukalla toleranssilla, kun taas uusi PNT-ominaisuuspinta näytetään rehellisesti tasona MODELLED. Kuten aina, mitään numeerista mallinnusväitettä ei ylennetä ilman ulkoista aineistoa sen takana.

Lisätty#

Ajettavat skenaariot – kukin rekisteröity skenaariolaji kind, lähetetty moottoriin ja CI:ssä päästä päähän todistettu testillä tests/determinism.rs (se ajaa jokaisen mukana toimitetun tiedoston scenarios/*.toml ja kaatuu kovasti jokaiseen ajokelvottomaan testiaineistoon):

  • Kerrostetun PNT:n konfliktikestävyys (conflict-resilience, src/conflict_resilience.rs) – siemenluvulla toistettava Monte Carlo -kestävyysmoottori monikerroksiselle PNT-arkkitehtuurille, jossa on §4,2 vektorikohtainen sulava heikkeneminen ja säilyminen -malli (neljä nimettyä uhkavektoria, käyttökelpoisen PNT:n säilymisen suljettu muoto, johon kunkin kerroksen Monte Carlo suppenee ja joka tulostetaan tulos-JSON:iin) sekä dokumentoitu, ajautumiselta suojattu uhkaparametrien alkuperä (src/conflict_threat_params.rs). MODELLED-arkkitehtuurit; säilymisen Monte Carlo → suljettu muoto -suppeneminen on validoitu ydin.
  • Kuunläheinen havaittavuus (cislunar-observability, src/cislunar_observability.rs) – havaittavuus-Gramin matriisin ominaisarvospektri kaaren yli, differentiaalikorjattu kaukaisen vastakulkuisen radan (DRO) siementäjä sekä riippumaton neliöjuuri-informaatiosuodattimen ristiintarkistus, jonka posteriorikovarianssi muuttuu äärelliseksi täsmälleen täydellä havaittavuusasteella. MODELLED-satelliittitähdistö; aste/Gram/STM/SRIF-invariantit ovat validoitu ydin.
  • Heterogeenisen optisen/RF-hybridin jatkuvuus ja eheys (hybrid-optical-rf, src/hybrid_integrity.rs, src/optical_availability.rs, src/optical_linkbudget.rs, src/cross_raim.rs) – toimialat ylittävä saatavuus ja eheys, kun optinen ja RF-PNT yhdistetään. MODELLED.
  • Endogeeninen kuun aikabudjetti (lunar-time-budget, src/lunar_time_budget.rs) ja reaaliaikainen koordinaatiston / EOP:n budjetti (realtime-frame-eop, src/realtime_frame_eop.rs, src/frame_eop.rs) – kuun ajan ja Maan orientaation P3/P4-budjetit johdettuina endogeenisesti ajoitusketjusta eikä väitettyinä. MODELLED.

Ulkoisesti validoidut analyysipaketit – kirjastoominaisuuksia, jotka kukin tulevat matriisiin uusina VALIDATED-riveinä (tarkistettu riippumatonta ulkoista oraakkelia vastaan, ei itsetarkistuksena):

  • Täydellinen monikriteerisen päätösanalyysin (MCDA) paketti (src/mcda/) – neljä menetelmäperhettä: arvon aggregointi (WSM, WPM, WASPAS), suhdejärjestelmä (MOORA) ja suhteellinen (COPRAS), etäisyys ihanteeseen (TOPSIS), kompromissiohjelmointi (VIKOR) ja ohittaminen (PROMETHEE II kuudella yleistetyn kriteerin muodolla, ELECTRE I samansuuntaisuus/erisuuntaisuus) – sekä AHP:n Perronin ominaisvektoriprioriteettipainot Saatyn johdonmukaisuussuhteen (CR < 0,10) portilla, MAUT-hyöty, Pareto-rintaman poiminta ja painojen herkkyysanalyysi. Yhdeksän aggregaattoria toistavat kirjastojen pymcdm / pyDecision tulokset ja AHP:n ominaisvektori vastaa SciPy/LAPACK-tulosta, kaikki tarkkuudella < 1e-9 (tests/mcda_*_reference.rs). Herkkyystornado näytetään myös konfliktikestävyysskenaarion sisällä.
  • Allanin vaeltelun ja pitkän τ:n kellovakauden estimaattorit (src/allan.rs) – MTIE (ITU-T G.810/G.823/G.8261 -huipusta huippuun aikavirhevaeltelutilasto, jota vasten synkronointimaskit on kirjoitettu), MDEV ja TDEV aika-alueen vaeltelu sekä Theo1 / TOTVAR laajennetun alueen estimaattorit. VALIDATED kirjastoa allantools vastaan NIST SP 1065 -sarjalla; TOTVARin varaan rakennettu harhasta puhdistettu ThéoH-hybridi pysyy rehellisesti tasolla MODELLED.
  • Varmistus- ja ulkoisen oraakkelin testikehys (src/assurance/) – oraakkelikehys, joka on kytketty suoraan CI:n rehellisyysporttiin, W3C-PROV-alkuperätietue deterministisellä Merkle-juurella sekä Greenhallin ekvivalenttinen vapausaste ja khiin neliön luottamusvälit vakausestimaateille.
  • PackRegistry / ExternalPack -laajennusliitos (src/registry.rs, src/api.rs) – lähetysliitos, jonka kautta ominaisuuspaketit reitittyvät yhden rekisterin läpi (sisäänrakennettu lähetys on CLI:n kuumalla polulla; puun ulkopuoliset paketit liittyvät oletusarvoisen kohdan ExternalPack::register_into taakse), jota vartioivat kultaisen tavutarkan identtisyyden vastaavuustestipaketti sekä erillinen / wasm32-CI-portit.

Mallinnettu ominaisuusalusta – uusia kirjastomoduuleja, jotka palvelevat yllä olevia ja tulevia skenaarioita (ei vielä erillinen skenaariolaji kind):

  • Kuun pintamajakan DOP (src/lunar_beacon.rs) toteutuneen tarkkuuden budjetilla, N-satelliitin pyyhkäisyllä ja GDOP-kartalla sekä häiriintynyt kuun efemeridi (src/lunar_perturbed.rs) ja ilmattoman horisontin geometria / harhautustehon käänteisfunktio / AFS-vajeen kaista (src/jamming.rs, src/linkbudget.rs). Käyttää uudelleen gnss_lib_py:llä validoitua DOP-ydintä.
  • LOLA-muotoisen DEM:n sisäänluku + maaston näköyhteys (src/realdata/lola_dem.rs).
  • Signaaliturvallisuuden kolmikerroksinen puolustus – harhautussieppaus, anturien välinen eheys ja monitoriverkon mitoitus (src/spoof_capture.rs, src/cross_sensor_integrity.rs, src/monitor_network.rs) sekä kiertoradalta tulevan keilan antennijalanjälki ja OSNMA-todennusbudjetti (src/antenna.rs, src/nma_budget.rs). MODELLED.

Muutettu#

  • Validointimatriisi ja kaikki johdetut artefaktit generoitiin uudelleen yhdestä totuuden lähteestä (src/verification.rs): sivuston kirjanpito, moduulikartta- ja validoinnin alkuperäkaaviot sekä README- ja pintakohtaiset lukumerkkijonot ilmoittavat nyt 51 / 47 / 4 luvusta 102 (aiemmin 40 / 47 / 4 luvusta 91); lukujen rehellisyysvartija skannaa nyt koko git-historian, ja README:n kuvat on yhtenäistetty tummaan tuotepalettiin.
  • Yksi jaettu mukautuva integrointiajuri tukee nyt sekä funktiota integrate että funktiota integrate_dopri (src/integrator.rs), mikä poistaa päällekkäisen askeltimen.
  • SonarQube Cloud -staattinen analyysi lisättiin CI:hin (Rust + tuotu kattavuus), ja README:ssä on tietoturvan, ylläpidettävyyden ja luotettavuuden luokitusmerkit.
  • Kolmannen osapuolen tekoälyasiakkaita nimeävä kohta on jätetty tästä pois; se on tiedostossa CHANGELOG.md GitHubissa.

  • Julkaisu- ja paketointikuri: CI rekisteröi käyttöönottoympäristön jokaista paketti- ja rekisterijulkaisua varten, ja kohdennettu julkinen erillinen työ on rajattu pois hitaista validointibinääreistä.
  • Tekijyysmerkintöjen puuttumisen hygieniavartija on rajattu vain tekijyysmerkkeihin, joten integraatioalustan tai tuotteen nimeäminen ei enää kaada rakennusta.
  • Dokumentaatio: README:n Citing-osio luettelee nyt neljä julkaistua arXiv-esijulkaisua, ja pintamajakan DOP-ominaisuus on dokumentoitu kuun rivillä.

Korjattu#

  • Kokonaislukusilmukkalaskurit liukulukuohjatuille silmukoille (Sonar S2193).
  • Tarkka khiin neliön käänteisfunktio matalilla vapausasteilla Newtonin tarkennuksella varmistuksen luottamusvälipolulla.
  • kshana.dev: standardiosio avautuu nyt oletuksena ja kirjanpidon lukumäärän varaarvo on korjattu; vanhentuneet README- ja sivustomerkkijonot havaittavuuskerroksen ympärillä synkronoitu.

0.23.0 - 2026-06-29#

Ominaisuusjulkaisu, joka lisää yleisen Fisher-informaatio / Cramér–Rao -havaittavuus- ja optimaalisen koesuunnittelun kerroksen, sekä julkaisu, jonka varaan kuun PNT:n havaittavuusartikkeli nojaa. Koneellisesti tarkistettu validointimatriisi kasvaa tilaan 40 VALIDATED · 47 MODELLED · 4 PARTNER yhteensä 91 rivillä (aiemmin 39 · 46 · 4 yhteensä 89 rivillä): uusi estimointimoottori on tarkistettu ulkoista oraakkelia vastaan ja on VALIDATED; sen kuusovellus on rehellisesti MODELLED. Kuten aina, mitään numeerista mallinnusväitettä ei ylennetä ilman ulkoista aineistoa sen takana.

Lisätty#

  • src/fim.rs – Fisher-informaatio, Cramér–Rao-rajat ja optimaalinen koesuunnittelu. Yleinen, uudelleenkäytettävä estimointiteorian moottori: Fisher-informaatiomatriisi M = HᵀWH mittausjakobiaanista ja painoista; symmetrinen ominaisarvoratkaisija (syklinen Jacobi); Cramér–Raon alaraja käänteismatriisin kautta tai Moore–Penrosen pseudokäänteismatriisin ja nolla-avaruuden kannan kautta, kun informaatio on asteeltaan vajaa (vapaan verkon / datumin vajeen tapaus); sekä D-, A-, E- ja T-optimaaliset koesuunnittelumittarit valitsimella best_design ehdokasgeometrioiden yli. VALIDATED NumPya (eigh/inv) ja Kayn (1993) julkaistuja suljetun muodon rajoja vastaan tarkkuudella 1e-9 (tests/fim_observability_reference.rs), joten se tulee matriisiin ulkoisen oraakkelin rivinä eikä itsetarkistuksena.
  • Kuun yhteisen radanmäärityksen havaittavuus (lunar_observability tiedostossa src/lunar_combination.rs, esillä kuun yhdistelmäraportissa): soveltaa FIM/CRLB-moottoria yhteiseen rata- ja kelloratkaisuun paljastaakseen absoluuttisen asemadatumin vajeen, sen asteen palautumisen, kun Maa-peruslinjan asemia lisätään, saavutetun asemapaikan CRLB:n sekä E-optimaalisen ehtoluvun. Rehellisesti MODELLED – estimointimoottori on ulkoisesti validoitu, mutta kuuverkko, johon sitä sovelletaan, on edustava simulaatio, eikä mikään nykyinen aineisto voi muuttaa tuota geometriaa mittaukseksi.
  • Edustava elliptinen kuun jäädytetty rata (ELFO) -geometria kuun yhdistelmäskenaariolle (orbit_ecc, orbit_inc_deg, orbit_argp_deg, orbit_planes; ympyräsijoittelu pysyy oletuksena) sekä ilman VLBI:tä laskettu havaittavuuskenttä raportissa, jotta datumivajeen tulos voidaan osoittaa geometriasta riippumattomaksi. Sama 3→1→0 -porrasjono ja kolmen aseman kynnys pätevät Moonlight/LCNS-perheen ELFO-radalla, ja kolmella Maan VLBI-peruslinjalla absoluuttinen asemapaikka on havaittavissa alle metrin rajalla – lukittu testillä elfo_geometry_confirms_the_observability_structure. Edelleen MODELLED.

Muutettu#

  • Validointimatriisi ja kaikki generoidut todistusartefaktit generoitiin uudelleen yhdestä totuuden lähteestä (src/verification.rs): kirjanpito (web/data/verification-matrix.json), docs/VERIFICATION-MATRIX.md, docs/MODELLED-RATIONALE.md, validoinnin jakauma- ja oraakkelilajikuvat sekä README:n lukumerkkijonot kaikilla jakelupinnoilla ilmoittavat nyt 40 / 47 / 4 luvusta 91.

0.22.1 - 2026-06-29#

Vain paketointia koskeva korjausjulkaisu. Ei muutoksia moottoriin, skenaarioihin tai tuloksiin; validointimatriisi pysyy ennallaan: 39 VALIDATED · 46 MODELLED · 4 PARTNER yhteensä 89 rivillä.

Korjattu#

  • npm-julkaisu: crate-manifestista johdettu paketin kenttä repository.url käytti väärän kirjainkoon GitHub-omistajaa (AshfordeOU), mikä epäonnistui npm:n sigstore-alkuperän varmennuksessa (se vertaa omistajaa kirjainkoon mukaan). Manifestin kenttä repository on nyt kanoninen pienaakkosmuoto ashfordeOU, joten generoitu package.json vastaa alkuperän kohdetta ja npm-julkaisu onnistuu.

Muutettu#

  • Wheel-rakennus kiinnittää asetuksen codegen-units = 1, jotta manylinux-wheel on tavutarkasti toistettava uudelleenrakennusten välillä (uudelleenrakennus-ja-vertailu-toistettavuustarkistus).

0.22.0 - 2026-06-29#

Konsolidointijulkaisu, joka keskittyy todisteisiin, alkuperään ja jakelukuriin. Koneellisesti tarkistettu validointimatriisi kasvaa tilaan 39 VALIDATED · 46 MODELLED · 4 PARTNER yhteensä 89 rivillä (aiemmin 15 · 42 · 4 yhteensä 61 rivillä), kun mallinnettuja ominaisuuksia on ristiinvalidoitu riippumattomia ulkoisia oraakkeleita vastaan. Jokaisella jaetulla artefaktilla on nyt kryptografinen SLSA-rakennusalkuperätodistus, siihen kuuluu CycloneDX SBOM, ja se julkaistaan samassa tahdissa kaikilla pinnoilla. Mitään numeerista mallinnusväitettä ei ylennetä ilman ulkoista aineistoa sen takana; uusi ominaisuus pysyy rehellisesti tasolla MODELLED.

Lisätty#

  • Asentodynamiikka (src/attitude_dynamics.rs, MODELLED) – vääntömomentiton jäykän kappaleen Eulerin yhtälöt + kvaternionikinematiikka (RK4), säilymislakien itsetesteillä (kvaternionin normi, liike-energia, |Iω|, symmetrisen vaakkupyörän prekessio).
  • Mallinnettujen ominaisuuksien ristiinvalidointi riippumattomia ulkoisia oraakkeleita vastaan, mikä nostaa validointimatriisin tasolle 39 VALIDATED -riviä, joista jokaisen takana on ulkoinen aineisto (CI:n rehellisyysportti kieltää tilan VALIDATED ilman sellaista). Uusimmat ulkoisten oraakkelien validoinnit: optisen kellon mitattu vakauskäyrä (quantum_trade ADEV-käyrän sovitus toistaa Norcian ym. julkaiseman ⁸⁸Sr-optisen hilakellon σ_y(τ):n, Science 366:93 (2019), Zenodo 10.5281/zenodo.3382347, CC-BY-4.0, mukana hakemistossa tests/fixtures/optical_clock_adev/); GPS L1 C/A -levityskoodin generointi (src/sdr.rs G1/G2 LFSR toistaa IS-GPS-200:n taulukon 3-Ia koodivaiheen oktaalit PRN-numeroille 1–9); sekä SRTM-korkeusmallin lukija todellisessa maastossa (src/altpnt/terrain.rs lukee mukana toimitetun yleisaineistona olevan NASA/USGS SRTM v3 -laatan, N36W117 / Kuolemanlaakso, ja sijoittaa Badwater Basinin dokumentoidulle mittausvälille).
  • Uudet MODELLED-ominaisuudet, kukin sisäisesti ristiintarkistettu suljettua muotoa tai sisarkoodipolkua vastaan: Clohessy–Wiltshire / Hill -suhteellisen liikkeen dynamiikka, TDOA/FDOA-passiivinen lähettimen paikannus, Wahba/TRIAD/QUEST-asennonmääritys, GNSS-kantoaallon vaiheen kokonaislukuepävarmuuden ratkaisu (LAMBDA), B-tason kohdistus ja yhdistetyn kartioleikkauksen gravitaatioavustus, CRPA-häirinnänestoryhmän keilanmuodostus, GNSS:n neliölakinen sieppaustilastot, kvantti-inertia-anturin häiriökuvion epäselvyys / dynaaminen alue, IEEE-1139-potenssilakikellokohina + flicker-FM-lattia sekä CCSDS-OEM-kovarianssilohkon vaihto.
  • Yhden lähteen todistekirjanpito generoiduilla varmennusdokumenteilla ja ajautumisvartijalla; selattava validointikirjanpito sivustolla kshana.dev korttikohtaisilla todistelinkeillä.
  • Koneluettavat viittausmetatiedot – codemeta.json (CodeMeta 2,0) ja .zenodo.json, kiinnitetty Cargo-manifestiin testillä tests/citation_metadata_doc_sync.rs.
  • Toimitusketjun alkuperä – SLSA-rakennusalkuperätodistus crate-tarballille, wheeleille, sdistille ja npm-tarballille; PyPI OIDC Trusted Publishing; CycloneDX SBOM toimitettuna wheelin ja npm-paketin sisällä; toistettavan rakennuksen vertailu ja julkaisun jälkeinen varmennus.
  • Löydettävyys – robots.txt, sitemap.xml sekä Open Graph / JSON-LD -metatiedot sivustolla kshana.dev; matriisista johdettu generoitu kuva validation-breakdown.
  • Pintakohtaiset README-tiedostot crates.io:lle / PyPI:lle / npm:lle lukumäärien rehellisyysvartijalla.

Muutettu#

  • Sagnac-ajansiirron oraakkeli ylennettiin tasolle ExternalDataset – päiväntasaajan kiertävän kierroksen Sagnac-korjaus tarkistetaan nyt Ashbyn julkaisemaa arvoa 207,4 ns vastaan (Living Reviews in Relativity 6:1, 2003, yhtälö 1,29; toistettu tarkkuudella < 0,05 ns). Yhdistetty ajansiirtoominaisuus pysyy rehellisesti tasolla MODELLED.
  • Dokumentaatio, kaaviot ja kuvat päivitettiin elävään matriisiin (39/46/4/89): validoinnin alkuperäkaavio, kuva oracle-kind-stacked (nyt generoitu matriisista CI-ajautumisvartijalla), VALIDATION/PROVENANCE/CAPABILITY/QUANTUM-MODELS/WHEEL_TAGS, arkkitehtuuri- ja opasdokumentit sekä kshana.dev-kirjanpidon kokonaissumma.
  • Lähdepuu muotoiltiin uudelleen kiinnitetyllä rustfmt-työkalulla (toolchain 1.93.0) – pelkkää tyyliä, ei käyttäytymismuutosta.
  • Samassa tahdissa etenevä versiointi. Jokainen jakelupinta (crate, PyPI, npm, MCP-crate + OCI-kuva, JetBrains-liitännäinen) versioituu nyt samassa tahdissa moottorin kanssa, ja tämän valvoo CI:ssä scripts/check-version-sync.sh.
  • JetBrains-liitännäinen lisensoitiin uudelleen lisenssillä AGPL-3.0-only (julkaistu 0.1.1 ilmoitti vielä Apache-2.0:n) ja johtaa nyt Marketplace-versionsa julkaisutunnisteesta.
  • Robustisuuden koventaminen – ei-testikoodin kutsut unwrap poistettu tai perusteltu; clippy::unwrap_used portitettu ei-testikoodille.
  • kshana.dev-sivuston todiste edellä -uudistus: hallitseva hero-osio, arkkitehtuurikaaviot ja tuloskuvat, i18n sekä kokoon taittuvat ja responsiiviset kirjanpito- ja standardiosiot.

Korjattu#

  • SP3-tarkka efemeridi – IGS:n Maan pyörimisen solmukorjaus sovelletaan interpoloinnin aikana.
  • Rekisterikuvat – PyPI-, crates.io- ja npm-README-tiedostot käyttävät absoluuttisia kuva-URL-osoitteita; pää-README:n suhteelliset kuvapolut näkyivät rikkinäisinä kuvina PyPI:n 0.21.0-sivulla. CI-vartija (tests/surface_readme_image_urls_doc_sync.rs) estää regression.
  • CI – fmt + clippy vihreitä; lopeta kääntäminen git-ohitettua todellista dataa vasten.

Testit#

  • Kalmanin kellokovarianssi pysyy positiivisesti semidefiniittinä ja symmetrisenä (ominaisuustesti, tests/property.rs).
  • Dokumentaation synkronointivartijat: jokainen julkinen validointilukumerkkijono, viittausmetatiedot, generoitu kuva ja pintojen README-kuva-URL-osoitteet on kiinnitetty totuuden lähteeseensä.

0.21.0 - 2026-06-26#

Tämä julkaisu lisää avoimeen moottoriin kaksi MODELLED-sovellusten pakettia – kvanttipohjaisen PNT:n demonstraattorin (luotettu kvanttiajansiirto, GNSS-vapaa kvanttinavigointi, kvanttivika- ja poikkeamahavaitseminen) ja kuun / kuunläheisen PNT:n paketin (kuun koordinaattiaika, kuun VLBI, yhteinen radanmääritys + kello, koordinaatiston realisointi, palvelualue, differentiaalinen PNT, yhteentoimivuusvienti) – kumpikin ajettavissa yhdestä kohdasta kind, kumpikin tuottaa rehellisen tietueen TradeEvidence sekä edustavuus- ja lentoon-puuttuvat-asiat -kirjanpidon. Se tuo myös kuusi uutta ulkoisen oraakkelin validointia, mikä nostaa koneellisesti tarkistetun validointimatriisin tilaan 15 VALIDATED · 42 MODELLED · 4 PARTNER yhteensä 61 rivillä. Uudet sovellusluvut ovat MODELLED ja perustuvat havainnollistaviin julkisen lähteen parametreihin – ei TRL-tasoa, lentoperintöä, sertifiointia eikä viraston hyväksyntää – ja niiden käyttämät validoidut ytimet on merkitty sellaisiksi.

Lisätty#

  • Kvanttipohjaisen PNT:n demonstraattoripaketti (quantum-time-transfer, quantum-gnss-free-nav, quantum-anomaly-detect). Kolme ajettavaa MODELLED-sovellusaluetta moottorin takana, kukin tuottaa tietueen TradeEvidence sekä edustavuus- ja lentoon-puuttuvat-asiat -tietueen:
    • Luotettu kvanttiajansiirto (src/timetransfer_chain.rs) – optinen hilakello + fotoninen linkki vs. CSAC + RF-kaksisuuntainen budjetti, joka käyttää uudelleen ajoituksen suojaustasoa, viive- ja toistohyökkäyksen turvallisuusmittarilla (1 − P_md) sekä kelloanomalian havaitseminen + CUSUM-viive.
    • GNSS-vapaa kvanttinavigointi (src/quantum_nav_od.rs) – kylmäatomi-interferometrin inertiaalinen vapaa liike vs. navigointiluokan INS GNSS-katkon yli; rehellisesti todetaan, että ilman ulkoista paikkaratkaisua kiihtyvyysmittarin harha pysyy havaitsemattomana, joten virhe kasvaa silti.
    • Kvanttivika- ja poikkeamahavaitseminen (src/quantum_faults.rs) – nimetty vikaluettelo, bootstrap-luottamusvälillinen ROC AUC ja pienin havaittava vika kiinteällä väärän hälytyksen asteella.
    • Jaettu kvanttilaitteiden virhemallikirjasto (src/quantum_devices.rs) ja yhtenäinen kvantti vs. klassinen -vaihtokauppakehys (src/qtrade.rs) tukevat kaikkia kolmea.
  • Kuun / kuunläheisen PNT:n paketti. Seitsemän ajettavaa MODELLED-lajia kind CR3BP-ytimen päälle kerrostettuina: kuun koordinaattiaika (LTC/TCL − TT sekulaarinen nopeus, src/lunar_time.rs), geodeettinen kuun VLBI -viivehavaittava (src/lunar_vlbi.rs), yhteinen monitekniikka-radanmääritys + kello -eräestimaattori (src/lunar_combination.rs), koordinaatiston realisointi (7-parametrinen Helmert + IAU 2015 WGCCRE-sidonta, src/lunar_frame_realise.rs), Moonlight / LCNS-luokan palvelualueen analyysi (src/lunar_service.rs), kuun differentiaalinen PNT (src/lunar_dpnt.rs) sekä LunaNet / IOAG-yhteensopiva yhteentoimivuusvienti (CCSDS-OEM + kuun aika-asteikko KIF-kirjekuoressa, src/lunar_interop.rs). Kaikki MODELLED havainnollistavista julkisen lähteen parametreista; ei validoitu todellista VLBI- tai Gateway-seurantaa vastaan; ei viraston yhteyttä tai hyväksyntää.
  • Kuusi uutta ulkoisen oraakkelin validointia (validointimatriisissa on nyt 15 validoitua):
    • ADEV / HDEV todellisella 5071A-cesiumkellolla – validoitu Stable32:n vuosikymmenpisteviitteitä vastaan (tests/cs5071a_reference.rs).
    • OADEV / MDEV / TDEV Stable32:n viiteaineistolla PHASE.DAT – validoitu Stable32:n julkaistuja taulukoita vastaan (tests/phasedat_reference.rs).
    • Poikkeamahavaitsemisen ROC AUC todellisella ESA:n OPS-SAT-telemetrialla – validoitu scikit-learnia vastaan (tests/opssat_ad_reference.rs).
    • ICGEM-gravitaatiofunktionaalien synteesi – validoitu GRS80-normaaligravitaatiostandardia vastaan (Somigliana γ tarkkuudella 3.5e-12; EGM2008-häiriökartta, tests/icgem_gravity_reference.rs).
    • Klobucharin lähetetty ionosfäärimalli – validoitu RTKLIB:ia vastaan (tests/klobuchar_reference.rs).
    • RAIM-havaitsemisydin (171 tapausta, tests/raim_reference.rs) ja SBAS DO-229E -suojaustaso todellisella EGNOS-datalla (RTKLIB SBAS-PL -haara, tests/sbas_reference.rs) – molemmat validoitu ulkoisia oraakkeleitaan vastaan.
  • Edustavuus- ja lentoon-puuttuvat-asiat -kirjanpito (src/representativeness.rs). Jokaisen demonstraattorin tuottama rakenteinen tietue – mikä on edustavaa, mikä on yksinkertaistettua ja mikä erottaa mallin lennosta – on rehellinen kumppani jokaiselle MODELLED-vaihtokaupalle.
  • Tutkimusten aggregointi ja CLI-ergonomia. Skenaariopaketin manifesti yhden komennon tutkimusaggregoinnilla, tiivisteen mukaan vakaat tutkimuksen metatiedot + --study-name, skenaarioiden linttaus komennolla --validate sekä laatumittarikohtainen validointitason näyttö tutkimusraporteissa.

Muutettu#

  • kshana.dev suunniteltiin uudelleen jaetun toimialarungon ympärille – ominaisuudet ja validointi yhdistettiin yhdeksi toimialaselaimeksi yhteisellä sanastolla, uudet validoidut saarekkeet nostettiin esiin, lisättiin maa-alueiltaan tarkka animoitu Maa-instrumentti ja tutkimuspyyntö-CTA sekä Ashforde OÜ:n brändäys ja linkit.
  • README ja ARCHITECTURE auditoitiin täydellisyyden ja rehellisyyden osalta – vanhentuneet validoitujen lukumäärät korjattiin (nyt 15 ulkoista oraakkelia), kaaviot laajennettiin, ja viitattiin ehdolliseen ajoituksen suojaustasoon (arXiv:2606,24210) ja RF-häiriöiden optimismiaukon (arXiv:2606,22054) esijulkaisuihin.
  • Hakemiston paper/ lähteet ja JOSS-luonnoksen putki säilytetään julkisessa repossa.

0.20.0 - 2026-06-22#

Tämä julkaisu lisää avoimeen moottoriin neljä tutkimusominaisuutta – ehdollisen ajoituksen suojaustason, viitekehykseen sovitetun PNT-kestävyyspisteytyksen, RF-häiriöiden optimismiaukon arvioinnin sekä ohjelmistoradiovastaanottimen / todellisen datan etupään – kukin toistettavissa yhdestä komennosta ja kirjoittaa tavutarkasti deterministisen artefaktin. Kaikki tutkimukset ovat MODELLED (synteettinen tai julkisen aineiston kalibrointi), ne kantavat rehellisen alkuperänsä (moottorin versio, siemenluvut, konfiguraation tiiviste) ja validointimerkintänsä, eivätkä ne ole sertifiointeja.

Lisätty#

  • Ehdollinen ajoituksen suojaustaso (tpl). Holdover-rajoitteinen yläraja havaitsemattomalle aikavirheelle GNSS-harhautuksen aikana, k-sigma-monitorilattialla, van Loanin vapaan liikkeen varianssilla havaitsemisviiveen yli ja CUSUM-aika-hälytykseen. Kalibroitu todellisella tallennetulla hyökkäyksellä (JammerTest 2024, skenaario 2.1.1) komennolla cargo run --release --example tpl_jammertest, joka toistaa sen viitetaulukon julkisesta tallenteesta palautetuista skalaareista (raakaa aineistoa ei jaeta edelleen).
  • Viitekehykseen sovitettu PNT-kestävyyspisteytys + päätösepävakauden tutkimus (resilience). Arkkitehtuurimalli, RPCF-yhteensopiva pisteytys, Dirichlet-painosimpleksi, Kendallin tau ja top-1-käännösasteen epävakaus sekä yhteisen moodin monimuotoisuuden romahdus (Hill-N2), komennolla cargo run --release --example resilience_report -- paper-artifacts/resilience-study.json. Vastaavuustaulukko kohteessa docs/RESILIENCE-CROSSWALK.md.
  • RF-häiriöiden optimismiaukon tutkimus (impairment_study, impairment_ml, eval_stats). 13 ilmaisimen paneeli parametripohjaisella synteettisellä korpuksella, jakauman sisäinen vs. ulkopuolinen optimismiaukko, skaalauslakitrendit permutaationollalla sekä leave-one-out-heikkenemisen ennustin, komennolla cargo run --release --example optimism_study -- paper-artifacts/optimism-study.json.
  • Ohjelmistoradiovastaanottimen etupää (sdr) ja todellisen datan adapterit (realdata/). Raaka IQ/IF korrelaattoriosoituksiin ja SQM:ään sekä sisäänluku-adapterit (RINEX, u-blox UBX, GnssLogger, JammerTest, Yunnan, SatGrid) ja koe-esimerkit. Nämä lukevat käyttäjän paikallisesti toimittamia tallenteita; tallenteita ei sitouteta repoon.
  • Sitoutetut tutkimusartefaktit. Tavutarkasti deterministiset optimism-study.json ja resilience-study.json seurataan nyt hakemistossa paper-artifacts/, jotta tutkimusten luvut voi tarkistaa ilman uudelleenrakennusta; ne pysyvät uudelleen generoitavina yllä mainituista generaattoreista. Raakaaineistot pysyvät repon ulkopuolella (/realdata-cache/).

Muutettu#

  • Versio nostettiin tasolle 0.20.0 kohteissa Cargo.toml, CITATION.cff ja README; ristiinvaikutustutkimuksen artefaktit generoitiin uudelleen, jotta niiden leima vastaa julkaistua versiota.

0.19.0 - 2026-06-18#

Muutettu#

  • Lisenssi vaihdettiin Apache-2.0:sta GNU AGPL-3.0-only-lisenssiin, ja kaupallinen lisenssi on saatavilla Ashforde OÜ:lta (kaksoislisensointi). Avoin moottori pysyy täysin avoimena ja julkisesti varmennettavana; AGPL:n verkkokopioleft (§13) tarkoittaa, että suljetun tai isännöidyn johdannaisen on palattava avoimeen lähdekoodiin – tai otettava kaupallinen lisenssi. Tämä suojaa validoitua ydintä haarauta-ja-sulje-menettelyltä ja säilyttää julkisen, ajettavan ja auditoitavan moottorin uskottavuuden. Katso LICENSE (AGPL) ja uusi LICENSING.md (mitä kukin lisenssi kattaa ja milloin se pätee).
    • Tiedosto LICENSE sisältää nyt AGPL-3.0-tekstin; SPDX-otsikot kaikissa lähteissä päivitettiin muotoon AGPL-3.0-only; NOTICE, README, GOVERNANCE, GLOSSARY, verkkosivusto sekä crate- ja pakettimetatiedot (Cargo.toml, pyproject.toml, CITATION.cff, MCP-crate + kuva) päivitettiin vastaavasti.
    • Osallistujaehdot (CONTRIBUTING.md) lisensoivat nyt sisääntulevan työn AGPL:llä ja antavat Ashforde OÜ:lle oikeuden sisällyttää osuudet kaupallisesti lisensoituun versioon, jotta kaksoislisenssi toimii edelleen.
    • Riippuvuuskäytäntö ennallaan mutta perusteltu uudelleen (deny.toml, GOVERNANCE): riippuvuudet pysyvät salliville lisensseille rajattuina (Apache/MIT/BSD/ISC). AGPL sallitaan vain kshanan omalle crate-paketille – kopioleft-riippuvuus saastuttaisi kaupallisen version ja rikkoisi kaksoislisensoinnin.
    • Huomautus jatkokäyttäjille: tämä on kopioleft-uudelleenlisensointi. Käyttäjät, jotka nojasivat Apache-2.0:n sallivuuteen, voivat jatkaa viimeisen Apache-2.0-julkaisun käyttöä (v0.18.0 ja sitä aiemmat, kuten julkaistu); versiosta v0.19.0 alkaen lisenssi on AGPL-3.0 / kaupallinen.

Tietoturva#

  • Nostettiin pyo3 0,24 → 0,29, jotta RUSTSEC-2026-0176 / RUSTSEC-2026-0177 (GHSA-36hh-v3qg-5jq4 / GHSA-chgr-c6px-7xpp) poistuvat ulkoisista OSV- ja riippuvuusskannauksista. Molemmat ovat funktiotason neuvoja, joiden vaikutuksen alaisia funktioita (BoundList/TupleIterator::nth/nth_back, PyCFunction::new_closure) Kshana ei koskaan kutsu, ja pyo3 on valinnainen (ominaisuus python) riippuvuus, joten todellinen altistus oli nolla – mutta nosto pitää skannauksen puhtaana jatkokäyttäjien auditoijille. Siirrettiin src/python.rs pyo3 0,29 -rajapintaan (Bound-palautustyyppi kohteelle scenario_kinds; eksplisiittinen skip_from_py_object pyclassilla RunOutput). Kaikki 11 Python-sidostestiä läpäisevät uudelleenrakennetulla laajennuksella.

0.18.0 - 2026-06-17#

Lisätty#

  • Yksitoista uutta ajettavaa skenaariolajia – kahden tarjouskilpailun demonstraattorit, CCSDS-yhteentoimivuussilta ja ensimmäisen kertaluvun tehtäväanalyysi- ja ympäristöpaketti (kaikki MODELLED, lisäävät; olemassa olevat toistettavuuden kultaiset arvot ennallaan). Jokainen on lähetettävissä CLI:stä / Pythonista / WASM:sta / MCP:stä, sisältää tiedoston scenarios/<kind>.toml ja kantaa eksplisiittisen MODELLED-merkinnän tulos-JSON:issaan ja yhden rivin yhteenvedossaan (lajikohtainen testi tiedostossa tests/dominance_demonstrators.rs varmistaa, että merkintä on läsnä ja että tuloste ei koskaan sisällä merkkijonoa VALIDATED):

    • impairment-eval (src/impairment_eval.rs) – koneoppimispohjaisen RF-häiriöiden havaitsemisen arviointitestialusta: merkitty synteettinen korpus + ilmaisimesta riippumaton ROC/AUC-kehys + jakauman sisäinen / ulkopuolinen optimismiaukko -raportti (vain toimintaominaiskäyrät – ei koskaan kenttä- tai IQ-dataa).
    • quantum-trade (src/quantum_trade.rs) – kvantti vs. klassinen PNT-vaihtokauppa mitatun ADEV:n sisäänotolla ja GNSS-estetyn kestävyyden verhokäyrällä.
    • space-weather (src/space_weather.rs) – aurinko- ja geomagneettiset indeksit (Kp↔ap IAGA-taulukko, päivittäinen Ap, keskitetty 81 päivän F10.7a), Jacchia-71-eksosfäärin lämpötila sekä aktiivisuusohjattu termosfäärin tiheyskytkentä staattisen ilmakehän yli (EI NRLMSISE-absoluuttitiheysmalli).
    • oem-interop (src/oem.rs) – CCSDS 502,0 OEM -tuonti + edestakainen silta GMAT / Orekit / STK -efemerideille (lukija parse_oem, kirjoittajan tarkka käänteisfunktio).
    • launch-window (src/launch.rs) – kahden kappaleen laukaisuazimutti (sin Az = cos i/cos lat), tasonmuutoksen Δv, kohdepaikan pyörimisetu ja päivittäisten tilaisuuksien geometria.
    • reentry (src/reentry.rs) – Allen-Eggers-ballistinen paluukäytävä: huippuhidastuvuus, huippu-g:n ja huippulämmityksen nopeudet, huippu-g:n korkeus.
    • eo-coverage (src/eo_payload.rs) – EO:n kaistanleveys / GSD / pääsy / uudelleenkäynti -geometria (SMAD-avaruuskolmio).
    • space-packet (src/space_packet.rs) – CCSDS 133.0-B Space Packet -pääotsikon koodaus ja purku bittitarkalla edestakaisuudella.
    • attitude-budget (src/attitude_budget.rs) – 3-DOF gravitaatiogradienttimomentti + RSS-osoitusvirhebudjetti (skalaarinen esilaitteistobudjetti, ei säätösilmukka).
    • passes (src/passes.rs) – maa-aseman nousun ja laskun ylilennon ennustus (AOS/TCA/LOS, suurin korkeuskulma, pääsy).
    • link-budget (src/linkbudget.rs) – yksisuuntainen CCSDS-401 / DSN-810-005 -linkkiyhtälö (C/N₀ = EIRP − FSPL − L_other + G/T − k, FSPL / Eb·N₀ / marginaali / sulkeutuminen).
  • 17-tilainen hybridi kvantti + klassinen tiukasti kytketty UKF – nostettu ajettavaksi skenaarioksi (MODELLED). Uusi skenaariolaji hybrid-ukf (src/fusion/hybrid_ukf.rs, scenarios/hybrid-ukf.toml), joka muuttaa aiemmin vain API:n kautta saatavilla olleen 17-tilaisen tiukasti kytketyn GNSS/INS-unscented-suodattimen (src/fusion/tightly_coupled17.rs) skenaarioksi, jonka CLI-, Python-, WASM- ja MCP-sidokset voivat lähettää. 17-tilainen virhevektori koostuu 15 INS-virhetilasta (paikka, nopeus, asennon virheasento, kiihtyvyysmittarin + gyron harha) täydennettynä CAI-johdetulla kiihtyvyysmittarin harhakorjauksella – kylmäatomi-interferometri (src/inertial/quantum_imu.rs) asettaa nopeuden satunnaiskävelyn lattian q_va, joten pitkän aikavälin vapaan liikkeen ajautuminen on kvanttianturin rajoittama – sekä 2-tilaisella vaihe + taajuus -kellolla, jonka prosessikohina tulee q-parametrikellomoottorista (clock_state::q_from_allan, joka kuvaa kellon Allanin poikkeaman profiilin PSD-arvoiksi q_wf/q_rw, skaalattuna etäisyysyksiköihin). Alusta on GNSS-tuettu alkujakson ajan (suodatin oppii harhat, nopeuden ja kellon), minkä jälkeen se liikkuu vapaasti GNSS-katkon läpi pelkällä CAI-IMU:lla ja kellolla, joten ajo osoittaa klassisen IMU:n lyhyen aikavälin + kvantin pitkän aikavälin hybridisaation. Laatumittari on suodattimen itsejohdonmukaisuus: yhdistetty NEES (Normalised Estimation Error Squared, arvioitavissa olevan paikka-/nopeus-/kelloosajoukon yli) ja innovaatiovalkoisuuden NIS (Normalised Innovation Squared) Monte Carlo -ensemblen yli, tarkistettuna 95 %:n χ²-kaistoja vastaan (Bar-Shalom §5,4). Sovitettu suodatin osuu kaistojen sisään; tarkoituksella väärin viritetty suodatin (säätimet q_factor / r_factor) merkitään – objektiivisesti tarkistettava, erotteleva portti eikä leimasin. NEES-/innovaatiovalkoisuustarkistus on TILASTOLLINEN ORAAKKELI: itsejohdonmukaisuusväite (suodattimen raportoima kovarianssi vastaa rehellisesti sen omien virheiden hajontaa mallinnetun kohinan alla), EI todellisen maailman tarkkuustakuu. Rehellinen soveltamisala: kaikki on mallinnettua / simulaatiota – CAI- ja kellosyötteet ovat rajattuja, kirjallisuudesta edustavia arvoja eikä mitattua laitteistoa; CAI-laitteisto ja sen avainhenkilö pysyvät kumppanin omistuksessa; mikään tässä ei viittaa TRL:ään > 3, lentoperintöön tai ulkoiseen validointiin (tulos-JSON ja yhden rivin yhteenveto kantavat nämä merkinnät eksplisiittisesti). Yksittäinen vakionopeuksinen, vaakasuora rata jättää asennon ja IMU-harhan tilat vain heikosti havaittaviksi, joten NEES arvioidaan 8 arvioitavissa olevan tilan yli; manööveroiva rata täyden 17 tilan havaittavuudelle kuuluu tiekarttaan. Lisää myös Ukf::update_stats (palauttaa päivityskohtaisen NIS:n) ja TightlyCoupled17::{update_gnss_nis, nees, nees_subset} -johdonmukaisuusinstrumentoinnin. Kaikki olemassa olevat skenaariot ovat koskemattomia (lisäävä; toistettavuuden kultaiset arvot ennallaan).

  • Peräkkäinen (rekursiivinen) maastoviitteinen navigointi – SITAN käynnissä olevana suodattimena. Uusi skenaariolaji terrain-slam (src/altpnt/sequential.rs, scenarios/terrain-slam.toml), joka ajaa olemassa olevan korkeusmittari vs. DEM -mittausmallin epookki kerrallaan moottorin particle_filter SIR-moottorin läpi sen erä-karkea-tarkaksi-haun sijaan, jota terrain-nav käyttää yhden vakio-INS-poikkeaman palauttamiseen. Jokaisessa reittipisteessä pilvi propagoidaan INS:n raportoimalla lisäyksellä (jota itseään vääristää askelkohtainen ajautumiskasvu), painotetaan uudelleen maastosovituksella ja otetaan uudelleen näytteet rappeutumisen sattuessa – joten ajassa vaihtelevaa INS-ajautumaa seurataan reitin varrella, mihin vakiopoikkeaman sovitus ei rakenteellisesti pysty. Synteettisellä DEM:llä rekursiivinen arvio pysyy rajattuna ja suppenee uudelleen (lopussa ≈ 70 m), kun taas tukematon inertiaaliratkaisu hajaantuu rajattomasti noin 5 km:iin; epookkikohtainen virhe seuraa maaston erottuvuutta (se liikkuu harhaisella INS:llä tasaisten satuloiden yli ja lukittuu uudelleen erottuvassa maastossa), ja tehokkaan otoskoon monitori vahvistaa pilven terveeksi. Rehellinen soveltamisala: kartta on tunnettu ja kiinteä – rekursiivinen paikannus tallennettua DEM:iä vastaan (maasto-SLAMin paikannuspuoli), ei yhteistä kartan estimointia; rakenteeltaan ei kehäpäätelmä (syötetty ajautumarampi on riippumaton totuus). Kaikki olemassa olevat skenaariot ovat koskemattomia (lisäävä; toistettavuuden kultaiset arvot ennallaan).

  • GNSS-estetty kestävyysselkäranka + FutureNAV-demonstraattoriviipaleet (src/holdover.rs sekä kestävyysverhokäyrän perustukset kohteissa src/impairment_eval.rs, src/quantum_trade.rs, src/navsignal.rs, src/inertial/quantum_imu.rs, FutureNAV-varmennusviipaleilla kohteessa src/verification.rs). Yhdistää vaihtoehtoisen PNT:n rakennuspalikat – kellon holdoverin, signaalin seurannan, inertiaalisen vapaan liikkeen ja maaston – yhdeksi GNSS-katkon kestävyystarinaksi. MODELLED; lisäävä.

  • Kshana Interchange Format (KIF) – versioitu, itseään kuvaava artefaktikirjekuori (src/interchange.rs). Skeemamerkitty kääre skenaariotulosten ympärillä, jotta tallennettu artefakti kantaa mukanaan lajinsa, skeemaversionsa ja MODELLED/VALIDATED-merkinnät, ja vanhemmat kirjekuoret pysyvät eteenpäin yhteensopivasti luettavina. Lisäävä; olemassa oleva tulos-JSON ennallaan.

  • Navigointisignaalin modulaatio / seuranta + CR3BP halo/NRHO -differentiaalikorjain (src/navsignal.rs, src/cr3bp.rs). Ensimmäisen kertaluvun navigointisignaalin modulaatio- ja seurantamalli sekä ympyrämäisen rajoitetun kolmen kappaleen differentiaalikorjain halo- ja lähes suoraviivaisille halo-radoille, esillä olemassa olevalla syväavaruusominaisuusakselilla. MODELLED.

  • Jakaumamuutoksen arviointitila + korpuksen vakavuusasteikon säädin kohteelle impairment-eval (src/impairment_eval.rs). Lisää ROC/AUC-optimismiaukkokehykseen eksplisiittisen jakauman sisäisen / ulkopuolisen jaon ja säädettävän korpuksen vakavuusasteikon (vain toimintaominaiskäyrät – ei koskaan kenttä- tai IQ-dataa).

  • Kustannus per kattavuus -ROI + havaitsemisen ohituksen eheysvaikutuksen kuvaus (src/frugal.rs, src/integrity_impact.rs). Säästöinsinöörin ROI-linssi (kustannus kattavuusyksikköä kohti) ja kuvaus havaitsemisen ohitusasteesta eheysvaikutukseen. MODELLED; lisäävä.

  • Lähteistetty kylmäatomi-interferometrin (CAI) virhemallin parametritaulukko (src/inertial/quantum_imu.rs). Kirjallisuusviitteinen, rajattu parametritaulukko CAI-inertiamallille – syötteet ovat lähteistettyjä, eivät mitattua laitteistoa (ei TRL- tai lentoväitettä); se syöttää kohteen hybrid-ukf nopeuden satunnaiskävelyn lattiaa.

  • Projektin hallinto. GOVERNANCE.md dokumentoi päätösmallin ja avoimen/suljetun rajan; ominaisuuskartan yhteisö/hallinto-rivi siirtyy none → partial sen heijastamiseksi.

Korjattu#

  • ARAIM-eheyden suojaustaso – nimellinen harha (b_nom) ja σ_URA nyt sovellettu. MHSS-suojaustaso vähentää nyt yksipuolisen nimellisharhan projektion b_k = Σ_i |s_i|·b_nom vikamoodia kohti ja käyttää Integrity Support Messagessa kulkevaa eheyden sigmaa σ_URA (erillinen tarkkuuden sigmasta σ_URE). Tämä tekee suojaustasosta varovaisemman ja standardinmukaisemman, ja siksi se muuttaa olemassa olevien eheysskenaarioiden raportoimia PL-arvoja. ISM/skenaario saa kentät #[serde(default)] sigma_ura_m / b_nom_m, joten syötteet, jotka jättävät ne asettamatta, säilyttävät aiemman käyttäytymisen. Katso docs/ARAIM_REFERENCE.md palautetun kaavan b_k ja rehellisen toteutushuomautuksen osalta.

  • Harhautusmonitorin χ²-johdonmukaisuus. parity_raim_test käyttää nyt jaettua käänteis-χ²-polkua raim::chi2_quantile, mikä poistaa toisen erkaantuneen χ²-toteutuksen, jotta RAIM ja pariteettiharhautusmonitori ovat samaa mieltä kynnyksistään.

  • gravity-map-nav kytketty CLI-lähettäjään. Skenaario oli aiemmin tavoitettavissa vain API:n kautta; se lähetetään nyt muodossa kind= kuten jokainen muu skenaario.

  • Dokumentaation ja lukumäärien tarkkuus. README:n skenaariolajien lukumäärät on nyt kiinnitetty lausekkeeseen api::list_scenario_kinds().len() testillä scenario_count_doc_sync, joten dokumentoitu lukumäärä ei enää voi ajautua erilleen lähettäjästä.

0.17.0 - 2026-06-14#

Lisätty#

  • Syväavaruuden ja Marsin PNT – avoin radiometrinen navigointimoottori + GSE-simulaatio. Uusi, täysin lisäävä ominaisuusakseli Maa-validoidun ytimen päälle (jokainen olemassa oleva Maa-skenaario on tavu tavulta identtinen – toistettavuuden kultaiset arvot läpäisevät muuttumattomina ilman uudelleengenerointia). Lisää: monikappaledynamiikan ytimen (Body{mu, re, zonals, gravity, rotation, IAU-pole} Marsin GMM-3-tesseraalisella gravitaatiolla, IAU:n kappalekiinteä Mars-koordinaatisto, kytkettävä liitos EphemerisProvider, mikrosekuntia tarkempi kaksiosainen Julian-päivämäärä ja TT↔TDB); radiometriset havaittavat (iteratiivinen valoaika + Shapiro-viive, kaksi-/yksi-/kolmisuuntainen Doppler ja etäisyys Moyerin kaksihaaraisella ratkaisulla, koherentti transponderin kääntö, regeneratiivinen/PN-etäisyydenmittaus CCSDS 414 mukaan, Δ-DOR CCSDS 506 mukaan, aurinkoplasma-, troposfääri- ja ionosfäärivälineet); CCSDS-TDM:n (503) jäsennyksen ja tuoton; redusoidun dynaamisen neliöjuuri-informaatiosuodattimen RTN-empiirisillä kiihtyvyyksillä, kolmitilaisella onboard-kellolla ja Marsin vastusmallilla; yhteisen yksisuuntaisen + kaksisuuntaisen fuusioestimaattorin; skenaariopinnan mars-pnt (välitystähdistö + LMO/siirto/ pinta) CLI:ssä, Pythonissa, WASM:ssa, MCP:ssä ja leikkikentällä; sekä päästä päähän -GSE-suorituskykysimulaattorin (geometria → linkkibudjetti → havaittavat → SRIF → kovarianssi). Validointitaso – simulaatiovalidoitu: synteettinen suljetun silmukan radanmääritys (Mars-LMO ≈ 0,2 m) ja analyyttinen itsejohdonmukaisuus, ja Aurinko-keskinen Marsin dynamiikka on ristiintarkistettu riippumattomasti JPL:n DE440:ää vastaan (xval/anise-mars-od, ytimen portittama: 137 m 1 päivän kaarella, rehellinen mallintamattoman n-kappalejäännöksen osuus). Raportoidut syväavaruuden tarkkuudet ovat simulaation / kovarianssin laatumittareita, eivät todellisen tehtävän tuloksia; todellisen DSN/ESTRACK-seurantadatan validointi on edelleen tiekartalla. ANISE (MPL-2.0, edition-2024) on rajattu työtilasta poissuljettuun ristiintarkistus-crateen, joten lisenssiportti cargo deny ja MSRV-1.75-työ ovat koskemattomia.
  • Viraston tarkkuutta vastaavat maanpintajäljet todellisesta IERS:n Maan orientaatiosta. Skenaario ephemeris ottaa valinnaisen kentän eop_finals2000a – todellisen IERS-tiedoston finals2000A sisällytetyn rungon – ja redusoi maanpintajäljen siitä interpoloidun epookkikohtaisen UT1−UTC:n ja napaliikkeen kautta (sama EopSeries, jota precise_od käyttää), ohittaen nimellisarvot dut1_s/xp_arcsec/yp_arcsec. Data kulkee skenaarion mukana, joten ajo pysyy toistettavana eikä tarvitse tiedostojärjestelmää (se toimii WASM-leikkikentässä). Lippu kshana --eop <finals2000A> sulauttaa todellisen tiedoston skenaarioon CLI:stä. Korjaa epäsymmetrian, jossa vain precise_od käytti todellista Maan orientaatiodataa.

Korjattu#

  • Etäisyysmuutosnopeuden koordinaatiston johdonmukaisuus. Maa-asema kuvataan nyt inertiaalikoordinaatistoon satelliitin redusoinnin tarkan käänteisfunktion kautta (frames::itrf_to_teme, joka kumoaa sekä napaliikkeen että tähtiajan pyörimisen) napaliikkeelle sokean GMST-pyörityksen sijaan, joten molemmat päätepisteet jakavat saman koordinaatiston. Vaikutus raportoituun Dopplerin on validointilattian alapuolella, mutta se poistaa todellisen koordinaatistojen epäsuhdan ja ”tarkka”-ylisanomisen lähdekoodista.
  • carrier_hz tarkistetaan. Nolla tai ei-äärellinen kantoaaltotaajuus palauttaa nyt virheen sen sijaan, että tuottaisi äänettömästi nollan Dopplerin (se oli tehnyt arvosta λ = c/kantoaalto äärettömän), vastaten olemassa olevaa suojaa step_s.

0.16.0 - 2026-06-11#

Lisätty#

  • Voimamallin validointi efemeridisovituksella, ristiinvalidoituna todellisia viraston tuotteita vastaan. Uusi erä-pienimmän neliösumman estimaattori (src/precise_od.rs) variaatiollisella tilasiirtymämatriisilla ja poikkeavien arvojen editoinnilla, ajettuna täydellä voimamallilla (PreciseForceModel: EGM2008-geopotentiaali, kolmannet kappaleet, kiinteä + valtameri- + ilmakehäkuuvuoksi ja empiiriset CPR/2-per-kierros-kiihtyvyydet), syötettynä todellisella IERS:n Maan orientaatioparametrien jäsentimellä finals2000A. Validoitu julkaistuja viiteratoja vastaan: Galileo MEO 13 cm:n jälkisovituksella, ESA:n Swarm-A LEO ja LRO kuu (selenosentrinen, GRAIL-gravitaatio, IAU-2015-kappalekiinteä koordinaatisto – redusoitu dynaaminen 6,6 m, rehellisesti avoimella polulla yli 5 m:n tavoitteen; tavoitteen saavuttava DE-luokan ANISE/DE440-polku on työtilasta poissuljettu crate).
  • Skenaario spoof-detect – integroitu monikerroksinen harhautuksen ilmaisin, joka yhdistää epookkikohtaisen RAIM-pariteetin, AGC- ja signaalilaatumonitorit (SQM) sekä yhdistetyn päätöksen, validoitu julkaistuja TEXBAT-skenaarioparametreja vastaan (Humphreys ym., ION GNSS 2012), mukaan lukien kantoaaltoon kohdistettu vaikea tapaus.
  • Skenaario ephemeris – tila, koordinaatistot, maanpintajälki ja Doppler. Propagoi yhden satelliitin (TLE→SGP4 tai analyyttinen rata) ja tulostaa askelta kohti inertiaalisen TEME- ja GCRS-tilan (paikka ja nopeus), Maa-kiinteän ITRF/ECEF-paikan, WGS-84:n sub-satelliittisen maanpintajäljen (leveys / pituus / korkeus) sekä topocentrisen atsimuutin / korkeuskulman / etäisyyden etäisyysmuutosnopeudella ja Dopplerilla maa-asemalta. Tavoitettavissa CLI:stä, Pythonista, WASM:sta ja MCP-palvelimesta, ja toimitettu ”Ground track” -esiasetuksena web-leikkikentällä, jossa jälki piirretään todellisen maailmankartan päälle (Natural Earth 1:110m rannikkoviivat, upotettu – ei verkkoa tai ulkoista riippuvuutta).
  • CCSDS OEM -vienti (--export-oem / export_oem = true) – nopeuden sisältävä Orbit Ephemeris Message, jota GMAT / Orekit / STK käyttävät, pariteetissa olemassa olevien SP3- ja OMM-viejien kanssa.
  • Kiinteät, valtameri- (FES2004) ja ilmakehälliset (Ray 2001 S2) Maan vuoksiaallot geopotentiaaliin (IERS Conventions, luku 6), kytketty voimamalliin.
  • ARM64-wheelit – PyPI-rakennus tuottaa nyt myös Linux aarch64 (manylinux_2_28), macOS arm64 ja Windows arm64 -wheelit.
  • Laajennettu tekninen raportti (esijulkaisu) linkitettynä README:stä, ja JOSS-artikkeli tehtiin lähetettäväksi (tekijän ORCID, käännetään PDF:ksi CI:ssä jokaisen muutoksen yhteydessä).

Muutettu#

  • Koordinaatistot validoitu millimetrin tarkkuudella julkaistuja Vallado-vektoreita vastaan. TEME→PEF/ITRF-redusointi, täydellinen CIO IAU 2006/2000A GCRS→ITRS-ketju ja ECEF→geodeettinen WGS-84-muunnos on nyt kiinnitetty Vallado ym. (AIAA 2006-6753) laskettuun esimerkkiin IERS EOP:lla, ei vain sisäiseen itsejohdonmukaisuuteen.
  • Riippumattomat aikaskaalojen ristiintarkistukset. ERA ja UTC/TAI/TT-skaalat ovat yhtäpitäviä kirjaston hifitime kanssa tarkkuudella < 1 µs, ja DE440-planeettaefemeridi on yhtäpitävä JPL Horizonsin kanssa (Kuun/Auringon geosentriset paikat); molemmat ovat aina päällä olevia CI-portteja.
  • Web-leikkikenttä piilottaa laatumittarivälilehden, kun tulos ei sisällä laatumittaririvejä, joten vain kaaviota sisältävät paketit (efemeridi, RAIM, harhautus) avautuvat kaavioonsa – efemeridillä maanpintajälkeen – tyhjän taulukon sijaan.
  • Leikkikentän ohjatut liukusäätimet ja parametripyyhkäisy toimivat nyt efemeridi- / maanpintajälkiskenaariolle: sen säätimet (aseman leveys / pituus, aika-askel, kesto, UT1−UTC) ovat säädettävissä, ja pyyhkäisy voi piirtää ylilennon geometriaa (suurin korkeuskulma, huippu-Doppler, korkeus, nopeus) minkä tahansa niistä funktiona – esimerkiksi suurin korkeuskulma vs. aseman leveys. Pyyhkäisyvälilehti näytetään nyt vain, kun skenaario on todella pyyhkäistävissä, joten mikään paketti ei tarjoa säädintä, joka ei piirrä mitään.
  • Dokumentoitiin SGP4:n likiarvo DUT1 ≈ 0 GMST-kutsukohdassa (pyörimisvirhe ≤ ~13″, selvästi SGP4:n oman mallivirheen sisällä) ja päivitettiin CAPABILITY.md.

0.15.1 - 2026-06-09#

Lisätty#

  • Kshana – PNT-simulaattori -JetBrains-liitännäinen on nyt julkaistu ja hyväksytty JetBrains Marketplacessa. README, kshana.dev ja jakeludokumentit linkittävät siihen suoraan.

Korjattu#

  • MCP-rekisterijulkaisu onnistuu nyt: kentän server.json description oli rekisterin 100 merkin rajan yli (HTTP 422). Se lyhennettiin, ja palvelimen nimi (sekä kuvan omistajuusmerkintä) yhtenäistettiin kanoniseen nimiavaruuteen io.github.ashfordeOU/kshana-mcp.
  • JetBrains Marketplace -julkaisu onnistuu nyt: CI latasi uudelleen saman liitännäisversion, joka oli listattu käsin, minkä Marketplace hylkää. Liitännäisversio nostettiin tasolle 0.1.1, ja idempotenssivartija käsittelee nyt myös vastauksen ”already contains version” onnistuneena ei-toimintona.
  • kshana.dev-välimuistin kiertäminen: versioleimatut kyselymerkkijonot tiedostoille style.css/app.js seuraavat julkaisua, joten palaavat kävijät saavat aina nykyisen version.

0.15.0 - 2026-06-08#

Lisätty#

  • kshana-mcp – Kshana Model Context Protocol (MCP) -palvelimena (mcp/kshana-mcp/). Erillinen, työtilasta poissuljettu crate (SDK rmcp on edition 2024), joka tarjoaa validoidun moottorin tekoälyagenteille ja avustajille – Cursor, JetBrains AI Assistant / Junie ja mikä tahansa MCP-asiakas – stdion yli. Työkalut: run_scenario, list_scenario_kinds, validate_scenario, export_sp3, export_omm, kukin ohut kääre rajapinnan kshana::api ympärillä.
  • JetBrains IDE -liitännäinen (ide/jetbrains/). Napsauta skenaariota .toml hiiren kakkospainikkeella → Run Kshana Scenario; laatumittarit ja tulos-JSON virtaavat Kshana-työkaluikkunaan. Puhdas alustan Kotlin-liitännäinen, yhteensopiva jokaisen JetBrains IDE:n kanssa 2024,3+.
  • Julkinen jakelu + julkaisukohtainen automaattijulkaisu molemmille:
    • kshana-mcp crates.io-palveluun (cargo install kshana-mcp) työnkulun publish.yml kautta.
    • kshana-mcp monialustaisena OCI-kuvana palvelussa ghcr.io (docker run ghcr.io/ashfordeou/kshana-mcp) uuden työnkulun mcp-publish.yml kautta.
    • kshana-mcp viralliseen MCP-rekisteriin GitHub OIDC:n kautta (nolla salaisuutta); rekisterimerkintä (server.json) käyttää OCI-pakettityyppiä leimalla varmennetulla omistajalla.
    • IDE-liitännäinen JetBrains Marketplaceen komennolla publishPlugin (tunnuksella portitettu, valinnainen kehittäjän allekirjoitus) jokaisen julkaisutunnisteen yhteydessä.

0.14.1 - 2026-06-08#

Lisätty#

  • Riippumaton ANISE/SPICE-koordinaatiston ristiinvalidointi (xval/anise-frames/). Erillinen, työtilasta poissuljettu crate ristiintarkistaa moottorin kshana IAU 2006/2000A CIO -redusoinnin (kshana::cio::gcrs_to_itrs_matrix, GCRS→ITRS) ANISEa (puhdas Rust-uudelleentoteutus NAIF/SPICE:sta) vastaan, joka pyörittää GCRF→ITRF93 JPL:n tiedostosta earth_latest_high_prec.bpc, kun samat IERS:n finals2000A Maan orientaatioparametrit syötetään molemmille puolille, kahdeksalla neljännesvuosiepookilla 2020–2023. Kaksi riippumatonta koordinaatistorealisaatiota ovat yhtäpitäviä enintään 0,028″:n suhteellisella pyörityksellä – ≤ 0,86 m maassa, ≤ 0,93 m LEO:ssa, ≤ 3,6 m GNSS-radalla, mikä täyttää pitkäaikaisen ROADMAP-tiekartan ”< 10 m” koordinaatiston ristiintarkistuksen suurella marginaalilla (se täydentää olemassa olevia bitti bitiltä -SOFA/ERFA-ankkureita, mutta ei korvaa niitä). Crate on eristetty, koska anise + hifitime ovat MPL-2.0 / edition-2024 eivätkä saa koskaan päästä julkaistuun kshana-riippuvuuskaavioon, sen tiedostoon Cargo.lock, lisenssiporttiin cargo deny tai MSRV-rakennukseen; ANISE on kiinnitetty asetuksella default-features = false. Sisältää binäärin frame-xval (hakee ~5 MB:n BPC:n, tulostaa taulukon, kirjoittaa report.{json,md}), ytimen / verkon puuttuessa itsensä ohittavan testiportin sekä valinnaisen vain workflow_dispatch-ajettavan CI-työn (ei koskaan estä haaraa main). Dokumentoitu tiedostossa docs/VALIDATION.md (CIO-rivi) ja ROADMAP.md.

Korjattu#

  • Mobiiliystävällinen leikkikenttä. Korjattu leikkikentän .panel vaakasuuntainen ylivuoto puhelimilla (CSS-ruudukon alkio, jonka oletus min-width: auto renderöityi ~100 px näkymää leveämmäksi) ratkaisulla min-width: 0 ja leveysvartioiduilla säätimillä; varmistettu puhtaaksi leveyksillä 360 / 390 / 414 / 768 px. Tasattu toimintopainikkeet ”Pin to compare” / ”Download report” (yhtä suuret marginaalilaatikot flex-rivissä). Suurennettu ajopainikkeet, liukusäätimet, valitsimet ja navigointilinkit noin 44 px:n WCAG 2.5.5 / Apple-HIG-kosketuskohteen vähimmäiskokoon puhelimilla ja kosketuslaitteilla; työpöytämitoitus ennallaan.

0.14.0 - 2026-06-08#

Korjattu#

  • Robustisuuden koventaminen vastakkainasettelullisesta taistelutestikierroksesta. (1) sbas_protection_level hylkää nyt ei-äärelliset korkeuskulman, atsimuutin ja varianssin arvot sekä negatiiviset tai ei-äärelliset kovarianssin diagonaalit (pienellä σ:llä skaalattu lähes singulaarinen geometria saattoi aiemmin livahtaa absoluuttisen pivotin portin läpi ja palauttaa NaN-VPL:n / järjettömän HPL:n kelvollisena arvona Some – hiljainen eheysvika). (2) Numeerinen propagaattori (propagate/propagate_dopri) pysähtyy turvallisesti ei-äärelliseen alkutilaan sen sijaan, että mukautuva säädin pyörisi ikuisesti. (3) DEM-solun apufunktio ei enää kaadu yhden näytteen (1×N) ruudukossa. (4) Azimuutti lunar_look_angle pidetään tiukasti välillä [0, 360). (5) SphericalHarmonicField::from_gfc hylkää epäfysikaaliset (NaN / ei-positiiviset) arvot GM/säde.

Lisätty#

  • Binääri validation_report + julkaisuartefakti: riippuvuudeton generaattori, joka tuottaa yhden sivun tulostusvalmiin HTML-validointiyhteenvedon, joka indeksoi jokaisen CI:n valvoman validoinnin (SGP4 666/666, EGM2008, bitti bitiltä -koordinaatistot, NIST Allan, IMU-tietolehdet, ARAIM/SBAS, 3-OS-toistettavuus, kattavuus) testiinsä ja ulkoiseen oraakkeliinsa. Julkaisutyönkulku generoi tiedoston kshana-validation-summary.html ja liittää sen (SLSA-alkuperällä) jokaiseen merkittyyn julkaisuun.
  • numpy-yhteentoimivuus-pytest + wheelin koventaminen: tests/python/test_numpy_interop.py (ajetaan CI:ssä) sekä kiinnitetty manylinux-kontti ja varmennusvaihe auditwheel show wheel-rakennuksessa.
  • Oppaat ja koulutus: docs/tutorials/ (kolme läpikäytyä opasta, toimialakohtaiset annotoidut skenaariot, Tier-1/2/3-harjoitukset), ja tests/tutorials.rs kiinnittää jokaisen lainatun luvun elävään moottoritulosteeseen.
  • Ulkoiset lähetysartefaktit (paper/, notebooks/, submissions/): JOSS-artikkeliluonnos, kvantti vs. klassinen -muistio ja valmiit lähetyspaketit awesome-gnss / ESA Navipedia / NASA ASCL / ESA ESSR / ION/IAC -kohteisiin sekä FUNDING.yml – ulkoisten lähetysvaiheiden valmistelu.
  • Maastoviitteinen ja yhdistetty alt-PNT-navigointi (moduuli altpnt): TERCOM/SITAN-maastosovituksen navigaattori DEM:n yli (lataaja .hgt + synteettinen testiaineistogeneraattori) sekä yhdistetty gravitaatio + magneettinen (IGRF) + maasto GPS-estetty navigaattori, esillä skenaariolajeina terrain-nav ja combined-altpnt. Validoitu maastosovituksen suppenemisella (tunnettu syötetty poikkeama palautettiin) ja rajatulla yhdistetyn suodattimen virheellä GPS-estetyn ikkunan yli.
  • LunaNet LANS -geometria (lunar): nimetyt kuun pintapaikat (Apollo 11/15/16, Shackletonin reuna) arvovaltaisilla selenografisilla koordinaateilla, pinnan katselukulmat (az/el/etäisyys), näkyvyys/kattavuus ja paikan DOP, validoitu Kuun sädettä, julkaistuja paikkakoordinaatteja ja radiaalisen yläpuolisen 90°:n korkeuskulmaidentiteettiä vastaan.
  • Ohjattu selainleikkikenttä: ohjatun tilan liukusäätimet, välilehtinen tulostepaneeli, ensimmäisen ajon kierros-peite, parametripyyhkäisy- ja monen ajon peitetilat, riippuvuudeton canvas/SVG-3D-ratanäkymä (rata-paketti tuottaa nyt lisäävän kohdan eci_track), upotus/iframe-tila ja lataus HTML-raporttina – kullakin node-yksikkötestit CI:ssä.
  • Tietolehdellä validoitu IMU-virhemalli (tests/imu_allan_spec.rs): ADIS16465/16488/16460 ARW/VRW/harhan epästabiilisuus palautettuna synteettisestä Allanin poikkeamasta ja tarkistettuna valmistajan määrityksiä vastaan (NIST SP1065 / IEEE 952 -tunnistus).
  • NIST SP1065:n Allan-estimaattorin validointi (tests/allan_nist_sp1065_1000point.rs): neljä estimaattoria toistavat julkaistut 1000 pisteen viitepoikkeamat ja taulukon 32 luottamusrajat.
  • SBAS / DO-229E -suojaustasot, L1/L5-ionosfääritön ja DO-316 compliance -kartta (moduuli sbas). sbas_protection_level muodostaa painotetun geometriamatriisin jokaisen satelliitin korkeuskulmasta/atsimuutista ja UDRE/GIVE/ilma-aluksen/troposfäärin virhebudjetista, kääntää normaalimatriisin (jaettu orbit::invert4) ja projisoi varianssit HPL/VPL:ksi DO-229E K-kertoimilla (PA 6.0/5.33, NPA 6,18). iono_free_l1l5 lisää GPS L1/L5 -ionosfäärittömän pseudoetäisyyden (IS-GPS-705, γ₁₅ = 1.79327), validoituna kumoamaan moottorin riippumattoman ensimmäisen kertaluvun ionosfäärin viiveen. do316_compliance_map jäljittää DO-316/DO-229E-vaatimukset toteuttaviin funktioihin. Validoitu suljetun muodon K-kerroinmääritelmiä, numpy-viitegeometriaa inv(GᵀG) ja kahden reitin kovarianssi-identiteettiä vastaan; julkaistun PL:n RTKLIB/gLAB-vastaavuuden ristiintarkistus on dokumentoitu odottamaan tarkistusta kohdassa docs/COMPLIANCE.md.
  • Täysi tesseraalinen pallofunktiogravitaatio – EGM2008-kenttä asteeseen/kertalukuun 70 asti. Uusi gravity_sh::SphericalHarmonicField arvioi geopotentiaalin ja sen kiihtyvyyden Maa-kiinteässä koordinaatistossa täysin normalisoiduista kertoimista C̄_nm, S̄_nm käyttäen vakaata Holmes–Featherstone-normalisoitua Legendre-rekursiota (denormalisointi ylivuotaisi tällä asteella). Toimitetut kertoimet ovat NGA:n EGM2008-tuote (yleisaineisto, ICGEM:n kautta), niputettu tiedostoon egm2008_data.rs ja toistettu bitti bitiltä työkalulla tools/gen_egm2008.py sitoutetusta tiedostosta tools/egm2008_to70.gfc; mikä tahansa ICGEM .gfc -malli ladataan funktiolla from_gfc. Validoitu kolmea riippumatonta oraakkelia vastaan: pistemassan romahdus (vain C̄00 = −μr/|r|³), vyöhykekenttä, joka toistaa olemassa olevan forces::zonal_accel tarkkuudella ~1e-9, sekä analyyttinen kiihtyvyys, joka vastaa suoraan summatun potentiaalin differenssigradienttia tarkkuudella <1e-6.
  • Yleisen suhteellisuusteorian Lense–Thirring (kehyksenvetäytymis) -kiihtyvyys (forces::lense_thirring_accel, IERS 2010 yhtälö 10,12), gravitomagneettinen termi olemassa olevan Schwarzschild-korjauksen lisäksi, kytketty numeeriseen propagaattoriin uudella lipulla ForceModel::lense_thirring(). Validoitu lineaariseksi Maan liikemäärämomentissa ja 1–2 suuruusluokkaa Schwarzschild-termin alapuolella, LAGEOS- ja Gravity Probe B -mittausten alueella.
  • Piirreluokka Propagator, joka yhdistää analyyttiset ja numeeriset ratapropagaattorit. Numeerinen Cowell-voimamallipropagaattori on nyt SGP4:n ensiluokkainen vertainen: uusi tyyppi NumericalPropagator (alkutila + ForceModel + Tolerance + valinta askeltuplauksen tai Dormand–Prince-Integrator-integraattorin välillä) ja Sgp4 toteuttavat molemmat piirteen propagator::Propagator, jonka state_at(t_seconds) -> StateVector palauttaa inertiaalisen TEME-tilan SI-yksiköissä (m, m/s), joten ne ovat vaihdettavissa kohteen Box<dyn Propagator> takana. SGP4-toteutus on perinnäisen menetelmän tarkka km/min→SI-muunnos (varmistettu yhtäsuuruustestillä); numeerinen toteutus läpäisee saman alle metrin tarkan Kepler-portin piirteen kautta, kaksi mukautuvaa ajuria ovat yhtäpitäviä, ja PropagatorError tuo esiin taustalla olevan SGP4-koodin.

0.13.0 - 2026-06-08#

Tämä julkaisu sulkee moottorin suurimman oikeellisuusaukon: Maan orientaatio ja koordinaatiston redusointi tehdään nyt viitetoteutuksen tasolla (validoitu bitti bitiltä ERFA/SOFA:a vastaan), eheyskokonaisuuteen tulee kahden satelliittitähdistön ARAIM todellisilla GPS+Galileo-TLE:illä, ja propagaatio-, kvanttianturi-, kuu/kuunläheinen- ja geomagneettiset kerrokset syvenevät – sekä tyypitetty Python-API, rikkaampi selainleikkikenttä ja kolmen käyttöjärjestelmän toistettavuusmatriisi. Kohokohdat:

  • Koordinaatistot bitti bitiltä. Täysi IAU 2000A- ja 2000B-nutaatio, IAU 2006 -prekessio, CIO-pohjainen (X, Y, s) IAU 2006/2000A GCRS↔ITRS-redusointi, IERS-napaliike ja TEME→GCRS/ITRS-tulostekoordinaatistot – kukin validoitu bitti bitiltä ERFA/SOFA-viiterutiineja vastaan.
  • Kahden satelliittitähdistön ARAIM (GPS + Galileo) todellisilla TLE:illä, HPL/VPL:llä, Stanford-kaaviotulosteella ja avoimella dokumentilla docs/ARAIM_REFERENCE.md.
  • Kuunläheinen PNT: Maa–Kuu CR3BP-propagaattori, MCI↔MCMF-koordinaatistot, selenografiset koordinaatit ja ajettava LunaNet-kuun eheysskenaario.
  • Kvanttianturointi: Coriolis- ja AC-Stark-systematiikka kylmäatomi-interferometrille, ajautumispyyhkäisy ja validointi Freierin (2016) budjettia vastaan.
  • IGRF-14-geomagneettinen pääkenttämalli, itsenäinen ja validoitu.
  • Tyypitetty Python-API (PyO3 RunOutput/ScenarioMeta, .data(), scenario_kinds, validate_toml, tyyppitynkät) CI-wheel-rakennuksella sekä ensiluokkainen GCRS/ITRS-propagaattoritulostus ja CCSDS OMM -vienti.
  • Uskottavuus ja toistettavuus: suora SGP4-tarkkuusvertailu riippumatonta sgp4-crate-pakettia vastaan, CI-kattavuusportti (~97 % rivikattavuus hakemistossa src/) ja kolmen käyttöjärjestelmän (ubuntu/macos/windows) toistettavuusmatriisi.

Muutettu#

  • Jokainen leikkikentän kaavio vastaa nyt sivuston teemaa. Kaikki kaksitoista SVG-kaaviogeneraattoria – tulos-/holdover-kaavio (src/report.rs + src/chart.rs), Allanin poikkeaman kaavio (web/app.js) ja jokainen skenaariokaavio (src/hybrid.rs, jamming.rs, timetransfer.rs, spoof.rs, raim.rs Stanford + saatavuus, lunar.rs, ensemble.rs, sweep.rs, gnss_sim.rs, fusion/pack.rs, inertial/mod.rs) – käyttivät viileitä laivastonsinisiä paneeleita (#0e131b), viileänharmaita akseleita ja tekstiä sekä törmäävää punainen/sininen/violetti-sarjapalettia. Ne käyttävät nyt kauttaaltaan lämmintä grafiittipalettia: --bg-paneelit, lämmin ruudukko --line, otsikot --fg, johdonmukaisella sarjajaolla – kvantti = hunajankulta (--accent-bright), klassinen = lämmin meripihka (--partial), määritys/raja = --crit. Turvallisuuskoodatut näkymät säilyttävät merkityksensä: RAIM Stanford -kaavio pysyy vihreänä (saatavilla) / meripihkana (harhaanjohtava) / punaisena (vaarallinen) / himmeänä teräksenä (ei saatavilla), ja HPL/VPL näkyvät kultana/pronssina.
  • Kaaviot kuvaavat nyt itse itsensä tallennettuina tai ladattuina. Molemmat kaaviot upottavat otsikkonsa SVG:hen (Allan-kaavion otsikko + ”lower is better” -alaotsikko olivat aiemmin vain HTML:ää kuvan ympärillä, joten tallennetulla kuvalla ei ollut selitettä), ja molemmilla on alkuperäalatunniste – Kshana v<version> · <scenario-hash> · kshana.dev – jotta ladattu kaavio seisoo omillaan ja pysyy toistettavana.
  • Jokaisessa kaaviossa on nyt alkuperäalatunniste. Alatunniste – Kshana v<version> · scenario <hash> · kshana.dev – leimataan keskitetysti kaikille skenaariolajeille kohdassa api::run_toml (se oli aiemmin vain holdover- ja Allan-kaavioissa), joten mikä tahansa tallennettu tai ladattu kuva – leikkikentästä, CLI:n viennistä .chart.svg tai HTML-tuloskortista – tunnistaa versionsa, skenaarion sormenjäljen ja lähteensä. Tiiviste on nimetty selvyyden vuoksi scenario ja tulee tuloksen kentästä scenario_hash, kun se on läsnä, lähdetiivisteen varaarvolla eheys- ja kuuraporteille. Mikä sormenjälki on ja miksi se on olemassa, on dokumentoitu README:n ”Output”-osiossa ja kohdassa docs/PROVENANCE.md.

Korjattu#

  • raim::chi2_quantile ja RAIM Stanford -kohinanäytteistäjä ovat nyt paniikittomia alueen ulkopuolisilla / ei-äärellisillä syötteillä (kohdan read_dir järjestyksestä riippuva fuzz-löydös uusista ARAIM-skenaarioista). chi2_quantile suojaa nyt kohdat p/k kuten normal_quantile (palauttaa raja-arvon kohteen assert!-paniikin sijaan), ja saatavuuden Stanford-kohinan Normal rajaa ehdottoman positiiviseen σ:aan – joten eheys/ARAIM-kokonaisuus ei koskaan panikoi mutatoiduilla tai väärin konfiguroiduilla skenaarioilla.

Lisätty#

  • Alustojen välinen toistettavuuden CI-matriisi. Uusi työ reproducibility-matrix ajaa toistettavuustestit ubuntu-latest-, macos-latest- ja windows-latest-ympäristöissä jokaisen pushin yhteydessä. Koska koko tulos-JSON ei ole tavutarkasti identtinen käyttöjärjestelmien välillä (viimeisen ULP:n libm-ero), se varmistaa täsmälleen alustasta riippumattoman projektion – syötteen sormenjäljen sekä tulosteen muodon, kiinnitettynä skenaariokohtaisesti SHA-256-kultaisina arvoina hakemistossa tests/golden/ uudella testillä tests/cross_platform_golden.rs – numeeristen kiinnitysten (golden.rs, tarkkuudella 1e-6), SGP4-tilojen (sgp4_verification.rs, tarkkuudella 2e-5 km) ja saman prosessin determinismin (determinism.rs) rinnalla. Yhdessä nämä todistavat alustojen välisen toistettavuuden kolmella käyttöjärjestelmällä ilman koko tulosteen tarkan tavutiivisteen haurautta. docs/REPRODUCIBILITY.md dokumentoi jaon.
  • Koodikattavuusportti CI:ssä. Uusi työ coverage ajaa työkalun cargo-tarpaulin LLVM-lähdepohjaisella moottorilla, julkaisee lcov-raportin rakennusartefaktina ja valvoo rivikattavuuden lattiaa hakemistossa src/ (generoidut datataulukot, CLI-sisääntulokohta, testit ja web-resurssit pois lukien). Mitattu rivikattavuus on ~97 % hakemistossa src/ (SGP4 ja kellomoduulit ≥95 %); portti on asetettu tasolle 85 % – tavoitteen ≥80 % yläpuolelle ja mitatun arvon alapuolelle selvästi, joten se havaitsee regressiot ilman epävakautta. README:ssä julkaistaan kattavuusmerkki.
  • SGP4/SDP4 suoraan vertailtuna riippumattomaan crate-pakettiin sgp4. Uusi testi (tests/sgp4_crate_comparison.rs) ristiinvalidoi Kshanan propagaattorin laajimmin käytettyä Rust-SGP4-kirjastoa (neuromorphicsystems/sgp4, lisätty vain testien kehitysriippuvuutena) vastaan samoilla 666 AIAA 2006-6753 -vektoreilla. Kun molemmat ajetaan vektoreiden käyttämällä WGS72-gravitaatiomallilla, kaksi riippumatonta toteutusta ovat yhtäpitäviä alle mikrometrin tarkkuudella lähellä Maata olevilla ja resonanteilla radoilla ja 4,12 mm:n huonoimmalla tapauksella kaikissa alueissa, ja molemmat toistavat viitetaulukon tcppver.out. Sitoutettu vertailutaulukko (tests/fixtures/sgp4_comparison.md, generoitu uudelleen asetuksella KSHANA_REGEN_FIXTURES=1) erittelee tuloksen alueittain (LEO/MEO, syväavaruus, ½ vuorokauden ja 1 vuorokauden resonanssi) ja toteaa neljä tarkoituksella patologista tapausta, jotka crate hylkää rakennusvaiheessa. Live-väittämät pitävät molemmat tarkkuudella 2e-5 km viitteestä ja keskenään tarkkuudella 4e-5 km – regressiovartija, ei kertaluonteinen. Tämä on kilpailukykyistä pätevyyttä: oikeellisuus riippumatonta koodikantaa vastaan, ei vain staattinen taulukko. (Crate-paketin oletus from_elements käyttää WGS84:ää ja eroaa siten WGS72-viitteestä ~km – tämä tuodaan rehellisesti esiin taulukon proosassa.)
  • CCSDS OMM -vienti on nyt tavoitettavissa päästä päähän. OMM-kirjoittimella (src/omm.rs) ei aiemmin ollut CLI- tai API-polkua; skenaarion orbit keskimääräiset elementit voidaan nyt julkaista CCSDS 502.0-B-2 OMM -luettelona – yksi OMM KVN -sanoma TLE:llä määriteltyä satelliittia kohti – komennolla kshana <orbit.toml> --export-omm out.omm, tai export_omm = true skenaariossa kirjoittaa automaattisesti tiedoston <scenario>.omm (peilaa olemassa olevaa --export-sp3). Jokainen sanoma kantaa satelliitin todellisen NORAD-luettelonumeron, COSPAR-kansainvälisen tunnuksen (YYYY-NNNP) ja epookin (CCSDS-vuoden päivän muoto), jäsennettynä TLE-rivistä 1 uudella funktiolla tle::parse_tle_identity; nimirivistä tulee OBJECT_NAME (muuten OBJECT <id>). CREATION_DATE on skenaarion epookki, ei seinäkellon aika, joten tuloste on toistettava. Uusi API: api::export_omm / api::auto_export_omm, OmmFile::from_tle_block, OrbitClockScenario::to_omm_string. Synteettinen Walker- tai RINEX-skenaario (ei TLE-keskimääräiselementtejä) antaa virheen tyhjän tiedoston tuottamisen sijaan. Validoitu mukana toimitettua 30 satelliitin tilannekuvaa gps-ops vastaan (tests/sp3_export_roundtrip.rs).
  • Interaktiiviset kohdistuslukemat leikkikentän kaavioissa. Kun kursori siirretään kaavion päälle, hiusristikko tarttuu lähimpään näytteeseen ja näyttää arvovihjeen (web/hover.mjs, kytketty tiedostossa web/app.js). Allan-kaaviossa se lukee τ:n ja kunkin kellon σ_y(τ):n; aikasarjaskenaarioiden kaavioissa (kellon holdover, dead-reckoning, ajansiirto, hybridi-PNT, GNSS/INS) se lukee ajan ja kunkin paketin arvon kaavion omissa yksiköissä (ns / m / ps / käyttöaste), jäsennettynä tuloksesta, joten lukema vastaa käyrää. Erikoiskaaviot (RAIM, harhautus, pyyhkäisy) eivät saa peitettä. Kaaviot pysyvät itseään kuvaavina blob-kohteina <img> – peite on läpinäkyvä hiusristikko + vihje päällä, joten lataus, vertailu ja vienti pysyvät koskemattomina. Koordinaattimatematiikka (lähin näyte, kursori→piirtoalan osuus, murtoviivan jäsennys) on yksikkötestattu (web/hover.test.mjs, ajetaan CI:ssä).
  • A/B-vertailutila leikkikentässä. Kiinnitä mikä tahansa ajo lähtötasoksi A, aja toinen skenaario, ja kaksi näytetään rinnakkain laatumittarien erotustaulukolla (holdover, ajoituksen RMS/p95, saatavuus), joka värittää voittajan mittaria kohti (web/compare.mjs, kytketty tiedostossa web/app.js; erotuslogiikka yksikkötestattu tiedostossa web/compare.test.mjs, ajetaan CI:ssä). Kaikki arvot lisätään tekstinä ja kaikki kaaviot blob-kohteina <img>, joten mitään skenaariomerkkijonosta ei koskaan injektoida merkintäkoodina.
  • Kaavion latauspainikkeet (SVG + PNG). Jokaisessa leikkikentän kaaviossa on nyt teemaan sovitettu ”Download SVG / PNG” -työkalurivi (web/chartdl.mjs, kytketty tiedostossa web/app.js). SVG antaa takaisin uskollisen, skaalautuvan alkuperäisen; PNG rasteroi saman itseään kuvaavan kuvan 2x-kokoon dioja ja dokumentteja varten. Tiedostot nimetään alkuperänsä mukaan – kshana-<chart>-v<version>-<scenario-hash>.<ext> – ja tiedostonimi- ja kokologiikka on yksikkötestattu (web/chartdl.test.mjs, ajetaan CI:ssä).
  • IGRF-14-geomagneettinen pääkenttämalli (src/igrf.rs). IAGA:n standardi pallofunktiokenttä (aste/kertaluku 13, 2025,0 epookki + 2025–2030 sekulaarinen variaatio; kertoimet koneellisesti generoitu virallisesta tiedostosta igrf14coeffs.txt työkalulla tools/gen_igrf.py tiedostoon src/igrf_data.rs, toistettavissa bitti bitiltä). Schmidt-normalisoitu synteesi palauttaa kenttävektorin (pohjoinen/itä/alas) ja johdetut elementit (deklinaatio, inklinaatio, vaaka-/kokonaisintensiteetti) missä tahansa geodeettisessa paikassa ja ajankohtana, sekä geomagneettisen navan ja dipolin voimakkuuden – gravitaatiokarttasovittimen magneettinen vastine vaihtoehtoisen PNT:n navigoinnille. Validoitu itsenäisesti: synteesi vastaa tarkkaa suljetun muodon kallistettua dipolia, täysi asteen 13 analyyttinen kenttä vastaa skalaaripotentiaalin differenssiä, dipoliakseli toistaa tunnetun geomagneettisen navan (~80,7°N, −72,7°E) ja ~29,7 µT:n voimakkuuden, ja globaali kenttä on fysikaalinen.
  • Tyypitetyt Python-sidokset (src/python.rs). Merkkijono sisään / merkkijono ulos -funktioiden run/run_full lisäksi moduuli tarjoaa nyt tyypitetyn luokan RunOutput (.json, .svg, .summary sekä lukija .data(), joka palauttaa tuloksen jäsennettynä natiiviksi Python-dictiksi – ei JSON-uudelleenjäsennystä, NumPy-kääriteltävissä), sekä run_typed, scenario_kinds() (jäsennetty metatietosanakirjojen luettelo) ja validate_toml() (virheilmoitusten luettelo, joka ei heitä poikkeusta). Mukana PEP 561 -tyyppitynkä (kshana.pyi + py.typed) mypy/pyright/editoreille ja pikaopas docs/PYTHON_API.md. Olemassa olevat funktiot ovat ennallaan.
  • Ensiluokkaiset tulostekoordinaatistot propagaattoreille (src/orbit.rs Frame -enum + position_in_frame + state_gcrs). Mikä tahansa Propagator (Kepler, SGP4, RINEX, GLONASS, SP3) voi nyt antaa paikkansa TEME-, GCRS- (≈ J2000) tai ITRS-koordinaatistossa (Maa-kiinteä) – TEME natiivina, GCRS validoidun TEME→GCRS-redusoinnin kautta, ITRS ketjuttamalla se IAU 2006/2000A CIO -pyörityksen gcrs_to_itrs kanssa – ja täyden GCRS-tilansa (paikka + nopeus) funktiolla state_gcrs. Päivämääräinen inertiaalitulostus ei ole enää vain TEME.
  • CIO-pohjainen IAU 2006/2000A taivaallinen–maallinen redusointi (src/cio.rs). Moderni, päiväntasauksesta vapaa GCRS↔CIRS↔ITRS-ketju: CIP-koordinaatit X, Y luettuna IAU 2006/2000A:n harha-prekessio-nutaatiomatriisista (käyttäen uudelleen validoitua FW-prekessiota + 2000A-nutaatiota säädöllä eraNut06a P03), 66 termin CIO-paikannin s -sarja (eraS06, koneellisesti generoitu ERFA-viitteestä työkalulla tools/gen_s06.py tiedostoon src/cio_s06_data.rs, toistettavissa bitti bitiltä), GCRS→CIRS-matriisi (eraC2ixys), Maan pyörimiskulma (eraEra00) ja täysi GCRS→ITRS-pyöritys (eraC2tcio, yhdistettynä olemassa olevaan IERS-napaliikkeeseen). Validoitu bitti bitiltä julkaistua eraXys06a (X=0.5791308482835292617e-3, Y=0.4020580099454020310e-4, s=-0.1220032294164579896e-7 hetkellä JD_TT 2453736,5), eraC2ixys ja eraEra00 -testivektoreita vastaan. CIO-ketjun ja vanhan päiväntasaus/GMST-1982-TEME-redusoinnin osoitetaan olevan yhtäpitäviä dokumentoituun ≈2·(päiväntasausten yhtälö) -tähtiaikakonventioeroon asti. Tämä on tarkka redusointi, jota päiväntasaus/GMST-polku approksimoi.
  • Täysi IAU 2000A -nutaatiosarja (src/nutation.rs nutation_iau2000a, nutation_matrix_2000a). Täydellinen MHB2000-malli – 678 kuu-aurinko- + 687 planeettatermiä – tarkkuudella < 0,1 mas, olemassa olevan 77 termin 2000B-typistyksen rinnalla. Taulukot generoidaan koneellisesti IAU SOFA / ERFA -viitteestä nut00a työkalulla tools/gen_nut00a.py tiedostoon src/nutation_iau2000a_data.rs (generaattori toistaa sitoutetun tiedoston bitti bitiltä), ja koko sarja – sekä IERS-2003- että MHB2000-perusargumenttijoukot ja planeettapituudet – on validoitu bitti bitiltä julkaistua eraNut00a -testivektoria vastaan (Δψ = −0.9630909107115518e-5, Δε = 0.4063239174001679e-4 hetkellä JD_TT 2453736,5, tarkkuudella 1e-13 rad). Oletusarvoinen TEME→GCRS-redusointi säilyttää 2000B-sarjan (~1 mas, ketjun nopeuskoordinaatiston pyörityksen yksinkertaistuksen alapuolella); nutation_matrix_2000a tarjoaa tarkkuuden < 0,1 mas päivämääräisen matriisin kutsujille, jotka tarvitsevat sitä.
  • Ajettava kuun eheysskenaario (kind = "lunar-integrity", scenarios/lunanet-araim.toml). Kytkee kuun etelänavan suojaustason ajon (src/lunar.rs LunarScenario → south_pole_hpl_pass) skenaarioajuriin JSON-tuloksella LunarReport ja SVG HPL vs. aika -kaaviolla, joten kuunläheinen eheystapaus on tavoitettavissa suoraan CLI:stä. Se tuo aukon rehellisesti esiin: 30 m:n LANS-σ_URE:llä etelänavan HPL (≈ 260–450 m) ylittää 50 m:n hälytysrajan (0 % saatavilla) – kuun PNT:n eheys ei vielä täyty.
  • Kahden satelliittitähdistön ARAIM-saatavuus todellisilla GPS+Galileo-TLE:illä ja skenaarioajurin kytkentä (src/raim.rs, src/orbit.rs, scenarios/araim-gps-galileo.toml). Lisää araim_dual_constellation_availability (edistynyt ARAIM-moottori – yhden satelliitin ja koko satelliittitähdistön viat – ajettuna aikaruudukon yli) ja visible_positions_labeled, ja kytkee sen IntegrityScenario-ajuriin lipulla araim_dual, jotta usean GNSS:n ARAIM-tutkimus on tavoitettavissa suoraan TOML:sta. Todellisen datan testi (tests/araim_dual_real_data.rs) mukana toimitetuilla 2026-06-07 Celestrak GPS+Galileo -tilannekuvilla osoittaa, että Galileon yhdistäminen nostaa ARAIM-saatavuuden arvosta 0,21 arvoon 0,67 vaativalla 12 m:n VAL:lla (10,5→21,8 näkyvää satelliittia), kun taas satelliittitähdistövikoja kestävä tila on pohjimmiltaan rajoittunut vain kahdella satelliittitähdistöllä – kvantitatiivinen syy sille, miksi kestävä kahden satelliittitähdistön eheys vaatii kolmatta satelliittitähdistöä tai SBAS:ia. Rehellinen jäännös: numeerisesti tarkka EU:n ARAIM TN:n taulukon A-3 toisto yhtä versiolukittua epookkia vastaan sekä Zenodo-testiaineistotietue.
  • Ympyrämäinen rajoitettu kolmen kappaleen ongelma (CR3BP) Maa–Kuu-järjestelmälle (src/cr3bp.rs). Uusi kuunläheisen dynamiikan ydin, jota kahden kappaleen / SGP4-propagaattorit eivät voi tarjota: pyörivän koordinaatiston liikeyhtälöt (cr3bp_accel), RK4-propagaattori (propagate_cr3bp), Jacobin vakio-integraali (jacobi_constant) ja viisi Lagrangen pistettä (lagrange_points). Validoitu suljetun muodon / julkaistuja ankkureita vastaan: Maa–Kuu-kollineaariset pisteet (L1 ≈ 0,83692, L2 ≈ 1,15568, L3 ≈ −1,00506), tarkka tasasivuinen L4/L5 = (½−μ, ±√3/2, 0), kaikki viisi vahvistettu kenttätasapainoiksi, Jacobin vakio säilyy integraattorin tarkkuudella propagoinnin aikana, sekä tason ulkopuolinen palauttava voima, joka tekee halo/NRHO-radat mahdollisiksi. Tämä on perusta todellisen NRHO:n esittämiselle. Rehellinen jäännös: differentiaalikorjatut jaksolliset 9:2 NRHO-alkuehdot, eksentrinen/efemeridi (DE) -malli ja denormalisoitu muunnos tiedoston src/lunar.rs selenosentrisiin koordinaatistoihin.
  • IERS-napaliike ja TEME→ITRF-redusointi (src/frames.rs). Lisää polar_motion_matrix (SOFA iauPom00: W = Rx(−y_p)·Ry(−x_p)·Rz(s′) TIO-paikantimella s′), pef_to_itrf / itrf_to_pef ja teme_to_itrf – GMST-pohjainen TEME→PEF-pyöritys, jota seuraa napaliike – mikä täydentää ITRF-tarkan Maa-kiinteän paikan pelkän GMST:n teme_to_ecef päälle (napaliike on kymmenien metrien vaikutus kiertoratasäteellä). x_p/y_p ovat havaittuja IERS-suureita, jotka kutsuja antaa. Rehellinen jäännös: täysin CIO-pohjainen (X, Y, s) -ketju ja ANISE/SPICE <10 m numeerinen ristiintarkistus jäävät jatkotöiksi.
  • Kylmäatomi-interferometrin systematiikka, ajautumispyyhkäisy ja julkaistun laitteen validointi (src/inertial/quantum_imu.rs, docs/QUANTUM.md). Laajentaa ensiperiaatteista johdettua CAI-kiihtyvyysmittaria kahdella johtavalla deterministisellä systematiikalla: Coriolis-/pyörimisvaihe Φ_cor = 2·k_eff·v_⊥·Ω·T² (coriolis_phase, vastaavalla kiihtyvyysharhalla 2·Ω×v funktiolla coriolis_accel_bias) ja AC-Stark-valosiirtymän vaihe Φ_LS = (δ_LS,1 − δ_LS,3)/Ω_eff (ac_stark_phase, joka kumoutuu π/2–π–π/2-symmetrialla vakiosiirtymälle). Lisää cai_drift_sweep (dead-reckoning-paikan ajautuma vs. sykliaika – kvantti vs. klassinen -vertailun ydin) ja validointitestin Freierin ym. 2016 mobiiligravimetriä vastaan (arXiv:1512,05660): mallinnettu kvanttiprojektiokohinan lattia on julkaistun 96 nm/s²/√Hz:n lyhyen aikavälin kohinan alapuolella ja ~2 suuruusluokan sisällä siitä. docs/QUANTUM.md päivitetty. Rehellinen jäännös: aaltorintaman / keilan osoituksen systematiikka, häiriökuvion epäselvyyden ratkaisu, CARIOQA-PMP / Boeing-AOSense -lentotestin tarkka toisto (vaatii julkaistut alustan PSD:t) ja JS-leikkikentän esiasetus.
  • Kuunläheinen koordinaatiston redusointi ja kuun etelänavan eheysajo (src/lunar.rs). Laajentaa kuun ARAIM-moottoria MCI↔MCMF (Kuu-keskinen inertiaali ↔ Kuu-kiinteä) -pyörityksellä (mci_to_mcmf / mcmf_to_mci, yksinkertaistettu keskipyörimismalli kuun tähtinopeudella), selenografisella leveydellä/pituudella/korkeudella (mcmf_to_selenographic / selenographic_to_mcmf) sekä south_pole_hpl_pass – laskeutunut Artemis-alueen vastaanotin edustavaa LunaNet-välitysjoukkoa vastaan 24 h:n ylilennon aikana, mikä kvantifioi eheysaukon rehellisesti: nimellisellä 30 m:n LANS-σ_URE:llä suojaustaso on äärellinen mutta ylittää 50 m:n pintaoperaatioiden hälytysrajan. Rehellinen jäännös: tarkka LANS NRHO -efemeridi (3-kappaleen kuunläheinen rata), fysikaalinen libraatio / prekessoiva kuun napa (DE421/SPICE) ja LunaNet-TOML-skenaario jäävät jatkotöiksi.
  • ARAIM-eheystukisanoma, Stanford-kaavio-SVG ja avoin ARAIM-viite (src/raim.rs, docs/ARAIM_REFERENCE.md). Lisää eksplisiittisen IntegritySupportMessage (σ_URA / σ_URE / b_nom / P_sat / P_const, WG-C GPS+Galileo-viitearvoilla ja muuntimilla .fault_priors() / .dual_fault_priors() yhden satelliitin vian moottoriin araim_raim ja koko satelliittitähdistön vian moottoriin araim_dual_raim), erillisen Stanford-eheyskaavion renderöijän stanford_svg (neljä vyöhykettä, rajan PL = error, hälytysrajaoppaat, yksi värikoodattu merkki epookkia kohti) sekä dokumentin docs/ARAIM_REFERENCE.md, joka kuvaa algoritmin, ISM:n, vikahypoteesit, suojaustason sopimuksen ja kahden satelliittitähdistön hyödyn. Testit osoittavat geometria-/redundanssihyödyn (toisen satelliittitähdistön yhdistäminen tiukentaa yhden vian HPL:ää) ja satelliittitähdistövikojen sietokyvyn (kahden tähdistön käyttäjä selviää koko tähdistön menetyksestä; yhden tähdistön käyttäjä ei). Rehellinen jäännös: EU:n ARAIM TN:n taulukon A-3 / 15–25 %:n saatavuusluvun numeerinen toisto versiolukittua todellista TLE-tilannekuvaa vastaan, Zenodo-testiaineistotietue ja araim_dual_raim kytkeminen skenaariotiedostoajuriin.
  • IAU 2000B -nutaatio ja täysi TEME→GCRS/J2000-inertiaaliredusointi (src/nutation.rs). Lisää toisen ja kolmannen osan todelliseen inertiaalikoordinaatistoredusointiin toimitetun IAU 2006 -prekession päälle: 77 termin kuu-aurinko-MHB2000-nutaatiosarja (nutation_iau2000b, standardi IAU 2000B -typistys tarkkuudella ~1 mas) Delaunayn perusargumenteilla ja SOFA-nutaatiomatriisilla iauNumat, sekä Vallado AIAA-2006-6980 -ketju TEME→TOD (päiväntasausten yhtälö) → TOD→MOD (nutaatio) → MOD→GCRS (harha-prekessio), tarjottuna muodossa teme_to_gcrs(r, v, jd_tt) / gcrs_to_teme. Sarja, argumentit ja yksikkövakiot on transkriboitu IAU SOFA / ERFA -viitteestä nut00b ja validoitu bitti bitiltä julkaistua eraNut00b -testivektoria vastaan (Δψ, Δε tarkkuudella 1e-13 rad). Rehellinen jäännös: täysi IAU 2000A:n 678 termin sarja (<0,1 mas), ANISE/SPICE <10 m numeerinen ristiintarkistus ja napaliike jäävät jatkotöiksi (katso ROADMAP.md).

0.12.0 - 2026-06-06#

Tämä julkaisu tuo Kshanan ensimmäisen ei-analyyttisen ratapropagaattorin – Cowell-integraattorin hierarkkisella kuuden häiriön voimamallilla (kahden kappaleen + J2–J6-vyöhyke + epookkiohjattu Auringon/Kuun kolmas kappale + auringonsäteilypaine kartiomaisella umbra/penumbra-varjolla + ilmakehän vastus + jälki-newtonilainen Schwarzschildin relativistinen korjaus), jota ajaa valinta kahden mukautuvan integraattorin välillä (RK4-askeltuplaus ja Dormand–Prince RK5(4) -upotettu pari) – sekä manööveri- ja ratasuunnittelukerroksen (impulsiiviset ja äärelliset poltot, Izzon Lambert-ratkaisija ja porkchop-pyyhkäisy), gravitaatiokarttasovitukseen perustuvan alt-PNT-kerroksen, joka palauttaa 60 minuutin GPS-estetyn jäljen alle 500 m:iin, erä- ja peräkkäisen radanmääritysketjun sekä täyden 17-tilaisen tiukasti kytketyn GNSS/INS-UKF:n kvantti-CAI-dead-reckoningilla. Jokainen numeerinen ominaisuus on kiinnitetty analyyttiseen totuuteen tai käsin johdettuun suljettuun muotoon; oletuksena pois päältä olevat häiriöt jättävät julkaistut kultaiset arvot koskemattomiksi.

Lisätty#

  • Jälki-newtonilainen (Schwarzschild) relativistinen korjaus (forces::relativistic_accel + propagator::ForceModel::relativity). Lisää hallitsevan yleisen suhteellisuusteorian häiriön lähellä Maata olevalla radalla – relativistisen perigeumin etenemisen pääasiallisen aiheuttajan – IERS / Montenbruck–Gill -muodossa β = γ = 1 a = (μ/c²r³)·{[4μ/r − v²]·r + 4(r·v)·v}. Kuten ilmakehän vastus, se on nopeudesta riippuva, joten se kulkee integraattorin oikealla puolella (r, v) kautta [accel_rv], valinnainen ja oletuksena pois päältä. Validoitu itsenäisesti: ympyräradalla se redusoituu suljettuun muotoon 3μ²/(c²r³)·r̂ (puhtaasti radiaalinen ja ulospäin, sivuttaiskomponentit täsmälleen nolla); sen suhde kahden kappaleen kiihtyvyyteen on oppikirjan ≈1.9·10⁻⁹ LEO:lla (μ/(c²r)-tunnusmerkki); radiaalinopeustapaus vastaa käsin yksinkertaistettua μ(4μ + 3v²r)/(c²r³); ja propagaattorissa se häiritsee rataa kuluttamatta sitä – isoakseli säilyy selvästi alle metrin/vrk tarkkuudella, rakenteellisesti vastakohta vastuksen monotoniselle vaimenemiselle. Koska se on oletuksena pois päältä, kahden kappaleen/J2/vyöhyke-kultaiset arvot ovat koskemattomia. PPN-parametrien (β,γ) säätö ja Lense–Thirring-kehyksenvetäytymistermi jäävät jatkotöiksi.
  • Kartiomainen umbra+penumbra-varjomalli (forces::conical_shadow), jota auringonsäteilypaine nyt käyttää. Päivittää binäärisen umbrasylinterin pimennyksen tasaiseksi tekijäksi ν ∈ [0,1]: Aurinko ja Maa mallinnetaan näennäisten kulmasäteiden a = asin(R☉/d☉), b = asin(Rₑ/|r|) kiekkoina näennäisellä keskipisteiden etäisyydellä c, ja ν on yksi miinus se osuus Auringon kiekosta, jonka Maan kiekko peittää (ympyrä–ympyrä-linssipäällekkäisyyden ala) – täysi auringonpaiste kun c ≥ a+b, täysi umbra kun c ≤ b−a, rengasmainen kun c ≤ a−b ja jatkuva penumbra siinä välissä. srp_accel käyttää nyt sitä, joten SRP-voima vaimenee tasaisesti pimennyksen läpi päälle/pois-kytkennän sijaan. Lisää IAU:n nimellisen forces::SOLAR_RADIUS. Validoitu itsenäisesti: ν = 1 täydessä auringonpaisteessa ja ν = 0 syvällä umbrassa (tarkka), tasainen monotoninen penumbra (ν nousee 0 → ~½ kohdassa c = b → 1 kaistan [b−a, b+a] yli), ja kartiomainen penumbra ulottuu umbrasylinterin ulkopuolelle (piste, jonka binäärisylinteri katsoo täysin valaistuksi, on 0 < ν < 1 kartiolle). Yksinkertaisempi cylindrical_shadow pysyy käytettävissä; Auringon reunatummuus ja litistyneen Maan varjo jäävät jatkotöiksi.
  • Dormand–Prince RK5(4) -upotettu integraattori (integrator::dopri54_step / integrator::integrate_dopri + propagator::propagate_dopri). Lisää standardin Dormand–Prince (1980) -upotetun Butcher-taulukkoparin olemassa olevan RK4-askeltuplausajurin rinnalle: seitsemän FSAL-vaihetta tuottaa 5. kertaluvun ratkaisun ja 4. kertaluvun virhearvion yhdestä arviointijoukosta (7 vs. 11 funktiokutsua askelta kohti), halvemman paikallisen virhearvion. Mukautuva ajuri käyttää uudelleen samaa RMS-virhenormia ja askelsäädintä 0.9·(1/err)^(1/5), joten se on suoraan korvaava vaihtoehto; propagator::propagate_dopri tarjoaa sen ratojen voimamallille. Validoitu itsenäisesti: upotettu virhearvio on O(h⁵) (askeleen puolittaminen leikkaa sitä ~32×); DP5(4) integroi y' = y arvoon e ja harmonisen oskillaattorin 50 jakson yli säilyttäen energian tarkkuudella <1e-6; se saavuttaa saman päätepisteen samalla toleranssilla vähemmillä funktioarvioinneilla kuin askeltuplaus (tarkkuutta uhraamatta); ja propagate_dopri läpäisee saman analyyttisen totuuden portin kuin RK4-polku – alle metrin tarkkuus tarkkaa universaalimuuttujaista Kepler-ratkaisua vastaan 24 h:n LEO-radalla – kun taas kaksi ajuria ovat yhtäpitäviä tarkkuudella <1 m J2..J6-radalla (ei suljettua muotoa). Korkeammat upotetut parit (RKF7(8) / DOP853) jäävät jatkotyöksi.
  • Ilmakehän vastus kytketty propagaattoriin sen ensimmäisenä nopeudesta riippuvana voimana (forces::atmospheric_density + forces::drag_accel + propagator::ForceModel::drag). Lisää Vallado-taulukon 8-4 paloittain eksponentiaalisen ilmakehän ρ = ρ0·exp(−(h−h0)/H) (28 kaistaa merenpinnalta yli 1000 km:n, rajattu pinnan alapuolella) ja kvadraattisen vastuksen a = −½ · ρ(h) · (C_D·A/m) · |v_rel| · v_rel mukana pyörivää ilmakehää v_rel = v − ωₑ ẑ × r (forces::EARTH_ROTATION_RATE = 7.2921151467e-5) vasten. Koska vastus riippuu nopeudesta, ForceModel saa uuden accel_rv(t, r, v) ja integraattorin oikea puoli välittää nyt nopeuden (f(t,[r;v]) = [v; a(t,r,v)]); pelkästään paikasta riippuva accel_at on ennallaan, joten konservatiiviset termit ja kultaiset arvot ovat koskemattomia. Validoitu itsenäisesti: tiheys ankkuroituu merenpinnan arvoon 1,225 kg/m³, rajautuu pinnan alapuolella, pienenee monotonisesti LEO:n läpi, osuu aurinkokeskiarvon ~1e-12 kg/m³ -kaistalle 400 km:ssä, ja sen palautettu paikallinen skaalakorkeus (≈ 58 km 400 km:ssä) on fysikaalinen; vastus vastustaa mukana pyörivää suhteellista nopeutta LEO:n ~2e-6 m/s²:n suuruusluokassa kun C_D·A/m = 0.02 m²/kg; ja – keskeinen tunnusmerkki – vastus on dissipatiivinen: 300 km:n rata menettää ominaisenergiaa monotonisesti ja sen isoakseli pienenee rajatulla ~km/vrk, kun taas tyhjiöreferenssi säilyttää energian tarkkuudella <1e-9. NRLMSISE-00-termosfääritiheys (< 5 %:n vastustiheyslauseke) jää jatkotyöksi.
  • Auringonsäteilypaine kytketty epookkiohjatusti propagaattorin voimamalliin (forces::srp_accel + propagator::ForceModel::solar_radiation). Lisää kanuunankuulamallisen SRP-mallin a = ν · P☉ · cᵣ · (A/m) · (AU/d)² · d̂ sylinterivarjopimennystekijällä (forces::cylindrical_shadow, ν ∈ {0 1}): säteilypaine P☉ = Φ☉/c modernista 1361 W/m²:n kokonaisauringonsäteilystä (≈ 4,5398·10⁻⁶ N/m²), käänteisneliöllinen (AU/d)² vuon heikkeneminen ja radiaalinen työntö poispäin Auringosta. Se kulkee samalla epookkiohjatulla oikealla puolella kuin kolmas kappale, ja näytteistää ephem-Auringon kerran edenneellä epookilla epoch_jd_tt + t/86400, joka jaetaan Auringon kolmannen kappaleen ja SRP:n kesken. Yhdistettävissä: with_zonals_j2_j6().third_body(true, true, epoch).solar_radiation(1.5, 0.02). Validoitu itsenäisesti käsin johdettuja tunnusmerkkejä vastaan: 1 AU:n säteilypaine kiinnittyy oppikirjan ≈ 4,5398·10⁻⁶ N/m²:iin; täysin valaistun LEO-satelliitin SRP on bitti bitiltä identtinen kanuunankuulakaavan kanssa, osoittaa poispäin Auringosta ja osuu ~1,36·10⁻⁷ m/s² -kaistalle kun cᵣ = 1,5, A/m = 0,02 m²/kg; Auringon etäisyyden kaksinkertaistaminen neljännestää suuruuden (käänteisneliö); sylinterivarjo pimentää vain umbrasylinterin (aurinkoa vastapäätä ja yhden Maan säteen sisällä Maa–Aurinko-viivasta) ja antaa pimennyksessä täsmälleen nollan SRP:n; ja propagaattorissa SRP häiritsee LEO-rataa pienellä rajatulla määrällä, joka skaalautuu ~lineaarisesti A/m:n mukana – kun taas malli ilman häiriöitä pysyy bitti bitiltä ajasta riippumattomana, jättäen kahden kappaleen/J2/vyöhyke-kultaiset arvot koskemattomiksi. Kartiomainen umbra/penumbra (tasainen ν ∈ [0 1]), ilmakehän vastus ja ulkoinen GMAT/Orekit-ristiinvalidointi jäävät jatkotöiksi.
  • Epookkiohjattu Auringon/Kuun kolmas kappale kytketty ajassa vaihtelevaan propagaattorin oikeaan puoleen (propagator::ForceModel::third_body / accel_at). Kolmannen kappaleen häiriö ei ole enää erillinen voimatermi – Cowell-propagaattori integroi sen nyt todella ajassa vaihtelevana voimana: jokainen oikean puolen arviointi näytteistää ephem-Auringon/Kuun paikat edenneellä epookilla epoch_jd_tt + t/86400 (käyttäen uudelleen funktiota precession::julian_centuries_tt vuorokausi↔vuosisata-muunnokseen), joten häiritsijät liikkuvat ratojaan pitkin integroinnin aikana eikä niitä jäädytetä alkuhetkeen. Yhdistettävissä mihin tahansa gravitaatiomalliin (ForceModel::with_zonals_j2_j6().third_body(true, true, epoch)). Validoitu itsenäisesti: oikean puolen Auringon termi on bitti bitiltä identtinen funktion third_body_accel kanssa arvioituna efemeridipaikassa kyseiselle hetkelle sekä kohdissa t = 0 että t = 1 day (todistaa 86400 s ↔ 1 vuorokausi ↔ 1/36525 vuosisata -kytkennän täsmälleen), häiritsijä etenee ~2,6·10⁹ m/vrk näytteiden välillä (ei jäädytetty), hetkelliset LEO:n vuorovesisuuruudet osuvat oppikirjan ~5·10⁻⁷ m/s² (Aurinko) ja ~1,1·10⁻⁶ m/s² (Kuu, ≈ 2× Aurinko) -kaistoille, kukin kappale häiritsee mitattavasti vuorokauden mittaista rataa pysyen rajattuna, ja sama alkutila propagoituna neljänneksen vuoden välein olevilla epookeilla tuottaa eri radan (vuorovesiakseli kiertyy 90°) – kun taas malli, jossa kumpaakaan kappaletta ei ole käytössä, pysyy bitti bitiltä ajasta riippumattomana, jättäen kahden kappaleen/J2/vyöhyke-kultaiset arvot koskemattomiksi. DE-luokan efemeridin tarkkuus ja ulkoinen GMAT/Orekit-ristiinvalidointi jäävät jatkotöiksi.
  • Pienitarkkuuksinen Kuun efemeridi (ephem::moon_position), joka täydentää Auringon ja Kuun kolmannen kappaleen parin. Lisää Montenbruckin ja Gillin pienitarkkuuksisen kuuradan sarjan (§3.3.2) Aurinko-mallin rinnalle, joten kappaleesta riippumaton funktio forces::third_body_accel voidaan nyt ajaa kummalla tahansa valaisimella ilman ulkoista DE/SPK-kerneliä. Validoitu omavaraisesti käsin johdettuja kuun tunnusmerkkejä vastaan: geosentrinen etäisyys pysyy kuukauden ajan todellisen perigeumin ja apogeumin vaihteluvälin (~356 500–406 700 km) sisällä ja sen kuukausikeskiarvo palauttaa isoakselin puolikkaan, jonka suuruus on ~384 400 km; ekliptikaalinen leveysaste ei koskaan ylitä Kuun radan ~5,3° inklinaatiota (tarkistettu projisoimalla ekvatoriaalikoordinaateissa ekliptikan navalle, mikä validoi leveyssarjan ja ekliptikan kaltevuuden kierron yhdessä); Kuun suunta palaa 1° tarkkuudella samaksi yhden sideerisen kuukauden (27,3217 d) jälkeen ja sen päivittäinen liike pysyy fysikaalisella 12–15°/vrk-alueella; ja Kuun kolmannen kappaleen häiriö LEO-satelliittiin on oppikirjan mukainen, suuruudeltaan ~1,1·10⁻⁶ m/s² (≈ kaksi kertaa Auringon). DE-luokan paikkatarkkuus, ilmakehän vastus ja SRP jäävät jatkotyöksi.
  • Kolmannen kappaleen (Auringon) gravitaatio sisäänrakennetulla pienitarkkuuksisella efemeridillä (forces::third_body_accel, ephem::sun_position). Lisää kolmannen kappaleen häiriön voimamalliin: a = GM₃·((s−r)/|s−r|³ − s/|s|³) (suora vetovoima miinus epäsuora termi, jonka geosentrisen koordinaatiston on vähennettävä), ja Auringon paikan antaa uuden moduulin ephem Montenbruckin ja Gillin pienitarkkuuksinen analyyttinen sarja, eli matalan tarkkuuden ajoon ei tarvita ulkoista DE/SPK-kerneliä. Validoitu omavaraisesti: kiihtyvyys vastaa tarkasti oman häiriöpotentiaalinsa gradienttia (third_body_potential), häiriö katoaa geosentrumissa ja sen suuruus LEO-satelliitilla on oppikirjan mukainen, ~5·10⁻⁷ m/s², ja Auringon efemeridi osuu käsin johdettuihin J2000-ankkuriarvoihin: perihelietäisyys ≈ 1,471·10¹¹ m, deklinaatio ≈ −23° joulukuun päivänseisauksen lähellä, näennäinen liike ≈ 1°/vrk (≈ 90° neljännesvuodessa) ja etäisyys, joka pysyy koko vuoden ajan Maan radan 0,983–1,017 AU:n vaihteluvälin sisällä. Toimittaa numeerisen propagaattorin virstanpylvään voimamalliaskeleen kolmannen kappaleen puolikkaan (Kuu toimitetaan yllä olevassa toisessa yllä olevassa merkinnässä); DE-luokan paikkatarkkuus, ilmakehän vastus ja SRP jäävät jatkotyöksi.
  • J2–J6-zonaaliharmonisten voimamalli (forces::zonal_accel / zonal_potential). Laajentaa Cowell-propagaattorin voimamallin J2:sta koko Maan zonaaliseen kenttään asteeseen 6 asti (standardi julkaistu EGM-96:n normittamaton J2..J6), ja se kytketään propagaattoriin muodossa ForceModel::with_zonals_j2_j6(). Kiihtyvyys on zonaalisen häiriöpotentiaalin R(r) = −(μ/r)·Σ Jₙ(Re/r)ⁿPₙ(z/r) tarkka analyyttinen gradientti (Legendren polynomit ylöspäin etenevällä rekursiolla), ja se on validoitu kolmella toisistaan riippumattomalla tavalla: se palautuu 666 vektorilla validoituun funktioon j2_accel koneen tarkkuudella, kun se rajataan termiin [J2]; se vastaa oman potentiaalinsa numeerista gradienttia koko J2..J6-kentän yli (konservatiivisen kentän kultastandarditarkistus); ja parittoman termin J3 ja parillisten termien J2/J4..J6 pohjois–etelä-(anti)symmetria näkyy muunnoksessa z → −z, eli päärynämäisessä epäsymmetriassa. Propagoitu J2..J6-rata säilyttää kokonaisenergian (liike + keskeinen + zonaalinen potentiaali) ~1e-8 tarkkuudella vuorokauden yli ja poikkeuttaa pelkän J2:n radasta pienen nollasta poikkeavan määrän. Tämä toimittaa numeerisen propagaattorin virstanpylvään vaiheen 2 (”J2–J6 zonal harmonics”); korkea-asteinen EGM:n tesseraalikenttä, ilmakehän vastus, SRP, kolmas kappale ja ulkoinen GMAT/Orekit-ristiinvalidointi jäävät jatkotyöksi.
  • Numeerinen (Cowell) ratapropagaattori (src/propagator.rs). Kshanan ensimmäinen ei-analyyttinen propagaattori (muu ratakokonaisuus on analyyttistä SGP4/SDP4:ää): se kytkee kahden kappaleen + J2 -voimamallin (src/forces.rs) mukautuvaan askeleen kaksinnukseen perustuvaan RK4-ajuriin (src/integrator.rs) muodossa f(t,[r;v]) = [v; a(r)], ja siinä on kytkin ForceModel. Validoitu analyyttistä totuutta vastaan, joka on vahvempi kuin numeerinen työkalujen välinen vertailu olisi: häiriötön rata toistaa tarkan universaalimuuttujaratkaisun Keplerin yhtälöstä alle metrin tarkkuudella 24 tunnin LEO-radalla (tiukempi portti kuin virstanpylvään muotoilu ”vs a numerical reference < 10 m”), ominaisenergia ja liikemäärämomentti säilyvät ~1e-9 suhteellisella tarkkuudella, ja J2:n solmun regressio toistaa suljetun muodon j2_secular_rates ensimmäisen kertaluvun teorian mukaisesti (2 %:n sisällä, O(J2²)-jäännös). Lisää myös funktion solve_kepler_checked, Newtonin menetelmän ratkaisijan Keplerin yhtälölle, joka palauttaa Err äänettömästi väärän vastauksen sijaan, kun se ei suppene rajatun iteraatiobudjetin sisällä (perigeumin lähellä tapaus e = 0.999). Rehellinen rajaus: voimamalli on vain kahden kappaleen + J2; korkea-asteinen EGM:n tesseraalikenttä (200×200 + lataaja), ilmakehän vastus (NRLMSISE-00), SRP, kolmannen kappaleen voimat ja ulkoinen GMAT/Orekit-ristiinvalidointi jäävät jatkotyöksi.
  • 60 minuutin GPS-estetty gravitaatiokarttasovitus alle 500 m tarkkuuteen (run_gps_denied_gravity_nav). Syventää vaihtoehtoisen PNT:n kerrosta ESA NAVISPin Quantum Wayfarer -validointitavoitteeseen: ajoneuvo lentää ~700 km:n reitin koko tunnin kestävän GNSS-katkon ajan, jolloin sen inertiaaliratkaisu ajautuu ≈ 70 km verran, ja kylmäatomigravimetri sekä hierarkkinen karkeasta hienoon -hiukkas-/ruudukkosovitin palauttavat vakiona pysyvän INS-ajautuman ≈ 145 m tasolle (alle 500 m), eli yli 480-kertainen vähennys. Gravimetrin todellinen valkoisen kohinan taso syötetään deterministisenä siemenellisenä sarjana, joten sovitin ei saa kohinatonta totuutta mutta ajo on täsmälleen toistettava (varmennettu bitti bitiltä identtiseksi ja vakaaksi muutaman metrin tarkkuudella kohinatoteutumien yli). Regressiotason testi osoittaa tarkennuksen olevan välttämätön: yksi karkea ruudukko jumittuu ~2 km:iin, ja vasta kolmivaiheinen tarkennus rikkoo 500 m:n esteen. Uusi sitoutettu skenaario scenarios/gps-denied-gravity-nav.toml. Rivi docs/CAPABILITY.md pysyy rehellisesti osittaisena (mukana ei vieläkään ole EGM2008-karttaa), ja sen todiste on päivitetty 60 minuutin alle 500 m:n tulokseen. Rehellinen rajaus ennallaan: matala-asteinen palloharmoninen kenttä + synteettiset mascon-keskittymät; Monte Carlo karttaesityksen virhetoteutumien yli on jatkotyötä.
  • Ylimitoitettujen väitteiden kirjanpito + regressiosuoja (docs/CLAIMS-VS-REALITY.md, tests/no_overclaims.rs). Päättää rehellisyys- ja väitteidenpoistoraidan: neljätoista aiemmassa auditoinnissa luetteloitua ylimitoitettua väitettä (OC-0…OC-13) ovat nyt kaikki GREEN. Vahvat väitteet (OC-0 kytketty kello+paikka-Kalman, OC-2 häirintä J/S→C/N₀→lukituksen menetys, OC-7 Mach–Zehnder-CAI-fysiikka, OC-8 ARAIM HPL/VPL) on korvattu toimitetuilla, testatuilla ominaisuuksilla eikä sanamuotoa ole vain pehmennetty, ja loput rivit on muutettu vastaamaan koodia. Uusi CI-testi skannaa elävät julkiset pinnat (README, CAPABILITY, GLOSSARY, web/) ja epäonnistuu, jos jokin poistettu paljas ylimitoitettu väite ilmestyy takaisin ilman varauksia, joten GREEN-rivi ei voi hiljaa taantua. Ajokohtainen ”integrity”-laatumittari pysyy rehellisesti nimettynä suodattimen itsejohdonmukaisuudeksi (ei ilmailun eheydeksi); todellinen ARAIM HPL/VPL esitetään erikseen, jotta niitä ei koskaan sekoiteta.
  • Gravitaatiokarttasovitukseen perustuva navigointi (GPS-estetty vaihtoehtoinen PNT). Uusi src/gravimeter.rs lisää vaihtoehtoisen PNT:n ominaisuuskerroksen, jota ESA NAVISPin Quantum Wayfarer / QT-CCI-gravitaatiokarttasovitustutkimukset edellyttävät: kylmäatomigravimetrin mittausmalli, jonka valkoisen kohinan taso johdetaan CAI-kiihtyvyysmittarin ASD:stä (σ = ASD/√τ); matala-asteinen, täysin normitettu palloharmoninen gravitaatioanomaliakenttä (validoitu suljetun muodon Legendren funktioita P̄₁₁=√3·cosφ, P̄₂₀=(√5/2)(3sin²φ−1), P̄₂₂=(√15/2)cos²φ sekä käsin johdettua yhden termin anomaliaa 1,897 mGal vastaan) sekä synteettiset mascon-keskittymät korkea-asteisia paikallisia piirteitä varten; ja gravitaatiokarttasovituksen hiukkassuodatin (yhdistää mapmatch + particle_filter), joka palauttaa GPS-estetyn reitin sen läpi lentämästä anomaliasarjasta. Sitoutettu NAVISP-benchmark (scenarios/gravity-map-nav.toml) leikkaa ~73 km:n vapaan inertiaaliajautuman muutamaan kilometriin. Rehellinen rajaus: Kshana ei sisällä koko EGM2008:n 2190° kerroinjoukkoa; kenttä on matala-asteinen + mascon-keskittymät eikä todellinen korkean erottelun kartta; EGM/EIGEN-lataaja, magneettikartta, maastoavusteinen SLAM ja skenaariomoottorin kind=-kytkentä SVG-ajautumakaavioineen jäävät jatkotyöksi. Rivi docs/CAPABILITY.md ”Gravity-map / alt-PNT navigation” → osittainen.
  • Ohjailun mallinnus ja lentoratasuunnittelun alkupiste. Uusi src/maneuver.rs lisää ensimmäisen lentoratasuunnittelun kerroksen SGP4:n päälle: impulsiiviset ΔV-solmut, jotka soveltavat nopeuden epäjatkuvuutta ja kuljettavat 6×6 kovarianssia eteenpäin (deterministinen poltto ⇒ identiteettitilasiirtymä; toteutusvirheen kovarianssi kiertyy polttokoordinaatistosta, ECI:stä tai LVLH:sta, nopeuslohkoon), äärellisen polton integrointi (vakiotyöntö polttokaaren yli, massa tilana), jonka saavutettu ΔV tarkistetaan suljetun muodon Tsiolkovskin rakettiyhtälöä vastaan 0,01 %:a paremmalla tarkkuudella, Izzo-2015-yhden kierroksen Lambert-ratkaisija (r1, r2, lentoaika ⇒ v1, v2), tarkka universaalimuuttujainen Kepler-propagaattori (kahden kappaleen totuus) ja porkchop-pyyhkäisy, joka kuvaa lähtöhetki × saapumishetki -ruudukon lähdön C3:ksi ja saapumisen V∞:ksi ja tuottaa sen 2-D JSON-taulukkona selaimen korkeuskäyräpiirtoa varten. Validointi on omavaraista ja vahvempaa kuin opetusesimerkin tulostus: jokainen Lambert-tulos kierrätetään Kepler-propagaattorin läpi (sen on päädyttävä takaisin pisteeseen r2), ja porkchop-minimi tarkistetaan analyyttistä Hohmann-siirtymän C3-alarajaa vastaan kahdelle samatasoiselle ympyräradalle. Kshana asemoi tämän suorituskykysimulointikerrokseksi GMAT/Orekitin päälle, ei korvaajaksi (monikierroskaaret ja todellinen planeettaefemeridi jäävät rajauksen ulkopuolelle). Kymmenen testiä.
  • Täysi 17-tilainen tiukasti kytketty GNSS/INS UKF kvantti-CAI-merenkulkulaskennalla. Uusi src/fusion/tightly_coupled17.rs kuljettaa koko inertianavigoinnin tilan, jota tiukasti kytketty suodatin estimoi: [position, velocity, attitude-error, accelerometer bias, gyro bias, clock bias, clock drift] (17 tilaa), propagoituna strapdown-mekanisaation läpi, jota ohjaavat mitattu ominaisvoima ja kulmanopeus, ja pienen kulman C ≈ I + [ψ×] runko→inertiaali-kierrolla, jotta asennevirhe kytkeytyy vaakakiihtyvyyteen (tavallinen INS:n kallistuskytkentä). GNSS-katkon aikana se liitää pelkällä IMU:lla; nopeuden satunnaiskävelyn prosessikohina on kylmäatomi-interferometrikiihtyvyysmittarin johdettu q_va (crate::inertial::quantum_imu), joten laskennan ajautuma on kvanttianturin rajoittama: 120 sekunnin katko pysyy rajattuna muutamaan sataan metriin, kun navigointiluokan vapaa INS ylittäisi kilometrejä. Pseudoetäisyys/etäisyysnopeus-päivitys kulkee jaetun unscented-suodattimen läpi (α = 1 hyvin ehdollistettuja painoja varten tällä tilakoolla). Viisi testiä: mittausmallin identiteetti, täydellisen IMU:n vakionopeusintegrointi, GNSS-tuki, kiihtyvyysmittarin harhan estimointi ja CAI-rajoitteinen 120 s:n katkon benchmark.

0.11.0 - 2026-06-05#

Muutettu#

  • Rehellinen kehystys kvanttipaikannukselle. Pääkuvaus on nyt johdonmukaisesti "PNT-resilience simulator with quantum-sensor performance models" README:n tunnuslauseessa, viiterivissä, tiedostossa CITATION.cff (otsikko + tiivistelmä) ja bannerigrafiikassa; se korvaa löyhemmän markkinointimuotoilun "hybrid quantum/classical PNT simulator". README:n osio What it is / is not saa nimenomaisen "It is not (yet)"-rajauksen (ei ensimmäisistä periaatteista toimiva atomi-interferometriafysiikan moottori, ei GNSS-vastaanotin eikä PVT-ratkaisija, ei tehtäväsuunnittelutyökalu), ja uusi ylätason ROADMAP.md asettaa kvanttifysiikkakerroksen P2-kohdaksi (Mach–Zehnder-CAI-vaihe, projektiokohina, tärinätensori), jotta lukijat tietävät ensimmäisten periaatteiden fysiikan olevan rajattu ja tulossa eikä hylätty. Ei muutosta toimintaan eikä API:in.

Lisätty#

  • Satelliittitähdistön suunnittelun kauppatutkimus: Walker-suunnittelupyyhkäisy Pareto-rintamalla, uudelleenkäyntiajan JSON ja alle kilometrin Walker-kaavan validointi. src/walker.rs saa funktion walker_design_sweep, joka ajaa planes × sats_per_plane-ruudukon (esim. 3×3 -kauppa) kiinteällä inklinaatiolla ja taulukoi suunnittelukohtaisesti peittoasteen, pahimman tapauksen PDOP:n sekä suurimman ja keskimääräisen uudelleenkäyntivälin; pareto_front merkitsee ei-dominoidut suunnitelmat (vähemmän satelliitteja, enemmän peittoa, pienempi PDOP, lyhyempi uudelleenkäynti), ja WalkerDesignReport::to_json serialisoi solut ja Pareto-rintaman JSONiksi, uudelleenkäyntiaikakentät mukaan lukien. Uusi validointi sitoo generaattorin Walkerin kaavaan i:T/P/F: vierekkäisten tasojen samassa paikassa olevien satelliittien osoitetaan kuvautuvan toisilleen tarkalla kierrolla R_z(2π/P) alle 1 km:n tarkkuudella koko 24 h:n SGP4-propagoinnin ajan (J2:n lyhytjaksoinen hengitys on yhteismuotoista ja kumoutuu), ja tason sisäisten paikkojen vahvistetaan olevan keskimäärin välein 2π/S. Perustuu sitoutettuun todelliseen Celestrak gps-ops -tilannekuvaan 2021-07-28 (scenarios/orbit-sgp4-gps.toml, jota harjoitetaan skenaariopeiton ja SP3-edestakaisajon testeissä).
  • Edistynyt aika- ja taajuussiirto: TWSTFT, GNSS common-view, PPP, optinen, IEEE-1139-potenssilakisovitus ja kelloyhtye. Uusi src/timetransfer_adv.rs rakentaa operatiiviset siirtomenetelmät toimitettujen Sagnac- ja common-view-suljettujen muotojen sekä Allan-vakausvälineiden päälle. twstft_sagnac antaa kaksisuuntaisen satelliittiaika- ja taajuussiirron (TWSTFT) Sagnac-korjauksen kolmen hypyn silmukkasummana, joka on täsmälleen yhtä suuri kuin BIPM:n suljettu muoto Δt = 2·A·ω_E/c² (ristiintarkistettu riippumattomalla funktiolla twstft_sagnac_bipm); run_twstft tuottaa yhden vuorokauden sarjan T_A − T_B ja sen TDEV:n. gnss_common_view_series yksinkertaisesti erottaa kaksi synteettistä maa-asemaa, jolloin satelliittikello kumoutuu. iono_free_combination + ppp_receiver_clock ovat PPP:n ionosfäärivapaa yhdistelmä ja vastaanottimen kellon ratkaisu SP3-luokan (synteettistä) totuutta vastaan, ja ne kumoavat ensimmäisen kertaluvun ionosfäärin täsmälleen. rytov_variance, fried_parameter ja keskiarvoltaan yksikkölogaritminen lognormal_fading mallintavat vapaan avaruuden optisen linkin turbulenssin aiheuttamaa tuikintaa. fit_power_law_psd on täysi IEEE-1139:n viiden kertoimen h_α-pienimmän neliösumman sovitus Allan-varianssikäyrään (kaikki viisi kanonista kohinaprosessia yhdellä kertaa), ja hallitseva prosessi raportoidaan τ-dekadeittain. ensemble_timescale muodostaa käänteisvarianssipainotetun paperiaikaskaalan, jonka Allanin poikkeama jää tiukasti parhaan osallistuvan kellon alapuolelle. 31 yksikkötestiä; validointikohteet ovat suljettuja muotoja ja synteettistä totuutta; todellinen BIPM Circular-T / IGS SP3 -sisäänotto on vielä tekemättä.
  • IONEX-ionosfäärikartat: tiedostojäsennin, aikainterpolointi ja viistoon kallistuvan kulkureitin kuvaus. src/ionex.rs saa funktion parse_ionex, joka lukee IONEX-tiedostomuodon (otsikon ruudukkomäärittely + START/END OF TEC MAP-lohkot) jonoksi IonexMap-olioita: se normalisoi tiedoston pohjoisesta etelään -leveysjärjestyksen positiiviseksi askeleeksi TecGrid-rakenteessa ja skaalaa arvot kertoimella 10^EXPONENT. interpolate_tec_in_time sekoittaa kaksi peräkkäistä karttaa kyselyhetkeen, ja obliquity_factor / slant_tec kuvaavat pystysuoran TEC:n viistolle säteelle yksikerroksisen ohutkuorikertoimen M(z) = 1/cos z′ avulla (sin z′ = (Rₑ/(Rₑ+H))·sin z). Yhdessä toimitetun ruudukkomallin kanssa nämä muuttavat mitatun IGS:n globaalin ionosfäärikartan käyttökelpoiseksi viistoviiveeksi.
  • Satelliittitähdistön suunnittelu: streets-of-coverage-mitoitus + usean satelliittitähdistön vertailu. src/walker.rs saa funktion min_satellites_streets_of_coverage, idealisoidun streets-of-coverage-minimisatelliittiratkaisijan: toimitetusta peiton puolikulmasta λ ja kadun puoli-leveydestä c se mitoittaa lähes napaisen satelliittitähdistön jatkuvaan yksittäiseen globaaliin peittoon p = ⌈π/(2c)⌉ tasona (esim. GPS-korkeudella 4 satelliitin taso tarvitsee 2 tasoa, 8 satelliittia) ja raportoi None, kun satelliitit ovat liian harvassa muodostamaan yhtenäistä katua. compare_constellations on usean satelliittitähdistön vertailutyökalu: se pisteyttää jokaisen nimetyn Walker-suunnitelman samalla asemalla ja ikkunalla funktion pdop_sweep kautta ja palauttaa niiden peiton, PDOP:n ja koon rinnakkain. Rehellinen rajaus: vastakkaiseen suuntaan kiertävien tasojen rajan saumatarkka Rider-korjaus ja 3-D-peittopallo ovat jatkotyötä.
  • Monikerroksinen harhautuksen havaitseminen: RAIM-johdonmukaisuuteen perustuva pariteettihavaitsin + kerrosten fuusio. src/spoof_monitors.rs saa kolmannen ja viimeisen havaitsemiskerroksen sekä fuusiovaiheen: parity_raim_test sovittaa pienimmän neliösumman menetelmällä paikka/kello-ratkaisun ylimääräiseen pseudoetäisyysjoukkoon ja testaa jäännöksen painotettua neliösummaa sen χ²(m−4)-kynnystä vasten, merkiten satelliittien harhaisen osajoukon ja jättäen yhteismuotoisen harhan (vastaanottimen kello absorboi sen) oikein RAIM-näkymättömäksi, ei kaunistellen. fuse_spoof_layers yhdistää pariteetti-, AGC- ja SQM-kerrokset yhdeksi painotetuksi päätökseksi, joka kirjaa, mitkä kerrokset lauenneet. Monte Carlo luonnehtii havaitsijaa: empiirinen P_fa ≈ 0,068 suunnittelupistettä 0,05 vastaan, ja havaitsematta jäänyt tapahtuma laskee arvosta 0,885 2σ:n harhautusharhalla arvoon 0,16 8σ:lla. Rehellinen rajaus: ristiinvalidointi tiettyjä julkaistuja (Spirent / ION GNSS+) harhautustestivektoreita vastaan vaatii nuo ulkoiset aineistot ja on jatkotyötä.
  • Kytketyn ja erotetun Kalmanin validointiyhtye. 100 kokeen Monte Carlo tiedostossa src/fusion/coupled.rs kvantifioi paikka↔kello-ristikovarianssin kuljettamisen arvon: uskollinen sisäinen erotettu vertailukohta (validoitu bitti bitiltä toimitettua CoupledPntFilter vastaan) käsittelee samat tiedot nollatuilla ristilohkoilla, ja lähes degeneroituneiden pseudoetäisyyksien sekä pelkän kellokorjauksen jälkeen kytketty suodatin palauttaa paikan 2,97 m RMS -tarkkuudella erotetun suodattimen 48,8 m:ä vastaan ja voittaa 97 kokeessa 100:sta; kellokorjaus terävöittää paikkaa vain korrelaation kautta, jonka erotettu paketti hylkää. Tämä täydentää Kalmanin oikeellisuuden validointisarjan (Joseph-muoto, PSD-turvallisuus, NEES/NIS-johdonmukaisuus ja nyt kytketyn suodattimen yhtye).
  • Radanmääritysketju (eräajo + peräkkäinen). Uusi src/orbit_determination.rs palauttaa satelliitin ratatilan [r, v] maa-aseman etäisyysseurannasta yhdistämällä kolme toimitettua osaa: kahden kappaleen + J2 -voimamalli (src/forces.rs) ja RK4-integraattori (src/integrator.rs) propagoivat ehdokastilan kaaren yli, etäisyysmittausmalli ennustaa jokaisen asemaetäisyyden, ja Gauss–Newton-eräkorjain (src/batch_ls.rs) ajaa ehdokkaan parhaaseen sovitustilaan (determine_orbit_batch). Samat dynamiikka ja etäisyysmalli ajavat myös peräkkäistä rekursiivista määritystä toimitetulla unscented-suodattimella (determine_orbit_sequential). Neljä testiä validoi sen: etäisyyden ennuste kaaren yli; eräpalautus alle metrin / mm·s⁻¹ tarkkuuteen kohinattomista etäisyyksistä; eräpalautus ~2 m:iin ja sovituksen jälkeinen residuaali 5 m:n kohinalattialla (johdonmukaisen pienimmän neliösumman sovituksen tunnusmerkki); ja peräkkäinen palautus kymmenien metrien sisälle. Rehellinen rajaus: etäisyysnopeus/Doppler- ja kulmamittaukset, analyyttinen J2-tilasiirtymämatriisi ja asemanäkyvyysmaskaus ovat jatkotyötä.
  • Tiukasti kytketty GNSS/INS UKF -navigaattori. Uusi src/fusion/tightly_coupled.rs kytkee toimitetun unscented-Kalman-ytimen (src/fusion/ukf.rs) toimivaksi tiukasti kytketyksi navigaattoriksi kahdeksan tilan [px,py,pz,vx,vy,vz,b,d] yli (ECEF-paikka/nopeus sekä vastaanottimen kellon harha ja ajautuma etäisyysyksiköissä). Se ottaa sisään raakoja satelliittimittauksia, eli pseudorange (ρ = |p − sᵢ| + b) ja range_rate/Doppler (ρ̇ = (p − sᵢ)·(v − ṡᵢ)/|p − sᵢ| + d), valmiiksi muodostetun paikkaratkaisun sijaan, joten TightlyCoupled (funktioilla propagate/propagate_orbital/ update_gnss) jatkaa korjaamista alle neljällä satelliitilla ja liitää GNSS-katkojen läpi propagoidulla dynamiikallaan. Viisi testiä validoi sen päästä päähän, virstanpylväiden hyväksymisskenaariot mukaan lukien: pseudoetäisyys/Doppler-geometria käsin laskettuja arvoja vastaan; kohinaton suppeneminen alle metrin tarkkuuteen viidellä satelliitilla; kolmen satelliitin tapaus, joka suppenee ~212 m:stä ~13 m:iin, vaikka tilannekuvan PVT:tä ei voida edes muodostaa; vakionopeuksinen 120 sekunnin katko 50 m:n sisällä; ja pääasiallinen hyväksymistesti: 30 minuutin kaareva LEO-ohitus (todellinen kahden kappaleen + J2 -rata) 120 sekunnin GNSS-katkolla, joka pysyi 0,77 m läpiajon RMS-virheessä ja 2,9 m pahimmassa tapauksessa katkon läpi. Tuo ratakulku yhdistää toimitetun gravitaatiovoimamallin (src/forces.rs) ja RK4-integraattorin (src/integrator.rs) UKF:n prosessimalliin (propagate_orbital), joten suodatin seuraa radan kaarevuutta, mitä vakionopeuksinen liito ei pysty tekemään (pelkkä kaarevuus on ~58 km 120 s:ssa LEO:lla). Rehellinen rajaus: ratakulku käyttää kahden kappaleen + J2 -voimamallia raakan IMU:n ominaisvoiman sijaan (ei-käyttövoimalla toimivalla ratakappaleella nämä ovat yhtä); strapdown-IMU-virhetilan ja silmukan sisäisten iono/tropo-korjausten lisääminen on jatkotyötä.
  • Karttasovituksen mittausmalli (maasto-/gravitaatioviitteinen navigointi). Uusi src/mapmatch.rs tarjoaa mittausmallin, joka muuttaa toimitetun peräkkäisen tärkeysotannan uudelleenotanta-hiukkassuodattimen (src/particle_filter.rs) toimivaksi GPS-estetyksi navigaattoriksi: field_likelihood (gaussinen kenttäsovitususkottavuus) ja map_match_likelihood, joka ottaa näytteen mistä tahansa georeferoidusta viitekentästä (maaston korkeus (TRN) tai gravitaatioanomalia) hiukkasen paikassa ja painottaa sitä sen mukaan, kuinka hyvin se vastaa ajoneuvon mitattua arvoa. Kenttä on mikä tahansa Fn(lat, lon) -> value-näytteistäjä, joten se yhdistyy tiedoston src/ionex.rs bilineaariseen ruudukkoon tai sulkeumaan. Kaksi testiä ankkuroi sen: uskottavuus huipentuu (=1) täydellisessä sovituksessa ja laskee arvoon e^(−½) yhden sigman kohdalla, ja erottuvan synteettisen maastolaikun yli ajettu hiukkassuodatin palauttaa todellisen paikan 0,1 sisälle. Rehellinen rajaus: todelliset viitekartat (SRTM-korkeus, EGM/EIGEN-gravitaatioanomalia) ja niiden lataajat ovat jatkotyötä.
  • Kuunläheisen avaruuden PNT-eheys (kuu-ARAIM). Uusi src/lunar.rs soveltaa Maa-puolen MHSS ARAIM -moottoria LunaNet-tyyppiseen kuunavigointipalveluun kuun parametreilla (σ_URE ≈ 30 m vs GPS 0,6 m, P_sat ≈ 1e-4): kuun vakiot, selenosentrinen itä/pohjoinen/ylös-kanta ja taivasgeometrian apufunktio sekä lunar_araim (HPL/VPL). Kolme testiä ankkuroi sen: ortonormaali selenosentrinen kanta, viistoetäisyysgeometria ja täsmälleen lineaarinen suojaustason skaalaus parametrilla σ_URE (kuun 30 m antaa 50-kertaisen suojaustason kuin sama geometria GPS:n 0,6 m:llä, mikä on kvantitatiivinen syy siihen, miksi kuun PNT-eheys on vaikeaa). Rehellinen rajaus: tarkka LANS NRHO -efemeridi, signaali-avaruudessa-virhebudjetti ja MCI↔MCMF-koordinaatiston reduktio ovat jatkotyötä.
  • Kaksiosaiset (korkean toistotarkkuuden) Julian-päivämäärät. Uusi src/jd2.rs lisää rakenteen Jd2, Julian-päivämäärän, joka on jaettu kokonaislukuosaan day ja murto-osaan frac välillä [0,1) (SOFA/hifitime-käytäntö), ja funktiot new/from_parts/add_seconds/diff_seconds/total. Lähekkäisten ajanhetkien erotukset pysyvät tarkkoina aina tyypin f64 lattiaan asti, kun taas yksittäinen f64-JD menettää ~50 µs lähellä J2000:aa. Neljä testiä ankkuroi sen: edestakaisajo, murto-osan normalisointi, tarkka mikrosekunnin palautus (yksittäisen f64:n epäonnistuminen osoitettuna rinnalla) sekä additiivinen ja palautuva sekuntiaritmetiikka.
  • CCSDS OMM (Orbit Mean-Elements Message) -kirjoittaja. Uusi src/omm.rs täydentää oem-efemeridikirjoittajaa keskimääräisten elementtien viestillä: OmmFile::from_tle kuvaa SGP4/TLE-keskielementit OMM-yksiköihin (keskiliike rev/vrk, kulmat asteina sekä BSTAR), ja to_omm_kvn serialisoi standardiraidan CCSDS 502.0-B-2 KVN -muodon, jotta Kshana-radan voi kuluttaa mikä tahansa OMM:ää tunteva työkalu räätälöidyn TLE:n sijaan. Kaksi testiä ankkuroi TLE→OMM-yksikkömuunnoksen (≈ 15,5 rev/vrk, 51,6° inklinaatio jne.) ja vaadittujen KVN-avainsanojen olemassaolon. Rehellinen rajaus: KVN-muoto ja TLE-kuvaus toimitetaan tässä; XML-renderöinti (ndm/omm) ja viiteparserin edestakaisajo ovat jatkotyötä.
  • Peräkkäisen tärkeysotannan uudelleenotannan hiukkassuodatin. Uusi src/particle_filter.rs lisää epälineaarisen, ei-gaussisen estimaattorin karttatuetun, GPS-estetyn navigoinnin taakse (maastoviitteinen tai gravitaatiokarttasovitus): predict (propagoi hiukkaset dynamiikan + gaussisen prosessikohinan läpi), update (painotus uudelleen hiukkaskohtaisella mittaususkottavuudella), systemaattinen resample, degeneroitumisen valvoja effective_sample_size ja painotettu keskiarvoestimaatti. Kuusi testiä ankkuroi deterministisen ytimen täsmällisesti: ESS vaihtelee välillä 1…N, systemaattinen uudelleenotanta valitsee indeksit painon suhteessa, painotettu keskiarvo on konveksi yhdistelmä, gaussinen uskottavuus vetää estimaatin mittaukseen, uudelleenotanta tasaiseksi ja siemenellinen ennusteen determinismi. Rehellinen rajaus: moottori toimitetaan tässä; viitekartat (SRTM-korkeus, EGM-gravitaatioanomalia) ja karttamittausmalli ovat jatkotyötä (ionex-ruudukko+bilineaarinen näytteistäjä palvelisi gravitaatio- tai maastokarttaa yhtä hyvin).
  • IONEX-tyyliset TEC-ionosfäärikartat. Uusi src/ionex.rs lisää mitatun ionosfäärin vaihtoehdon lähetettävälle Klobuchar-mallille: TecGrid (säännöllinen lat/lon-ruudukko pystysuorasta TEC:stä, IGS:n globaali ionosfäärikartta), jossa on bilineaarinen interpolointi lävistyspisteessä (vtec_at, ruudukon ulkopuolella rajattu) sekä ensimmäisen kertaluvun viive Δ = 40.3·TEC/f² (vtec_to_delay_m, delay_at). Neljä testiä ankkuroi sen: 1 TECU ≈ 0.162 m L1-taajuudella skaalauksella 1/f², solmutarkka interpolointi, bilineaariset keskipisteet kulmien keskiarvoina ja reunoille rajatut ruudukon ulkopuoliset kyselyt. Rehellinen rajaus: ruudukko ja interpolointi toimitetaan tässä; IONEX-tiedostomuodon jäsentäminen, karttojen välinen aikainterpolointi ja viistokuvausfunktio ovat jatkotyötä.
  • Geometriset ajansiirtokorjaukset (Sagnac + GNSS common-view). Uusi src/timegeo.rs lisää kaksi determinististä ilmiötä, jotka todellisen kellovertailun on otettava huomioon, ja täydentää tiedoston timetransfer stokastista kaksisuuntaista mallia: sagnac_correction (Δt = (ω_E/c²)·(x₁y₂ − x₂y₁), pyörivän Maan viive; kymmeniä ns mantereen mittaisilla peruslinjoilla) ja common_view_offset, GNSS common-view -yksittäiserotus, joka kumoaa satelliittikellon virheen täsmälleen ja palauttaa asemien välisen offsetin. Kolme testiä ankkuroi ne tarkkoja viitearvoja vasten: päiväntasaajan neljänneskierron ≈ 33 ns Sagnac, antisymmetria ja nollatapaukset säteen suunnassa ja navoilla sekä täsmällinen satelliittikellon kumoutuminen. Rehellinen rajaus: täysi TWSTFT-transponderin/laitteiston viivebudjetti ja PPP:n ionosfäärivapaa ajansiirtoratkaisu ovat jatkotyötä.
  • Ratavoimamalli (kaksi kappaletta + J2). Uusi src/forces.rs lisää kiihtyvyysmallin, jota numeerinen propagaattori integroi: two_body_accel (−μ·r/|r|³), j2_accel-litteysperturbaatio (ECI:n suljettu muoto) ja gravity_accel, joka summaa ne; yhdistä se tiedostoon src/integrator.rs muodossa f(t,[r;v]) = [v; a(r)]. Se paljastaa myös analyyttiset J2:n sekulaarinopeudet (j2_secular_rates): solmun regressio Ω̇, apsidien kierto ω̇ ja keskianomalian ajautuma Ṁ. Kuusi testiä ankkuroi fysiikan tarkkoja viitearvoja vasten: μ/r² kahden kappaleen termille, J2:n suljettu muoto päiväntasaajalla (~10⁻³ kahden kappaleen suuruudesta), perigeumin jäädyttävä kriittinen inklinaatio (63,4349°) (ω̇ = 0), ISS:n solmun regressio (Ω̇ ≈ −5°/day) ja vastakulkuisen aurinkosynkronisen radan itäinen ajautuma. Rehellinen rajaus: vain kaksi kappaletta + J2; J3–J6, ilmakehän vastus, SRP ja kolmas kappale ovat jatkotyötä.
  • Jaettavat skenaarion pysyväislinkit. Uusi src/permalink.rs lisää riippuvuudettoman RFC 4648 Base64 -koodekin (tavallinen +/-aakkosto täytteellä ja URL-turvallinen täytteetön -_-aakkosto) sekä kääreet encode_scenario / decode_scenario, jotta leikkikentän TOML voidaan koodata kyselyparametriin ?s= ja jakaa URL-osoitteena. Selaimelle ne paljastetaan wasm-sidonnoilla encode_permalink / decode_permalink. Neljä testiä ankkuroi sen kanonisiin RFC 4648 -vektoreihin ("foobar" → "Zm9vYmFy" jne.), URL-turvalliseen skenaarion edestakaisajoon (ei merkkejä +///=, joita pitäisi paeta), virheellisten symbolien hylkäämiseen ja kaikkien 256 tavun edestakaisajoon. Rehellinen rajaus: koodekki ja sidonnat toimitetaan tässä; leikkikentän Share-painikkeen käyttöliittymä, Plotly/D3-monisarjakaavio ja A/B-vertailutila ovat jatkotyötä.
  • Gauss–Newton-eräpienimmän neliösumman menetelmä (erädifferentiaalikorjain). Uusi src/batch_ls.rs lisää estimointiytimen, jonka varassa erämuotoinen radanmääritys (tai mikä tahansa parametrisovitus) toimii: gauss_newton linearisoi käyttäjän antaman mallin h(x) keskeisen differenssin Jacobin matriisilla, muodostaa ja ratkaisee painotetut normaaliyhtälöt (HᵀWH)·Δx = HᵀW·(z − h(x)) (käyttäen testattua matriisin käänteistä) ja iteroi suppenemiseen mittauskohtaisilla painoilla. Neljä testiä ankkuroi sen: suoran sovitus, joka saavuttaa täsmällisen painotetun pienimmän neliösumman ratkaisun; epälineaarinen a·exp(b·t)-sovitus, joka palauttaa todelliset parametrit; 3-D-etäisyysmonilateraatio, joka palauttaa tunnetun paikan kohinattomista etäisyyksistä (radanmäärityksen laji); sekä alimääritettyjen/ristiriitaisten syötteiden hylkääminen. Rehellinen rajaus: tämä on yleinen korjainmoottori; ratakohtainen etäisyys/etäisyysnopeus/atsimuutti-korkeuskulma-mittausmalli, analyyttinen J2-tilasiirtymämatriisi ja julkaistujen tapausten validointi ovat jatkotyötä.
  • RF-kerroksen harhautusvalvojat (AGC-teho ja SQM). Uusi src/spoof_monitors.rs lisää kaksi toisistaan riippumatonta vastaanottimen etupään harhautushavaitsinta, jotka täydentävät tiedoston spoof kelloavusteista aikaharhautusvalvojaa: AGC-tehovalvoja (combine_power_dbm epäkoherentti tehosumma + AgcMonitor), joka merkitsee ylimääräisen vastaanotetun tehon, jonka harhautuslähetin lisää säädettävän dB-marginaalin yli, sekä signaalin laadun valvoja (bpsk_autocorr kolmiomainen koodin autokorrelaatio + SqmMonitor), joka merkitsee Early-miinus-Late-korrelaattorin epätasapainon, jonka monitie-eteneminen, meaconing tai toisto aiheuttaa. Neljä testiä ankkuroi tarkat suljetut muodot (3,01 dB tehon kaksinkertaistuessa, 10·log10(N)-kokonaisuus, kolmiomainen R(τ)=1−|τ| ja 10 %:n Early/Late-hälytyskynnys). Rehellinen rajaus: täysi RAIM-johdonmukaisuuteen perustuva pariteettiharhautushavaitsin, valvojien tulosten monikerroksinen fuusio ja validointi julkaistuja Spirent/ION GNSS+ -harhautusvektoreita vastaan ovat jatkotyötä.
  • Mukautuva numeerinen ODE-integraattori. Uusi src/integrator.rs lisää numeerisen propagaattorin ensimmäisen osan (Kshanan ratapropagointi on muuten analyyttistä SGP4/SDP4:ää): yleinen neljännen kertaluvun Runge–Kutta-askel (rk4_step) mille tahansa ensimmäisen kertaluvun järjestelmälle y' = f(t, y) sekä mukautuva ajuri (integrate), joka hallitsee paikallista virhettä askeleen kaksinnuksella (Richardsonin ekstrapolointi) standardilla 0.9·(tol/err)^(1/5)-askelsäätimellä ja hyväksy/hylkää-logiikalla. Kuusi testiä ankkuroi sen tarkkoihin ratkaisuihin: y' = y → e-eksponentiaali tarkkuuteen < 1e-9, ~16-kertainen virheen pieneneminen puolitettua askelta kohden, mikä todistaa neljännen kertaluvun suppenemisen, harmonisen oskillaattorin energian ja paluun säilyminen koko jakson yli sekä mukautuva ajuri, joka täyttää tiukan toleranssin vaihtelevilla askelilla. Rehellinen rajaus: tämä on integraattorin ydin ja sen virheenhallinta; Dormand–Prince RK5(4)/RKF7(8) -upotetut taulukot ja hierarkkinen ratavoimamalli (kaksi kappaletta + J2–J6 + ilmakehän vastus + SRP + kolmas kappale), jotka tekevät siitä NumericalPropagator-propagaattorin, ovat jatkotyötä.
  • Unscented (sigma-point) -Kalman-suodatin. Uusi src/fusion/ukf.rs lisää skaalatun unscented-Kalman-suodattimen (Julier & Uhlmann; Wan & van der Merwe) yleisenä n-tilaisena estimaattorina käyttäjän antamien prosessi- ja mittausfunktioiden yli: se on sigma-piste-estimaattori, jota tiukasti kytketty GNSS/INS-navigaattori käyttää, kun pseudoetäisyys/Doppler-malli on voimakkaan epälineaarinen ja EKF:n Jacobi heikkenee. Se sisältää tukevan tiheän lineaarialgebran (Cholesky-tekijä sigma-pisteiden levitykseen, Gauss–Jordan-käänteinen innovaatiokovarianssille) ja Joseph-vapaan P⁺ = P⁻ − K S Kᵀ-päivityksen. Kuusi testiä lukitsee sen, joista keskeiset hyödyntävät tarkkaa ominaisuutta, että lineaarisella mallilla unscented-muunnos toistaa Kalman-suodattimen numeerisella tarkkuudella (ennuste, päivitys ja täysi ennuste+päivitys-sykli vastasivat käsin ajettua lineaarista KF:ää, lisäksi 1-D-analyyttinen Bayes-posteriori-tarkistus ja Cholesky/käänteismatriisi-identiteetit). Rehellinen rajaus: tämä on estimaattorimoottori; 17-tilainen tiukasti kytketty GNSS/INS-navigaattori, pseudoetäisyys/Doppler-mittausmalli ja katkovalidointiskenaario ovat jatkotyötä.
  • Kahden satelliittitähdistön ARAIM-suojaustasot. Uusi araim_dual_raim laajentaa yhden vian Advanced RAIM:n (araim_raim) EU ARAIM / DO-316:n koko satelliittitähdistön vikatilalla: vikavapaan ja satelliittikohtaisten hypoteesien rinnalla jokainen satelliittitähdistö (merkitty satelliittikohtaisesti) tuo yhden hypoteesin, joka poistaa kaikki sen satelliitit kerralla, priorilla P_const (uusi DualFaultPriors { p_sat, p_const }). Jokainen hypoteesi lisää termin samaan MHSS-eheyssummaan, joten VPL/HPL ovat pienimmät rajat, joiden kokonaisarvo P_HMI täyttää budjetin vikavapaan + yhden SV:n + satelliittitähdistökohtaisten vikojen yli (Bonferronin väärän hälytyksen jako tehdään kaikkien N + C hypoteesin yli). Kun P_const = 0, tulos on bitti bitiltä araim_raim; yhden satelliittitähdistön käyttäjä palauttaa None oman satelliittitähdistönsä vikaa vastaan (sitä ei voi sulkea pois), mikä on täsmälleen syy siihen, miksi kahden satelliittitähdistön peitto on tärkeää. Neljä testiä kattaa ekvivalenssin, suojaustason levenemisen, yhden satelliittitähdistön saatavuuden puuttumisen ja syötteen validoinnin ja käyttää uudelleen olemassa olevaa ratkaisuerotuksen aliratkaisukoneistoa.
  • IAU 2006 -prekessio (Fukushima–Williams-kulmat ja harha-prekessiomatriisi). Uusi src/precession.rs toteuttaa IAU 2006 -prekession (P03; Capitaine, Wallace & Chapront 2003): neljä Fukushima–Williams-kulmaa (γ̄, φ̄, ψ̄, ε̄_A) polynomeina TT-Julian-vuosisatojen suhteen (fw_angles) ja niistä SOFA:n iauFw2m-konstruktiolla rakennetun GCRS→keskimääräinen-ajanhetki-harha-prekessiokiertomatriisin (precession_matrix, apufunktiot gcrs_to_mod / mod_to_gcrs). Tämä on ensimmäinen inertiaalikoordinaatiston osa olemassa olevan GMST-pohjaisen frames-reduktion päälle. Kahdeksan testiä validoi suljetun muodon ankkureita vastaan: J2000:n keskimääräinen ekliptikan kaltevuus ε̄ = 84381.406″ = 23.4392794°, julkaistut kulmien vakiotermit, yleisen prekession ψ̄ ≈ 5039.998″ kertyminen vuosisadan yli, matriisin ortonormaalius ja det = +1, lähes-identiteetti (pelkkä koordinaatiston harha) arvo J2000:ssa ja vuosisadan nettokiertokulma ≈ 1.40°. Rehellinen rajaus (ROADMAP.md): vain prekessio; IAU 2000A:n 678-termin nutaatio, täysi TEME→GCRS-ketju ja SOFA/ANISE µas/<10 m numeerinen ristiintarkistus ovat jatkotyötä.
  • Ensimmäisistä periaatteista johdettu kylmäatomi-interferometrin (CAI) kiihtyvyysmittarifysiikka. src/inertial/quantum_imu.rs mallintaa kolmipulssisen Mach–Zehnder-atomi-interferometrin ensimmäisistä periaatteista datalehden sijaan: efektiivinen aaltovektori k_eff = 4π/λ, interferometrin vaihe Φ = k_eff·a·T², kvanttiprojektiokohina (haulikohina) σ_Φ = 1/(C·√N), kiihtyvyysherkkyys laukausta kohden, kontrastin vaimeneminen C(t) = C₀·e^(−t/τ) ja, mikä on olennaista, CaiAccelerometer::q_va(), joka johtaa valkoisen kiihtyvyyden PSD:n, jota klassinen AccelModel jo kuluttaa, atomimäärästä, kyselyajasta ja kontrastista. Malli kattaa nyt myös tärinäkytkennän, todellisten laitteiden hallitsevan termin: interferometrin kiihtyvyys→vaihe-siirtofunktio |H(ω)| = (4/ω²)sin²(ωT/2) (accel_transfer_function), valkoisen PSD:n vaihevarianssi σ_Φ² = k_eff²·S_a·T³/3 (vibration_phase_variance_white, numeerisella kaistaintegraalin ristiintarkistuksella vibration_phase_variance_band), asteen 1 sädettä pitkin kulkeva beam_axis_projection sekä CaiAccelerometer::vibration_phase_noise / vibration_limited_accel (jälkimmäinen palautuu k_eff-riippumattomaan √(S_a/(3T))-lattiaan). Yksitoista testiä todentaa fysiikan käsin (Rb-87 k_eff ≈ 1.61×10⁷, Φ(1 g) ≈ 1.58×10⁴ rad, σ_a ≈ 0.13 µg/laukaus haulikohinan lattia vs ≈ 5,9 µg tärinälattia, 1/T², 1/√N ja T³ -skaalauslait). Rehellinen rajaus tiedostossa docs/QUANTUM.md: tämä kattaa projektiokohinan lattian ja sen yläpuolella olevan tärinän rajoittaman alueen; laserin vaihekohina, Coriolis- ja valosiirtymä-systemaattiset virheet sekä PHARAO/CARIOQA-validointiskenaariot ovat jatkotyötä.
  • Kvantti-CAI-kiihtyvyysmittari kytkettynä inertiaaliskenaarioon. Kiihtyvyysmittari inertiaalisessa merenkulkulaskentaskenaariossa ratkeaa nyt uudeksi tyypiksi ImuKind: joko Classical (olemassa oleva datalehtikertoiminen anturi) tai QuantumCai, kun siinä on valinnainen [cai]-lohko (CaiCfg: aallonpituus, pulssien väli, atomimäärä, kontrasti, sykliaika ja valinnainen alustan vibration_psd). Anturin quantum_cai nopeuden satunnaiskävelyn PSD q_va johdetaan interferometrifysiikasta (haulikohinan lattia plus, kun tärinä-PSD on annettu, tärinän rajoittama osuus neliöllisesti summattuna) annetun kertoimen sijaan, ja ajon alkuperä kirjaa, että kohina on fysiikasta johdettu. Kenttä cai on skip_serializing_if = "Option::is_none", joten olemassa olevat skenaariot jättävät sen pois ja serialisoituvat tavu tavulta identtisesti (skenaarion tiiviste ei muutu). Viisi testiä kattaa johdon, neliöllisen tärinäsumman, valinnan Classical/QuantumCai, tiivistevakaan serialisoinnin ja päästä päähän CAI-ohjatun ajon.
  • Satelliittitähdistön suunnitteluoptimoija ja streets-of-coverage-geometria. src/walker.rs saa funktion optimize_walker_design, gradientittoman ruudukko-optimoijan, joka hakee suunnitteluavaruutta {planes × sats × inclination} ja palauttaa parhaan Walker-suunnitelman valitun DesignObjective-tavoitteen (MinSatellitesForCoverage, MaxCoverage tai MinWorstPdop) mukaan jo validoidun PDOP-pyyhkäisyn yli (testi vahvistaa, että se palauttaa raa'an voiman voittajan). Lisäksi analyyttiset streets-of-coverage-suljetut muodot coverage_half_angle_rad (λ = arccos(Re/r·cos ε) − ε) ja street_half_width_rad (cos c = cos λ / cos(π/s), Rider/Beste), käsin todennettuina oppikirjageometriaa vasten ja alipopulaatioaukon havaitsevina. Täysi Riderin minimisatelliittiratkaisija globaaliin peittoon, 3-D-leikkikenttäpallo ja ulkoisen työkalun DOP-ristiintarkistus ovat jatkotyötä.
  • SP3-tarkan efemeridin vienti komentoriviltä. Propagoitu rata-/satelliittitähdistöskenaario voidaan nyt kirjoittaa SP3-c-tiedostoon: kshana <orbit.toml> --export-sp3 out.sp3, tai export_sp3 = true skenaariossa kirjoittaa automaattisesti tiedoston <scenario>.sp3 (api::export_sp3 / auto_export_sp3, OrbitClockScenario::to_sp3_string, valinnainen epoch). Edestakaisajotesti (tests/sp3_export_roundtrip.rs) propagoi todellisen Celestrak-gps-ops-tilannekuvan, vie sen, jäsentää sen uudelleen ja vahvistaa, että palautetut ECEF-paikat vastaavat SGP4-totuutta 24 h:n yli < 0,5 m tarkkuudella (selvästi 10 m:n TLE-luokan toleranssin sisällä). README dokumentoi yhteentoimivuusroolin (RINEX → RTKLIB/gLAB, SP3 → Ginan/tarkat ratatuotteet).
  • Kytketty kello+paikka-Kalman-suodatin (ristilohkon kovarianssi). src/fusion/coupled.rs CoupledPntFilter on yksi pinottu [pos, vel, phase, freq]-suodatin (Joseph-muotoiset päivitykset), jonka pseudoetäisyys-mittaus ρ = g·pos + c·phase + noise kytkee paikka- ja kellolohkot aidosti toisiinsa, toisin kuin vanhan fuusiopaketin kaksi riippumatonta kahden tilan suodatinta, jotka pitävät ristilohkon kovarianssin täsmälleen nollana. Validoitu: jaettu pseudoetäisyys tekee arvosta P[pos,phase] nollasta poikkeavan; kaksi erilaista geometriaa ratkaisee yhdessä syötetyt paikka- ja kellooffsetit, joita yksittäinen etäisyys ei pysty erottamaan; pelkkä kellokorjaus terävöittää paikkaa ristikovarianssin kautta (hyöty, jota erotetut suodattimet eivät voi tarjota); ja Monte Carlon NEES on χ²(4)-johdonmukainen. Tämä on 1-DOF-toteutus (fuusiopaketin dimensio); 3-D 8-tilainen laajennus ja kytkentä ajettavaan pakettiin on kirjattu jatkotyöksi.
  • Kalman-suodattimen johdonmukaisuuden terveysvalvonta (NIS/NEES). Kahden tilan kellosuodattimen kovarianssipäivitys on nyt Joseph-stabiloidussa muodossa `P⁺ = (I−KH)P(I−KH)ᵀ
    • KRKᵀ, which stays positive-semidefinite under extreme Q/R ratios (Cholesky-checked in CI at R=1e-26 / Q≈1e-30). A new src/filter_health.rsruns a Monte-Carlo consistency assessment (Bar-Shalom §5.4): pooled **NIS** (normalised innovation², target 1) and **NEES** (normalised estimation error², target 2) against 95% χ² bands, surfaced as afilter_health { nis_mean, nis_chi2_lower_95, nis_chi2_upper_95, nees_mean, nees_chi2_lower_95, nees_chi2_upper_95, consistent } block in the clock result JSON and as a green/amber card in the playground. A Q/R-mismatch sweep test proves the monitor flips to inconsistent when the process noise is mistuned by ×0.1–×10. Adds a general χ² quantile (detection::chi2_inv_cdf`, Wilson–Hilferty, table-checked).
  • docs/PROVENANCE.md on yksi siteerattava alkuperätaulukko. Kokoaa jokaisen anturiparametrin (kellot, inertia, ajansiirto), fysikaalisen/algoritmisen mallin (rata, aikajärjestelmät, koordinaatistot, iono/tropo, eheys, havaitseminen, häirintä, Allan) ja validointiaineiston (AIAA 2006-6753, Celestrak gps-ops) sen julkaistun lähteen (datalehti, artikkeli, ICD tai standardi) ja rehellisen kypsyystason (flight-qualified / ground-lab / space-goal-on-ground-hardware) kanssa. Linkitetty README:n johdannosta ja dokumentaatiotaulukosta; täydentää ajokohtaisia provenance-merkkijonoja, jotka kulkevat jo tulos-JSONin mukana.
  • Tyypitetty skenaario-API. Jako tehdään nyt tyypitetyllä ScenarioKind-enumilla raa'an kind-merkkijonovertailun sijaan (ScenarioKind::classify + tyhjentävä jako), joten paketin lisääminen tarkistetaan käännösaikana. Uudet tyypitetyt pinnat muuttumattoman merkkijonoa palauttavan run_toml:n rinnalla: run_scenario(src) -> Result<RunOutput, KshanaError> jäsennellyllä virhetaksonomialla (InvalidInput / NonConvergence / Unsupported / IoError, kullakin vakaa kind_tag()); Scenario-trait ja ExternalPack-laajennuspiste (paketti jamming on kytketty sen kautta toimivana esimerkkinä); sekä list_scenario_kinds()-introspektio (nimi, kuvaus, pakolliset/valinnaiset kentät kutakin lajia kohden). Python- ja WebAssembly-sidonnat saavat funktiot list_kinds() ja error_kind(). Dokumentoitu tiedostossa docs/ARCHITECTURE.md.
  • Todellinen GPS-satelliittitähdistö + toimintaympäristön peitto. scenarios/orbit-sgp4-gps.toml toimittaa nyt todellisen Celestrak-gps-ops-tilannekuvan (2021-07-28, 30 satelliittia) synteettisten Walker-TLE:iden sijaan, ja strict_checksum = true varmistaa, että se latautuu vain, kun jokainen TLE-tarkistussumma on kelvollinen; scripts/fetch_tles.sh dokumentoi toistettavan päivityksen ja README mainitsee avoimen datan lähteen. Uusi tests/scenario_coverage.rs harjoittaa jokaista pakettia ≥5 toimintaympäristön variantissa ja vahvistaa rajallisen/äärellisen tuloksen, vahvistaa, että flicker-FM-lattia heikentää mitattavasti kellon liitoa, kun se on käytössä (nyt asetettu kolmessa toimitetussa skenaariossa), ja vahvistaa, että fuusiosuodatin suppenee realistisella nollasta poikkeavalla kiihtyvyysmittarin harhalla (3-kertaisesti nollatun harhan tapaukseen verrattuna), mikä sulkee realismiaukon ”fusion only works with zeroed biases”. docs/VALIDATION.md saa toimintaympäristötaulukon (Operating Envelope).
  • Mittausalueen GNSS-simulaatio (laji gnss-sim). Pseudoetäisyystason eteenpäinmalli: jokaiselle näkyvälle satelliitille se syntetisoi ρ = geometric range + c·δt_rx − c·δt_sv + I + T + noise + multipath ja L1-Dopplerin Klobucharin yksitaajuisella ionosfäärillä (IS-GPS-200 §20.3.3.5.2.5) ja Saastamoisen zeniittitroposfäärillä, joka projisoidaan Niellin (1996) kuvausfunktiolla; ne paljastetaan TOML-lohkoina [iono] ja [tropo]. Residuaalit syötetään tilannekuvan RAIM:lle epookkikohtaista HPL/VPL:ää varten, ja gnss_measurements[]-JSON-taulukko kantaa kunkin SV:n pseudoetäisyyden, Dopplerin, C/N₀:n sekä iono/tropo-korjaukset. Nollakohinan ajo toistaa geometrian + korjaukset alle millimetrin tarkkuudella (CI-testi). Uudet src/gnss_sim.rs ja scenarios/gnss-sim-raim.toml.
  • Stokastinen aikaharhautushavaitsin (laji spoof). Harhautuspaketti ajaa nyt todellista havaitsinta deterministisen ramppi-vs-raja-vertailun sijaan: neljä injektiomuotoa (linear_ramp, step_jump, meaconing, replay), kaksipuolinen χ²₁-energia / Neyman–Pearson -testi kelloavusteisen valvojan tunnusluvulle kynnyksellä, joka asetetaan väärän hälytyksen tavoitebudjetista target_pfa, ja havaitsematta jäämisen todennäköisyys P_md raportoituna sekä suljetussa muodossa että Monte Carlolla (mc_runs koetta hypoteesia kohden; nämä kaksi ovat samaa mieltä muutaman ×1/√N:n tarkkuudella). Security-laatumittari on nyt 1 − P_md operatiivisesti haitallisella (spesifikaation) suuruudella. Uudet src/detection.rs (gaussiset häntäfunktiot, NP/energiatesti, Monte Carlo P_fa/P_md) ja scenarios/spoof-meaconing.toml. Taaksepäin yhteensopiva: pelkkä [attack] rate_ns_per_s hyväksytään edelleen lineaarisena ramppina.

Muutettu#

  • Security-laatumittarin määritelmä (laji spoof): analyyttisestä havaittavuusrajasta 1 − min_detectable/threshold stokastisen havaitsimen arvoon 1 − P_md. Kellopaketin kenttä security pysyy nopeampana analyyttisenä approksimaationa.

Lisätty (jatkoa)#

  • RF-häirintämalli (laji jamming). Linkkibudjettipohjainen häiriömalli, joka muuttaa häirintälähettimen tehon ja geometrian satelliittikohtaiseksi lukituksen menetykseksi: häirintä–signaali-suhde vapaan tilan etenemishäviöstä ja suuntakohtaisesta vastaanottoantennin vahvistuksesta, efektiivinen C/N₀ tavallisella häirinnänestoyhtälöllä (hajotuksen purun prosessointivahvistus × spektrierotuskerroin Q; Kaplan & Hegarty §9,4) ja säädettävä seurantakynnys, pisteytettynä Walker-satelliittitähdistön yli laatumittarilla availability_under_jamming. Uudet src/jamming.rs ja scenarios/jamming-demo.toml. Rehellinen rajaus (ei monitie-etenemistä, maastovarjostusta, AGC:tä eikä adaptiivista nollausta) on dokumentoitu tiedostoissa docs/CAPABILITY.md / docs/VALIDATION.md.
  • Yleinen N-D-parametripyyhkäisy mille tahansa skenaariolajille (sweep-nd). Edellinen N-D-pyyhkäisy oli vain kellopaketille. sweep-nd vaihtelee [base]-skenaarion pisteytettyjä TOML-avaimia akseliensa karteesisen tulon yli, ohjaa jokaisen ruudukkosolmun uudelleen normaalin ajopolun läpi ja lukee yhden tai useamman mittarin tuloksesta pisteytetyllä JSON-polulla, joten se toimii kaikille paketeille (inertia, gnss-ins, eheys, harhautus, …) kytkeytymättä kunkin paketin Rust-tyyppiin. Ruudukkosolmut arvioidaan rinnakkain käyttöjärjestelmäsäikeissä natiivikohteilla (ei lisäriippuvuutta); wasm palaa peräkkäiseen ajoon. Deterministinen ja rivijärjestyksinen säiemäärästä riippumatta. Uusi scenarios/sweep-nd-inertial.toml-esimerkki.
  • TOML-asetettava deterministinen IMU-virhemalli gnss-ins-paketissa. Kolmiakselinen strapdown-virheketju (mittakaavakerroin, kohdistusvirhe, g-herkkyys, kvantisointi, nopeusramppi; IEEE Std 952-1997 §A.2, Groves 2013 §4,3) on nyt tavoitettavissa anturikohtaisesti skenaariotiedostosta valinnaisella [imu_*.error_model]-lohkolla, vakioisten käynnistysharhojen päälle kerrostettuna. Lohkon pois jättäminen jättää jokaisen anturin puhtaaksi vakioharhalähteeksi, joten olemassa olevat gnss-ins-ajot eivät muutu. Tämä kytkee aiemmin vain kirjastossa olleen virhemallin ajettavaan pakettiin ja laatumittariin.

0.10.0 - 2026-06-04#

Muutettu#

  • Todellisen datan validointi. Monen GNSS:n RINEX-navigointijäsennin, GLONASSin RK4-propagaattori ja SP3-lukija on nyt harjoitettu aitoja IGS/DLR-tiedostoja vastaan (todellinen RINEX 3 -sekalähetysnavigointitiedosto ja IGS SP3-c -ratatuote), ei vain itse kirjoitettuja näytteitä vastaan, ja ne varmistavat ei-tyhjät satelliittijoukot sekä äärelliset, fysikaalisesti oikean kokoiset ECEF-paikat. Testiaineistot ovat vain testikäyttöön (jätetty pois julkaistusta paketista); katso tests/fixtures/igs/NOTICE.
  • RAIM todellisella viiteratageometrialla. Tilannekuvan, ratkaisuerotuksen (MHSS) ja ARAIM-suojaustason ytimet on nyt validoitu todellista IGS:n tarkkaa rataa (SP3) vasten, ei pelkästään synteettisiä satelliittitähdistöjä vasten: näkölinjageometria rakennetaan ensimmäisestä SP3-epookista todellisella maa-asemalla, ja testit varmistavat metritason, APV-I-käytettävissä olevat suojaustasot, että 60 m:n pseudoetäisyysharha laukaisee χ²-valvojan, että ratkaisuerotus tunnistaa viallisen satelliitin ja että ARAIM:n tasot täyttävät allokoidun P_HMI-arvon. Sulkee aukon ”validoitu vain synteettisellä geometrialla” (vastaanotintason gLAB-pariteetti koko RINEX-kaaren yli on edelleen tiekarttakohta, koska se tarvitsee pseudoetäisyysratkaisun).

Lisätty#

  • Solmukohtaiset luottamusvälit N-D-parametripyyhkäisylle (sweep::nd_sweep_ensemble). Jokainen N-ulotteisen karteesisen tulon pyyhkäisyn ruudukkosolmu voidaan nyt arvioida siemenien Monte Carlo -yhtyeenä, joka raportoi mittarin keskiarvon, persentiilit ja persentiilibootstrap-95 %:n luottamusvälin solmua kohden (molemmille kelloille): tilastollisesti rehellinen pyyhkäisy yhden otoksen sijaan solmua kohden. Käyttää uudelleen yhtye/bootstrap-koneistoa (metric_stat); deterministinen; runs = 1 palautuu täsmälleen yhden siemenen funktioksi nd_sweep. (Pyyhkäisyn yleistäminen kaikkiin paketteihin, tyypitetyn Scenario-refaktoroinnin kanssa sidottuna, ja rinnakkainen ajo ovat vielä jäljellä.)
  • NaveGo-ristiinvalidointi IMU-kohinaketjulle (tests/navego_imu_crossval.rs). Ulkoinen ristiintarkistus NaveGoa (R. Gonzalezin avoimen lähdekoodin INS/GNSS-työkalupakki) vasten: toistaa tiedoston navego_example_allan.m synteettisen edestakaisajon sen julkaistulla Microstrain 3DM-GX3-35 -viiteprofiililla ja vahvistaa, että päällekkäinen ADEV-estimaattorimme palauttaa NaveGon nopeuden ja kulman satunnaiskävelykertoimet (ADEV(1 s) = σ·√dt) alle 5 %:n tarkkuudella odotetulla −1/2-valkoisen kohinan kulmakertoimella. (Tallennettua 40 MB:n STIM300-.mat-lokia ei oteta sisään, koska binäärimuoto estää sen.)
  • Tiukasti kytketty (pseudoetäisyys) GNSS/INS-päivitys. GnssInsEkf::update_tightly_coupled (ja kääre ClosedLoopInsGnss::fuse_tightly_coupled) toteuttavat aiemmin tynkänä olleen etäisyysalueen mittauksen: innovaatio on INS-paikasta kuhunkin satelliittiin ennustettu etäisyys vs. mitattu pseudoetäisyys, ja paikkavirheen näkölinjan Jacobi. Koska jokainen satelliitti on skalaarimittaus, suodatin jatkaa korjaamista alle neljällä satelliitilla, vaikka löyhästi kytkettyä PVT-ratkaisua ei ole olemassa. Viisi testiä kattaa neljän satelliitin nollauksen, kahden satelliitin korjauksen (PVT ei ole mahdollinen), yhden satelliitin havaittavuuden näkölinjaa pitkin sekä syötteen validoinnin. Vain pseudoetäisyys; kantoaallon vaihe ja eksplisiittinen vastaanottimen kellotila ovat edelleen tiekartassa. Käyttämätön cargo-ominaisuus tight_coupling (joka rajasi vanhan virhetynkän) poistetaan.
  • Löyhästi kytketty GNSS/INS-skenaariopaketti (kind = "gnss-ins", src/fusion/pack.rs). Kytkee kolmiakselisen strapdown-navigaattorin ja 15-tilaisen virhetila-EKF:n (closed_loop / gnss_ins_ekf) ajettavaksi skenaarioksi, jossa on laatumittari: EKF kurittaa mekanisaatiota kohinaisilla GNSS-paikkaratkaisuilla peiton ollessa käytössä ja liitää sitten katkon läpi, korvaten vanhan 1-DOF-skalaaripaketin totuuteen napsautettavan nollauksen aidolla fuusiolla. Tulos raportoi fuusioidun vaakavirhesarjan, pisteytetyn paikka-FoM:n (saatavuus / katkon RMS / holdover) ja avoimen silmukan vapaan INS:n RMS:n vertailuksi; kvantti/klassinen IMU-pari eroaa vain todellisessa harhassa. Jaettu CLI:n/Pythonin/wasmin sisääntulopisteestä esimerkillä scenarios/gnss-ins.toml. Rehellinen kehystys: vain löyhästi kytketty, yksi deterministinen reitti, ja fuusioidun katkon virhettä rajoittaa luovutushetken asennevirhe (joten sen ei väitetä skaalautuvan harhan mukana). Vankat havainnot ovat, että fuusio voittaa tukemattoman merenkulkulaskennan harhaiselle anturille ja että pienemmän harhan anturilla on parempi tukematon liito.
  • Satelliittitähdistön suunnittelu validoidulla SGP4-ytimellä (src/walker.rs). Uusi moduuli walker tuottaa suunnitellun Walker-delta-kuvion (i: T/P/F) SGP4:n keskielementteinä, joten synteettinen satelliittitähdistö propagoituu saman SGP4-polun läpi, joka on validoitu 4,12 mm:n tarkkuuteen AIAA 2006-6753 -vektoreita vastaan, eikä analyyttisen Kepler-generaattorin läpi. Sen päällä: pdop_sweep taulukoi peiton sekä PDOP:n mediaanin ja pahimman arvon suunnitteluruudukon {planes × sats × inclination} yli, ja coverage_revisit raportoi peittoasteen ja uudelleenkäyntivälit (pahin/keskiarvo) maapisteessä. Validoitu fysikaalisilla monotonisuuksilla, joita kaupan on noudatettava (enemmän satelliitteja ⇒ suurempi peitto, pienempi PDOP, lyhyempi uudelleenkäynti). Erikseen aito Celestrak gps-ops -TLE-tilannekuva (2021-07-28, 30 toiminnallista GPS-satelliittia) lisätään vain testikäyttöön tarkoitettuna aineistona ja todellinen TLE → SGP4 → ECEF -geometriapolku validoidaan sitä vasten (koko MEO-kuori 1 %:n sisällä, yhdeksän satelliitin kaikki-näkyvissä PDOP:lla 1,64), olemassa olevien SP3- ja RINEX-todellisen datan polkujen rinnalla.
  • Kohinatyyppikohtaiset efektiiviset vapausasteet Allanin luottamusväleille. allan::edf_overlapping_adev toteuttaa NIST SP 1065 -taulukon 5 suljetut muodot (Stable32:n yksinkertainen joukko) kaikille viidelle kanoniselle potenssilakikohinatyypille (valkoinen/flicker-PM, valkoinen/flicker-FM, satunnaiskävely-FM) ja korvaa varovaisen ei-päällekkäisen lukumäärän χ²-vapausasteina. Uusi PowerLawNoise-enum ja classify_power_law tunnistavat hallitsevan tyypin tietueen modifioidun Allanin poikkeaman kulmakertoimesta (MDEV erottaa valkoisen flicker-PM:stä, mitä ADEV ei pysty), ja overlapping_adev_curve liittää nyt tunnistetun kohinatyypin, sen edf:n ja 95 %:n luottamuskaistan jokaiseen viedyn ADEV-käyrän pisteeseen (AdevPoint saa noise/edf/ci_lo/ci_hi, additiivisesti serde-oletuksilla). Validoitu kahdella tavalla: viisi kaavaa vastaa käsin laskettuja arvoja 1e-12 tarkkuudella, ja 4 000 tietueen Monte Carlo -valkoinen-FM-yhtye vahvistaa, että kaava ennustaa estimaattorin todellisen khiin neliön edf:n 20 %:n sisällä (ja että se päihittää olennaisesti varovaisen lukumäärän). Kahdeksan uutta testiä.
  • Kaksisuuntaisen ajansiirron stokastinen malli. timetransfer::TwoWayLink korvaa pelkästään valkoisen näytteistäjän fysikaalisesti perustellulla mallilla: vastavuoroinen (yhteismuotoinen) polkuviive kumoutuu estimaatissa (m_AB - m_BA)/2 (two_way_offset_estimate, joten kaksi riippumatonta yksisuuntaista mittausta keskiarvoistuu muotoon 1/sqrt(2)), ja jäännös on ei-vastavuoroinen differentiaaliviive, mallinnettuna värillisenä valkoinen-FM + satunnaiskävely-FM -prosessina (validoitu ClockModel), mikä antaa synkronointivirhesarjalle realistisen Allan-allekirjoituksen (sigma_y^2(tau) = q_rw*tau/3) tasaisen valkoisen kohinan sijaan. LinkCfg saa kentät q_wf_s/q_rw_s (serde-oletus 0 ⇒ vanha pelkästään valkoinen käytös bitti bitiltä), linkin FoM raportoi adev_tau0 (mallin Allanin poikkeama peruskohdalla), ja skenaario/CLI-pinta timetransfer näyttää ne. Golden FoM pinnattu uudelleen. Kuusi käsin johdettua testiä (yhteismuotoisen kumoutuminen, sqrt(2) kaksisuuntainen vahvistus, RWFM-laki tau/3 linkin oman funktion step() kautta, vanha vastaavuus arvolla q=0, determinismi ja päästä päähän FoM:n paljastaminen).
  • Stable32-numeerinen pariteetti Allan-perheen estimaattoreille (NBS14). tests/allan_reference.rs validoi päällekkäisen ADEV:n, modifioidun ADEV:n, aikapoikkeaman ja päällekkäisen Hadamardin estimaattorit Stable32:n viittauspoikkeamia vasten kanonisessa NBS14-aineistossa (W. J. Riley, Handbook of Frequency Stability Analysis, NIST SP 1065, ~s.107) arvoilla tau = 1, 2 suhteellisella toleranssilla 1e-4 ja todellinen yhtäpitävyys ~1e-6. Tämä kiinnittää estimaattorien matematiikan tosiasialliseen viittaustoteutukseen, ei vain estimaattorien omaan analyyttiseen itsejohdonmukaisuuteen. Käytetään vain julkisia viitelukuja; ei kolmannen osapuolen koodia.
  • Skenaarion integrity vie pystysuoran Stanford-eheyskaavion. Ajettava skenaariolaji integrity vie nyt pystysuoran Stanford(-ESA)-kaavion HPL/VPL-saatavuuskartan rinnalle: jokaisella suojatulla epookilla siemenellinen, toistettava vikavapaa etäisyysvirhearvonta kuvataan geometrian kautta todelliseksi pystysuuntaiseksi paikkavirheeksi ja luokitellaan VPL:ää ja pystysuuntaista hälytysrajaa vasten (Available / System-Unavailable / Misleading / Hazardously-Misleading). Kaavio (epookkikohtaiset pisteet + aluemäärät) kulkee tulos-JSONissa ja eheystapahtuma-/HMI-määrät CLI-yhteenvedossa, joten Stanford-luokittelija, joka oli aiemmin vain kirjastossa, on tavoitettavissa päästä päähän. IntegrityScenario saa kentän seed (oletus 0), joka ohjaa virhetoteutumaa; itse saatavuuskartta pysyy vain geometriaan perustuvana ja siemenestä riippumattomana.
  • ARAIM-eheysriskin (P_HMI) budjetti suojaustasoille. raim::araim_raim johtaa vaaka- ja pystysuuntaiset suojaustasot eksplisiittisestä eheysriskibudjetista kiinteän K_md-kertoimen sijaan: kaikki-näkyvissä-ratkaisulle ja jokaiselle yhden satelliitin poissulkemisen aliratkaisulle se rakentaa moodikohtaisen (prior, detection threshold, σ) kummallekin akselille, ja sitten araim_protection_level ratkaisee pienimmän PL:n, jonka summattu vaarallisen harhaanjohtavan tiedon todennäköisyys (araim_integrity_risk, P_HMI = Σ_k p_fault,k · Q((PL − T_k)/σ_k), Blanch et al. Baseline ARAIM) täyttää allokoidun P_HMI:n. Tulos raportoi eheysriskin, jonka tasot todella saavuttavat, joten käyttäjä voi vaihtaa eheyttä hälytysrajaan nähden eksplisiittisesti. Kuusi käsin johdettua testiä (vikavapaa ja kynnystetty yhden moodin suljetut muodot, monimoodisumma/monotonisuus, päästä päähän vikavapaa suojaus, jossa 10⁵× tiukempi budjetti nostaa PL:ää, vian havaitseminen/tunnistus ja kuuden satelliitin redundanssilattia). Yhden vian MHSS on ARAIM-perustaso; samanaikaiset usean SV-osajoukon viat, koko satelliittitähdistön vikatila ja gLAB-vertailuaineiston validointi ovat dokumentoituja laajennuksia.
  • Kaksinopeuksinen coning/sculling-kompensaatio strapdown-mekanisaatiolle. inertial::mechanization::coning_sculling_compensate laskostaa korkeataajuiset coning (asenne)- ja kierto+sculling (nopeus) -termit karkean päivityksen järjestetyistä osavälin IMU-inkrementeistä, joten kohtalaisella nopeudella ajettu NavState::step_increments toistaa tärinän oikaisseen liikkeen, jonka karkea askel raakasummilla ohittaa. Validointitesti ajaa 10 Hz:n coning+sculling-ympäristöä 60 s ajan ja vertaa hienon nopeuden totuutta, naiivia karkeaa integrointia ja laskostettua karkeaa integrointia: laskostus leikkaa paikkavirheen ~18-kertaisesti (naiivin ajautuman metrit → alle desimetri), mikä vahvistaa coning/sculling-termien olevan kantavia. Tyyppialias ScalarErrorBudget nimeää vanhan 1-DOF-tyypin AccelModel sellaiseksi kuin se on, erotettuna kolmiakselisesta NavState-navigaattorista.
  • RINEX-havaintotiedostojäsennin. Uusi moduuli rinex_obs lukee RINEX 3.0x / 4,00 -havaintotiedoston, eli vastaanottimen todelliset mittaukset, ja täydentää RINEX-parin olemassa olevan navigointiviestijäsentimen rinnalla. parse_obs dekoodaa otsikon (versio/tyyppi, järjestelmäkohtaiset SYS / # / OBS TYPES-listat jatkorivien kanssa, likimääräinen paikka, väli, ensimmäisen havainnon aika) ja kunkin epookin satelliittikohtaiset tietueet: pseudoetäisyys, kantoaallon vaihe, Doppler ja signaalin voimakkuus, avaimina niiden RINEX 3 -havaintokoodi (C1C, L1C, …) sekä lukituksenmenetys (LLI)- ja signaalinvoimakkuus (SSI) -liput; tyhjä kenttä säilytetään puuttuvana, ei nollana. Rehellinen rajaus: tämä on standardimuodon sisäänotto (todellinen RTKLIB/gLAB/IGS-aseman havaintoloki sisään, tyypitetyt mittaukset ulos), ei paikannusmoottori; ei pseudoetäisyysratkaisua, PPP:tä eikä RTK:ta tässä.
  • CCSDS OEM (Orbit Ephemeris Message) -kirjoittaja. Uusi moduuli oem vie propagoidun satelliittitähdistön kelvollisena CCSDS 502.0-B OEM 2,0 -viestinä, KVN-efemeridimuotona, jonka GMAT, Orekit, STK ja useimmat lentodynamiikkatyökalut ottavat sisään. OemFile::from_propagators ottaa jokaisen satelliitin inertiaalisen (TEME) tilan, sekä paikan että nopeuden, suoraan propagaattorista ilman maakiinteää kiertoa toisin kuin SP3-viennissä, aikaruudukolle, ja OemFile::to_oem_string serialisoi otsikon CCSDS_OEM_VERS/CREATION_DATE/ ORIGINATOR sekä yhden META_START … META_STOP-segmentin satelliittia kohden (OBJECT_NAME/OBJECT_ID/CENTER_NAME/REF_FRAME = TEME/TIME_SYSTEM = GPS/ START_TIME/STOP_TIME) ja sen jälkeen sen epoch X Y Z X_DOT Y_DOT Z_DOT-rivit (km, km/s). Kenttä CREATION_DATE annetaan kutsujan toimesta, ei seinäkellosta, joten tuloste on tavu tavulta identtinen ajojen välillä (toistettavuussopimus). Tämä on avaruusalusefemeridin vastine GNSS:n SP3-viennille: Kshana-radan voi nyt luovuttaa lentodynamiikkatyökalulle standardimuodossa.
  • SP3-tarkka efemeridi propagointilähteenä. Sp3File::interpolator rakentaa satelliittikohtaisen Sp3Interpolator-olion, joka täyttää paikan taulukoitujen SP3-epookkien välillä 9. asteen Lagrange-polynomilla (IGS:n vakiokäytäntö) ja kiertää sen jaettuun TEME-koordinaatistoon, paljastettuna muodossa Propagator::Sp3Precise. IGS:n/analyysikeskuksen tarkka ratatiedosto voi nyt ajaa saman geometria/näkyvyys/eheys-ketjun kuin lähetetyt ja analyyttiset propagaattorit. Validoitu edestakaisajolla: SP3:een kirjoitettu ja interpolaattorin kautta uudelleen luettu Kepler-rata vastaa alkuperäistä alle metrin tarkkuudella solmuissa ja < 100 m välin keskellä. Kellon interpolointi on seuraava.
  • GLONASSin lähetetty efemeridi (täydentää monen GNSS:n RINEX-navigoinnin). Uusi moduuli glonass: GLONASS ei lähetä Keplerin elementtejä vaan PZ-90 maakiinteän tilavektorin (paikka, nopeus, kuu-aurinko-kiihtyvyys). parse_glonass_nav lukee RINEX 3 -R-tietueet, ja satelliitin paikka mille tahansa hetkelle saadaan 4. kertaluvun Runge–Kutta-integroinnilla GLONASS ICD:n liikeyhtälöistä (keskeinen gravitaatio + J2 + Maan pyörimisen Coriolis/keskipakotermit + lähetetty kiihtyvyys). Paljastettu muodossa Propagator::Glonass, joten GLONASS-satelliitit kulkevat satelliittitähdistö/näkyvyys/eheys-ketjun läpi Keplerin järjestelmien rinnalla; yksi rinex-satelliittitähdistölohko voi nyt sekoittaa GPS:ää, Galileota, QZSS:ää, BeiDoun ja GLONASSia.
  • Monen GNSS:n RINEX-navigointi (GPS, Galileo, QZSS, BeiDou). RINEX 3 -navigointijäsennin dekoodaa nyt Galileon (E), QZSS:n (J) ja BeiDoun (C, MEO/IGSO) tietueet GPS:n (G) rinnalla; ne jakavat Keplerin asettelun ja käyttäjäalgoritmin, ja kukin arvioidaan omalla gravitaatiovakiollaan ja Maan pyörimisnopeudellaan (Galileon/BeiDoun μ, BeiDoun Ω̇ₑ). Sekasatelliittitähdistön tiedosto tuottaa kaikki, ja ne kulkevat satelliittitähdistö/näkyvyys/eheys-ketjun läpi muodossa Propagator::Rinex. BeiDoun geostationaariset satelliitit käyttävät eri koordinaattikiertoa ja ohitetaan, kunnes validointiin on viiteaineisto. Tietueiden kävelijä käyttää järjestelmäkohtaisia rivimääriä, mikä korjaa piilevän virheen, jossa nelirivisiä GLONASS/SBAS-tietueita ohitettiin ikään kuin ne olisivat olleet kahdeksan rivin pituisia. GLONASS (tilavektorimalli) on seuraava.
  • SP3-c/d-tarkan efemeridin lukija ja kirjoittaja. Uusi moduuli sp3 jäsentää IGS:n/analyysikeskuksen SP3-tarkkoja ratatiedostoja (parse_sp3), jälkikäsiteltyä ECEF-paikka/kello-tuotetta, jota PPP-moottorit (Ginan, RTKLIB, gLAB) pitävät viitteenä, jäsennellyksi Sp3File-rakenteeksi (otsikko, epookkiruudukko, satelliittikohtainen paikka km→m, kello µs ja nopeus dm/s→m/s V-tuotteille), säilyttäen SP3:n huonon arvon sentinellit. Käänteinen suunta on myös katettu: Sp3File::from_propagators rakentaa SP3:n propagoidusta satelliittitähdistöstä (TEME→ECEF epookkia kohden) ja to_sp3_string serialisoi sen, jotta Kshana-ratoja voi viedä ulkoisten PPP-työkalujen sisään ottamassa muodossa: luku↔kirjoitus-edestakaisajo. Epookki-interpolointi ja SP3-propagaattorilähde ovat seuraavat.
  • RINEX-lähetetty efemeridi ajettavana satelliittitähdistölähteenä. Satelliittitähdistö hyväksyy nyt sisäisen rinex-lohkon (RINEX 3 GPS-navigointiteksti) olemassa olevan tle-vaihtoehdon rinnalla, joten todellinen lähetystiedosto ajaa skenaarion päästä päähän CLI:stä, Pythonista tai selaimen sisäisestä leikkikentästä: RINEX sisään, PNT-geometria ulos. Uusi scenarios/orbit-rinex.toml havainnollistaa GNSS-saatavuutta ja DOP:ia kahdeksasta GPS-satelliitista, jotka on rakennettu suoraan lähetystietueista. (Vain GPS LNAV; monen GNSS:n tuki ja SP3 ovat seuraavia.)
  • RINEX-lähetetty efemeridi propagointilähteenä. Jäsennetty RinexEphemeris muunnetaan nyt orbit::Propagator-olioksi (Propagator::Rinex): paikka on IS-GPS-200:n lähetetty rata, joka on kierretty ECEF:stä jaettuun TEME-inertiaalikoordinaatistoon (sv_position_teme, karkaussekuntioikealla GPS→UT1-ajalla), nopeus keskeisellä differenssillä ja Keplerin kiertoaika. Todellinen GPS-lähetysdata voi nyt ajaa saman geometria-, näkyvyys- ja eheys (RAIM) -ketjun kuin analyyttiset SGP4/Kepler-propagaattorit. (Ei vielä paljastettu RINEX-tiedostoskenaariolajina; se sekä monen GNSS:n tuki ja SP3 ovat seuraavia.)

0.9.2 - 2026-06-03#

Lisätty#

  • Arkistoitu DOI. Julkaisut talletetaan nyt Zenodoon ja niille annetaan siteerattava DOI.

0.9.1 - 2026-06-03#

Muutettu#

  • Dokumentaatio. README päivitetty laitostasolle: Capabilities-yleiskatsaus koko v0.9.0-kokonaisuudesta, Versioning & releases -osio, siisti otsikko uudella tunnuksella ja tiivis tilarivi. Ei moottorimuutoksia.

0.9.0 - 2026-06-03#

Tämä julkaisu lisää kolme merkittävää ominaisuusaluetta 0.8.0 SGP4 -alustan päälle: aito kolmiakselinen strapdown-INS, löyhästi kytketty GNSS/INS-virhetila-EKF suljetun silmukan takaisinkytkennällä, todellinen tilannekuvan ja ratkaisuerotuksen (ARAIM-tyylinen) RAIM HPL/VPL:llä ja ajettavalla integrity-skenaariolla sekä GNSS-muotojen yhteentoimivuuden ensimmäinen askel (RINEX-3 GPS-efemeridin sisäänotto).

Lisätty#

  • RINEX 3 GPS-navigointiviestin jäsennin (src/rinex.rs). Ensimmäinen askel kohti GNSS-muotojen yhteentoimivuutta: parse_nav lukee RINEX 3.x-navigointitiedoston ja dekoodaa jokaisen GPS (G) -lähetysefemeridin tietueen, kahdeksanrivisen SV/epookki + BROADCAST ORBIT -lohkon, Keplerin elementtien ja kellokorjausten RinexEphemeris-rakenteeksi, kenttien nimillä ja yksiköillä IS-GPS-200:n mukaan. Käsittelee Fortranin D-eksponenttifloat-muodon (parse_d) ja kiinteäleveyksisen sarakeasettelun; ei-GPS-järjestelmien tietueet ohitetaan, ei hylätä, joten sekatiedosto tuottaa silti GPS-efemeridinsä. Neljä testiä: D-eksponentin jäsennys (tyhjät ja virheet mukaan lukien), täysi tietue dekoodattuna tunnettuja kenttäarvoja vasten GPS:n isoakselin puolikkaan järkevyystarkistuksella (√A² ≈ 26 560 km), ei-GPS-ohitus ja tyhjän tiedoston tapaus.
  • GPS-lähetysefemeridi → ECEF-paikka (src/rinex.rs). RinexEphemeris::sv_position_ecef(t_tow) arvioi satelliitin maakiinteän paikan jäsennetystä efemeridistä IS-GPS-200 §20.3.3.4.3.1 -käyttäjäalgoritmilla: Newtonin ratkaisu Keplerin yhtälölle eksentriselle anomalialle, toisen harmonisen leveysargumentti/säde/inklinaatio-korjaukset ja kierto ECEF:iin, joka ottaa huomioon Maan pyörimisen viite-epookista alkaen (spesifikaation vaatimilla GPS:n μ:lla ja Ω̇ₑ:lla sekä viikkokierron tk-laskostuksella). Kolme testiä: geosentrinen säde pysyy GPS-kaistalla (≈ 26 560 km), maakiinteä nopeus on ~3,9 km/s ja kokonaisen viikon päässä arviointi toistaa saman paikan.
  • GPS SV:n kellon harha relativistisella korjauksella (src/rinex.rs). RinexEphemeris::sv_clock_bias_s(t_tow) arvioi lähetetyn kellopolynomin af0 + af1·Δt + af2·Δt² pisteen Toc ympärillä sekä relativistisen eksentrisyystermin F·e·√A·sin Ek (IS-GPS-200 §20.3.3.3.3.1). Uusi EpochUtc::gps_time_of_week muuntaa tietueen kalenteriepookin GPS:n viikon sekunneiksi Julian-päiväaritmetiikalla GPS-epookista (1980-01-06) alkaen, ja Keplerin ratkaisu jaetaan paikka-arvioinnin kanssa. Testit: GPS:n viikon sekunnit sunnuntaille/tiistaille/lauantaille (viikon rajat) sekä kellon harha on af0-valtainen ja siinä on läsnä rajattu relativistinen termi. L1-ryhmäviive TGD paljastetaan mutta sitä ei tarkoituksella lasketa mukaan. Rehellinen rajaus: Propagator-lähde, Galileo/BeiDou/GLONASS ja SP3 ovat seuraavia askeleita. (docs/CAPABILITY.md päivitetty vastaamaan.)
  • Käyttäjän ajettavissa oleva skenaariolaji integrity (scenarios/integrity-raim.toml). RAIM-saatavuusominaisuus on nyt tavoitettavissa CLI:stä/TOML:sta kuten jokainen muu paketti: kind = "integrity" jäsentää IntegrityScenario-skenaarion (käyttäjän rata, yksi tai useampi GNSS-satelliittitähdistö, korkeuskulmamaski ja eheyskonfiguraatio (sigma, P_fa, P_md, AL_H, AL_V)), ajaa constellation_raim_availability ja tuottaa epookkikohtaisen HPL/VPL-saatavuuskartan JSONina sekä omavaraisen SVG:n: suojaustasot ajan yli hälytysrajoja vasten, vihreä/punainen saatavuusjuova. kshana scenarios/integrity-raim.toml kirjoittaa JSONin, kaavion ja HTML-raportin. Mukana toimitettu skenaario (24 satelliitin Walker, 1 m:n kaksitaajuusetäisyysmittaus, APV-I-rajat) raportoi ~95 %:n saatavuuden; se dokumentoi, että yksitaajuinen RAIM ei täytä pystysuuntaista APV-I-rajaa yhdellä satelliittitähdistöllä, minkä vuoksi pystyohjaus käyttää SBAS:ia/kaksitaajuutta/ARAIM:ia. Testit kattavat jaon, saatavuuskartan JSONin ja SVG:n.
  • Ajettava RAIM-saatavuus satelliittitähdistön yli (src/raim.rs). Eheysmoduulilla ei ollut kutsujaa: constellation_raim_availability tekee siitä aidon päästä päähän -sisääntulopisteen: jokaisella ajanruudukon epookilla se propagoi näkyvät satelliitit (samoilla SGP4/Kepler-Propagator-olioilla, joita moottori käyttää), laskee vikavapaat suojaustasot ja arvioi saatavuuden vaaka-/pystysuuntaisia hälytysrajoja vasten, palauttaen serde-serialisoitavan RaimAvailabilityReport-olion (epookkikohtaiset n_visible/HPL/VPL/available sekä saatavuusosuus). RaimConfig niputtaa (sigma, P_fa, P_md, AL_H, AL_V), ja epookkikohtainen raim_availability_epoch paljastetaan kutsujille, jotka ratkaisevat oman geometriansa. Kolme testiä: epookki arvioituna saatavuudeltaan käytettäväksi APV-I-rajoilla kymmenen satelliitin geometrialla, tehtynä käyttökelvottomaksi mahdottoman tiukalla rajalla ja tasot None alle viidellä satelliitilla; sekä päästä päähän -ajo 24 satelliitin Walker-satelliittitähdistön yli, joka tuottaa äärellisen saatavuuskartan ja serialisoituu. (Kuusi satelliittia, jäännös-RAIM:n redundanssilattia, ei rehellisesti täytä APV-I:tä edes 1 m:n etäisyysmittauksella; APV-I-saatavuus tarvitsee testin käyttämän tiheämmän geometrian.)
  • Stanford(-ESA)-eheyskaavion kerääjä (src/raim.rs). Vakiotapa tiivistää eheysvalvoja monen epookin yli: se piirtää todellisen paikkavirheen (x) suojaustasoa (y) vasten ja luokittelee jokaisen epookin diagonaalilla y = x ja hälytysrajalla luokkiin Available (PL rajaa virheen, AL:n sisällä), SystemUnavailable (PL rajaa virheen mutta ylittää AL:n: turvallinen, käyttökelvoton), MisleadingInformation (PL < virhe ≤ AL) tai HazardouslyMisleadingInformation (PL < virhe ja virhe > AL: vaarallinen vika). classify_stanford on puhdas luokittelija; StanfordDiagram kerää (error, PL)-pisteitä kiinteää hälytysrajaa vasten, paljastaen aluemäärät, saatavuuden, eheystapahtumien kokonaismäärät ja serde-serialisoitavat pisteet piirtoa/JSON-vientiä varten. Neljä testiä: jokainen alue (mukaan lukien error == PL-rajattu raja), määrän/saatavuuden kertyminen ja JSON-edestakaisajo. Tämä on RAIM-suojaustasojen raportointipinta; sen kytkeminen satelliittitähdistöskenaarioon ja validointi julkista aineistoa vastaan ovat edelleen tiekarttakohtia.
  • Ratkaisuerotuksen (ARAIM-tyylinen) RAIM (src/raim.rs). Monihypoteesinen eheysvalvoja olemassa olevan jäännös/pariteetti-khiin neliö -funktion snapshot_raim rinnalla. Kaikki-näkyvissä-pienimmän neliösumman ratkaisulle ja jokaiselle yhden satelliitin poissulkemisen aliratkaisulle se muodostaa erotuksen Δ_k = x_k − x₀, joka on nollakeskiarvoinen gaussinen ilman vikaa kovarianssilla Cov(x_k) − Cov(x₀) (sisäkkäisen estimaattorin identiteetti, joka pätee, koska kaikki-näkyvissä-ratkaisu on BLUE), ja siten se sekä havaitsee vian että tunnistaa viallisen satelliitin (sen, jonka poissulkeminen antaa suurimman normalisoidun erotuksen). Vaaka-/pystysuuntaiset suojaustasot seuraavat standardia MHSS-allokaatiota PL = max(K_md·σ₀, max_k[K_fa·σ_ss,k + K_md·σ_k]) ehdoilla K_fa = Φ⁻¹(1−P_fa/2), K_md = Φ⁻¹(1−P_md). Uudet riippuvuudettomat normal_cdf/normal_quantile, jotka on rakennettu moduulin olemassa olevasta regularisoidusta epätäydellisestä gammafunktiosta (erf(x) = P(½,x²)). Neljä käsin johdettua testiä: normaalijakauman kertymäfunktio / kvantiili oppikirja-arvoja vasten (Φ(1,95996)=0,975, 1e-7 häntä = 5,1993, symmetria); vikavapaa geometria, joka ei hälytä ja tuottaa äärelliset, positiiviset HPL/VPL; 60-σ yhden satelliitin harha, joka havaitaan ja tunnistetaan oikein (excluded_sv == 2); ja kuuden satelliitin redundanssilattia. Sulkee auditoinnin ”tautologinen eheys, ei todellista RAIM/HPL/VPL” P0-aukon algoritmipuolella; gLAB-aineistovalidointi ja Stanford-kaavion kerääjä ovat edelleen tiekarttakohtia.
  • Suljetun silmukan GNSS/INS-integrointi (src/fusion/closed_loop.rs). ClosedLoopInsGnss kytkee virhetila-EKF-ytimen kolmiakseliseen strapdown-mekanisaatioon: jokainen IMU-näyte korjataan käynnissä olevilla harhaestimaateilla, mekanisoidaan eteenpäin ja EKF:n kovarianssi propagoidaan ajassa vastaavalla navigointikontekstilla; jokainen GNSS-paikka/nopeus-ratkaisu muodostaa INS−GNSS-innovaation ja syöttää estimoidun paikan, nopeuden, asennevirheen (ψ, kvaternionikiertona) ja kiihtyvyys-/gyroharhat takaisin ratkaisuun nollaten virhetilan keskiarvon. Asenteen takaisinsyöttö (ei pelkästään harhojen) on välttämätöntä vakaudelle: kallistus ja kiihtyvyysmittarin harha ovat kytketty pari, joten toisen korjaaminen ilman toista hajaantuu. INS ja GNSS verrataan paikallisessa tangenttitason NED-koordinaatistossa käyttäen mekanisaation omia kaarevuussäteitä (uusi mechanization::radii_of_curvature; NavState::omega_ie_n/omega_en_n paljastettu). Tämä on rehellinen korvaaja hybridipaketin totuuteen napsautettavalle nollaukselle. Kolme testiä: suljettu silmukka, joka nollaa syötetyn 8 m / −5 m paikkavirheen arvoon <0,1 m; tuettu ratkaisu, joka pysyy metrirajoitettuna (<6 m) ajoradalla, kun vapaasti ajautuva INS hajaantuu yli 100 m:n; ja virstanpylvään benchmark: fuusioidun ratkaisun Monte Carlo -paikan RMS 60 s:n GNSS-katkon yli voittaa tukemattoman avoimen silmukan merenkulkulaskijan yli >2-kertaisesti (≈4× siementen yli). Moduuliin dokumentoitu rehellinen rajoitus: löyhästi kytketyssä tilassa kiihtyvyysharha ja kallistus ovat vain heikosti erotettavissa (molemmat kytkeytyvät gravitaation kautta), joten tarjottu arvo on rajattu, korjattu tila ja puhdas katkoon siirtyminen, ei tarkka inertiakalibrointi; rikkaampi dynamiikka ja tiukasti kytketty laajennus ovat tiekarttakohtia.
  • Löyhästi kytketty GNSS/INS-virhetila-EKF-ydin (src/fusion/gnss_ins_ekf.rs). 15-tilainen virhetilainen laajennettu Kalman-suodatin, δx = [δp, δv, ψ, b_a, b_g], jossa on strapdown-virhedynamiikka Grovesin 2013 §14,2 mukaan (ominaisvoima/kallistus-kytkentä, Coriolis, runko→nav-harhaprojektio, Gauss–Markov-harhamallit), ensimmäisen kertaluvun diskreetti siirtymä Φ = I + F·dt ja löyhästi kytketty paikka+nopeus-mittauspäivitys (H = [I₃ 0 0 0 0; 0 I₃ 0 0 0]) Joseph-muodossa. Riippuvuudeton tiheä lineaarialgebra (Gauss–Jordan-käänteinen, Josephin kovarianssipäivitys). Cargo-ominaisuus tight_coupling rajaa dokumentoidun, vielä toteuttamattoman pseudoetäisyys/Doppler-päivityksen. 7 testiä käsin johdetuilla odotuksilla: vinosymmetrinen/ristitulo-identiteetti, todennettu 3×3 käänteismatriisi, kovarianssi pysyy symmetrisenä/PSD:nä ennusteessa (ja paikkaepävarmuus kasvaa ilman tukea), paikkaratkaisu pienentää paikkakovarianssia, tunnetun paikkavirheen täsmällinen palautus analyyttisellä Kalman-vahvistuksella P/(P+R) ja pienemmät korjaukset suuremmalla mittauskohinalla. Tämä on ydin, joka korvaa hybridipaketin avoimen silmukan totuuteen napsautettavan nollauksen suljetun silmukan takaisinkytkennällä (paketin kytkentä + NaveGo-validointi seuraavat).
  • Deterministinen IMU-virhemalli 3-akseliselle strapdown-navigaattorille (src/inertial/imu_errors.rs). ImuErrorModel vääristää todellisen runkokoordinaatiston parin (ω, f) mitatuksi viiden systemaattisen luokan kautta (IEEE Std 952-1997 §A.2; Groves 2013 §4,3, taulukko 4,1): mittakaavakerroin (akselikohtainen ppm-vahvistusvirhe), kohdistusvirhe / ristikytkentä (triadin epäortogonaalisuus ei-diagonaalisena), g-herkkyys (ominaisvoimaan verrannollinen gyron nopeusharha), kvantisointi (pyöristys lähdön LSB:hen) ja nopeusramppi (ajassa lineaarinen ajautuma, kolmas Allan-alue) sekä vakioinen käynnistysharha. Jokainen termi on oletuksena nolla, joten ImuErrorModel::ideal() on läpinäkyvä läpivienti eikä olemassa oleviin skenaarioihin vaikuteta. Jokaiselle virhelähteelle on eristystesti (mittakaava lineaarinen < 0,01 %:n tarkkuudella, kohdistusvirheen ristiakseli VRW-lattian yläpuolella, g-herkkyysharha, LSB-ruudukko, lineaarinen ramppi), ja päästä päähän -testi ajaa navigointivirheen mekanisaation läpi vääristetystä IMU:sta. Ei mallinnettu: tärinän oikaisuvirhe, lämpötilagradienttiajautuma. (Toimitettu inertial-skenaariopaketti ajaa edelleen vanhaa 1-DOF-skalaaribudjettia; tämä malli syöttää 3-akselista kirjastoa.)
  • Coning- ja sculling-kompensaatio strapdown-integraattorille. Asennepolku lisää kahden näytteen coning_increment (½ Δθ_prev × Δθ_cur); karkean nopeuden (30 Hz, 5 näytettä/sykli) integroinnin 5 Hz:n coning-ympäristössä todennetaan seuraavan hienon nopeuden totuutta ≥ 3× paremmin korjauksella kuin naiivilla inkrementtien summauksella. Nopeuspolku lisää sculling_increment (½ Δθ × Δv, Groves yht. 5,82) ja ratkaisee runkonopeuden inkrementin uuden NavState::step_increments-inkrementtipohjaisen päivityksen kautta käyttäen runkosuhteellista kiertoa Δθ_rel = Δθ_b − C_n^b ζ, joten maakiinteä alusta ei aiheuta harhaanjohtavaa scullingia, kun taas aito tärinä laukaisee koko termin.
  • Täysi kolmiakselinen strapdown-mekanisaatio NED-koordinaatistossa (src/inertial/mechanization.rs). NavState { q, v_ned, p_llh } etenee funktiolla step(gyro_b, accel_f_b, dt) käyttäen standardeja maakiinteän koordinaatiston NED-yhtälöitä (Groves §5,4): runko→NED-asenne korjattuna inertiaali-nav-nopeudella ω_in = ω_ie + ω_en (Maan pyöriminen + siirtonopeus); ominaisvoima ratkaistuna runko→NED DCM:n kautta; nopeus integroi termiä v̇ = f_n − (2 ω_ie + ω_en) × v + g_n (Coriolis/siirto + gravitaatio); ja geodeettinen paikka meridiaani- ja poikittaisten kaarevuussäteiden kautta. Gravitaatio on WGS-84:n suljetun muodon Somigliana-normaaligravitaatio (luotilangan painovoima) NIMA:n vapaan ilman korkeuskorjauksella, ei koskaan kovakoodattu vakio. Tämä on aito kolmiakselinen navigaattori, joka syrjäyttää 1-DOF-skalaarivirhebudjettipolun. Todennettu fysikaalisilla invarianteilla: pyörivään Maahan 45°N kohdalla kiinnitetty alusta (aistii Maan nopeuden + 1 g) pysyy 1 mm:n sisällä 60 s:n ajan; vaakasuora pohjoinen ominaisvoima antaa v_N ≈ a·t ja ½ a t² siirtymän; normaaligravitaatio vastaa tunnettuja päiväntasaajan/navan/45°:n pinta-arvoja ja vapaan ilman muutosnopeutta.
  • Kolmiakselinen asenne-esitys strapdown-INS:lle (src/inertial/attitude.rs). Yksikkökvaternionin Quaternion-tyyppi (skalaari ensin, Hamiltonin käytäntö), joka kantaa runko→nav-kiertoa, DCM-näkymällä (to_dcm/from_dcm Shepperdin menetelmällä), Hamiltonin tulolla, akseli-kulma- ja kiertovektori- (tarkka exp-kuvaus) konstruktoreilla sekä kvaternionikinematiikalla: sekä ensimmäisen kertaluvun RK-nopeuspäivitys (q̇ = ½ q ⊗ ω) että coning-korjattu kiertovektoripäivitys. Kahden näytteen coning_increment (Savage / Bryan–Lewantowski, ½ Δθ_prev × Δθ_cur) antaa kiertonopeuden ristikytkentätermin, jonka skalaarinen merenkulkulaskenta jättää pois. Tämä on asenteen perusta täydelle 3-akseliselle mekanisaatiolle, joka korvaa vanhan 1-DOF-virhebudjettipolun. Todennettu suljetun muodon kiertoja vasten: vakionopeuspropagointi vastaa akseli-kulma-kvaternionia 1e-6 tarkkuudella, DCM:t ovat ortonormaaleja yksikköderminantilla ja coning katoaa yksiakseliselle liikkeelle. (src/inertial.rs on nyt moduulihakemisto src/inertial/; julkinen polku crate::inertial ei muutu.)
  • Geodeettisesti oikea maa-aseman näkyvyys (src/frames.rs). elevation, is_visible ja visible_count laskevat satelliitin korkeuskulman maa-aseman horisontin yläpuolella WGS-84-ellipsoidin normaalia (todellista paikallista pystysuuntaa) vasten, ei geosentristä säteittäistä suuntaa; nämä eroavat enintään ~0,19° geodeettisella poikkeamalla, mikä riittää kääntämään lähellä horisonttia olevat satelliitit korkeuskulmamaskin sisään tai ulos. Todennettu päästä päähän (propagoitu Walker-satelliittitähdistö, kierretty TEME→ECEF ja laskettu geodeettiselta paikalta) sekä geosentristä approksimaatiota vasten.

Muutettu#

  • CI:n luotettavuus. Työ test-python-bindings rakentaa nyt wheelin työkalulla PyO3/maturin-action (manylinux-kontti) raa'an isäntä-maturin build:n sijaan, mikä poistaa ajoittaisen rustfmt-preview/cargo-fmt rustup-ristiriidan ajokuvassa. Työ deny asentaa cargo-deny esikäännettynä binäärinä työkalulla taiki-e/install-action Docker-pohjaisen cargo-deny-action:n sijaan, mikä poistaa Docker Hub -rekisterin vetoaikakatkaisun. Kumpikaan muutos ei vaikuta suoritettuihin tarkistuksiin.

0.8.0 - 2026-06-02#

Lisätty#

  • Inertiaalinen nopeus paljastetaan jatkokäyttöön. Propagator::velocity_eci ja Propagator::state_eci (palauttaa StateEci { r_m, v_m_s }) välittävät SGP4:n jo laskeman analyyttisen TEME-nopeuden, joka aiemmin hylättiin, kutsujille yksiköissä m/s; Orbit::velocity_eci antaa Keplerin polulle johdonmukaisen nopeuden. AIAA 2006-6753 -varmennustesti tarkistaa nyt myös nopeuden jokaiselle viiterivillle (pahin nopeusvirhe 1.85e-9 km/s kaikissa 666 tilassa) ja kiinnittää vertailtujen rivien määrän täsmälleen arvoon 666.

  • Tiukempi, paniikkivapaa TLE-jäsennys. Rivien on oltava ASCII-merkkejä ja ne viipaloidaan turvallisesti (ei enää tavuindeksipaniikkeja monitavuisella syötteellä); elementeille tehdään aluetarkistus (inklinaatio, eksentrisyys, keskiliike); sarakkeen 69 tarkistussumma voidaan pakottaa liipaisimilla ParseOpts { strict_checksum } / parse_propagators_opts ja uudella lipulla strict_checksum rakenteessa ConstellationCfg (oletuksena sallivasti).

  • Allanin poikkeaman käyrä tulosteessa. Jokainen kelloajo raportoi nyt adev_curve ([{tau_s, adev, n_samples}]), ja selainleikkikenttä piirtää log-log-kaavion ”Clock stability (ADEV)”.

  • Aikaruudukon syötteen validointi. TimeCfg::validate hylkää ei-äärellisen, nollan, negatiivisen tai liian suuren aikaruudukon (askel suurempi kuin kesto tai yli MAX_TIME_STEPS näytettä) ennen mitään allokointia, joten virheellinen skenaario palauttaa virheen paniikin tai muistin loppumisen sijaan.

  • Monte Carlo -yhtyeet inertiapaketille. runs = N inertiaaliskenaariossa ajaa N siementä ja raportoi kunkin mittarin keskiarvon, keskihajonnan, persentiilit ja persentiilibootstrap-95 %:n luottamusvälin (ensemble). Jokainen inertiaaliajo kantaa nyt lipun monte_carlo, joten yhden toteutuman FoM:ää ei enää sekoiteta jakaumaan. (CEP/2DRMS:ää ei tarkoituksella raportoida, koska ne vaativat tiekartan 3-akselisen mallin.)

  • Ohjattu leikkikenttätila. Selainleikkikenttä ei enää pudota sinua raakaan TOML-seinään: ”Start here” -nauha yhden napsautuksen skenaariokorteista lataa ja ajaa työstetyn esimerkin, liukusäätimet paljastavat yleiset säätimet (siemen, ajoituskynnys) TOMLiin koskematta, ”How to read this” -huomautus selittää tuloksen, ja koko TOML on yhden kokoonpainettavan alueen takana. Jokainen ajo on jaettavissa: Copy share link koodaa koko skenaarion URL-fragmenttiin (mitään ei lähetetä) niin, että linkki toistaa täsmälleen saman ajon latauksessa. Koodekki on yksikkötestattu (web/share.test.mjs, ajetaan CI:ssä).

  • N-ulotteiset parametripyyhkäisyt (src/sweep.rs). nd_sweep arvioi mittarin usean SweepAxis-alueen täyden karteesisen tulon yli (monen parametrin kauppatutkimus) rivijärjestyksessä ja deterministisesti. Additiivinen: olemassa oleva 1-D-pyyhkäisyn API ei muutu. Solmukohtaiset bootstrap-luottamusvälit ja yleistys kellopaketin ulkopuolelle ovat edelleen tiekartassa.

  • Todellinen tilannekuvan RAIM (src/raim.rs). Aito paikka-alueen Receiver Autonomous Integrity Monitoring: se rakentaa näkölinjageometrian näkyviin satelliitteihin, muodostaa pienimmän neliösumman ratkaisun ja residuaalit, ajaa χ²-residuaalivianhavaintotestin (tarkka kynnys riippuvuudettomasta epätäydellisestä gamma-χ²/ei-keskeisestä χ²:sta) ja laskee kaltevuuspohjaiset vaaka- ja pystysuuntaiset suojaustasot (HPL/VPL) havaitsematta jäämisen harhalla, joka on johdettu asetetulle P_fa/P_md:lle. Tämä on eri asia kuin skenaarioketjun suodattimen itsejohdonmukaisuuden Integrity-laatumittari, eikä sitä ole vielä kytketty siihen; vian poissulkeminen, hälytysraja/P_HMI-budjetointi ja ARAIM ovat edelleen tiekartassa.

  • Taajuusvakauden sarja: MDEV, TDEV, HDEV + luottamusvälit (src/allan.rs). Päällekkäisen ADEV:n rinnalla: modifioitu Allanin poikkeama (erottaa valkoisen vaihekohinan flickeristä), aikapoikkeama (TDEV = tau/sqrt(3) * MDEV) ja Hadamardin poikkeama (hylkää lineaarisen taajuusajautuman täsmälleen ja suppenee hajaantuville punaisen kohinan tyypeille). χ²-pohjaiset luottamusvälit (deviation_ci) käyttävät riippuvuudetonta normaali/χ²-kvantiilipariä (Acklam + Wilson-Hilferty) varovaisella ei-päällekkäisellä edf:llä; kohinatyyppikohtainen edf ja Stable32-numeerinen pariteetti ovat edelleen tiekartassa.

  • Koordinaatiston reduktio (src/frames.rs). GMST-pohjainen TEME↔ECEF-kierto (käyttäen samaa IAU-1982-sideeriaikaa kuin propagaattori), tarkka WGS-84 geodeettinen↔ECEF Bowring-siemennetyllä iteratiivisella käänteisellä (koneen tarkkuus kaikilla korkeuksilla, MEO/GEO mukaan lukien) sekä geodeettinen maa-aseman havaitsija, joka palauttaa atsimuutin / korkeuskulman / etäisyyden paikallisessa East-North-Up-koordinaatistossa. Napaliikettä ja kaarisekunnin alapuolista nutaatiota ei sovelleta (vain GMST, alle kilometri maanpintajäljellä); ITRF-tarkka CIO-ketju on tiekartassa.

  • Aikaskaalojen perusta (src/timescales.rs). Riippuvuudeton Julian-päivämäärä-API (gregoriaaninen siviili ↔ JD, MJD), koko IERS:n kokonaislukukarkaussekuntihistoria (UTC↔TAI, 10 s vuonna 1972 aina 37 s:iin vuodesta 2017), määritelty TAI→TT-siirtymä, UT1-korjaus annetun DUT1:n kautta ja IAU-2000:n Maan kiertokulma. Tämä on aika-alusta, jonka päällä maakiinteän koordinaatiston reduktio (suunniteltu) lepää. Ajanhetket ovat yhden f64:n Julian-päiviä (~50 µs:n erottelu nykyhetken lähellä; kaksiosainen JD on tiekartassa), eikä ennen vuotta 1972 vallinnutta kumisekuntiaikaa mallinneta; molemmat on dokumentoitu moduulissa.

  • Toistettavuus ja alkuperä. Deterministinen CycloneDX SBOM -generaattori (scripts/gen-sbom.sh) ja SLSA-rakennusalkuperätodistus julkaisubinäärille ja SBOM:lle; julkaisutyökaluketju on kiinnitetty vastaamaan CI:tä. Determinismitakuut, alustojen välinen libm-varaus ja golden-kiinnitystapa on dokumentoitu tiedostossa docs/REPRODUCIBILITY.md.

  • Ominaisuuspohjaiset ja fuzz-testit (tests/property.rs). Deterministiset satunnaistetut testit (ei uutta riippuvuutta) varmistavat invariantteja tuhansilla syötteillä: TLE- ja skenaariojäsentimet eivät koskaan panikoi roskasta, ei-ASCII:sta, mutatoidusta tai katkaistusta syötteestä; TimeCfg::validate ei koskaan panikoi NaN/inf/negatiivisilla ruudukoilla; TLE-tarkistussumma on johdonmukainen ja vain sarakkeen 69; geodeettinen↔ECEF-edestakaisajot ja TEME→ECEF-kierto säilyttävät normin koko maapallolla ja laajalla korkeuskaistalla.

Muutettu#

  • Golden-testit kiinnittävät laatumittarit kenttä kentältä neljälle viiteskenaariolle (toleranssilla, joka absorboi alustojen välisen libm-häilynnän), korvaten aiemmat vain epäyhtälöitä tarkistaneet testit, joten hiljainen numeerinen regressio havaitaan heti.
  • schema_version tulosartefakteissa nostettu arvosta 0.1 arvoon 0.7 (se oli jäädytetty moottorin edetessä).
  • cargo-deny nyt kieltää (ei vain varoita) vedetyt (yanked) riippuvuudet.
  • Uusi dokumentaatio: CAPABILITY.md (rehellinen rajauskartta), SCHEMA.md (tuloskenttien viite), INTEGRITY.md, QUANTUM-MODELS.md, REAL_TLE_GUIDE.md. CI-vartija epäonnistuu, jos README:n versiomerkki ajautuu eroon tiedostosta Cargo.toml.

0.7.0 - 2026-06-02#

Lisätty#

  • SGP4/SDP4-ratapropagointi. Täysi, riippuvuudeton toteutus standardista yksinkertaistettujen perturbaatioiden propagaattorista: lähellä Maata toimiva SGP4 yhdessä syvän avaruuden SDP4-laajennuksen kanssa (kuu-aurinko-sekulaari- ja jaksolliset perturbaatiot sekä 12 h / 24 h geopotentiaaliresonanssi). Se on validoitu virallisia AIAA 2006-6753 (”Revisiting Spacetrack Report #3”) -varmennusvektoreita vasten: kaikki 666 viitetilaa lähellä Maata, syvässä avaruudessa, resonanssi- ja virhekooditapauksissa vastaavat pahimman tapauksen paikkavirheellä noin 4 mm. Tämä on malli, jota vasten kaksirivielementtijoukot on määritelty, joten se edustaa todellisia satelliittitähdistöjä, erityisesti ~12 h GNSS-ratoja, jotka ovat syvää avaruutta ja resonanssisia ja joita aiempi kahden kappaleen + J2-sekulaarimalli ei pysty kuvaamaan.
  • Täysinä kaksirivielementtijoukkoina (rivi 1 + rivi 2) annettu satelliittitähdistö propagoidaan nyt SGP4/SDP4:llä; vain rivin 2 elementteinä annettu satelliittitähdistö säilyttää analyyttisen Keplerin kahden kappaleen propagoinnin muuttumattomana. Kaksi muotoa voi sekoittaa yhdessä lohkossa. Uusi orbit-sgp4-gps.toml-viiteskenaario (GPS:n kaltainen MEO-satelliittitähdistö todellisessa kaksirivimuodossa, propagoitu SGP4:llä): lisää nykyinen Celestrakin ”gps-ops”-joukko tutkiaksesi elävää satelliittitähdistöä.

0.6.0 - 2026-06-02#

Lisätty#

  • Aktiivinen harhautushyökkäyksen demonstraattori. Uusi spoof-skenaariolaji injektoi nousevan väärän aikaharhautuksen ja ajaa kunkin kellon kelloavusteisen eheysvalvojan, raportoiden havaitaanko harhautus ja milloin, ja yltääkö se operatiiviseen spesifikaatioon havaitsematta; tämä muuttaa Security-laatumittarin konkreettiseksi hyökkäys/puolustus-demonstraatioksi. Uusi spoof-attack.toml-viiteskenaario.
  • Usean satelliittitähdistön saatavuus. Ratascenario voi yhdistää useita satelliittitähdistöjä ([[constellations]]-lista ensisijaisen [constellation]:n rinnalla) usean GNSS:n saatavuutta ja tarkkuuden heikkenemiskerrointa (DOP) varten, esim. GPS plus Galileo. Uusi orbit-multignss.toml-viiteskenaario.

0.5.0 - 2026-06-02#

Lisätty#

  • HTML-tulostekorttiraportti. Jokainen ajo tuottaa nyt myös omavaraisen, brändätyn HTML-tulostekortin: yhden rivin yhteenvedon, kaavion (upotettu inerttinä data-URI-kuvana) ja koko JSONin, jonka CLI kirjoittaa JSONin ja SVG:n rinnalle. Jaettava yhden tiedoston artefakti tutkimustoimitukselle tai liitteelle.
  • Yhteinen anturifuusioestimaattori. Uusi fusion-skenaariolaji ajaa yhtä rekursiivista Kalman-suodatinta navigointiratkaisuna: se fuusioi kellotilan [phase, frequency] ja paikkatilan [position, velocity], kuritettuna GNSS:llä (oppii taajuusoffsetin ja nopeuden) ja optisen ajansiirron avustamana katkon aikana, sen sijaan että yhdistäisi riippumattomia ennustajia. Se raportoi fuusioidun ajoitus-/paikka-holdoverin ja yhteiskovarianssin eheyden. Uusi fusion-pnt.toml-viiteskenaario.
  • Täydempi IMU-kohinamalli. Kiihtyvyysmittari mallintaa nyt jäljellä olevat Allan-varianssitermit vakioharhan ja nopeuden satunnaiskävelyn lisäksi: harhan epästabiilius (1/f-flicker-lattia standardilla Allanin harhan epästabiiliuskertoimella, käyttäen uudelleen kellon flicker-synteesiä) ja kiihtyvyyden satunnaiskävely. Uudet valinnaiset inertiaaliskenaarion kentät bias_instability ja q_aa; GNSS-uudelleenkiinnitys kalibroi jäännösharhan ajautuman uudelleen.
  • Todellinen satelliittitähdistön geometria TLE:istä. Satelliittitähdistö voidaan antaa kaksirivielementtijoukkojen lohkona (standardi NORAD/Celestrak-muoto) kentän tle kautta, jolloin saatavuus ja tarkkuuden heikkenemiskerroin käyttävät todellisen satelliittitähdistön julkaistua geometriaa synteettisen Walker-kuvion sijaan. Moottori lukee kunkin TLE:n keskimääräiset Keplerin elementit ja propagoi ne kahden kappaleen mallilla, ei SGP4:llä, mikä on kelvollista yhteisestä epookista lähtevälle tilannekuvatutkimukselle. Uusi orbit-real-tle.toml-viiteskenaario.

0.4.0 - 2026-06-02#

Lisätty#

  • Kauppatutkimuksen parametripyyhkäisyt. Uusi sweep-skenaariolaji vaihtelee yhtä parametria (threshold_ns, duration_s, quantum_q_wf tai classical_q_wf) lineaarisella tai logaritmisella alueella ja tallentaa valitun laatumittarin jokaisessa pisteessä molemmille kelloille, tuottaen kaavion ”how does holdover scale with clock stability?”, jota suunnittelukauppa tarvitsee. Uusi sweep-clock-stability.toml-viiteskenaario.
  • Monte Carlo -luottamuskaistat. Kelloholdover-skenaario voi ajaa monta toteutumaa (uusi valinnainen kenttä runs): kukin laatumittari raportoidaan silloin keskiarvona ja 5.–95. persentiilin hajontana, ja kaavio varjostaa 5–95 %:n virhekotelon mediaanin ympärille kullekin kellolle. Yksittäinen ajo on edelleen oletus. Uusi clock-ensemble.toml-viiteskenaario.
  • Eksentriset radat ja J2-ajautuma. Ratatyyppi on nyt täysi Keplerin rata (isoakselin puolikas, eksentrisyys, inklinaatio, RAAN, perigeumin argumentti, keskianomalia), propagoituna Keplerin yhtälön ratkaisulla, valinnaisella sekulaarisella J2-solmun regressiolla ja apsidien prekessiolla. Uudet valinnaiset skenaariokentät eccentricity, argp_deg ja j2 sekä viiteskenaario orbit-molniya.toml (12 h erittäin eksentrinen kriittisesti kalteva käyttäjä). Ympyräradat säilyttävät alkuperäisen suljetun muodon polun bitti bitiltä.
  • Hybridi- (yhdistetty PNT) paketti raportoi nyt Integrity- ja Security-mittarit, joten kaikki neljä pakettia kattavat operatiivisten laatumittarien koko joukon. Integrity on ajoituskanavan suojausrajan sisällä pysymisen osuus Kalman-estimaattorilta, joka on kuritettu totuuteen GNSS:n ollessa nominaali ja ankkuroitu uudelleen (löyhemmin) jokaisessa optisessa uudelleensynkronoinnissa; sen raja sisältää linkin mittauskohinalattian, joten linkkiä paljon parempi kello pisteytetään toimitetun ratkaisun todellista kohinaa vasten. Security on kelloavusteinen harhautuksen havaitsemispistemäärä ajoitusspesifikaatiota vasten.

Muutettu#

  • Julkaisuhuomautukset tuotetaan nyt tunnisteen kuratoidusta CHANGELOG-osiosta (scripts/changelog-extract.sh), joten jokainen GitHub-julkaisu korostaa, mikä muuttui, sen sijaan että listaisi raakoja commiteja.

0.3.0 - 2026-06-02#

Lisätty#

  • Security-laatumittari (aiemmin täyttämätön): kelloavusteinen harhautuksen havaitsemispistemäärä kelloholdover- ja ratapaketeille. Se mallintaa eheysvalvojan, joka ristiintarkistaa GNSS:stä johdetun ajan kellon omaa liitoennustetta vasten koherentin ikkunan yli; havaitsemislattia yhdistää keskiarvoistetun mittauskohinan ja kellon liitoepävarmuuden, joten hiljaisempi kello havaitsee pienempiä, hitaampia aikaharhautuksia. Pistemäärä raportoidaan välillä [0, 1] suhteessa ajoitusspesifikaatioon, mikä täydentää kuuden operatiivisen laatumittarin joukon.
  • Geometriasta johdettu paikkatarkkuus ratapaketille: näkyviin satelliitteihin johtavasta näkölinjageometriasta se muodostaa suunnittelumatriisin ja sen kovarianssitekijän Q = (HᵀH)⁻¹, tuottaen tarkkuuden heikkenemiskertoimet (GDOP/PDOP/HDOP/VDOP/TDOP). Paikkatarkkuus on paikan DOP skaalattuna asetettavalla käyttäjän ekvivalenttietäisyysvirheellä (uusi valinnainen skenaariokenttä sigma_uere_m). Ratatulos kantaa nyt geometriayhteenvedon (ratkaisun saaneiden näytteiden osuus, paras ja mediaani PDOP sekä paikkasigma).
  • Selaimen sisäinen leikkikenttä (web/), joka ajaa moottoria asiakaspuolella WebAssemblynä: valitse viiteskenaario tai muokkaa TOMLia, aja se ja katso yhteenveto, kaavio ja koko JSON, mitään lähettämättä. Työnkulku pages rakentaa ja julkaisee sen GitHub Pagesiin, ja uusi WebAssembly-vienti summary tukee näyttöä.
  • Nimetyt y-akselit SVG-kaavioissa: ruudukkoviivat, numeeriset asteikkomerkinnät ja yksikköakselin otsikko (jaetun apufunktion chart kautta), jotta suuruusluokat ovat luettavissa.
  • Pakettien julkaisutyönkulku (publish) crates.io:lle, PyPI:lle ja npm:lle, kukin rajattuna rekisterinsä tunnisteeseen ja käynnistettynä julkaistulla julkaisulla.

0.2.0 - 2026-06-02#

Lisätty#

  • Flicker (1/f) FM -lattia kellovirhemallille, syntetisoitu logaritmisesti jaettujen Ornstein–Uhlenbeck-prosessien summana ja kalibroitu niin, että tasainen Allanin poikkeaman lattia on asetettavalla tasolla. Oletuksena pois päältä; otetaan käyttöön kellokohtaisesti valinnaisella skenaariokentällä flicker_floor.
  • Gyrokanava inertiamalliin: jäännösgyroharha ja kulman satunnaiskävely ajavat asenne- (kallistus-) virhettä, joka kytkee gravitaation vaakasuuntaiseen ominaisvoimavirheeseen, mikä on strapdown-virheen kasvun hallitseva mekanismi. Oletuksena pois päältä; otetaan käyttöön anturikohtaisesti valinnaisilla kentillä gyro_bias ja q_arw.
  • Kahden tilan (vaihe, taajuus) Kalman-kelloestimaattori tarkalla van Loanin prosessikohinan diskretoinnilla. Liito tunnetusta tilasta toistaa analyyttisen holdover-virheen kasvun (q_wf*T + q_rw*T^3/3) täsmälleen, ja suodatin tuottaa lisäksi online-1-sigma-epävarmuusrajan.
  • Kelloajo raportoi nyt Integrity-laatumittarin (aiemmin täyttämätön): katkonäytteiden osuus, joiden virhe pysyy suodattimen 3-sigma-suojausrajan sisällä, esitettynä JSON-tuloksessa ja CLI-yhteenvedossa.
  • Geometriasta johdettu GNSS-saatavuus: ympyräradan propagointi, Walker-delta-satelliittitähdistögeneraattori ja näkölinjanäkyvyys (Maan peitto + korkeuskulmamaski) tuottavat saatavuusaikajanan todellisesta ratageometriasta. Uusi orbit-skenaariolaji ja viiteskenaario orbit-gnss-challenged.toml (GNSS-kuoren sisällä oleva avaruusalus katkonaisella peitolla).
  • Valinnainen Python-laajennus (PyO3, abi3), joka paljastaa run, run_full ja version, paketoitu maturinilla (pyproject.toml) ja rakennettu Linuxille, macOS:lle ja Windowsille julkaisutunnisteen wheels-työnkululla. Sidonta on ominaisuusrajattu, valinnainen riippuvuus: oletusrakennus, testit ja riippuvuusauditointiportti eivät muutu.
  • Valinnainen WebAssembly-moduuli (wasm-bindgen), joka paljastaa run, chart_svg ja version, rakennettu wasm-packilla ominaisuuden wasm alla; getrandom on kohderajattu käyttämään selaimen entropialähdettä kohteessa wasm32.
  • Jaettu api::run_toml-jako, jota CLI ja molemmat sidonnat käyttävät, jotta komentorivi ja sidonnat eivät pääse ajautumaan erilleen.

Muutettu#

  • Holdover-pisteytys on nyt segmenttitietoinen: katkojen aikajanat jaetaan yhtenäisiin segmentteihin GNSS:n uudelleenhankinnassa, ja raportoitu holdover on niiden pahimman tapauksen (lyhyin) liito. Yhden katkon skenaariot eivät muutu. Koskee kello-, inertia- ja hybridipisteyttäjiä.
  • Inertiamallin raportoitu kind on nyt inertial (oli accelerometer), mikä heijastaa yhdistettyjä kiihtyvyysmittari- ja gyrokanavia.

0.1.0 - 2026-06-01#

Ensimmäinen julkaisu.

Lisätty#

  • Deterministinen simulaatiomoottori hybridille kvantti/klassinen PNT:lle: yhteinen virhemallirajapinta, deklaratiiviset GNSS-saatavuusskenaariot, holdover- / merenkulkulaskentaestimaattorit ja laatumittaripisteytys standardeja operatiivisia PNT-kriteerejä vasten. Tulokset ovat toistettavissa muodosta scenario + seed + engine version (versioitu, itseään kuvaava JSON skenaarion tiivisteellä) ja renderöidään SVG-kaavioina. CLI jakaa skenaariot lajin kind mukaan.
  • Neljä anturipakettia, kukin kalibroitu julkaistuun dataan ja validoitu standardisuhdetta vasten:
    • Kellon holdover — valkoinen taajuusmodulaatio (FM), satunnaiskulku-FM ja lineaarinen ikääntyminen; validoitu limittäisellä Allanin poikkeamalla (Riley, NIST SP 1065). Siruskaalan atomikello vs. strontiumoptinen hilakello.
    • Inertiapaikannus (dead-reckoning) — jäännösharha ja nopeuden satunnaiskulku, kaksinkertaisesti integroituna paikkavirheeksi; validoitu Grovesin virheenkasvusuhteita vastaan. Kylmäatomi- vs. navigointiluokan kiihtyvyysanturi.
    • Ajansiirto — optisen ja RF-linkin ajoitusvärinä → synkronoinnin toistotarkkuus → yksisuuntainen etäisyysmittaus.
    • Hybridifuusio (huipputapaus) — yhdistetty PNT-kokonaisuus, jonka on pidettävä sekä ajoitus että paikka, valinnaisella optisella satelliittien välisellä ajansiirrolla toteutetulla kelloavustuksella.
  • Yksi viitattu viiteskenaario per paketti kansiossa scenarios/, ja jokaisen numeerisen parametrin mukana on vertaisarvioitu lähdetieto (provenance).
  • Toistettavuuden ja repositorion hygienian suojat; CI (muotoilu, clippy, testit, suojat, MSRV) ja tagilla lukittu julkaisuputki, joka ajaa kaikki tarkistukset uudelleen.
  • Dokumentaatio: README arkkitehtuurikaavioineen, validointitilaraportti, osallistumisopas, tietoturvakäytäntö ja käytösohje; Apache-2.0-lisenssi; issue- ja PR-mallit sekä Dependabot-määritykset.
  • Toimittajariippumaton kauttaaltaan; vertaisarvioidut tieteelliset ja metrologiset lähdeviitteet säilytetty.
  • Apache-2.0-lisenssin hygienia: SPDX-otsikot kaikissa lähteissä, NOTICE tavaramerkkitiedoin, Developer Certificate of Origin (DCO) -allekirjoitus (sign-off) kontribuutioille sekä riippuvuuksien lisenssien ja tietoturvatiedotteiden valvonta työkalulla cargo-deny CI:ssä.
  • Open core -asemointi (README): ilmainen Apache-2.0-moottori sekä saatavilla oleva kaupallinen tuki, integrointi ja suljetut laajennukset, joita tarjoaa Ashforde OÜ — rahoitus tulee palveluista, ei lisenssimaksuista.
  • CITATION.cff, jotta ohjelmistoon voi viitata.