Maskinoversettelse, ikke gjennomgått av en morsmålsbruker. Engelsk er referansen.

ProsjektRediger på GitHubKilde: CHANGELOG.md

Endringslogg

Alle merkbare endringer i Kshana er dokumentert her.

Formatet bygger på Keep a Changelog, og dette prosjektet følger Semantic Versioning. Så lenge prosjektet er før 1.0, kan det offentlige skjemaet for scenarioer og resultater fortsatt endres; brytende endringer er uttrykkelig varslet.

Ikke utgitt#

[0.40.0] - 2026-10-29#

0,40 legger til oppdragstråden i Artemis-klassen og månesegmentet, en evidensetikett på hver figur og tabell en kjøring skriver, innlesing og tilpasning av målte klokker, en kontroll av innsendinger fra datapartnere, en estimert senderregion fra ADS-B- eller AIS-rapporter, den nye benchmark-kampanjen for 0,40, og kommandolinjen, rapportene og Studio på sytten språk ved siden av engelsk (maskindokumenter forblir engelske). Verifikasjonsmatrisen vokser fra 388 til 401 rader: 176 VALIDATED (uendret), 221 MODELLED (var 208) og 4 PARTNER. Ingen rad ble oppgradert til VALIDATED. Scenariotypene vokser fra 87 til 92. Hver terskel en forhåndsregistrert sammenligning bommet på, er oppgitt nedenfor og forblir festet; ingen ble løsnet. Den veiledende erklæringen er uendret: Kshana er veiledende programvare, ikke typegodkjent navigasjonsutstyr og ikke en sertifisering; operatøren er fortsatt ansvarlig.

Kjente begrensninger#

  • Kjøringer på andre språk tar omtrent dobbelt så lang tid, fordi scenarioet kjøres to ganger (én gang på engelsk for maskinfilene, én gang på det valgte språket for personen).
  • Noen Studio-setninger settes sammen av fragmenter og kan mangle artikler i språk som har grammatisk kjønn.
  • Oversettelsene er maskinoversettelser som ingen morsmålsbruker har gjennomgått; engelsk er referansen.

Lagt til#

  • Sytten språk ved siden av engelsk for motorens tekst som mennesker leser, og for nettstedet og Studio: nl, pl, pt-BR, pt-PT, fi, sv, da, nb, cs, uk, ru, de, fr, es, et, ja, zh-Hans (--lang, KSHANA_LANG, språkvariablene; lang i kall mot biblioteket, Python, WebAssembly og MCP). Meldinger og feil på kommandolinjen, kjøringsoppsummeringer, diagramtekst, report.html, typebeskrivelser og de veiledende erklæringene er oversatt; maskindokumenter (JSON, CSV, feilkoder, verifikasjonsmatrisen) forblir engelske, og en kjøring på et annet språk kjører scenarioet én gang på engelsk for maskinfilene og én gang på det valgte språket for personen (docs/i18n.md). Oversettelsene er maskinoversettelser, ikke gjennomgått av morsmålsbrukere; engelsk er referansen; hvert språks REVIEW.md lister hva en som gjennomgår bør kontrollere først, og nettsidene har en merknad som sier dette. Utfallsord, evidensnivåer og omfanget av den veiledende erklæringen («ikke typegodkjent», «ikke en sertifisering», «operatøren er fortsatt ansvarlig») beholdes på alle språk.
  • kshana interference-map locate: en estimert senderregion fra ADS-B- eller AIS-rapporter. En posterior over hvor en kilde til forringede posisjonsrapporter kan befinne seg (radiosiktlinje på en 4/3-jordradius, senderantennehøyde og effekt marginalisert, berørte fly som trekker og uberørte fly med siktlinje som presser tilbake), skrevet som regioner ved 50, 90 og 95 %, et tyngdepunkt med usikkerhetsellipsen sin (aldri et bart punkt), økter i tid (start, slutt, varighet, berørt areal, distinkte fly over publiseringsminimum), en døgnprofil og timer per dag, med valgfri fusjon av en TDOA-posisjonsbestemmelse fra geolocation. Utdata: GeoJSON, JSON-sammendrag, CSV med økter og en SVG-figur, hver med lisens, kildeangivelse, metode-id, forutsetninger, begrensninger og sin evidensetikett. Bibliotek interference_map::api::emitter_regions_from_*, Python og WebAssembly interference_emitter_regions. MODELLED (registerrad VM-bc70cb57; matrisen er nå 401 rader, 176 VALIDATED, 221 MODELLED, 4 PARTNER); kalibrert bare på syntetiske data, med sammenligningen mot senderstedene fra Jammertest 2025 forhåndsregistrert og kjørt én gang: ADS-B og AIS begge NOT ASSESSABLE (for få planlagte økter i de åpne dataene), så raden forblir MODELLED (docs/emitter-region/RESULTS.md). Nøytral ordlyd, bare aggregert; publisering av senderregioner i det offentlige observatoriet forblir av. Et syntetisk eksempel finnes i examples/emitter-region/ (docs/INTERFERENCE-MAP.md).
  • Målte klokkelogger. src/clock_log.rs leser en målt klokkelogg inn i én faseserie: åtte formater (RINEX clock, TimeLab, TICC, linuxptp ptp4l, phc2sys og ts2phc, chrony tracking og statistikk), hvert en dokumentert delmengde; alt utenfor den avvises med en feil som navngir det som ble funnet. Den brukes av telecom-timing ([series.clock_log]) og klokketypen ([clock_log], som legger til en blokk measured med SHA-256 for loggen og de overlappende ADEV, TDEV og MTIE), med det medfølgende scenarioet clock-measured-log (docs/CLOCK-LOG-FORMATS.md). Sammenlignet med allantools på virkelige offentlige data mot forhåndsregistrerte terskler: første kjøring bommet på B1 (5 av 11 tilfeller, alle TICC-tidsstempler lagret som f64), B2, B3 (7 av 24 tilfeller) og B4 (headerversjonen ble ikke kontrollert); etter rettingene er B1, B3 og B4 nådd, og B2 er nådd bortsett fra ett MTIE-par, som er festet og ikke er en motorfeil (allantools 2024,6 fjerner middelfrekvensen før det integrerer; mot dets fasemodus-MTIE stemmer motoren innenfor 1e-10). Raden forblir MODELLED (tests/fixtures/clock_log_real/RESULTS.md).
  • En holdover drevet av en tilpasset målt serie: [clock_fit] i klokketypen tilpasser støyen i en målt serie og driver holdoveren fra den (src/clock_fit.rs, medfølgende scenario clock-fitted-log). Forhåndsregistrert sammenligning: F1(b), F3 og F4 nådd; F1(a) (gjenfinning av den registrerte random-walk FM) NOT MET på C3-postene (ikke identifiserbar ved konstruksjon) og på to av tre C4-poster (random-walk FM absorbert av flicker FM og drift); F2 (støyidentifikasjon mot allantools) nådd på elleve av tolv poster og D3 og NOT MET på D2 som registrert (nådd på like vilkår). Alle bom er festet (tests/clock_fit_known_noise.rs); blokken fitted og holdoveren den driver forblir MODELLED (tests/fixtures/clock_fit/RESULTS.md).
  • Den nye benchmark-kampanjen for 0,40, forhåndsregistrert med eierens underskrift før noen kjøring: A3 (EXPLORATORY, AUC fra bootstrap med mappeklynger for agc_k_sigma, 2,5 % kvantil 0,8502 mot 0,80), D3 (EXPLORATORY, tre av fem detektorer overskrider et optimismegap på 0,05 ved skala 0,25), R3 (AUC 1,0) og R4 (P_fa 0,0, P_d 1,0): alle MET, alle MODELLED. A2, D1 og R1 er urørt og forblir NOT MET; ingenting her lukker dem (xval/bench/RESULTS-0.40.md, Bench).
  • kshana partner check <submission.toml>: kontrollerer formatet og metadataene i en innsending fra en datapartner (kshana.partner-submission/1: enhet, datafil og SHA-256, hvordan den ble tatt, radene som er MODELLED og som den tilbys mot, lisens, erklæringer) og leser dataene med motorens egne lesere for klokkelogg eller IMU. Den skårer ingenting og validerer ingenting. Et syntetisk eksempel finnes i examples/partner-submission/.
  • docs/PARTNER-DATA.md: hvilke registerrader som er MODELLED målte data kan oppgradere, hvilke formater som godtas, hvordan en innsending kontrolleres, skåres mot en forhåndsregistrert terskel og krediteres, og hva PARTNER og VALIDATED hver betyr; et utkast til et oppsøkende notat for eieren i docs/drafts/PARTNER-OUTREACH.md (ingenting sendes).
  • Andre kampanjer for tersklene som ikke ble nådd for gnss-ssv og lunar-infrastructure, kjørt som forhåndsregistrert (xval/gnss-ssv/PREREGISTRATION-v2.md, xval/lunar-infra/PREREGISTRATION-v2.md; underskrevet før noen kjøring). Hvert opprinnelig bom forblir NOT MET og festet. gnss-ssv: kontrollen gjengir kjøring 1 celle for celle; fem ablasjoner med én lesing hver bringer 2 av de 78 bommede cellene innenfor toleranse (EXPLORATORY, ingen terskel); den nye terskelen S7b (en sendeform med avrulling og gulv tilpasset på Classic IIR-paneler) er NOT MET på IIR-M-panelene ved 3,83 til 3,95 dB mot 3 dB; kampanjen med tilbakeholdt publisert mottak ble ikke kjørt (ingen kilde festet) (xval/gnss-ssv/RESULTS-v2.md). lunar-infrastructure: nye terskler C3a, C3b (en deteksjonsgrense på omtrent 3e-9 m/s2), Q3a, Q3b (en nøyaktig normal CDF fjerner forskjellen på 1.7e-6) og G3'' er nådd som egne terskler, og G3' med illustrative priorer er nådd og merket EXPLORATORY (xval/lunar-infra/RESULTS-v2.md). Alt forblir MODELLED. Nye offentlige elementer: kshana::lambda::{erfc_accurate, normal_cdf_accurate, bootstrap_success_rate_accurate}.
  • En evidensetikett på hver figur og tabell en kjøring skriver. Resultat-JSON har en nøkkel evidence, diagram-SVG-en et metadataelement og en linje under diagrammet, og CSV-tabellen kommentarlinjer # evidence:: nivået (VALIDATED, MODELLED eller PARTNER, det svakeste av radene) og id-ene til radene i verifikasjonsmatrisen kjøringen hviler på. Rader og statuser leses fra matrisen, ikke skrives inn; id-ene er stabile (VM- og åtte heksadesimale sifre, en ny kolonne ID i docs/VERIFICATION-MATRIX.md, en fast liste i tests/fixtures/evidence_ids.txt). Også på receiver-trust, jammertest score, iq acquire/sweep/track/monitor, rapporten om ruteeksponering og, inne i den signerte config.json, hver bevispakke (config_version 1,1; kshana evidence verify rapporterer nivået; pakker laget før 0,40 verifiseres uendret). tests/evidence_labels_doc_sync.rs feiler hvis en figur ikke har noen etikett, en etikett er uenig med matrisen eller en ny filskriver verken er merket eller oppført med en begrunnelse. Utdata som ikke bærer noen er oppført i docs/SURFACES.md. De tre README-demodiagrammene ble tegnet på nytt med etiketten (å fjerne den gjenoppretter de gamle bytene; docs/revisions/STUDIO15-evidence-label-0.40.md). Ingen påstand ble endret.
  • Scenariotypen mission-thread (scenarios/mission-thread-artemis-class.toml, docs/MISSION-THREAD.md): feilbudsjettet for navigasjon og tidssynkronisering for en kjede av faser fra oppskyting til gjeninntreden, hvert tall MODELLED og hver inndata oppgitt. Åtte fasetyper: launch-ascent, leo-rendezvous (relativ Clohessy-Wiltshire-kovarians over sensoretapper, dokkingvindu), tli-and-cruise (Cowell-propagering med en tilstandsovergangsmatrise med endelig differanse, brenningsfeil, oppdateringer fra gnss-ssv og fra bakkesporing, Månen fra et valgfritt DE440-kjerneutsnitt), entry (sigma for banevinkel, korridorsannsynlighet, maksimal retardasjon ved korridorkantene, landingsfotavtrykk) og de fire lunare typene. Overleveringsregler (carry, inflate, reacquire), konverteringer av referansesystem og tidsskala som egne budsjettrader, et valgfritt bakkenettverksoverlegg som setter hver fases sporingsdrift, marginen mot oppgitte krav og det svakeste leddet. Eksemplet følger sekvensen i en offentlig lysbildeserie fra NASA om operasjonskonseptet med ILLUSTRATIVE tall: et ende-til-ende-eksempel i Artemis-klassen over 11 faser, jord- og månesegmenter. Den cislunare propageringen ble sammenlignet med den offentlige Artemis I-banen over en bue på 72 t mot en terskel fastsatt i xval/mission-thread/PREREGISTRATION.md før kjøringen: NOT MET (45,3 km og 0,25 m/s mot 5 km og 0,05 m/s). Diagnostikken plasserer bommen i fem små impulsive hendelser i referansen; mellom dem gjengir kraftmodellen timestilstandene med en median på 0,4 m. Raden forblir MODELLED (xval/mission-thread/RESULTS.md).
  • Månesegmentet i oppdragstråden i Artemis-klassen: fire scenariotyper, hver også en fasetype i grensesnittet for mission-thread (src/mission_thread/lunar/), alle MODELLED.
    • lunar-orbit-rendezvous: relativ navigasjon til dokking i en sirkulær polar bane på 100 km eller en elliptisk polar bane på 100 km ganger 3000 km (scenarios/lunar-orbit-rendezvous.toml, ...-elfo.toml). Et batch-estimat med Gauss-Newton over buen fusjonerer en absolutt posisjonsbestemmelse per fartøy fra et illustrativt relésett i LCNS-klassen, en vedvarende feil i signalet i rommet (felles for begge fartøyer og uavhengig) og en avstand over krysslenken, under månekraftmodellen i crate-en. Den rapporterer den relative posisjonen og hastigheten i målets lokale akser, tilgjengeligheten av posisjonsbestemmelser, den gjennomsnittlige normaliserte estimeringsfeilen i kvadrat mot forventet verdi, kostnaden ved å ignorere gravitasjonsharmonikkene, modellene for terminale relative sensorer ved siden av tallet med bare signaler, og 6x6-kovariansen som føres videre.
    • lunar-descent: budsjettet for landingsspredning på et sted nær sørpolen (scenarios/lunar-descent.toml; lunar-descent-lola.toml leser LOLA DEM fra en utsjekking): en inertiell feilmodell med fem tilstander per akse, en AFS-posisjonsbestemmelse (alene eller differensiell, med korreksjonslenkens residual fra lunar-differential-pnt), en terrengrelativ posisjonsbestemmelse (matcheren fra terrain-nav på sitt syntetiske relieff, eller Cramer-Rao-grensen for matching mot LOLA DEM) og månetid gjennom fartøyets klokke (lunar-time-offset). Den rapporterer 3-sigma-landingsellipsen, hver kombinasjon av hjelpemidler og en Monte Carlo-kalibrering av ellipsen.
    • lunar-surface: tilgjengelighet for posisjonering og tidssynkronisering etter sted og årstid (scenarios/lunar-surface.toml; lunar-surface-terrain.toml legger til den strålemarsjerte LOLA-horisonten): posisjoneringstallet for ett sted er likt tallet for moonlight-service-volume bit for bit; synligheten til Jorden og Solen fra de analytiske efemeridene er det som beveger seg med årstiden.
    • lunar-ascent: oppstigningen til rendezvous-banen og posisjons-hastighetskovariansen ført tilbake til bane (scenarios/lunar-ascent.toml), med spredningen ved motoravstengning rapportert ved siden av.
    • docs/MISSION-THREAD-LUNAR.md; forhåndsregistreringen, endringene i den og hvert resultat, bom inkludert, i xval/mission-thread-lunar/.

Evidens#

  • Forhåndsregistrert i xval/mission-thread-lunar/PREREGISTRATION.md før noen kjøring, med seks daterte endringer (hver gjort før dataene ble hentet, unntatt endring 6, som retter en regnefeil i et tilstandsantall etter hentingen og før noe A2-resultat; hver endring er oppgitt i filen). Ingen terskel ble løsnet.
  • A1 (propagatoren mot LRO-banen rekonstruert fra JPL Horizons, 24 t): MET, en største 3D-forskjell på 33 m mot en terskel på 500 m og en radial RMS-forskjell på 2,4 m mot 60 m.
  • A2 (den samme propagatoren mot CAPSTONE NRHO over én omdreining på 6.5 dager): NOT MET, en forskjell i sluttposisjon på 136,8 km mot en terskel på 25 km og en forskjell i oskulerende periapsisradius på 28,4 km mot 10 km. Raden forblir MODELLED, og bommen er festet av tests/mission_thread_lunar_oracles.rs.
  • B1 (rendezvous-estimatets konsistens med sin egen modell) er MET på den fjerde estimatorutformingen, gjennomsnittlig NEES 5,85 til 5,93 mot et bånd på [5,2, 6,8]; de tre tidligere utformingene, et utvidet Kalman-filter i tre varianter, bommet på det. En femte endring, gjort etter at det medfølgende scenarioet på 2 t viste seg å sende 4 av 50 forsøk inn i et lokalt minimum (gjennomsnittlig NEES 1e9), kjører Gauss-Newton-tilpasningen på en voksende bue med steghalvering; B1 er uendret av den, og de medfølgende scenarioene gir 6,51 og 6,33. Historikken står i xval/mission-thread-lunar/RESULTS.md.
  • Ingenting her er VALIDATED: radene for uavhengig referanse tester den delte propagatoren, ikke et navigasjonsfilter, signal eller budsjett.

[0.39.0] - 2026-10-22#

Ingen nye funksjoner: én rettelse i kommandolinjen, avhengighetsoppdateringer i verktøyene for kryssvalidering og dokumentasjon. Motorens resultater er uendret fra 0.38.0.

Rettet#

  • Kommandolinjen avslutter stille med status 141 når standardutdata lukkes (kshana kinds | head), i stedet for å panikke med "failed printing to stdout: Broken pipe". 141 er 128 pluss SIGPIPE, statusen et skall rapporterer for yes | head. Bare en lukket pipe håndteres: en full disk eller en annen skrivefeil rapporterer seg fortsatt, og en levende strøm som skriver til en lukket socket får fortsatt sin skrivefeil. tests/cli_closed_pipe.rs lukker leseren før programmet starter, så den første skrivingen feiler i hver kjøring.

Sikkerhet#

Én avhengighetsoppdatering i det leverte biblioteket (den første oppføringen), resten i verktøyene for kryssvalidering (xval/).

  • p256, p384 og p521 0,13 til 0,14 (med elliptic-curve 0.14.3, ecdsa 0.17.0 og crypto-bigint 0.5.5 til 0.7.10; også den direkte avhengigheten crypto-bigint, nå 0,7) utbedrer RUSTSEC-2026-0387, tidsvariasjon i crypto-bigint 0.5.5. Kshana bruker disse crate-ene bare til å verifisere offentlige signaturer (rotnøkkelen for Galileo OSNMA og RFC 3161-tidsstempeltokener) og signerer bare i tester med engangsnøkler, så den praktiske eksponeringen var null; oppgraderingen fjerner varselet uten en ignorer-oppføring. Bibliotekets og MCPs låsefiler flyttes begge; ingen verifiseringsresultater endres (vektortestene for OSNMA og tidsstempler består uendret).
  • Laveste støttede Rust-versjon er nå 1,88 (kreves av rettelsen for RUSTSEC-2026-0387).
  • memmap2 0.9.10 til 0.9.11 (RUSTSEC-2026-0186) i låsfilene for ANISE-kryssjekkene (xval/anise-lunar-od, xval/anise-mars-od); låsfilene synkroniserer også på nytt sti-avhengigheten kshana i repoet.
  • pillow 12.3.0 til 13.0.0 og certifi 2026.7.22 til 2026.10.19 i festingene for miljøet til de uavhengige referansene (xval/oracles/requirements.lock, requirements.frozen.txt): de rettede utgivelsene for åtte pillow-sikkerhetsmeldinger og én certifi-sikkerhetsmelding.

Dokumentasjon#

  • docs/BENCH.md, README-filen og denne filen lister hver kshana-bench-terskel som er NOT MET, slik den er registrert i xval/bench/RESULTS-v2.md: A2 (agc_k_sigma AUC 0,766 mot minst 0,80 på testsplitten), D1 (største gap 0,0301) og oppgave (b) R1 (videreført, ikke kjørt på nytt). Ingen terskel er svekket.
  • Gjennomgang av README for fullstendighet: en innholdsliste; scenariotypene ordnet under familier, hver med en side under docs/kinds/by-kind/ (motorens beskrivelse og felt, inngangene og resultatene av en eksempelkjøring, registerradene og de uavhengige referansene, begrensningene kjøringens rapport oppgir, og diagrammet motoren skriver), et kontaktark per familie, alle indeksert av docs/KINDS.md; hver kommando i docs/COMMANDS.md; hver flate, plugin-kommando, ferdighet og Studio-side i docs/ALL-SURFACES.md; hvert funksjonsområde i docs/CAPABILITY-DOMAINS.md; innebygde Mermaid-diagrammer (systemoversikt, flater, indre sløyfe, mottakertillit, laboratorie-rundtur, Studio, test- og utgivelsesflyt, modulkart, distribusjon). Skrevet av tools/gen_kinds_index.py, tools/gen_readme_blocks.py og tools/gen_figures_038.py; revidert av tools/readme_audit.py; vaktet av tests/readme_completeness_doc_sync.rs, som også låser hver oppførings beskrivelse og felt til motoren.
  • tools/render-diagram-chromium.sh: gjengir et Mermaid-diagram til SVG og PNG på Linux og oppdaterer gjengivelsesregisteret.
  • README: figurene for rombrukere og månen brukte stier relative til docs/, så de ble ikke lastet fra README-filen; én lenke pekte til ../../docs/JAMMERTEST.md.
  • Fjernet to utdaterte, håndkopierte diagramfiler (docs/assets/clock-ensemble-band.svg, sweep-clock-stability.svg) som ingen side brukte og som ikke lenger stemte med motoren; docs/KINDS.md har de gjeldende diagrammene.

[0.38.0] - 2026-10-19#

Lagt til#

  • GNSS utover konstellasjonen (gnss-ssv). En ny scenariotype for romfartøy over, rundt og forbi GNSS-banene (docs/SSV.md): tilgjengelighet for ett og fire signaler, avbruddsvarigheter, C/N0, DOP og hovedlobe mot sidelobe-lenker for GPS, GLONASS, Galileo, BDS, QZSS og NavIC på et skall eller langs LEO-, MEO-, GEO-, HEO- og månetransferbaner; sendemønstre fra hefte, parametriske eller levert av brukeren; en modell for ionosfære, plasmasfære og atmosfære langs randstrålen; en mottakerutforming for svake signaler; et utvidet Kalman-filter om bord med GNSS for HEO og månetransfer; og relativ navigasjon i formasjon. Sammenlignet med ICG Space Service Volume-heftet under en forhåndsregistrering sjekket inn før kjøringen: konstantene for minste utstrålte effekt og månetersklene stemmer, de andre tersklene er ikke nådd under den forhåndsregistrerte lesningen (nesten alle på grunn av heftets inkonsistente GLONASS-strålevinkel), og den parametriske sidelobe-erstatningen gjengir ikke de målte GPS-panelmønstrene. Alt forblir MODELLED (xval/gnss-ssv/RESULTS.md).
  • Månebane og måneoverflate som infrastruktur for navigasjon og geodesi (lunar-infrastructure). En ny scenariotype med fem studier valgt med study (docs/LUNAR-INFRASTRUCTURE.md): konsistens i en banebestemmelse om bord med GNSS fra jorden i en nesten rettlinjet haloform bane mot en uavhengig bakkebestemmelse av avstand og avstandsrate; felles dobbeltdifferensiert bærebølgefase mellom overflatestasjon og orbiter med LAMBDA-fiksering av heltall; Fisher-informasjon for det sjuparametrede månedatumet med og uten avstander mellom orbiter og overflate; innbyrdes forskyvninger mellom teknikkene GNSS, VLBI og laseravstandsmåling mot den lokale koblingen; og følsomhet for h2, k2, l2 og den fysiske librasjonen. MODELLED, med ILLUSTRATIVE inndata: tallbehandlingen er kontrollert mot uavhengige numpy- og scipy-programmer, og ingenting er sammenlignet med en måling av en månestørrelse. Tersklene ble fastsatt i xval/lunar-infra/PREREGISTRATION.md og to opplyste endringer. Tre er NOT MET, og hver er festet av en test som slår fast at terskelen ikke ble nådd: C3 (en injisert kraftfeil oppdages ikke med den forhåndsregistrerte raten), Q3 (den bootstrappede suksessraten avviker fra numpy-referansen med 1.7e-6 mot en terskel på 1e-9, fra LAMBDAs tilnærming til den normale CDF-en), og sporhalvdelen av G3 (å legge til en avstandsfamilie senker ikke alltid sporet til pseudoinversen). Resten er nådd (xval/lunar-infra/RESULTS.md).
  • En sjette artikkel i forskningstabellen. "Cislunar navigation is an observability problem: arc-length thresholds, Gramian conditioning, and the Doppler lever" (arXiv:2610,23871, eess.SP) viser at dilution of precision er udefinert for cislunar sporing med bare avstand, og bruker i stedet observerbarhetsgramianen på fire plane fjerne retrograde baner: bare avstand har rang 2 av 4 i et øyeblikksbilde og trenger en bue på omtrent 2,09 t, avstandsrate (Doppler) gir rang 4 umiddelbart, og samestimering av en stasjon med satellitttilstander og klokker forblir rangmangelfull med én uten en ekstern interferometrisk observabel. Tallene regenereres av typen cislunar-observability (kshana scenarios/cislunar-observability.toml); cislunar-arc-recovery tester terskelen med en uavhengig estimator. Forskningskortet i README-filen, README-filene for crates, npm og PyPI og generatoren bærer den.
  • Den nøytrale dommeren, gjort målbar. kshana jammertest import leser den publiserte NPRA Jammertest-katalogen og sendeplanen som planlagt referanse (katalog-ID-er beholdt), og kshana jammertest score skårer en mottakerlogg mot den per test (deteksjonsforsinkelse, uteblitte alarmer, falske alarmer, tid til gjenoppretting), eventuelt som en signert bevispakke (docs/JAMMERTEST.md). Skåringstersklene ble forhåndsregistrert før noen skåret kjøring (xval/jammertest-score/). På JammerTest-datasettet fra 2024 (hentet, aldri medlevert) sviktet den forhåndsregistrerte regelen om minstemengde data både i den første kjøringen og i revisjonen av datahåndteringen, så ingen terskel kan vurderes og ingenting hevdes; begge kjøringene er registrert og festet. MODELLED: planen er datasettets loggede vinduer, ikke registrerte sendetidspunkter. NMEA-settet fra SimulaMet fra 2025 er ikke tilpasset (ingen lisens oppgitt på siden).
  • Mottakerens egne flagg, ved siden av Kshanas. UBX-NAV-STATUS spoofDetState og UBX-SEC-SIG leses inn i self_report for hver epoke, og sammenligningen receiver_self_report i resultatet setter dem opp mot Kshanas monitorer (begge, bare mottakeren, bare Kshana, ingen av dem); den utløser ingen alarm og endrer ingen score. En Septentrio SBF-leser (PVTGeodetic, MeasEpoch, RFStatus, skrivebeskyttet, på den MIT-lisensierte crate-en sbf-tools) og receiver-trust live --serial (en seriell eller USB NMEA-strøm, skrivebeskyttet; den skriver aldri til en mottaker) kommer i tillegg.
  • Tidssynkronisering og maskinvaresikkerhet (docs/TIMING-HIL.md, docs/HARDWARE-SAFETY.md). Scenariotypen holdover-test skårer en holdover-test av et tidssystem (GNSS fjernet av operatøren, holdover, gjenoppretting) fra en målt tidsfeilregistrering, målt mot ITU-T-maskene fra offentlige tabeller. clock_log leser logger fra linuxptp (ptp4l, phc2sys, ts2phc) og chrony (tracking, statistics). iq scene --format sdrx skriver ION GNSS SDR-metadata, og iq monitor --follow overvåker et SigMF-opptak mens det vokser (kun mottak). compliance-report får NIST IR 8323r1 Foundational PNT Profile (15 parafraserte rader, gir belegg for). En bevispakke kan registrere operatørens lab-attestation i sitt signerte manifest, aldri verifisert; maskinvaretrinnene 0 til 4 og de juridiske merknadene står i HARDWARE-SAFETY.md (venter på juridisk gjennomgang). Det finnes ingen sendevei av noe slag.
  • kshana-bench v1 (kshana bench, bench/SPEC.md, docs/BENCH.md): faste oppgaver, splitter og målinger for GNSS-interferensdeteksjon på mottakerlogger (JammerTest 2024) og IQ, prediksjon av tidsholdover (IGS-klokker) og optimismegapet utenfor fordelingen; splittmanifester med festede hasher og hentingsskript (ingen data medlevert), et forseglet tilbakeholdt datasett med forpliktelse og avsløring, et skjema for resultatfiler og en statisk ledertavleside. Grunnlinjer under terskler forhåndsregistrert i xval/bench/PREREGISTRATION.md: skårerterskler nådd, C1 til C3 nådd, D2 nådd; A2 NOT MET (agc_k_sigma AUC 0,766 mot minst 0,80 på testsplitten), D1 NOT MET (største gap 0,0301) og oppgave (b) R1 NOT MET (videreført, ikke kjørt på nytt), hver festet (xval/bench/RESULTS-v2.md). Hver score er MODELLED. Python bench_score, bench_leaderboard; WebAssembly på samme måte; MCP score_benchmark, render_leaderboard.
  • Interferensobservatorium (kshana interference-map daily, sensitivity, docs/observatory/METHOD.md): en reproduserbar daglig GeoJSON, PNG og hendelsesrapport-JSON med tre tilstander (degradert, ikke degradert, ikke observert), en minste forsinkelse på 24 t, celler på 0,5 grader eller grovere, ingen årsak tilskrevet og OpenSky-data avvist; en følsomhetsstudie av de forhåndsregistrerte parameterne; et baltisk bakkatalog på 30 dager fra adsb.lol.
  • Maskin- og sensorinndata for receiver-trust (docs/MACHINE-INPUTS.md). Nye [log] format-verdier, alle skrivebeskyttede, MODELLED, med selvskrevne fixturer og ingen data medlevert: rtklib-pos (RTKLIB .pos-løsningsfiler), novatel (OEM7 ASCII og binær BESTPOS, RANGE C/No og RXSTATUS; mottakerens jammerflagg blir epokens self_report, satt opp mot Kshanas alarmer av sammenligningen receiver-self-report), rtcm3 (MSM4 og MSM7 C/N0 for GPS, GLONASS, Galileo, SBAS, QZSS, BeiDou og NavIC; oppsett fra de BSD-lisensierte pyrtcm-tabellene, hvis merknad står i NOTICE, ikke fra RTCM-standarden) og gnss-sdr (GNSS-SDR Monitor- og PVT-monitormeldinger som JSON-linjer, videresendt av integrations/gnss-sdr/relay.py).
  • IMU-logger som en andre sensor. [log.imu] (csv eller euroc) integrerer gyroens gir-rate til den headingen monitoren heading-course leser; innebygd på alle flater og båret gjennom bevispakker. kshana imu-fit (Python imu_fit, WebAssembly imu_fit, MCP fit_imu_log, plugin /kshana-fit-imu, en JetBrains-handling) tilpasser akselerometer- og gyroparameterne i scenarioene hybrid og fusion fra en stasjonær logg ved Allan-avvik og skriver ut en tabell [accel_classical] med loggens SHA-256 i opphavet.
  • Integrasjoner: en ROS 2-pakke (integrations/ros2/kshana_trust: NavSatFix og ublox_ubx_msgs inn, tillitstemaer ut; dens ROS-frie bro er testet mot den virkelige motoren, selve noden har ikke kjørt på en levende ROS-graf), en bro til gnss_lib_py (integrations/gnss_lib_py, MIT-avhengighet, valgfri) og et GNSS-SDR-relé.
  • Home Assistant MQTT-eksport for tillitstelemetri: kshana trust-telemetry --print-mqtt og --mqtt-tcp <host:port> (oppdagelsesmeldinger og et JSON-tilstandsdokument; kun publisering, ingen legitimasjon eller TLS), og format = "mqtt" som tekst i Python, WebAssembly og MCP.
  • Sju registerrader som er MODELLED for det ovenstående. Ingenting her er VALIDATED: ingen opptak fra en virkelig mottaker, basestasjon, IMU, GNSS-SDR-kjøring, ROS-graf eller MQTT-megler ble lest.
  • Optisk lenkemargin mot tid. Typen optical-atmosphere tar en valgfri tabell [timeseries] (duration_h, step_s, seed) og skriver da også, per sted, én frøstyrt realisering av den oppgitte stedsmodellen gjennom tid: skyepisoder, en flytende vannsøyle per episode, ett gamma-gamma-scintillasjonssample per steg, og ut fra dem lenkemarginen, sky- og scintillasjonsfadene og lenke-oppe-flagget, med den realiserte tilgjengeligheten, skyandelen, antall avbrudd og lengste avbrudd. MODELLED (ett trekk fra modellen, ikke klimaet; ingen ekstern uavhengig referanse). Uten tabellen er resultatet dokumentet fra 0,37. De to medfølgende optiske scenarioene bærer tabellen (336 t, 600 s, frø 37). Terskler forhåndsregistrert i xval/optical-atmosphere/PREREGISTRATION-timeseries.md før den første kjøringen.
  • Spesifikasjon for testbetingelser og laboratorie-rundturen. kshana.test-conditions/1 er publisert som docs/spec/TEST-CONDITIONS.md med et JSON-skjema, og får recording.kind = "receiver-log". kshana bench-export skriver også <base>.conditions.json. kshana evidence round-trip bygger en signert pakke som knytter sammen scenarioets hash, hashen til de oppgitte betingelsene, mottakerloggens hash og scoren mot de oppgitte hendelsene, og avviser betingelser som ikke stemmer med skåringshendelsene. Gjennomgått eksempel med gps-sdr-sim som bare skriver en fil; avspilling er operatørens ansvar og automatiseres aldri. Python evidence_round_trip, MCP create_round_trip_pack, plugin /kshana-evidence-pack.
  • Standardpakker (kshana standards-pack, standards/): testprofilene i DHS Resilient PNT-rammeverket for nivå 1 til 4, IMO MSC.1/Circ.1575 nøyaktighetsnivåer og integritetsevaluering, og ICAO Doc 9849 vedlegg F monitor, assess og mitigate, hver et sett scenarioer skåret mot terskler fastsatt før kjøringen, med compliance-report-radene de gir belegg for. Terskler som ikke ble nådd er registrert og festet: DHS L4-T1 og de fire IMO-nøyaktighetstestene. Selve Doc 9849 ble ikke lest (betalt); ICAO-pakken følger ICAOs egen presentasjon av RFI Mitigation Plan. compliance-report får en seksjon for standardpakker. Alt MODELLED.
  • LunaNet Augmented Forward Signal (docs/LUNANET-AFS.md): AFS-I Gold- og AFS-Q Weil-koder for PRN 1 til 210, signalene lunanet-afs-i og lunanet-afs-q i kshana iq, SB1 BCH-koden, CRC-24Q og interleaver, og kshana lunanet-afs-check (spec, symbols, generate), festet til LNIS V5 Applicable Document 1 Volume A (LSIS-AFS V1.0, 29 januar 2025). Kodene VALIDATED mot dokumentets trykte tabeller (som det merker TBC); én trykt tertiærkolonne (PRN 147) er sannsynligvis en trykkfeil, og avviket er festet. LDPC-koding av underrammene 2 til 4 er ikke implementert.
  • Kursnotatbøker (notebooks/course/): jamming, spoofing, holdover, integritet, OSNMA og interferenskart, hver med øvelser.
  • EU-US WG-C ARAIM Milestone 3-studie av maksimal URA (xval/araim-m3/, src/bin/gen_araim_m3_study.rs), som erstatter den trukne planen "Table A-3"; MODELLED under oppgitte avvik.
  • Utkast som venter på eierens samtykke under docs/drafts/: JOSS-artikkel, endring av TSC-charteret, prosess for register over uavhengige referanser og et forslag om å dele LICENSES/. Ingenting der er vedtatt.
  • Studio-visninger for funksjonene i 0,38 (kshana.dev/studio/). Bridge-avspilling (to syntetiske kjøringer på én klokke: spor, tillitsscore, satellittene loggen hører og konklusjonen, med mottakerens egne flagg ved siden av Kshanas alarmer); Optical PNT (de to scenarioene optical-atmosphere, med en valgfri frøstyrt realisering av [timeseries], MODELLED); Holdover-test (resultatet holdover-test målt mot ITU-T-maskene, tegnet fra resultatets egen record.series); en visning for interferensobservatoriet som åpner filene du har laget og ikke leverer noen; på Verktøy-siden en Jammertest-skårer, en IMU-tilpasning og MQTT som telemetriformat; og under Tillit en velger for loggformat (RTKLIB .pos, NovAtel OEM7, RTCM 3, GNSS-SDR, Septentrio SBF) med en valgfri IMU-fil. Hver visning leser filer i nettleseren og laster ikke opp noe; hvert tall beholder etiketten registeret har for det, og hver bærer den veiledende erklæringen. Nettsiden /benchmark viser fragmentet kshana bench leaderboard.

Rettet#

  • Sak #36: byte-eksakte festelag. Byte-eksakte festelag kjøres bare på en vert som er erklært som grunnlinje (KSHANA_EXACT_PINS=1, satt av scripts/gate.sh), ikke på hver Apple-silicon-Mac, fordi Apples matematikkbibliotek er forskjellig mellom macOS-utgivelser; det bærbare laget kjøres overalt, og tests/exact_pin_gate_guard.rs hindrer at et byte-eksakt lag igjen styres av plattform alene. Sammenligningene med de uavhengige referansene består selv på macOS. Ingen literal ble tatt på nytt og ingen toleranse endret. scripts/oracle-triage.sh og docs/LOCAL-ORACLE-TESTS.md forklarer hvordan en forskjell trieres; .github/workflows/oracle-macos.yml er en manuell og ukentlig diagnostikk, ikke en port.
  • CodeQL: et uforankret mønster i Studios hjelpefunksjon trust-open matcher nå hele headeren (web/studio/lib/trust-open.mjs).
  • CI: diskplass på runneren. Jobben check bygger dev- og test-profilene uten feilsøkingsinformasjon, så lenking fyller ikke lenger disken.
  • Kildevakter. Hver kildefil som inneholder testfixturer med fester, erklærer sitt festeomfang, og testene som skriver midlertidige filer bruker en unik sti per kall, så parallelle kjøringer ikke kan kollidere.
  • docs/SCENARIOS.md er generert på nytt for det valgfrie feltet timeseries i optical-atmosphere.
  • JetBrains-plugin: ingen bruk av utdatert plattform-API eller API planlagt fjernet. IntelliJ Plugin Verifier (verifyPlugin) mot IntelliJ IDEA build 263 (2026,3: 263.6800.24 og 263.7031.23) fant ett utdatert kall, FileEditorManager.openFile, i Insert Example; den åpner nå den nye filen med OpenFileDescriptor. Pluginen er kompatibel med og ren på 2024,3 (since-build, uendret) og begge 263-byggene. CI kjører nå verifyPlugin og feiler på kompatibilitetsproblemer og på all bruk av API som er planlagt fjernet.

[0.37.0] - 2026-10-17#

Lagt til#

  • Optisk PNT gjennom atmosfæren (scenariotypen optical-atmosphere, docs/OPTICAL-ATMOSPHERE.md, designnotat docs/design/optical-atmosphere-0.37.md). For en optisk lenke og et sett bakkesteder rapporterer den klarluftstapet som avhenger av bølgelengde og elevasjon, turbulenstilstanden etter Hufnagel-Valley (Rytov-varians, scintillasjonsindeks, gamma-gamma-fader, aperturmidling), tilgjengeligheten mot lenkemarginen ut fra et oppgitt skyklima, marginen som trengs for målrettede tilgjengeligheter og taket ingen margin løfter, fordelingen av avbruddsvarighet, tids- og avstandsfeilen per avbrudd gjennom klokkens holdover-modell, avstandskorrelert stedsdiversitet og hva-hvis-gevinster for en endret bølgelengde, en større apertur, scintillasjonsreduksjon med adaptiv optikk og ekstra margin. optical_linkbudget får et atmosfærebevisst budsjett; uten ett er utdataene bit-identiske med 0,36 (terskel A5). To medfølgende scenarioer bærer ILLUSTRATIVE skyklimaer. MODELLED: tre registerrader. Tallbehandlingen når tersklene A1 til A6 forhåndsregistrert i xval/optical-atmosphere/PREREGISTRATION.md mot et uavhengig mpmath-program; det kontrollerer implementasjonen av de oppgitte formlene, ikke atmosfæren, og ingen målt tilgjengelighetsregistrering er sammenlignet, så ingen rad er VALIDATED. Terskelen A4 ble først ikke nådd, med 3e-9 fordi den normale CDF-en i bruk var en tilnærming på 1.5e-7; CDF-en ble erstattet og terskelen latt stå som registrert. De innebygde byggene og WebAssembly-byggene returnerer byte-identiske dokumenter for begge medfølgende scenarioer (A7, kjørt på integrasjonscommitten for 0.37.0).

[0.36.0] - 2026-10-16#

Lagt til#

  • Deteksjons-ROC for IQ-monitorene (PRO-32, docs/design/DETECTION-ROC.md). En kampanje med monitorer beholder hver teststatistikks maksimum over vinduer rundt oppgitte hendelser (positive) og flislagte vinduer utenfor hendelsene (negative, roc_window_s). Rapporten slår dem sammen per alarmtype til en ROC med dens AUC og driftspunktet ved den konfigurerte terskelen, som roc.json og en rapportseksjon. På syntetiske kampanjer er kontrollen mot tilfeldighetsnivå nådd. AUC-terskelen for C/N0 (0,95) er ikke nådd (0,79), fordi de negative vinduene rett etter en hendelse arver CUSUM-ens avtakning fra deteksjonen; dette er registrert. MODELLED.

  • IQ-monitorer i kampanjen for labavspilling (PRO-31, docs/design/MONITORS-IN-CAMPAIGN.md). En valgfri tabell [monitors] i en kampanjefil kjører IQ-monitorene i kjørerens enkeltpass: effekt og spektral etter hver frontend-kjede, og C/N0, SQM og lås per sporet kanal. Alarmene skåres mot de oppgitte hendelsene: oppdaget eller uteblitt, tid til deteksjon og falske alarmer per eksponeringstime. Hver tests lukkede falskalarmtall er oppgitt, inkludert et nytt tosidig gaussisk tall for SQM-testene (2Q(k)). Uten tabellen endres ingenting. På syntetiske kampanjer er terskelene for falske alarmer for effekt og SQM og for C/N0 nådd; 18 av 18 dempinger oppdages, men grensen for tid til deteksjon, under ett detektorsample av konstruksjon, er ikke nådd og er registrert. MODELLED; registerrad "IQ monitors scored in lab-replay campaigns".

  • Laboratorietilpasning fra IQ-kampanjer, oppfølging (tests/iq_labfit_followup.rs, CI-jobb labfit-iq-followup). Den tester de to hypotesene §13,6 i docs/design/LABFIT-FROM-IQ.md lot stå åpne, mot terskler forhåndsregistrert i 1e532f84. Den legger til to syntetiske kampanjer: S, med en trinnvis J/S (frø 2026_1014), og R, en fersk rampe (frø 2026_1015). Resultatene står i docs/design/evidence/labfit-followup/RESULTS.md.

    • S1 nådd: med hvert J/S-nivå holdt, gjenvinnes δ_eff innenfor +0,185 dB. Rampekampanjenes feil på −1,1 dB er estimatorens etterslep.
    • S2 ikke nådd, festet av en test som slår fast at terskelen ikke ble nådd: (d) slik den er skrevet på den trinnvise kampanjen holder for sporingssløyfemodellen (0,45 dB) men ikke for den empiriske (6,42 dB).
    • R1 nådd: på den ferske rampekampanjen er (d) med den tilpassede varigheten for bortfall, ganger hver hendelses rampehastighet lagt til, innenfor 1 dB for begge modeller.
    • Avvikene i (a′) og (d) gjentas på R.
    • En kampanje kan nå oppgi sin J/S som en step-profil i testharnessen.
    • Ingen konklusjon i §13 endres, og registerraden forblir MODELLED.
  • Begrenset FLL-innhenting, valgfri (DS-LOOP-05): en ny sløyfeutformingsnøkkel [design.carrier] fll_pull_in_max_s (s), Rust LoopConfig::fll_pull_in_max_s. Under fll_assist = "pull-in" tvinger den overleveringen fra FLL til PLL etter så lang tid, uansett PLI. Ikke satt som standard, og da utenfor utformingens hash; standardutformingen og dens hash er uendret.

    • Kontrollert mot terskler forhåndsregistrert i 58789af0, på injisert referanse. Kontrollen er nådd: standarden overleverer aldri i 9 av 10 frø ved 33 dB-Hz.
    • Ikke nådd: med et tak på 1,0 s holder 16 av 20 kjøringer låsen ved 33 dB-Hz og 8 av 20 ved 31 dB-Hz; de andre går i sløyfe mellom tvungne overleveringer og FLL-ens retur. Fasejitteren er 1,8× PLL alene ved 33 dB-Hz.
    • Gulvet for innhenting på ~35 dB-Hz forblir standardens dokumenterte grense.
    • MODELLED; registerrad "Capped FLL pull-in below the default design's FLL-to-PLL hand-over floor (opt-in)".
  • Akkvisisjonshysterese og frontend-kvantiseren i jamming-typen (CAP-06c): to valgfrie seksjoner for et scenario av typen jamming.

    • [acquisition]: acquisition_threshold_dbhz (dB-Hz, ved eller over sporingsterskelen) og reacquisition_delay_s (s, standard 0). En satellitt akkvireres ved eller over akkvisisjonsterskelen, når den har vært uakkvirert i forsinkelsen. Den holdes mens den er ved eller over sporingsterskelen. Utdata: epochs[].sats[].acquired (sann/usann), epochs[].acquired (antall) og fom.availability_acquired (1).
    • [front_end]: adc_bits (1 til 16) og bandwidth_mhz (MHz, standard dobbelt chiprate). Gir en blokk front_end: agc_gain_reduction_db (dB, 10·log10(1 + J/N)), quantiser_loss_db (dB, trukket fra hver lenkes effektive C/N0) og loss_model. Tapet er det for gaussisk inngang, merket som ikke gyldig for CW-, smalbånds- og feide jammere.
    • Uten seksjonene er alle utdata byte-identiske.
    • Kontrollert mot terskler forhåndsregistrert i 70c72fcc. Kvantiseringstapet er innenfor 0,0007 dB av en uavhengig Monte Carlo, og AGC-avlesningen innenfor 0,012 dB av IQ-lagets AGC-sløyfe.
    • De registrerte hysteresekjøringene var uinformative (hver lenke tapt), så den terskelen er NOT MET. Et supplerende kjøringssett registrert ved 37793290 når den: hvert flagg er lik en uavhengig omberegning, og 732 av 1824 lenker viser hysteresen.
    • Funn: med en CW-jammer taper en 1-bits ADC omtrent 5 dB mer enn det gaussiske tallet.
    • MODELLED; registerrad "Acquisition hysteresis and the front-end quantiser in the jamming kind against independent recomputations".
  • Terrengskygge av jammeren i jamming-typen (CAP-06b): en valgfri seksjon [terrain] i et scenario av typen jamming med en jammer. Felt:

    • dem_hgt: en SRTM-rute i formatet .hgt, relativt til arbeidsmappen;
    • samples_per_side, ll_lat_deg og ll_lon_deg (grader): rutens størrelse og hjørne;
    • geoid_undulation_m (m, standard 0), k_factor (standard 4/3) og profile_step_m (m, standard 30).

    Motoren sampler den store sirkelens terrengprofil mellom jammer og mottaker og finner den dominerende knivseggen. Jammerens mottatte effekt, og dermed hver J/S, senkes med enkeltknivseggtapet i ITU-R P.526-15 §4,1.

    • Resultatet får en blokk jammer_terrain: nu_max (1), diffraction_loss_db (dB), obstacle_distance_m (m), obstacle_terrain_m (m), path_length_m (m) og profile_points (antall).
    • Uten seksjonen er alle utdata byte-identiske.
    • Kontrollert mot terskler og ti plasseringer forhåndsregistrert i 92cd2bfd, på den innsjekkede virkelige SRTM-ruten over Death Valley, mot en uavhengig numpy-omberegning. Alle nådd: verste forskjell 1.6e-10 på ν og på tapet (terskel 1e-9), tapet monotont i jammerhøyde, og tapet når J/S nøyaktig.
    • MODELLED; registerrad "Terrain shadowing of the jammer in the jamming kind against an independent numpy recomputation on a real SRTM tile".
  • CRPA-antenneforsterkninger i jamming-typen (CAP-06a): en valgfri seksjon [crpa] i et scenario av typen jamming. Felt: elements_enu_m (elementposisjoner i lokal øst-nord-opp, m), weighting ("null-steering" eller "mvdr") og bandwidth_mhz (MVDR-støybåndbredde, MHz, standard dobbelt chiprate).

    • Hver kanal danner en forvrengningsfri stråle mot sin satellitt. Lenkens støy skaleres med ‖w‖² og jammeren med |wᴴa_j|² før den eksisterende anti-jam C/N0-ligningen.
    • Hver lenke får en blokk crpa: array_noise_gain_db (dB) og jammer_gain_db (dB).
    • Uten seksjonen er alle utdata byte-identiske.
    • En ugyldig seksjon (en tom elementliste, en ukjent vekting, en ikke-positiv båndbredde) er en feil, gjennom kshana og api::run_toml så vel som jamming::run_jamming.
    • Kontrollert mot terskler forhåndsregistrert i 08d83b4d. Nådd: additivitet (etter en rettelse: det første bygget la de nye enhetene til i enhetstabellen for hver jamming-kjøring); ett element er ingen gruppe; støyforsterkning og effektiv C/N0 mot en uavhengig numpy-omberegning innenfor 1e-9 dB; MVDR går mot nullet ved høy JNR.
    • Ikke nådd: MVDR-jammerforsterkningen på 194 av 456 lenker på 0,36 bærbar matematikk (202 på vertens matematikk; docs/revisions/STUDIO15-batch4-rebaseline.md) (verst 1.7e-6 dB). Residualene på −100 til −188 dB er under float64s oppløsning ved den terskelen, og numpy er uenig med seg selv i samme størrelsesorden.
    • MODELLED; registerrad "CRPA antenna gains in the jamming kind against an independent numpy recomputation".
  • IQ-sporingsmotor mot GNSS-SDR 0.0.19 (PRO-33): kshana iq track og GNSS-SDR sporer de samme uavhengige numpy-opptakene av GPS L1 C/A ved 30 til 45 dB-Hz.

    • Terskler forhåndsregistrert i 48edd4a5. Den registrerte kalibreringen sviktet på en feil overlevering i GNSS-SDR (F3), så endring 1 (1e4288c4) legger til en FLL bare for innhenting i begge mottakerne, sjekket inn før noe testopptak.
    • Nådd: bærebølge- og kodejitter og Doppler stemmer innenfor 5 % ved hver C/N0.
    • Ikke nådd: motorens NWPR C/N0 leser 2,3–7,1 dB under GNSS-SDRs SNV (F4, en kjent grense for estimatoren; M2M4 er innenfor 0,06 dB av referansen); låseindikatorene avviker per definisjon (F5); én uenighet om slipp ved 30 dB-Hz (F6).
    • MODELLED; registerrad "IQ tracking engine against GNSS-SDR 0.0.19 on independent recordings".
  • To VALIDATED rader for koder i IQ-laget (DS-GIQ-06b, PRO-39).

    • BeiDou B1I. Alle 63 primærkoder i B1I stemmer chip for chip med den uavhengige generatoren i GNSS-SDR v0.0.19 (terskel forhåndsregistrert i 911106d1). Bare det programmets utdata er sjekket inn: B1I PRN-kodene den offentlige ICD-en definerer, som et prefiks og en hash.
    • GPS L1C. Alle 126 L1CP/L1CD-koder og 63 L1CO-overlegg stemmer med kontrollkolonnene IS-GPS-800J trykker, og den beregnede Legendre-sekvensen stemmer med dens tabell 6.2-1 (terskler forhåndsregistrert i fe372e26).
    • Rader: "BeiDou B1I primary ranging codes against an independent generator" og "GPS L1C ranging and overlay codes against the IS-GPS-800J printed check columns".
  • GLONASS-, BeiDou- og Galileo E6-bånd i spektrummodellen (CAP-12, signaler): nye bandnavn glonass-l1of og glonass-l2of (enhver FDMA-kanal som glonass-l1of-k<K>, K = −7 til 6), beidou-b1i, beidou-b1c, beidou-b2a, beidou-b3i og galileo-e6. Hvert bærer sin ICD-bærebølge, modulasjon og minste mottatte effekt. De er valgfrie etter navn: standard båndsett og alle eksisterende utdata er uendret.

    • Kontrollert mot terskler forhåndsregistrert i 5806f28b: ICD-verdiene, nullpunktene, B1C-sammensetningen og C/N0-banen er nådd.
    • To terskler ble ikke nådd. Enhetsarealterskelen var uoppnåelig slik den var skrevet (F1). IQ-lagets B1I- og B1C-bølgeformer stemmer med modellen bare båndmidlet, på grunn av de ujevne linjespektrene i kodene deres (F2).
    • MODELLED; registerrad "Spectrum model: GLONASS, BeiDou and Galileo E6 bands (opt-in)".
  • Valgfri celle-midlende CFAR i IQ-akkvisisjon (PRO-37): iq::acq::ca_cfar og ca_cfar_cells avgjør på et akkvisisjonsrutenett ved å sammenligne hver celle med gjennomsnittet av referanseceller i sin Doppler-rad. Grensen kommer fra den lukkede formelen for CA-CFAR-falskalarmsannsynligheten for M ikke-koherente blokker (ca_cfar_pfa, ca_cfar_alpha), så beslutningen avhenger ikke av normaliseringen av sampleeffekt. Den er valgfri; standarddetektoren og alle eksisterende utdata er uendret.

    • Kontrollert mot terskler forhåndsregistrert i 3724aefa: den lukkede formelen mot Monte Carlo (18 av 18 tilfeller), og en utformingsrate på 1 % målt til 0,97–1,01 % på gaussisk og 2-bits kvantisert støy.
    • Én terskel ble ikke nådd: på et støyfritt 2-bits signal overskrider 1,28 % av cellene utenfor toppen grensen, ved kodens korrelasjonssidelober (funn F1).
    • MODELLED; registerrad "Cell-averaging CFAR option in IQ acquisition".
  • Scintillasjonsmodell mot målte data (PRO-34): IQ-kanalens Cornell-scintillasjonsmodell ble sammenlignet med målt intensitet og fase for GPS L1 ved 50 Hz fra en ekvatorial scintillasjonsnatt (Zenodo-post 16941224, INGV, Malindi, CC BY 4,0), under terskler forhåndsregistrert i b6ccb499. Nådd: intensitetsfordelingen og fasescintillasjonen knyttet til S4. Ikke nådd: modellen fader 2,4 ganger så ofte under −10 dB og 3,5 ganger så lenge (funn F1). Den registrerte behandlingen leser modellens innpakkede fase (funn F2); faseresultatet holder med den utpakket. scripts/fetch_scint_malindi.sh henter dataene. Raden forblir MODELLED: "IQ ionospheric scintillation channel (Cornell model) against measured 50 Hz GPS L1 scintillation".

  • Rettet LuGRE-sampleleser (MR-09): realdata::lugre::parse_iqs_sdrx leser en LuGRE IQ-batch med I i den høye nibblen og mid-rise-nivåene 2v + 1 (SdrLayout::mid_rise), som fjerner middelverdien på −½ de rene toerkomplementheltallene har på I og Q. run_acq.py --corrected gir GNSS-SDR den samme lesningen. Den generiske ION-leseren og alle eksisterende utdata er uendret: 149 scenarioresultater og en studie er byte-identiske før og etter, og de festede LuGRE-funnene leses som registrert (xval/lugre-reader/RESULTS.md). Ingen registerrad endres.

  • Valgfri sporing med BOC(1 1) (CAP-07 (a)): LoopConfig::boc skalerer DLL-diskriminatorene for hovedtoppen til sinus-BOC(1 1) og legger til en bump-jump-monitor (veldig tidlige og veldig sene korrelatorer ved ±0,5 chip, opp/ned-tellere, N = 8) som flytter kode-NCO-en bort fra en sidetopp; Channel::bump_jumps lister hoppene. Av som standard, og alle eksisterende utdata er uendret. Kontrollert mot terskler forhåndsregistrert i 6b68f6cc på et syntetisk BeiDou B1C-signal: en start på sidetoppen som uten valget blir stående 0,55 chip ved siden av, trekkes inn på hovedtoppen av ett hopp ved 0,08 s med valget, og ingen falske hopp ble sett fra hovedtoppen. Én terskel ble ikke nådd: enhetstestrutenettet for skaleringen rekker utenfor diskriminatorenes lineære område (funn F1 i docs/design/evidence/boc-bump-jump/RESULTS.md). MODELLED; registerrad "BOC(1 1) tracking: DLL scaling and bump-jump ambiguity resolution (opt-in)".

  • Laboratorietilpasning fra IQ-kampanjer (B7.1, docs/design/LABFIT-FROM-IQ.md). [input] campaign = "<out-dir>" i et labfit-scenario tilpasser en utdatamappe fra kshana iq campaign på CLI-et (kshana iq labfit), i Python (kshana.iq_labfit) og i MCP-verktøyet labfit (bare mapper innenfor dets arbeidsmappe). Den tilpasser én enhet per signal, sløyfeutforming, frontend-kjede og jammertype:

    • C/N0-modellen mot oppgitt J/S, med sensurering;
    • sporingsterskelen, direkte og i lukket form;
    • sporingssløyfemodellen og den empiriske låsemodellen, koblet gjennom C/N0-modellen, med deres varigheter;
    • en frøstyrt klyngebootstrap over opptak, prediksjonsintervaller på 90 % og tilbakeholdte datasett med ett opptak utelatt om gangen;
    • en forhåndsregistrert tabell [validation], hashet, med PASS/FAIL per terskel.

    Rapporten er kshana.labfit-iq/1 som JSON, CSV og Markdown, med en enhetsblokk. Q_eff kan ikke identifiseres fra C/N0-data uten en uavhengig effektmåling. Den oppgis, tilpasses aldri, og den tilpassede parameteren er delta_eff = delta - 10 log10 Q (utformingsendring 2026-10-12). En ukjent jammertype tar den mest skadelige oppgitte Q (cw, 1). På syntetiske kampanjer fra Kshanas egne scener består terskelen (c) for dekning i tilbakeholdte datasett. Tersklene (a') og (b') for delta_eff (0 av 50 kampanjer dekket) og den lukkede terskelen for grense (d) er ikke nådd: de er registrert med sine verdier. MODELLED; registerrad "Calibration of the open receiver's C/N0 and lock models to IQ campaign results, with stated prediction error". Stien for labfit fra mottakerlogg og dens utdata er uendret.

  • solar-system på en JPL-kjerne (CAP-31): planetary_kernel_path tar hvert legeme SPK-en inneholder (med de440s: Merkur, Venus, Jorden, Månen) fra kjernen, etikett KERNEL, og legger til en blokk kernel bare når den er satt. Ny rad, VALIDATED mot SPICE (forhåndsregistrert f8e946ea; verst 3.3e-5 m, 1.0e-11 m/s). Standardrapporten er uendret.

  • Porkchop på DE440-efemeriden (CAP-20b): maneuver::porkchop_kernel sveiper C3 og ankomst-V∞ på heliosentriske tilstander fra en DE440 SPK. Ny rad, VALIDATED mot SPICE-tilstander

    • pykep 3.0.1 (forhåndsregistrert 2d857fb1; Jorden til Mars 2026-2028, 304 celler, verst 2.6e-14, den samme cellen med minste C3).
  • Ikke-gravitasjonell makromodell for LRO: NOT MET (DS-LRO-10, forhåndsregistrert e82047e2). lunar_od::LunarMacroModel (valgfri via LunarForceModel::macro_model): direkte solstråling på flat plate med Månens skygge, et solsporende panel, og månens albedo og termisk IR; LunarMacroModel::lro_generic er en merket generisk LRO-tilnærming fra publiserte fakta (ingen bussplater: platetabellen kunne ikke skaffes). På LRO-buen på 4 t lar den RMS for redusert dynamikk stå på 6,668 m og den dynamiske på 11,94 m, med en usannsynlig strålingsfaktor (omtrent +21 / −22), så ingen av de tre tersklene er nådd. Funnet er festet av en test, og ingen standardutdata endres (docs/design/evidence/ds-lro-10-macro-model/RESULTS.md). Den valgfrie månekanonkule-SRP-en bruker nå Månens koniske skygge i stedet for Jordens (forces::conical_shadow_body).

  • Månebanebestemmelse: valgfri fast k2-tidevann og selenosentrisk relativitet (DS-LRO-11), av som standard (LunarForceModel::lunar_tide, ::relativity); en bryter KSHANA_LRO_DEGREE for ANISE-kryssjekken (DS-LRO-04); en fixture med LRO-bue på 24 t og en tilpasning av lang bue kun for informasjon (DS-LRO-09). Informasjonskjøringer er registrert i docs/design/evidence/ds-lro-09-11-longer-arc/RESULTS.md; ingen publisert verdi endres.

  • CR3BP 9:2 NRHO mot CAPSTONE (CAP-29d): ny MODELLED rad som måler motorens sirkulære begrensede NRHO mot CAPSTONEs fløyne bane (JPL Horizons, mars 2023; forhåndsregistrert 4e868170): periode 1,07 %, apolun 0,05 %, perilun 4,1 % fra CAPSTONEs middelverdier, innenfor de registrerte tersklene på 3 / 5 / 20 %. En måling, ikke en validering.

  • CR3BP-roterende tilstander til Måne-sentrert ICRF (RM-34, FUT-06): cr3bp::to_moon_centred_icrf / from_moon_centred_icrf / to_moon_centred_icrf_de440 avbilder en dimensjonsløs roterende Jord-Måne-tilstand på den øyeblikkelige DE440 Jord-Måne-linjen, inkludert rammens rate ut av planet. Ny rad, VALIDATED mot en SPICE-ramme med to vektorer (forhåndsregistrert 2313eb1b, endret før noen kjøring d5ef79b3; 72 tilfeller, verst 1.8e-7 m og 1.2e-9 m/s).

  • CR3BP-familiemedlemmer mot JPL Three-Body Periodic Orbits API: NOT MET (RM-35, forhåndsregistrert a9074f65). cr3bp_family (halo-, NRHO- og DRO-korreksjon, stabilitetsindeks for monodromi, pseudo-buelengde-fortsettelse) stemmer med 54 av 58 API-medlemmer på hver terskel (tilstand, periode og Jacobi innenfor 1e-10 overalt). Én stabilitetsindeks for L1-halo (9.5e-2) og tre lukkinger av små DRO-er (1.5e-8 til 3.3e-8 mot 1e-8) er ikke nådd, så modulen er #[doc(hidden)], og ingen rad hevder den. Resultater: docs/design/evidence/cr3bp-families/RESULTS.md.

  • Valgfri DE440-orientering og -miljø for månen (FUT-05, DS-LRO-08; standardene uendret): lunar_frame::try_icrf_to_moon_pa_de440, lunar::try_mci_to_mcmf_de440 / try_mcmf_to_mci_de440 (forankret i epoke, hovedaksene i DE440) og lunar_od::De440LunarEnvironment (innebygd DE440 PA-orientering pluss geosentrisk Sol og Måne fra en SPK for DE440 levert av brukeren). Mot ANISE (forhåndsregistrert ea537710): orientering innenfor 3.5e-7 rad og LRO-tilpasninger innenfor 1 mm, men efemeridedelen nådde ikke terskelen sin (Sol 30,7 m, Måne 1,1 m, en tidsforskyvning på ~1 ms på ANISE-siden), så den er ikke en validert rad. Resultater: docs/design/evidence/fut05-de440-lunar-env/RESULTS.md.

  • Datum for månerammekampanje, tilstandsskalert NumPy-terskel: NOT MET (forhåndsregistrert b887eb05; forblir MODELLED). Steg 0 utelukker pseudoinvers-reserveløsningen som årsak til gapet på 0,30 for estimerte stasjoner; NumPy stemmer innenfor terskelen på seks av åtte scenarioer, men stations_estimated når den ikke (6.8e-6 mot 5.9e-7), og på den ferske datoen 2026-12-01 gjør et uobservert fyr ved sørpolen at fyrinformasjonen mangler rang, noe den uendrede uavhengige referansen ikke kan evaluere. Resultater: docs/design/evidence/mr05-lunar-datum-cond/RESULTS.md.

  • Månerammedatum fra en virkelig observasjonskampanje (analytisk Måne) VALIDATED på ferske EDC-normalpunkter fra 2025 (forhåndsregistrert 31f5283 før noen ble hentet): den uendrede SPICE- og NumPy-referansen stemmer på bokføring, rang og null kobling, og innenfor 1.11e-3 på sigmaer (terskel 1e-2), 8.95e-4 på tilstanden og 1.79e-3 på forholdene på tvers/langs (terskel 2e-2). Kun en bibliotekkontroll av kovariansberegningen; tersklene skiller ikke mellom månemodeller. Resultater: docs/design/evidence/mr06-llr-analytic-fresh/RESULTS.md.

  • IAU-orientering og GM for de fjorten tilføyde legemene i solsystemet utskilt fra raden "Physical constants of every solar-system body" til en VALIDATED rad (forhåndsregistrert 154bc54): Body::iau_rotation_et stemmer med SPICE pxform på pck00011 innenfor 1e-9 rad på 574 matriser ved de opprinnelige epokene og på 574 ved 41 ferske epoker aldri sammenlignet før (verst Phobos 1.38e-10 rad), og Body::mu er lik gm_de440 for alle fjorten legemer. Resten av den opprinnelige raden (J2, middelradius, rapporten) forblir MODELLED. Resultater: docs/design/evidence/mr08-body-orientation/RESULTS.md.

  • Lambert med flere omløp (maneuver::lambert_multirev): hver løsning med opptil tre omløp, begge grener. Ny registerrad, VALIDATED mot pykep 3.0.1 (forhåndsregistrert a75de851; 382 tilfeller, 1058 løsninger, verste hastighetsforskjell 1.6e-13 mot 1e-8). Den interne vakten for Kepler-landing fant én begrensning ved maneuver::kepler_universal på en bue med e = 0,994; den er registrert i docs/design/evidence/lambert-multirev/RESULTS.md.

  • Boks-vinge- og ECOM2-solstrålingstrykk (DS-PA-14), valgfritt. srp_boxwing: en boks-vinge-modell med flate plater og Galileo FOC/IOV-tabellene fra GSC-satellittmetadataene, i nominell GNSS-yaw-styring, med strålingsfaktor og partielle deriverte per panel, og den empiriske ECOM2-modellen med sine partielle deriverte. Velges med ForceModel::box_wing_srp / PreciseForceModel::box_wing_srp (feltene srp_boxwing, standard None: kanonkulestien og alle golden-filer er uendret); med et boks-vinge-sett er cr dets strålingsfaktor. Sammenlignet med Orekit 12,2 under en forhåndsregistrering (xval/srp-boxwing-orekit/): alle terskler nådd, omtrent 1e-15 relativt; VALIDATED som en modellevaluering, mens prediksjonen av Galileo-SRP forblir MODELLED.

  • SRP-skygge for en flattrykt Jord og solens randmørkning (FUT-09, RM-11). Ny modul srp_shadow: oblate_conical_shadow (WGS-84 okkulterende ellipsoide), limb_darkened_shadow (Eddington-loven) og ShadowModel, valgt med ForceModel::srp_shadow (standard: den eksisterende sfæriske koniske skyggen, uendret); forces::srp_accel_with_lit_fraction. Den flattrykte skyggen stemmer med Orekit 12,2s lysforhold innenfor 7.4e-9 over 2400 geometrier (VALIDATED, xval/srp-oblate-shadow-orekit/); randmørkning har ingen ekstern uavhengig referanse (MODELLED).

  • NRLMSISE-00-termosfære (FUT-08, RM-10, DS-PA-13). nrlmsise00: en port av gtd7 og gtd7d (brytere, moduser med daglig Ap og 3-timers ap-tabell) fra den C-versjonen i det offentlige domenet av NRL-Fortran. Den er bit-identisk med den C-porten og innenfor 1.9e-6 relativt av pymsis 0.13.0 (NRL-Fortran, enkel presisjon) på et rutenett med 720 punkter, og den gjengir de 17 publiserte testtilfellene (VALIDATED; xval/nrlmsise00-pymsis/). Dette bekrefter porten, ikke modellens nøyaktighet mot målt tetthet.

  • Valgfritt nivå for NRLMSISE-00-tetthet i luftmotstand. forces::DensityModel::{Exponential, Nrlmsise00 { f107a, f107, ap }}, forces::drag_accel_with_density, density_at og propagator::ForceModel::drag_density. Den statiske eksponentialmodellen forblir standarden, bit for bit. Romvær er konstant per modell. VALIDATED på banenivå mot Orekit 12,2s egen NRLMSISE-00-luftmotstand over 24 t (verst 0,03 m mot opptil 142 km luftmotstandsforskyvning; xval/drag-tier-orekit/).

  • Valgfri DE440 Sol og Måne i Cowell-propagatoren (RM-33, FUT-10). propagator::ForceModel::with_ephemeris tar enhver EphemerisProvider (for eksempel en DE440 KernelEphemeris) for tredjelegeme- og SRP-leddene; den avviser en leverandør som ikke kan betjene epoken, teller reserveløsninger til den analytiske rekken og er av som standard. EphemerisProvider::relative_position_jd2 beholder presisjon i to deler. Mot Orekit 12,2 på dens egen DE440-leser stemmer baner på 24 t til 0,017 m; den forhåndsregistrerte terskelen for posisjon av Sol/Måne ble ikke nådd (6,4 m / 0,24 m; SPICE viser det samme gapet), så MODELLED (xval/propagator-de440-orekit/).

  • Valgfritt atmosfærisk S1-tidevann (DS-PA-03). tides::atmospheric_tide_s1 og s1_air_tide_acceleration (Biancale & Bode 2006, GFZ STR06/01 tabell 1 modell N1, grad 2–6), slått på med air_tide_s1() på propagator::ForceModel og precise_od::PreciseForceModel; av som standard. MODELLED (koeffisientene kontrollert på nytt mot den publiserte tabellen; ingen ekstern uavhengig referanse for kraftens virkning).

  • Batch-banebestemmelse med avstandsrate og azimut/elevasjon med en elevasjonsmaske (RM-36, FUT-13). orbit_determination::determine_orbit_batch_tracking, simulate_tracking, predict_tracking, propagate_with_stm (variasjonell STM med analytiske partielle deriverte for to-legeme + J2), is_visible, measurement_with_partials; batch_ls::gauss_newton_analytic. Stien for bare avstand er uendret. Sammenlignet med batch minste kvadrater i Orekit 12,2 over 8 forhåndsregistrerte scenarioer: hver terskel nådd unntatt tilstandsoverensstemmelsen uten støy (≤ 1 cm), som ikke ble nådd på 2 av 4 scenarioer ved 1,46 og 1,74 cm med kshana innenfor 1e-8 m av referansen; registrert, MODELLED.

  • Vekting etter SP3-nøyaktighet (DS-PA-06). sp3::parse_sp3_accuracy og Sp3Accuracy::position_sigma_m avbilder nøyaktighetskodene i header og per post til observasjonssigmaer; en SP3-vektet variant av Galileo-tilpasningen (Tier-2 3D RMS 0,035 m mot 0,070 m uvektet) er lagt til ved siden av de uendrede registrerte kjøringene. MODELLED.

  • Dispatch-jobb for full bue for Swarm-A (DS-PA-08) i .github/workflows/agency-od-validation.yml.

  • Planetarisk gravitasjon fra PDS SHADR-tabeller (CAP-30, del av CAP-31). SphericalHarmonicField::from_shadr (src/gravity_pds.rs) leser Mars GMM-3 (d/o 120) og GRAIL GL0660B (d/o 660); Body::with_gravity_field kobler til ethvert innlastet felt (standardene uendret). Utsnitt av grad 20 følger med (NASA PDS, offentlig domene; tests/fixtures/planetary_gravity/NOTICE.md); de fulle filene hentes av xval/planetary-gravity-pyshtools/fetch_data.sh. VALIDATED mot pyshtools 4.14.1 (innenfor 4e-15 av total gravitasjon ved d/o 120 over hele sfæren, 5e-14 ved d/o 660 for |lat| ≤ 60°); koblingen til legemets ramme forblir MODELLED (hvert felts opprinnelige ramme er ikke den IAU-rammen som brukes).

  • Høygradsgravitasjon til grad 2190 (RM-14, FUT-07). SphericalHarmonicField::acceleration_hf / potential_hf (Holmes–Featherstone modifisert forover-kolonne, ingen underflyt, ingen polsingularitet), prepare_high_degree, en strømmende ICGEM-laster from_gfc_file / from_gfc_reader (kontroller av norm og maksimal grad, tidevannssystem registrert, tidsvariable ledd avvist) og scripts/fetch_egm2008.sh (full EGM2008, SHA-256 festet, ikke medfølgende; tester styrt av KSHANA_EGM2008_GFC). propagator::FieldEvaluator velger den på den valgfrie Geopotential. Stemmer med Orekit 12,2 til 7.3e-17 m/s² gjennom grad 2190, og en bane på 24 t med 200×200 stemmer til 0,13 m. MODELLED: pyshtools nådde ikke den forhåndsregistrerte terskelen nær polen (sporet til pyshtools), og kontrollen av banens følsomhet for grad 70 ble ikke nådd (0,73 m < 1 m); begge er registrert i xval/.

  • DOP853-integrator (FUT-11). integrator::integrate_dop853, integrate_dop853_checked, integrate_dop853_dense (tett utdata av 7. orden), dop853_step, dop853_initial_step, med en stegvakt som feiler lukket; propagator::Integrator::Dop853, propagate_dop853, propagate_dop853_checked. Standarddriveren er uendret. VALIDATED mot SciPy 1.18.1 solve_ivp(method="DOP853"): enkeltsteg innenfor 5.6e-15, sammenfallende stegsekvenser, sluttilstander innenfor 1.6e-12 (xval/dop853-scipy/).

  • Robust Kepler-løser (FUT-12). Ny modul kepler: solve_kepler_markley (Markley 1995-start, residual uten kansellering) for alle 0 ≤ e < 1, pakket inn av propagator::solve_kepler_robust. VALIDATED mot røtter med 50 sifre fra mpmath til 0,9 ε·|E| opptil e = 0,999999 (xval/kepler-mpmath/).

  • Valgfri tesseral jordgravitasjon i Cowell-propagatoren (RM-09). propagator::ForceModel får geopotential: Option<Geopotential> (with_geopotential, with_egm2008(nmax)). Den evaluerer et SphericalHarmonicField (medfølgende EGM2008 til grad/orden 70, eller en hvilken som helst ICGEM .gfc) i en jordfast ramme nådd gjennom jordrotasjonsvinkelen (EarthFixedFrame::Era) eller CIO GCRS-til-ITRS-kjeden (EarthFixedFrame::Cio). Standard None: ingen eksisterende utdata endres. VALIDATED mot Orekit 12,2 Holmes–Featherstone over 24 t (6 tilfeller, verst 0,036 m), med tersklene forhåndsregistrert i xval/cowell-tesseral-orekit/PREREGISTRATION.md.

  • Julianske datoer i to deler gjennom jordrotasjon på banestien: jd2::gmst82, cio::gcrs_to_itrs_matrix_jd2, frames::teme_to_itrf_jd2 / itrf_to_teme_jd2, orbit::Propagator::position_in_frame_jd2 og own_jd2_utc, From-omregninger mellom jd2::Jd2 og timescales::TwoPartJd, og en valgfri two_part_jd = true for scenariet ephemeris (ECEF, bakkespor og stasjonsvisning; av som standard og uendret, og nøkkelen er utelatt fra scenarioets hash når den er av). Ny registerrad, VALIDATED mot pyerfa gmst82/c2t06a (forhåndsregistrert b10475ee; 40 datoer: GMST bit-identisk, matrise innenfor 2.7e-14, rotasjon over steg på 1 µs innenfor 1.1e-14 rad, der stien med enkelt f64 ikke når dem). Cowell-kraftmodellens epoke forblir enkelt f64; grunnen står i dokumentasjonen.

  • EOP-prediksjon utover tabellen (EopSeries::with_ls_ar_prediction, EopSeries::last_mjd): en valgfri forlengelse av en IERS-serie for jordorientering med LS+AR-prediktoren utstedt ved dens siste rad, slik at rammeargumentene for en senere epoke følger prognosen i stedet for å bli låst til den siste raden. Svar innenfor tabellen er bit-identiske (testet); serien låses fortsatt med mindre dette kalles. Prognosens nøyaktighet forblir det eksisterende LS+AR-funnet mot Bulletin A (MODELLED).

  • Celestiale poloffsets dX, dY på CIO-kjeden (cio::gcrs_to_cirs_matrix_with_offsets), og direkte ERFA-vektorkontroller av precession_matrix, teme_to_gcrs_matrix og den nye funksjonen. Ny registerrad, VALIDATED mot pyerfa (forhåndsregistrert 979c1e39; 40 epoker 1950–2100: presesjon og CIO bit-identiske, TEME→GCRS innenfor 1.1e-10 rad, den predikerte virkningen av to-leddsrekken for jevndøgnsligningen). Eksisterende funksjoner er uendret.

  • UTC før 1972 på tidsstien i to deler (timescales::tai_minus_utc_on_date, og Jd2::from_utc_calendar, jd2::utc_to_tai og jd2::tai_to_utc fra 1960-01-01): epoken med drivende rate ("gummisekund"), med SOFAs drifttabell, brøkdelssteg ved slutten av dagen og UTC-til-SI-skaleringen av dagsbrøken. Ny registerrad, VALIDATED mot pyerfa dtf2d/utctai/taiutc (forhåndsregistrert 23c40661; 117 tidspunkter 1960–1971, verst 2.9e-11 s mot en terskel på 1 µs). Hvert resultat fra 1972 og senere er bit-identisk (sjekksum festet før endringen). Før 1960 er TAI − UTC 0, som i SOFA. Den enkle f64-versjonen timescales::tai_minus_utc er uendret.

  • GLONASS-satellittklokke fra kringkastingen (GlonassEphemeris::sv_clock_bias_s): −τn + γn·(t − tb) fra RINEX-posten, ved et tidspunkt lest på satellittklokken (to fastpunktiterasjoner, RTKLIB-konvensjonen). De innleste −τn og γn var tidligere ubrukt. Ny registerrad "GLONASS broadcast satellite clock and broadcast-orbit propagation", VALIDATED mot RTKLIB 2.4.2-p13 geph2clk/geph2pos (forhåndsregistrert e099c42a; 292 tilfeller på en virkelig kringkastingsfil fra 2013: klokkeforskjell 0 s, verste posisjon 1,1 mm mot en terskel på 1 cm). Bibliotekfunksjon; ingen scenarioutdata endres. Ingen transformasjon fra PZ-90.11 til ITRF anvendes, og modulen sier det.

  • PPP-tidsløsning mot IGS-stasjonsklokken (0,36, FUT-19): mottakerklokken i float-PPP-filteret på WTZR stemmer med den endelige kombinerte IGS-klokken for stasjonen til 0,075 ns (standardavvik) med en konstant forskyvning på −0,66 ns over de konvergerte to timene. Tersklene ble forhåndsregistrert i xval/ppp-time/. VALIDATED (ny registerrad). Ny fixture igs_2025055_WTZR_05m_0006.clk, stasjonsklokkepostene i den endelige IGS-klokkefilen som allerede brukes for satellittklokkene.

  • PPP-paritet med gLAB (0,36, WP-07, RM-31): gLAB 6.0.0 ble kjørt på de samme WTZR-inndataene som et eget verktøy (Apache-2.0-kjerne; nedlastingens sjekksum kontrollert mot den publiserte listen), med kommandolinjen fra en prosedyreendring sjekket inn før kjøringen. På sin første registrerte kjøring stemmer Kshanas float-PPP og gLABs innenfor 0,05 m på 240 av 240 epoker og til 5,0 mm på den siste. SPP-terskelen ble ikke nådd (median 1,187 m mot 0,50 m) og er registrert som et funn: gLABs og RTKLIBs egne SPP-løsninger avviker fra hverandre med 0,852 m. Den registrerte regelen lar derfor begge verktøyenes deler stå som ikke nådd i sin helhet, mens PPP-paritet holder.

  • Lesing av RINEX 4-navigasjon (0,36, WP-07, PRO-41): rinex::parse_nav leser RINEX 4.00-4.02 navigasjonsfiler (> EPH GPS LNAV, Galileo I/NAV og F/NAV, BeiDou D1/D2, QZSS LNAV; andre poster hoppes over til neste postheader), og parse_nav_with tar valg. VALIDATED mot den samme dagens sammenslåtte IGS RINEX 3-fil: hvert dekodet felt identisk og 0 m i posisjon. Lesing av RINEX 2/3 er uendret.

  • Kringkastede posisjoner for BeiDou GEO (valgfri): NavParseOptions::include_beidou_geo og RinexEphemeris::sv_position_ecef_bds_geo (BDS ICD, −5 grader helning). parse_nav hopper fortsatt over GEO-er. MODELLED: den forhåndsregistrerte sammenligningen med en presis bane er datastyrt og ikke kjørt ennå.

  • RINEX 4-observasjonsfiler: en virkelig RINEX 4,00 MGEX-observasjonsfil leses i tester (MODELLED, formatkontroll).

  • RTK med LAMBDA på virkelig RINEX (0,36, WP-07 ★): rtk_real::run_rtk, dobbeltdifferanser på kort grunnlinje av tofrekvent GPS-kode og -fase med et float-Kalman-filter og LAMBDA-fiksering av heltall (forholdstest). VALIDATED på IGS-stasjonene WTZR og WTZZ (1,4 m fra hverandre) mot deres ITRF2020-grunnlinje under forhåndsregistrerte terskler: fiksert ved hver epoke etter de første ti minuttene, grunnlinjefeil median 4,5 mm og 95-persentil 5,5 mm.

  • RTKLIB-paritet for PPP på virkelige data (RM-31): xval/ppp-parity/run.sh og tests/ppp_parity_glab_rtklib.rs med forhåndsregistrerte terskler. RTKLIB v2.4.2-p13 PPP på de samme WTZR-inndataene stemmer med Kshana innenfor 5 cm ved hver epoke i de to siste timene (9,7 mm på slutten) ved den tredje registreringen; de to første kjøringene, registrert som funn, hadde fast tidevann av og mottakerantennen i RTKLIBs basespor. Pariteterskelen for enkeltpunkt ble ikke nådd (1,09 m median mot 0,5 m). gLAB-delen er ikke kjørt (datastyrt).

  • Navigasjonsmeldingskodere utover LNAV (0,36, WP-07, PRO-40): gnss_navmsg koder GPS CNAV (meldingstypene 10, 11, 30; CRC-24Q; kontinuerlig kode med rate 1/2 og K=7), Galileo I/NAV (ordtypene 1-5 i partalls-/oddetallssider nominelt; interleaver 30x8; synk 0101100000) og Galileo F/NAV (sidetypene 1-4; interleaver 61x8; synk 101101110000), med testdekodere. MODELLED: rundturer og kjente svar fra ICD-en; en forhåndsregistrert kontroll av at kringkastede Galileo-efemerider ligger på koderens LSB-rutenett holdt (verst 3.6e-3 LSB), men nådde ikke terskelen for antall satellitter (15 av 20), registrert. Koderne er bibliotekfunksjoner; kobling til scenen er ikke en del av denne endringen.

  • IONEX-filleser (0,36, WP-07): ionex::parse_ionex_file med IonexFile, IonexHeader, IonexEpoch, IonexFileMap og IonexTimeInterp: en streng IONEX 1,0-leser med faste kolonner, med epoker talt fra det første kartets dag, 9999 lest som manglende, RMS-kart, og formatets nærmeste, påfølgende og roterte kart for tidsinterpolasjon; skrå TEC ved headerens skallhøyde. Kontrollert på et innsjekket syntetisk kart og, datastyrt (hentet ved testtid med en festet SHA-256, ikke medlevert), på et utsnitt av en virkelig CODE GIM: hver node eksakt; interpolasjonen stemmer med en formelreferanse til 4e-13 TECU. RTKLIBs iontec stemmer til 3.6e-13 TECU ved 6885 punkter (forhåndsregistrert B6). VALIDATED på datastyrt evidens (eierens beslutning, 2026-10-13): testen feiler på ethvert annet kart enn det SHA-festede.

  • Hatch-bærebølgeutjevning (0,36, WP-07): hatch::HatchFilter og pvt::assemble_epoch_precise_smoothed, den divergensfrie (ionosfærefrie) formen i den presise enkeltpunktsammenstillingen. MODELLED med et registrert funn: på IGS-stasjonen WTZR senker den medianen av enkeltpunktfeilen fra 1,55 m til 1,12 m og 95-persentilen fra 3,47 m til 3,21 m, under den forhåndsregistrerte reduksjonen på 40 % (den gjenværende feilen er biaslignende, ikke støy).

  • Float-PPP på virkelig RINEX (0,36, WP-07): ppp_real::run_ppp, et statisk float-filter for presis punktposisjonering på virkelig tofrekvent GPS-kode og -fase med endelige IGS-produkter (antenneforskyvninger og -variasjoner, fast jordtidevann, fase-wind-up, Shapiro-forsinkelse, estimert våt forsinkelse, deteksjon av syklusslipp), med parse_antex_receiver. VALIDATED på den tilbakeholdte IGS-stasjonen WTZR mot dens ITRF2020-koordinat under forhåndsregistrerte terskler: etter 6 t er feilen 1,5 mm horisontalt og 2,9 cm vertikalt, og hver epoke i de to siste timene er innenfor 10 cm.

  • Interpolasjon av SP3 presise klokker (0,36, WP-07): Sp3File::clock_s og clock_nodes interpolerer de tabulerte SP3-satellittklokkene lineært mellom de to omsluttende gyldige nodene (sentinellverdien for dårlig klokke hoppes over), og ClockRinex::from_sp3 mater dem til PreciseProducts, så den presise kjeden kan kjøres fra en SP3 alene. VALIDATED mot de endelige IGS-klokkene på 30 s fra 2025-02-24 under forhåndsregistrerte terskler: 32 GPS-satellitter, RMS i midtpunkt 0,121 ns (terskel 0,15 ns), 95-persentil 0,265 ns (terskel 0,30 ns).

  • RAIM ved siden av nøkkeltallene for klokkens holdover (CAP-05b): en valgfri seksjon [integrity] på klokketypen rapporterer en egen blokk integrity_fom (RAIM i øyeblikksbilde på en forhåndsinnstilt himmel fra et oppgitt sted: konklusjon per epoke og beskyttelsesnivåer, tilgjengelighet; utilgjengelig mens GNSS er nektet, aldri ekstrapolert). Holdover-tallene er uendret; uten seksjonen er utdataene byte-identiske. MODELLED.

  • Terskler for receiver-trust kalibrert på JammerTest 2024 (CAP-13): en forhåndsregistrert kalibrering av monitorene for C/N0-fall, AGC og jamming-indikator på det offentlige JammerTest 2024-datasettet (hentet ved kjøring, aldri medlevert; examples/jammertest_trust_calibration.rs), levert bare som den valgfrie [monitors] profile = "jammertest-2024-calibrated" (1,5 dB, 3,5 sigma, 29). Tilbakeholdt: terskelene for AGC, jamming-indikator og unionen består; terskelen for falske C/N0-alarmer feiler (0,023 mot 0,02), så raden er MODELLED (xval/jammertest-trust/RESULTS.md). Standardene og utdata uten profilen er uendret.

  • ARAIM-feilhypoteser for flere satellitter (CAP-05a): delmengderegelen i ADD v4.2 generalisert utover par (add_v42_subset_plan, add_v42_protection_levels_to_order; orden 2 er nøyaktig den eksisterende MAAST-kontrollerte stien) og en valgfri avansert RAIM over disse hypotesene (araim_subset_raim), som rapporterer delmengden med størst separasjon når en feil oppdages. Prior som trenger dypere delmengder avvises, aldri avkortet. MODELLED.

  • Horisontlinje i receiver-trust (FUT-01): en receiver-trust-økt kan oppgi en [skyline]; satellitter bak den går tapt for himmelen (sky-blocked, behind_skyline, open_fraction) og tapene klassifiseres som geometry, aldri environment; uten en, er reserveløsningen med asimutgap og alle utdata som før. Generatoren for mannskapstrening får en hendelse natural-degradation (en blokkert himmel, ikke interferens) og scenariet scenarios/training/fjord-natural-degradation.toml. Monte Carlo for UERE x DOP får designnotatets to geometrier med maskert horisontlinje, forhåndsregistrert alene: alle 26 kontroller består.

  • Verifisering av RFC 3161-tidsstempel (CAP-14): kshana::evidence::tsa::verify_token kontrollerer et tidsstempeltokens signatur (RSA PKCS#1 v1.5, RSA-PSS, ECDSA P-256 og P-384), dets ESS-binding til signeringssertifikatet, signatørens bruk til timeStamping og kjeden til et pålitelig anker ved tokenets genTime, frakoblet; kshana evidence verify --tsa-ca <anchors.pem> anvender det på en pakkes timestamp.tsr (valgfritt; uten det er rapporten uendret). VALIDATED, snevert: alle 27 selvgenererte tilfeller stemmer med OpenSSL 3.0.13 på konklusjonen og genTime, under en sammenligning forhåndsregistrert før verifisereren ble skrevet. Tilbakekalling kontrolleres ikke.

  • Verifikasjonsnivåer per tall for hver type (RM-04): hver scenariotypes resultat ender nå med en blokk figure_tiers som nevner dens hovedtall, raden i verifikasjonsmatrisen som eier hvert av dem og nivået lest fra den raden (tall ingen rad eier, listes som uten nivå). Blokken legges til etter kjøringen og fjernes igjen til forrige dokument byte for byte (api::without_figure_tiers). lunar-station-coverage har ingen figure_tiers før en ny datert prediksjon erstatter den frosne; leo-ppp, solar-system, sweep og sweep-nd har ikke noe skalart hovedtall, og lunar-attack-surface skriver kompakt JSON. Kampanjemedlemmer beholder dokumentene sine uten nivå.

  • Kvante-forhåndsinnstilling quantum-cai-coast (CAP-08c): et medfølgende treghetsscenario der en akselerometer med kaldatom-interferometer, spesifisert ut fra interferometerets fysikk ([accel_quantum.cai] med et oppgitt vibrasjonsnivå på plattformen), går på treghet mot et kvartsakselerometer av navigasjonsklasse gjennom et GNSS-bortfall på 110 minutter. MODELLED.

  • Greenhalls eksakte ekvivalente frihetsgrader (CAP-03): allan::edf_greenhall, den fullstendige algoritmen til Greenhall og Riley (2003) (differanseordener 1 til 3, støyeksponenter +2 til -4, overlappende og ikke-overlappende, modifisert og ikke-modifisert, med tabellene for store J), med omslag for ADEV, MDEV og HDEV. VALIDATED i en forhåndsregistrert sammenligning med allantools 2024,6: 4 876 rutenettpunkter innenfor 6.0e-13 relativt; allantools feiler i 32 ytterligere punkter, som er registrert uten verdi fra en uavhengig referanse. Konfidensintervallene til assurance::uncertainty er uendret bit for bit.

  • Feilledd for kaldatom-interferometer (RM-26/27/28): Raman-laserfasestøy (med forsinkelsesleddet fra retrorefleksjonen), bølgefrontkrumningens skjevhet for en termisk sky (ren defokusering, med en deteksjonsradius) og oppløsning av fringe-flertydighet (klassisk støttet og to avhørstider), som bibliotekfunksjoner i src/inertial/cai_error_terms.rs, der hver lukkede form er kontrollert mot kvadratur eller Monte Carlo. MODELLED; foreløpig ikke tilgjengelig fra en scenariotype (docs/QUANTUM-MODELS.md).

  • Klokkeloggformater (RM-03): src/clock_log.rs leser RINEX-klokkefiler, ASCII-fase- eller frekvenslogger i TimeLab-stil og TAPR TICC-tellerlogger til én normalisert faseserie (tau0 oppgitt eller funnet, hull talt opp, en hullpolicy). Valgfritt: en telecom-timing-serie kan navngi en logg ([series.clock_log]), og tabellen [clock_log] i et klokkescenario legger til en blokk measured (ADEV, TDEV, MTIE). Uten tabellen er begge typene byte-identiske (docs/CLOCK-LOG-FORMATS.md). En forhåndsregistrert sammenligning på tre syntetiske logger nådde terskelene for fase og kobling; estimatorene stemmer med allantools innenfor 2.5e-14 overalt der den beregner, og den beregner ikke MTIE-punktet for hele opptaket (registrert). MODELLED.

  • Wander-masker for frekvenssynkronisering (RM-01): typen telecom-timing får sju MTIE- og TDEV-masker for wander-generering ved konstant temperatur, ITU-T G.811 PRC, G.812 type I til III, G.8262 EEC alternativ 1 og 2 og G.8262.1 eEEC, med potenslovdelene tabellene angir, og referansescenarioet scenarios/telecom-synce-eec.toml (en frittgående OCXO mot EEC-maskene: den feiler ved 1 000 s, der en sløyfe må gjøre jobben). Hver rad er lest på nytt mot teksten på itu.int; G.812 (06/2004) er erstattet av en forhåndspublisert utgave fra 08/2026 som ikke kunne leses. MODELLED (en transkripsjon); eksisterende masker og utdata er uendret.

  • Veiledning for filterprior for typen gnss-ins (0,36, WP-09, funn fra RM-21): pakkens standard filterprior passer for en IMU i taktisk klasse. Med en IMU i navigasjonsklasse kan standardverdien gjøre den fusjonerte treghetsgangen dårligere enn fri INS: 52 m mot 11 m på en flyprofil på 70 m/s. Sett [imu_*.filter_prior] slik at den passer til sensorens klasse, slik de nye maritime, jernbane- og luftfartspakkene gjør. Ingen medfølgende scenarioer kombinerer en IMU i navigasjonsklasse med standardprioren: alle som bruker standardverdien har restskjevheter i akselerometeret på minst 0,015 m/s². Kun dokumentasjon; ingen utdata endres.

  • Testbenk-eksport kontrollert med en simulators egne lesere (0,36, WP-09, CAP-16): bevegelsesfilene fra kshana bench-export for 8 medfølgende scenarioer ble lest tilbake av gps-sdr-sims lesere for NMEA, breddegrad/lengdegrad/høyde og jordfast bevegelse (MIT, commit 28ca29a6, brukt som et eget verktøy via xval/testbench-gpssdrsim/; ingen signalfunksjon kalles). De gir den eksporterte banen tilbake til 1,2 mm, 0,15 mm og nøyaktig. FUNN: simulatorens jordfaste leser kan ikke ta CSV-en i full bredde, fordi linjebufferen på 100 tegn deler hver rad. docs/TEST-BENCH.md angir nå kolonneskillene som skal brukes og simulatorens tak på 300 s. VALIDATED (ny registerrad); eksportens bytes er uendret.

  • GNSS/INS på KF-GINS-datasettet (0,36, WP-09, FUT-17): innlastere og kjører for fusion::kfgins og lever-arm-målemodellen i det lukkede EKF-et. På KF-GINS-demodatasettet (hentet ved testtidspunktet, ikke medfølgende) er Kshanas horisontale RMS mot referansebanen 1,09 cm mot KF-GINS' egne 1,11 cm, og alle forhåndsregistrerte terskler holdt. VALIDATED på datastyrt evidens (eierbeslutning, 2026-10-13): datasettet hentes med SHA-256-festing og reproduksjonsveien står i xval/kfgins/PREREGISTRATION.md.

  • Koblet PNT-filter i fusjonspakken (0,36, WP-09, FUT-16): typen fusion tar en valgfri tabell [coupled] som kjører ett stablet filter på pseudoavstander med en akselerometer-skjevhetstilstand (fusion::coupled::CoupledPntBiasFilter), og fusion::coupled::CoupledPnt3d er 3D-versjonen med 8 tilstander. Nytt medfølgende scenario fusion-pnt-coupled: med skjeve akselerometre holder den koblede modusen kvantesuitens posisjon til 18,7 m (95-persentil) med full integritet, der de frakoblede filtrene når 430 m. Uten tabellen er både fusion og hybrid uendret (festet); hybrid avviser tabellen. MODELLED.

  • GNSS/INS-pakker for maritim bruk, jernbane og luftfart (0,36, WP-09, RM-21): medfølgende scenarioer gnss-ins-maritime, gnss-ins-rail og gnss-ins-aviation på banebiblioteket, og en valgfri tabell [tight] for typen gnss-ins som fusjonerer pseudoavstander fra en SGP4 Walker-konstellasjon (alle satellitter når den er nominell, de få høyeste når den er degradert). På jernbanepakken holder tett kobling løsningen i navigasjonsklasse på 5,3 m gjennom et skjæring og en tunnel, mot 12,9 m ved løs kobling. Uten [tight] er pakken uendret (festet). MODELLED.

  • Tett kobling med bærebølgefase (0,36, WP-09, RM-25 / FUT-17): fusion::carrier_tc, et EKF med feiltilstander og en eksplisitt mottakerklokke med 2 tilstander og flyttall-flertydigheter for bærebølgen, drevet av en SGP4 Walker-konstellasjon med Klobuchar- og Saastamoinen-korreksjoner i målesløyfen, slipp-deteksjon med tidsdifferensiert bærebølge og reinitialisering av flertydigheter, og en kjøring med kun kode på de samme målingene til sammenligning. MODELLED: på en kjøring i figur 8-bane er bærebølgeløsningen 2,5 cm mot 47 cm med kun kode, og NIS/NEES er konsistente over seeder.

  • GNSS/INS-banebibliotek (0,36, WP-09, RM-24): typen gnss-ins tar en valgfri tabell [trajectory] med profile = "straight" | "figure8" | "stop_go" | "aircraft" | "uas" | "csv". Profilene styrer Euler-rater og akselerasjon langs banen ut fra referansetilstanden og utleder den sanne IMU-en fra stivlegemekinematikk (koordinerte svinger, stigning, Coriolis); csv importerer en referansebane (t, lat, lon, alt, vn, ve, vd, roll, pitch, yaw) og løser den IMU-en som gjengir den. Uten tabellen flyr pakken sin historiske kjøring, bit for bit (festet). MODELLED.

  • DEM-fliser med breddegrad/lengdegrad for månens horisont: [terrain] dem_tile_path leser en tekstflis realdata::lola_dem (høyder over middelkulen på et rutenett av breddegrad/lengdegrad) i stedet for den polare stereografiske dem_path, både for lunar-station-coverage og moonlight-service-volume; rapporten gjengir flisen (terrain.dem_tile, med dens SHA-256). realdata::lola_dem er nå koblet inn i horisontens strålemarsj. En flis resamplet fra det medfølgende utsnittet gir stasjonen utsnittets horisont til 0,22 grader. MODELLED.

  • Terreng ved eksportstedet for tjenestevolumet: med en seksjon terrain får hver rad i geometrieksporten per satellitt for moonlight-service-volume feltet clears_terrain (satellitten er over den flate masken og eksportstedets horisont i sin asimut), rapporten inneholder stedets horisont (export_site_terrain), og kjøretids-CSV-en får kolonnen. Uten terreng er eksporten uendret. MODELLED.

  • Hovedfelt fra motoren (0,36, STUDIO-06): kshana::api::HEADLINE_FIELDS, field_importance_json() og WebAssembly-funksjonen field_importance() oppgir, for tolv typer, hvilke felt i et scenario som svarer på spørsmålet det stiller, de beste først, som stier med punktum (jammers[].eirp_dbw). Studio leser dem foran sin egen rangering. Kun visningsmetadata: motoren leser dem aldri, ingen scenariofil trenger dem, og ingen resultat avhenger av dem. tests/field_importance.rs feiler hvis en type ikke kan dispatches eller en sti ikke finnes i noen av typens medfølgende scenarioer (den fanget to stier som Studios flatede id-er hadde skrevet uten array-klammene).

  • Tabell fra type til modul fra motoren (0,36, STUDIO-05): kshana::api::KIND_MODULES, kind_modules_json() og WebAssembly-funksjonen kind_modules() gir, for hver scenariotype hvis rader i verifikasjonsmatrisen nevner en annen modul enn sin egen, modulnavnene. Studios funksjonskart brukte sin egen håndskrevne kopi; tests/kind_modules.rs feiler hvis en type i tabellen ikke kan dispatches eller en modul ikke finnes i noen matriserad. Ingen utdata endret.

  • Kort IQ-kjøring i nettleserbygget (0,36): iq_signals() og iq_run_short(fs_hz, duration_s, signal, ids, dopplers_hz, cn0_dbhz, seed) i WebAssembly-modulen bygger en syntetisk scene, fanger hver satellitt og sporer de fangede, alt i minnet, begrenset til 0,25 s, 1 000 000 sampler og 8 satellitter. Scenebyggeren og navneoppslaget for signaler er flyttet ut av den rent native iq::cli (til iq::scene::synthetic og iq::signals::by_name) slik at begge byggene deler dem; kommandolinjens utdata er uendret. Den native testen og web/smoke.mjs sammenligner den samme forespørselen mot én fasit (tests/fixtures/iq_short_golden.json), byte for byte: siden endringen til portabel matematikk (STUDIO-15, nedenfor) gir nettleserbygget og det native bygget de samme bitene.

  • Typede API-er for Python og TypeScript (CAP-34): kshana.pyi typer de lukkede vokabularene (ScenarioKind, hvert typenavn; ErrorKind; ProvenanceClass) og ordbøkene KindMeta og FieldUnit; scenario_kinds() og error_kind() returnerer dem. WebAssembly-pakken legger til run_typed (én kjøring som et typet RunOutput-objekt med det tolkede dokumentet som data) og scenario_kinds (de tolkede KindMeta[]), og dens kshana.d.ts har det samme vokabularet; error_kind er typet ErrorKind | "". tests/typed_api_sync.rs holder begge listene lik motorens.

  • Enheter for hver sweep-nd-kolonne (FUT-28): et sweep-nd-resultat har nå key_units og metric_units, enheten for hver sveipet nøkkel og hver registrerte metrikk, lest fra den sveipede pakkens egen enhetstabell. En akse kan deklarere unit for en nøkkel som pakken ikke gjengir; en deklarert enhet som motsier pakkens avvises, og en enhet som ingen av dem oppgir er null, aldri gjettet. points[].coords[] og points[].metrics[] er beskrevet, så hver av de 76 typene er nå fullt dekket av feltenhetsporten (tak for ikke-dekkede typer 1 -> 0).

  • NumPy-matriser fra RunOutput (FUT-26): Python-typen RunOutput får array(path), columns(path) og series(), som returnerer numpy.ndarray-objekter for en numerisk liste, de numeriske kolonnene i en liste av poster eller hver postserie i dokumentet. Hver matrise er lik numpy.asarray av de samme verdiene fra data() (dtype og bits). NumPy importeres bare når en av dem kalles og står utenfor kjøretidskravene. Typet i kshana.pyi og kontrollert av stubtest.

  • Kampanjeoptimerer (CAP-32): den nye, valgfrie seksjonen [optimize] i typen campaign søker gjennom én til tre scenarionøkler innenfor oppgitte grenser etter den beste verdien av én metrikk: minimere, maksimere eller treffe et mål. Den søker uttømmende på et rutenett, eller med en deterministisk avgrenset Nelder–Mead-simpleks. Hver evaluering er en ekte kjøring av den navngitte typen og står i resultatets trace. Eksempel: scenarios/campaign-optimize-link-budget.toml. Tersklene ble forhåndsregistrert (docs/design/evidence/cap32-optimize/):

    • Rosenbrock-funksjonen er nådd (f* = 1.7e-20);
    • en 1-D-målløsning i lukket form er nådd (6e-15 relativt);
    • rutenettet er bit-likt en uavhengig brute force;
    • simpleksen gjør det minst like godt som et rutenett på 41 × 41 på 177 kjøringer.

    Terskelen for 1-D i runde 1 er registrert som NOT MET, fordi den forhåndsregistrerte boksen utelot løsningen. MODELLED; registerrad «Bounded optimisation of one metric over campaign parameters». Tilleggsfunksjon: kampanjer uten seksjonen er uendret.

  • Kalibreringsensembler (CAP-10): tre kontroller med ett seed, kjørt på nytt over 200 uavhengige seeder mot forhåndsregistrerte terskler, i docs/CALIBRATION-ENSEMBLES.md (generert av gen_calibration_ensembles; verdier per seed i docs/data/calibration-ensembles.csv).

    • Kampanjens Monte Carlo-bootstrapintervall på 95 % dekker det sanne gjennomsnittet i 192 av 200 ensembler, og dets kjikvadrat-kontroll består i 196.
    • Persentiltoleransen med ett seed består i bare 183 av 200: NOT MET, som forutsagt. Det er en terskel på om lag 2 sigma, registrert og ikke løsnet.
    • ADEV-kalibreringene for hvit FM består for hvert seed, med verste feil langt innenfor toleransen.

    MODELLED.

  • Innebygde typer gjennom trait-en Scenario (FUT-27, under arbeid): trait-en BuiltinKind (api::BuiltinKind, med en krok for nivå per størrelse og append_figure_tiers), og de første typene flyttet over på den (inertial, spoof, passes, link-budget, jamming). Utdata er uendret: et manifest for hele katalogen med SHA-256 for hver utdata er identisk før og etter (tests/scenario_output_manifest.rs).

  • Kontroll av at lekeplassen ikke henter noe (RM-07): tests/playground_no_fetch.rs kontrollerer tre ting:

    • hvert Studio-bibliotekscenario finnes i nettleserpakken;
    • pakken er byte-identisk med scenarios/;
    • hvert nettleserscenario kjører fra en tom arbeidsmappe.
  • Alt-PNT-kart: ekte tyngdefelt, Monte Carlo av kartfeil, SRTM i full oppløsning (0,36, WP-10). Typen gravity-map tar en valgfri [reference]: en tyngdeanomali syntetisert fra de medfølgende EGM2008-koeffisientene (eller en ICGEM-fil .gfc via gfc_path, bare i native bygg). Denne syntesen stemmer med ICGEM Calculation Service til omtrent 1e-8 mGal over 794 noder i to regioner, mot forhåndsregistrerte terskler på 0,005 mGal RMS og 0,02 mGal maks (VALIDATED; registerrad «Gravity-anomaly synthesis from a spherical-harmonic model»). Det nye medfølgende scenarioet gps-denied-gravity-nav-egm2008 kjører 60-minutters benchmarken på dette ekte feltet av grad 70. Forhåndsregistrert utfall: tilpasset feil 3106 m, så terskelen på < 500 m er NOT MET, som forutsagt (grad 70 er for glatt), og tidoblingen av kuttet i driften er MET (MODELLED). En valgfri [map_error_mc] kjører benchmarken på nytt over kartfeil med seed og gaussisk korrelasjon og rapporterer fordelingen av den tilpassede feilen (medfølgende scenario gravity-map-error-mc). Utforskende og ikke forhåndsregistrert: med en kartfeil på 2 mGal korrelert over 0,2 grader (størrelsen matcherens egen sigma budsjetterer), holder 1 av 20 realiseringer seg innenfor 500 m (median 2,9 km, p95 14,7 km), mot 144 m med et perfekt kart. Den syntetiske benchmarkens posisjonsbestemmelse under 500 m forutsetter at kartet er nøyaktig. Uten noen av valgene er dokumentet byte-identisk med tidligere utgivelser. combined-altpnt tar en valgfri [magnetic_grid] (csv_path, column) som leser den magnetiske kanalen fra en CSV i EMAG2v3-format. EMAG2 er ikke medfølgende fordi vilkårene ikke er eksplisitte: tools/fetch_emag2_tile.py henter det med en festet SHA-256 og beskjærer en boks. Ingen navigasjonsutfall hevdes på det ekte EMAG2-rutenettet. Felles kartestimering (terreng-SLAM, RM-18): altpnt::sequential::run_sequential_trn_on_map flyr den sekvensielle terrengnavigatoren over et lagret kart som avviker fra referansen, enten ved å stole på det eller ved å estimere en korreksjon per celle med et Rao-Blackwellisert filter i FastSLAM-stil. Forhåndsregistrert mot SITAN med kjent kart på en korrelert kartfeil på 15 m over 20 seeder: en gjennomsnittlig gevinst på 1,5 %, bedre i 10 av 20, så begge forbedringsterskler er NOT MET (10 % og 12 av 20), uten skade på et perfekt kart (MET). En enkelt passering uten gjenbesøk lar ikke kartet læres (xval/terrain-slam-rbpf/, MODELLED). terrain-slam-dokumenter er byte-identiske. Testene med ekte SRTM kjører nå i CI på to innsjekkede utsnitt i full oppløsning; alle forhåndsregistrerte terskler er nådd, med nærmeste node lik GDAL 3.8.4 i 8 av 8 punkter (xval/srtm-ungate/).

  • Interoperabilitet, WP-08 (0,36; hvert punkt forhåndsregistrert og sjekket inn alene før kjøringen mot sin uavhengige referanse, hvert et nytt VALIDATED registerrad unntatt telemetripunktet, som utvider en eksisterende rad):

    • CCSDS Orbit Data Messages (src/odm.rs): OPM 3.0/2.0, OMM 3.0/2.0 og OCM 3,0 (blokkene TRAJ, PHYS, COV, MAN, USER) skrevet og lest i KVN og NDM/XML, og en OMM i full presisjon fra et SGP4-elementsett (OmmMessage::from_omm_file); utdata fra OmmFile::to_omm_kvn er uendret. Mot Orekit 13.1.8 begge veier: 27 av 30 Kshana-meldinger tolkes i Orekit, og Kshana leser hver melding skrevet av Orekit, verdier innenfor 1e-14 relativt og epoker innenfor 1e-9 s; fire funn festet (Orekit krever ELEMENT_SET_NO, avviser COMMENT i XML-parametere definert av brukeren, skriver ikke BTERM uten BSTAR, og leser relative OCM-epoker i TDB i SI-sekunder). Den eldre OMM-skriverens META_START avvises av Orekit (registrert). Rad «CCSDS Orbit Data Messages (OPM, OMM, OCM)».
    • CCSDS Attitude Data Messages (src/adm.rs, src/ndm_xml.rs): AEM 2.0/1.0 og APM 2,0 i KVN og XML mot Orekit 13.1.8, alle terskler nådd; Orekits APM-skriver avviser et manøver uten MAN_DELTA_MASS (festet). Rad «CCSDS Attitude Data Messages (AEM, APM)».
    • SPICE SPK-eksport (src/spk_writer.rs): skriver og leser for SPK-typene 9 og 13 og OEM-til-SPK-eksport; mot CSPICE N0067 er kjernene byte-identiske med SPICEs og evalueres bit-identisk. Rad «SPICE SPK export (types 9 and 13)».
    • SPICE SPK-typene 3 og 21 (src/spk_writer.rs): segmenter av type 3 (Chebyshev) og type 21 (utvidede differanselinjer) skrevet fra gitte poster og evaluert slik SPICE gjør det; mot CSPICE N0067 er kjernene byte-identiske med SPICEs og hver evaluering stemmer bit for bit begge veier. Rad «SPICE SPK types 3 and 21 (Chebyshev, extended difference lines)».
    • Utvidelser av Space Packet (src/space_packet.rs): sekundær header med tidskodene CUC/CDS, pakkefeilkontroll, segmentering og strømkontroller, mot ccsdspy 2.0.1, spacepackets-rs 0.18.0, spacepackets-py 0.32.0 og CPython crc_hqx, null avvik. Rad «CCSDS Space Packet secondary header, packet error control and segmentation».
    • Telemetriskjema 1,3 gjennom ekte forbrukere: Prometheus-eksposisjonen og OTLP/HTTP-JSON fra en syntetisk strøm i skjema 1.3, inkludert geometriserien og etiketten class, lest nøyaktig av prometheus_client og OTLP-protoen, akseptert av promtool 3.5.0 check metrics uten lint-problemer, og sendt uendret gjennom OpenTelemetry Collector contrib 0.135.0 (datastyrt: verktøy hentet med festet SHA-256, utdata sjekket inn).
  • Banebestemmelse for Mars, kjøring 2 (0,36, WP-14, CAP-30): mars_od::fit_damped skalerer normalmatrisen med diagonalen og demper steget (Levenberg-Marquardt), etter at den registrerte Gauss-Newton-tilpasningen feilet på en matrise der den rå diagonalen spenner over åtte størrelsesordener. Registrert separat (xval/mro-od/PREREGISTRATION-RUN2.md, samme bue, terskler og redigering). På de scorede MRO-passeringene ligger banen innenfor 0,36 km RMS (0,53 km maksimum) av MROs navigasjonsrekonstruksjon, terskler nådd. Doppler etter tilpasning er 48,6 mHz mot terskelen på 30 mHz, ikke nådd (funn festet). En endring som bare gjelder scoring, R2-A1, er oppgitt i docs/revisions. Raden forblir MODELLED.

  • Rampet 2-veis Doppler-modell for Mars og banebestemmelse (0,36, WP-14, del av CAP-30, trinn 2): mars_od forutsier DSNs rampede 2-veis Doppler i X-bånd fra ODF-ramptabeller (lysgangtid, Shapiro, troposfære, stasjonstid, DSN-stasjoner via CIO-kjeden og IERS EOP) og tilpasser en Mars-orbiter (GMM-3, tredjelegemer, SRP, luftmotstand). naif_kernel leser SPK-type 1 (kontrollert mot CSPICE) og gravity_sh::from_shadr leser PDS SHADR-felt. Forhåndsregistrert mot MROs navigasjonsrekonstruksjon på ekte MRO-passeringer (datastyrt, scripts/fetch_mro_od.sh, månedlig CI): den forutsagte Doppleren stemmer med observasjonene til 12,5 mHz (terskel 30 mHz, nådd); den registrerte banetilpasningen feilet på den scorede buen og ga ingen bane (funn festet). Raden forblir MODELLED.

  • Leser for DSN Orbit Data File (0,36, WP-14, del av CAP-30): odf::parse_odf leser TRK-2-18 ODF-er. På en ekte ODF fra Mars Reconnaissance Orbiter (NASA PDS, medfølgende) stemmer leseren med PDS-etikettens antall poster, gruppeposisjoner, stasjoner og tider, og alle datatypene er kjent. Etikettens tabell for filslutt er én rad for kort i forhold til filen, en inkonsistens i etiketten registrert som funn. MODELLED. Banebestemmelse på disse dataene er ikke gjort ennå.

  • TWSTFT-budsjett og stabilitet ved tidsoverføring: typen time-transfer-budget (0,36, WP-14, FUT-19).

    • Toveisligning: twstft_budget løser den for T_A − T_B med utstyrsforsinkelser i stasjonene, den ionosfæriske asymmetrien opp/ned i Ku-bånd, forskjellen i transponderforsinkelse og Sagnac-leddene, og gjenvinner direkte modellen til 1e-15 s.
    • Usikkerhetsbudsjett: kombinert kvadratisk, med lenkens TDEV som ledd av type A.
    • Lenkestøy: toveisserien får et gulv av flicker-fasestøy, en døgnlig ikke-resiprositet og en konstant resiprositetsrest. Pakken timetransfer med hvit jitter er uendret.
    • Ekte serier: stabiliteten til oppgitte serier fra BIPM Circular T, MJD,ns-CSV eller IGS stasjonsklokker.

    MODELLED. Nytt medfølgende scenario time-transfer-budget. PPP-tidsløsningen er VALIDATED separat mot IGS-stasjonsklokken på grenen for GNSS-virkelighetsdata.

  • Oppvarming ved innflyging, EO-radiometri og stigetap (0,36, WP-14, CAP-28): tre nye typer.

    • entry-heating: en innflyging med 3 frihetsgrader og punktmasse over en roterende Jord eller Mars med oppvarming i stagnasjonspunktet etter Sutton-Graves.
    • eo-radiometry: SNR for avbilder, MTF ved Nyquist, relativ kantrespons og GIQE 4 NIIRS.
    • ascent-losses: en gravitasjonssving-oppstigning i flere trinn med tap fra tyngdekraft, luftmotstand, styring og mottrykk, kontrollert med den eksakte identiteten ideell dv minus tap.

    Innflygingens maksimale retardasjon ble kontrollert mot den publiserte nominelle verdien for Stardust under en forhåndsregistrert terskel: 35,44 g mot 33,4 g (+6,1 %, terskel 10 %). Den raden er VALIDATED. Oppvarming, radiometri og oppstigning er MODELLED. Nytt er også: reentry::us76_pressure, medfølgende scenarioer entry-heating-stardust, eo-radiometry og ascent-losses, og docs/ENTRY-EO-ASCENT.md.

  • Holdningskontroll med reaksjonshjul: typen aocs (0,36, WP-14, CAP-21). En treghetspekende sving av et stivt legeme med tre eller flere balanserte reaksjonshjul under MRP-tilbakekobling, med minimumsnorm hjulmomenter begrenset til hver motors grense (aocs). Den kan også lukke sløyfen på et multiplikativt EKF fra en simulert gyro og stjernekamera (aocs_mekf). Sløyfen med sann tilstand ble sammenlignet med Basilisk 2.9.1 på tre tilfeller forhåndsregistrert før koden fantes (tre ortogonale hjul, en pyramide med fire hjul, et mettende tilfelle). Hver MRP-komponent, kroppsrate, hjulhastighet og motormoment stemte ved hver sampling, verst 2.4e-14 i sigma og 2.9e-11 rad/s i hjulhastighet. Denne raden er VALIDATED; MEKF er MODELLED (NEES-konsistens). Nye medfølgende scenarioer aocs-slew og aocs-slew-mekf, og docs/AOCS.md.

  • Planlegging av bakkekontakt og DVB-S2 ACM (0,36, WP-14, CAP-22/23): to nye scenariotyper. acm-link gir, for én satellitt over én stasjon, Es/N0 for hver passering og MODCOD-en for DVB-S2 som velges langs den (terskler fra ETSI EN 302 307-1 tabell 13 pluss en margin). Den gir også datavolumet ACM flytter mot grunnlinjen med konstant koding. contact-schedule gjør det samme for flere satellitter over flere stasjoner og bygger en konfliktfri kontaktplan (antenneomstilling, én stasjon per satellitt, prioritetsvektet levering begrenset av hver kø). Den rapporterer en grådig plan med marginalverdi, en først-til-mølla-grunnlinje og det eksakte optimum på små mengder, med den grådige planens optimalitetsgap. Tilgangsvinduene kommer fra den VALIDATED prediktoren for tilsynelatende passeringer. Nye medfølgende scenarioer acm-link og contact-schedule (illustrerende inndata) og docs/CONTACT-SCHEDULING.md. MODELLED (to nye registerrader).

  • Doppler-posisjonering med Starlink mot et publisert eksperiment (0,36, WP-14, del av CAP-11, MODELLED). Dette er en forhåndsregistrert proxy-sammenligning av Doppler-modusen i leo-pvt med forhåndsinnstillingen starlink-sop mot persentilene for datasett 3 i «Unveiling Starlink for PNT» (NAVIGATION 72(1), 2025, doi:10.33012/navi.685). Modellen brukte 3 satellitter (en maske på 47 grader valgt etter en fast regel), ingen høydestøtte og en Doppler-sigma på 30 Hz, over 200 seeder. Dens 3D-feil i 90-persentilen er 92,2 m ved 20 s og 870 m ved 8 s, mot de publiserte 2 m og 10 m, så begge terskler på faktor to er NOT MET. Modellen er pessimistisk, ikke optimistisk som forutsagt: tre faste satellitter gir langt mindre geometrisk variasjon enn eksperimentets 63 satellitter over 10 minutter med kanalbytte hvert 15 s. Begge bom er sikret med assert (tests/starlink_doppler_published_proxy.rs).

  • Optimerer for impulsive overføringer på DE440 (0,36, WP-14, CAP-20c/d): maneuver::optimise_transfer_kernel finner avgangs- og ankomstdatoene for en ballistisk overføring med to impulser og én omdreining som minimerer avgangs-C3 eller ankomst-V-uendelig innenfor type I eller type II. Den søker i et rutenett på 2 dager og forfiner deretter med 2D Nelder-Mead, på heliosentriske tilstander fra DE440-kjernen; den bygger på porkchop_kernel. Sammenligningen ble forhåndsregistrert (bf0439e8) mot en uavhengig optimerer med SPICE + pykep 3.0.1 + SciPy 1.18.1 på mulighetsvinduet Jord til Mars i 2026: alle fire optimaliseringer stemmer til 8.7e-13 relativt, med datoer innenfor 1e-5 døgn (VALIDATED, ny registerrad). Som sekundær publisert referanse stemmer NASA/TM-2010-216764 (håndboken for Jord til Mars 2026-2045) for minimum C3 av type II (9,182 mot 9,144) og minimum ankomst-V-uendelig av type II (2,564 mot 2,565). Minimum C3 av type I stemmer ikke: 10,535 mot 11,11 (-5.18 %), der bibliotekets uavhengige referanse stemmer med Kshana. Det bommet er registrert og sikret med assert.

  • Studie av månens referansestasjon (0,36, foranlediget av publisert materiale om en planlagt referansestasjon ved månens sørpol; kilder i docs/LUNAR-REFERENCE-STATION.md): typen lunar-station-coverage, en Monte Carlo-sveip av månens differensielle PNT-modell over et brukerrutenett ved sørpolen og et døgn med epoker, som gir per punkt og over regionen persentilene for korrigert og ukorrigert feil, tilgjengelighet med årsaker, dekning mot en oppgitt terskel, beskyttelsesnivåer, dekningsradius per asimut og budsjettet for korreksjonslenken. Den reduseres nøyaktig til lunar-differential-pnt ved ett punkt, én epoke og ett forsøk; aritmetikken ble regnet om med numpy under en forhåndsregistrert terskel (posisjoner og persentiler nådd; stasjonskorreksjonene bommet på sin på grunn av avrunding i dobbel presisjon, registrert). MODELLED; registerrad «Lunar reference-station coverage and accuracy map». Ikke tilknyttet eller støttet av noe byrå; ingen påstand om ytelsen til noe ekte system.

  • Forhåndsregistrert prediksjon: dekning fra månens referansestasjon (ikke en validering; MODELLED). docs/predictions/lunar-reference-station.md fryser, ved commit c05dac1d, resultatene fra lunar-station-coverage under de offentlig oppgitte forutsetningene, med SHA-256-hasher av inndata og resultater og en scoringsprotokoll fastsatt nå (faktor 2 for nøyaktigheter og beskyttelsesnivåer, 10 prosentpoeng for tilgjengelighet og dekning; en endret forutsetning får en ny datert prediksjon, aldri en redigering; et bom publiseres like tydelig som et treff). Hvert tall domineres av elementsettet til konstellasjonen med fire satellitter, som ikke er publisert og er ILLUSTRATIVE, og sier det. tests/prediction_frozen.rs vokter den; docs/VALIDATION.md får en seksjon «Pre-registered predictions». Ingen registerrad.

  • Utvidelser for månens referansestasjon (0,36; stasjonsstudiens begrensninger 2 og 3 og kildenes løsningsstil), hver valgfri på lunar-station-coverage og fraværende som standard, slik at alle eksisterende dokumenter, den frosne prediksjonen medregnet, er uendret: [receiver] (flerveisfeil a + b exp(-el / el0) hos brukeren og stasjonen, stasjonens valgfritt Gauss-Markov over epoker, DLL-kodestøy fra C/N0, biaser mellom kanaler; verdiene er ILLUSTRATIVE på Månen); orbit_err_growth_m_per_s (lineær vekst av den kringkastede banefeilen over korreksjonsforsinkelsen, ILLUSTRATIVE); [solution] (høydebegrensning, et minimum på tre satellitter med den, et vindu for statisk bruker over epoker). To tillegg til sammenligningen med publiserte påstander, hvert forhåndsregistrert alene før sin kjøring, står ved siden av den uredigerte registrerte kjøringen: K5 med vekst feiler ved alle rater; med kildenes løsningsstil feiler K1 til K5 og K6 består (1 av 6), der R300 korrigert p95 3D-feil faller fra 280,6 m til 2,11 m. MODELLED; tre registerrader.

  • Horisontmasker for månens terreng (0,36; den første begrensningen i studien av månens referansestasjon): en valgfri seksjon [terrain] på lunar-station-coverage (stasjonen og hvert brukerpunkt) og moonlight-service-volume (hvert rutenettpunkt) gir hvert sted en asimutavhengig horisont i tabellformatet for skyline fra 0,36, fra en oppgitt profil merket med sin kilde (station_horizon, user_horizon) og/eller en strålemarsj over en polar DEM (dem_path) langs storsirkler på månekulen med eksakt krumning. Inkluderer et utsnitt på 0,98 MB av den offentlig tilgjengelige polare LRO LOLA-DEM-en LDEM_75S_240M ved sørpolen, resamplet med blokkmiddel 5 x 5 til 1200 m (data/lunar-dem/, med sin NOTICE, SHA-256 og scripts/make_lola_south_polar_crop.py), og scenarioet scenarios/lunar-station-coverage-terrain.toml som bare finnes i repoet. Kontrollert mot horisonter i lukket form (bar kule, krater i et platå, rasterisert kjegle); MODELLED, registerrad «Lunar terrain horizon masks from a stated profile or a polar DEM». Uten seksjonen er hvert dokument, enhetsblokken medregnet, byte-identisk.

  • Geometribevisst tillit (designnotat for geometri 0,36, avsnitt 4). Hver receiver-trust-epoke, statisk eller fartøy, batch eller live, har sin satellittgeometri: good, degraded (årsaker few-satellites, high-pdop, high-hdop, og den informative sky-blocked) eller unknown der loggen ikke gir noen satellittgeometri, med HDOP, PDOP, VDOP og de brukte satellittene. Den utledes fra elevasjonene og asimutene mottakeren rapporterer (NMEA GSV, UBX NAV-SAT) gjennom den eksisterende kjernen orbit::dop, eller tas fra NMEA GSA. Hver epoke har også en etikett, good, fair eller poor, alltid rapportert og aldri scoret, og et notat med HDOP, PDOP, VDOP, antall satellitter og signaltap i ord. Et fartøys score får en monitor geometry som ikke trekker noe med mindre geometrien er dårlig (HDOP over 4, PDOP over 6 eller færre enn 5 brukte satellitter), og deretter stiger gradvis til et tak på 15 poeng; geometri alene når høyst det degraderte båndet, aldri det ikke-pålitelige (ingen alarm). Hvert fradrag får en klasse, geometry, environment eller inconsistency, slik at en dårlig himmel ikke leses som et angrep. loss-of-lock er geometry når satellittene som gikk tapt alle var under 15 grader ved sin siste rapport; et fradrag for dårlig geometri er inconsistency når HDOP som mottakeren oppgir avviker fra den oppgitte himmelen med mer enn max(1,0, 25 % av utledet HDOP), slik at en forfalsket dårlig himmel ikke kan kjøpe etiketten. En ny tabell [geometry] oppgir hver terskel med sin opprinnelse (HDOP 4, PDOP 6, minst 5 brukte, sigma_UERE 1,5 m, en HDOP-toleranse på max(1,0, 25 % av utledet HDOP) der 25 % er et representativt valg for mottakere med klokker per konstellasjon eller delmengdeløsninger, 15 grader; tallene fra IEC 61108-1 og GPS SPS slik de er sitert, som må kontrolleres mot standardenes tekst). Totalt signaltap merkes ikke som himmel: når satellitter i sikte ikke spores og DOP for satellittene i sikte er god (og de usporede ikke er begrenset til én halvdel av horisonten), har epoken signal_loss og geometrifradraget er environment. En oppgitt HDOP eller PDOP på 99 eller mer, GGA-kvalitet 0 og GSA-modus 1 leses som ingen posisjonsbestemmelse, ikke som DOP. Taket (cap_points 15), rampens slutt (full_ratio 1,5) og gulvet (floor, som standard scorens degraded_min) står i [geometry], det samme gjør etikettens gode nivåer (HDOP 2, PDOP 3, 6 satellitter, representativt); taket som gjelder er min(cap_points, 100 - floor), så en tabell [score] som hever degraded_min (også en på 0,35) senker taket i stedet for å bli avvist, og et gulv under degraded_min avvises. MODELLED; veiledende programvare, ikke typegodkjent navigasjonsutstyr (IEC 61108, IEC 61162): operatøren er fortsatt ansvarlig for fartøyets navigasjon.

  • Geometrien når hver flate: resultat-JSON (epochs[].geometry, class på hvert fradrag, geometry_model, geometry_summary), live JSON-linjene (skjema 1,3), Python- og WebAssembly-funksjonene receiver_trust, assess_vessel_log og receiver_trust_replay, MCP-verktøyene assess_*, bevispakker (epochs.json, config.json, et geometrifelt på sammendragssiden) og trust-telemetry (Prometheus kshana_trust_geometry* og en etikett class på kshana_trust_reason_active, OTLP kshana.geometry.*, egne CEF-felt cs6 (geometristatus og klasser), cfp3 (HDOP) og cfp4 (PDOP), kontrollert mot begge CEF-referanseparserne, og LEEF geoStatus, geoHdop, geoClass). Geometrietiketten eksporteres også, lagt til etter alle tidligere serier og felt og bare for inndata som har den: Prometheus kshana_trust_geometry_label{label} og kshana_trust_geometry_vdop, OTLP kshana.geometry.label og kshana.geometry.vdop, LEEF geoLabel, geoPdop, geoVdop, geoUsed, og CEF et tredje felt cs6 (etiketten) og cn1 (brukte satellitter); VDOP finnes ikke i CEF (flyttallsfeltene er tatt). Begge CEF-referanseparserne leser etikettilfellene tilbake slik de ble skrevet (endring 5: 176 linjer, 172 tolket av pycef, 176 av Logstash). En oppgitt HDOP som den oppgitte himmelen ikke forklarer, flagges på hver epoke og telles (geometry_summary.hdop_mismatch, en linje på bevissammendragssiden), og scores bare når geometrien er dårlig. Signaltap eksporteres for seg, siden geometristatusen forblir degraded mens det varer: Prometheus kshana_trust_geometry_signal_loss, OTLP kshana.geometry.signal_loss, LEEF geoSignalLoss=1; i CEF vises det som klassen environment i cs6.

  • orbit::dop_cofactor: kovariansfaktoren (HᵀH)⁻¹ bak orbit::dop, utskilt fra den med den samme aritmetikken.

  • Registerrad «Position error from geometry: RMS error = sigma_UERE x DOP» (MODELLED, intern konsistens): en Monte Carlo med seed av motorens minstekvadraters posisjonsbestemmelse på de 8 DOP-geometriene som stemmer med gnss_lib_py, mot kovariansfaktoren til den validerte DOP-kjernen, med toleranser forhåndsregistrert før første kjøring og to negative kontroller som feiler slik de skal; ved siden av en tidligere kontroll på fire håndvalgte himler med kjikvadrat-konfidensintervaller, rapportert slik den ble kjørt, før forhåndsregistreringen.

  • Asimutavhengige skyline-masker (src/skyline.rs, docs/SKYLINE.md, punkt 1 i designnotatet): en elevasjonsgrense som avhenger av asimut, det punktvise maksimum av tabeller (hver interpolert for seg, brutt rundt ved 360°), en gatekløft i lukket form (med valgfrie åpne ender), sektorer med skarpe kanter og en terrengprofil med Jordens krumning; den effektive grensen er max(mask_deg, skyline). Fire REPRESENTATIVE forhåndsinnstillinger med oppgitt opprinnelse (city-street, harbour-approach, fjord, container-terminal), som kan overstyres felt for felt. En valgfri seksjon [skyline] i gnss-sim, jamming, leo-pvt (hver modus, polarsveipet medregnet), leo-pass og opplæringsfilene for nmea-scenario, og i orbit og integrity gjennom en ny bruker på bakkested, user_site = { lat_deg, lon_deg, height_m } (geodetiske sikteviklinger på den roterende Jorden, med den geodetiske oppretningen for ARAIMs horisontale og vertikale oppdeling; hver sampling er ett absolutt tidspunkt, epoch + t, som elementsett, kringkastede efemerider og SP3-filer føres frem til fra sine egne epoker, datert fra den nyeste satellittepoken når ingen epoch er oppgitt; en user i bane avviser en skyline). Resultater får skyline { source, open_fraction, provenance } og masked_by_skyline per sampling. Uten seksjonen er hvert scenario byte-identisk med 0.35.0, kontrollert mot sjekksummer fra utgivelsescommitten. Seks medfølgende eksempler: orbit-urban-canyon-skyline, integrity-harbour-approach, gnss-sim-container-terminal-skyline, jamming-harbour-approach-skyline, leo-pvt-fjord-skyline og kampanjen leo-vertical-autonomous-vehicle-skyline (bykløften for det autonome kjøretøyet som en flat grense og som en gate; den eksisterende kampanjen er uendret). MODELLED.

  • Funksjoner for himmelgeometri (src/geometry.rs, punkt 2 i designnotatet): sky_geometry (synlige og maskerte satellitter fra et sted, et tidspunkt og konstellasjonsforhåndsinnstillinger, to-linjers elementsett (tle, høyst 4 MiB, propagert av motorens SGP4 til en UTC-epoch) eller gitte satellitter; sky_source og sky_statement sier om himmelen er representativ eller den himmelen elementsettene gir ved den epoken, ikke en måling; tle_skipped lister hver ubrukte linje med årsak; grenser for inndata på 2000 satellitter over horisonten, kontrollert før en systemtabell bygges, og 16 mottakerklokker; de fem DOP-ene; ENU-kofaktoren og kovariansen med én klokke per system eller én felles; den horisontale feilellipsen ved én sigma og ved en oppgitt konfidens), sky_monte_carlo (minstekvadratfeil med seed, høyst 5000), skyline_presets, skyline_profile og skyplot_svg. orbit::dop_cov eksponerer kovariansen bak orbit::dop, som nå er dens reduksjon (de validerte skalarene er uendret). Flater: kshana sky og kshana skyline, Python- og WASM-funksjoner med de samme navnene, og MCP-verktøyet sky_geometry (40 verktøy), og notatboken notebooks/geometry.ipynb (med speilet .md; kjørt av tests/python/test_notebooks.py). Hvert resultat har etiketten MODELLED, erklæringen om feilmodellen og den veiledende merknaden.

  • Register: fem rader for skyline og himmelgeometri. VALIDATED, hver i en sammenligning forhåndsregistrert før den uavhengige referansen ble kjørt: Azimuth-dependent skyline mask: visible set, azimuth and elevation, and DOP under the mask mot Orekit 12,2 (TopocentricFrame, ElevationMask) og gnss_lib_py 1.0.4 (get_dop), verste avvik i sikteviklinger og masker 1.1e-12° mot 1e-9°, identiske synlige mengder, DOP 3.3e-13 relativt (xval/orekit-skyline/); Horizontal error ellipse and per-system cofactor from the geometry covariance mot numpy linalg.inv og linalg.eigh (standard P2), 270 tilfeller, akser 5.1e-13 relativt (xval/numpy-ellipse/). MODELLED: reduksjonene for kløft, sektor og terreng; forhåndsinnstillingene; sammensetningen av himmelgeometri (forhåndsinnstilt himmel, Monte Carlo-sky).

  • Med radene for geometritillit, skyline og månens referansestasjon har registeret 274 rader: 134 validert, 136 modellert, 4 partner.

  • Månens referansestasjon: laboratorium for stasjonstid (MODELLED). En valgfri blokk [time_lab] på lunar-time-budget (src/lunar_time_lab.rs). Den modellerer en stasjonsklokke (som standard klassen miniRAFS, en hvilken som helst navngitt klasse, eller et enhetskort tilpasset oppgitte stabilitetspunkter) styrt mot LTC, deretter frittgående eller styrt på nytt hvert N sekund. Den gir tidsfeilkurven x(t), tiden til 1, 10 og 100 ns (halvering ved siden av den lukkede formen) og det dominerende leddet per horisont, alt med enheter. Styringsresten er ILLUSTRATIVE. LTC-raten utledes ikke på nytt og beholder sin egen VALIDATED rad. Nanosekundmålet i det offentlige ICG WG-B-materialet om Lunar PNT (juni 2024) er sitert som en kildeerklæring, ikke en påstand. Klokkerekkefølgen optisk < PHM < RAFS < miniRAFS holder fra 1 s til 7e5 s, og testen fester krysningen mellom PHM- og RAFS-kurvene nær 7.5e5 s. Denne krysningen er en egenskap ved klokkemodeller med én støytype (ren flicker FM mot ren hvit FM), ikke et fysisk resultat. Uten blokken er rapporten, dens tabell og dens sammendrag uendret. Eksempel: scenarios/lunar-station-time-lab.toml. Legger til én registerrad, merket MODELLED.

  • Månens referansestasjon: stasjonsgeodesi (MODELLED). Valgfrie inndata extra_reflectors og extra_beacons på lunar-llr-datum legger til en blokk station_geodesy. Datuminformasjonen i fem matriser fra det arkiverte laseravstandsutsnittet kombineres med det en lagt til retroreflektor og et lagt til VLBI-fyr på oppgitte steder ville bidra med. Reflektoren avstandsmåles ved de arkiverte epokene den kan se, med deres arkiverte vekter. Fyret bruker nettverket og planen fra lunar-frame-campaign, med stasjonene fastholdt. Blokken gir hver Helmert-1-sigma før og etter, og forholdet mellom dem. Dette er Cramér-Rao-grenser for et redusert parametersett, på en ILLUSTRATIVE plan og et illustrativt sted. Fraværende eller tomme inndata lar rapporten være byte-identisk. Eksempler: scenarios/lunar-station-geodesy-baseline.toml og -with-station.toml. Legger til én registerrad, merket MODELLED.

  • Månens referansestasjon: sammenligning med publiserte påstander (MODELLED). Hver numeriske påstand i fem offentlige kilder er listet med eksakt ordlyd, side og oppgitte forutsetninger, og klassifisert som sammenlignbar, delvis sammenlignbar eller ikke sammenlignbar (tests/fixtures/lunar_station_published/CLAIMS.md; kilder med URL, hentedato, SHA-256 og lisens i tests/fixtures/lunar_station/SOURCES.md). De delvis sammenlignbare påstandene ble scoret under seks ensidige terskler forhåndsregistrert før kjøringen (PREREGISTRATION.md, revisjon 2, 05bf9a19): 1 av 6 påstander innenfor den forhåndsregistrerte terskelen (forhåndsregistrert 05bf9a19). Dekning er 0,00 mot >= 0,95 på begge sirklene ved sørpolen, og korrigert p95 er 280,6 m mot <= 1,5 m. Årsaken er satellittenes banelementer, som ingen kilde publiserer: på de ILLUSTRATIVE elementene i treet er fire satellitter i felles sikt i 8 % av epokene, ved nesten singulær geometri. Kjøringen gjengir ikke påstandene på disse elementene og er ikke belegg for at påstandene er feil. Festet i tests/lunar_station_published_oracle.rs. Én registerrad, merket MODELLED med funnet.

  • Månens referansestasjon: dataklarhet for klokkefiler. realdata::clk::rinex_clock_series oppgir nå tidssystemet for sine epoker. Det er verdien TIME SYSTEM ID, eller, når den ikke er deklarert, standardverdien for headerens satellittsystem. Resultatet sier også om systemet var deklarert. Funksjonen avviser et ukjent tidssystem (for eksempel en månetidsskala), en fil med blandede systemer uten deklarasjon og filer som er uenige, i stedet for å lese dem som GPS-tid. Den leveres med en syntetisk klokkefiksjon for stasjonen. Intet format for korreksjonsfiler er definert, fordi det ikke finnes noe offentlig.

Endret#

  • Moduldokumentasjonen for fusion::ukf, fusion::tightly_coupled og fusion::gnss_ins_ekf kaller ikke lenger UKF-navigatoren med 17 tilstander, den tette koblingen med full INS og den eksplisitte klokketilstanden fremtidig arbeid; de peker til hybrid_ukf, tightly_coupled17 og carrier_tc.

  • RINEX 4 avvises ikke lenger (0,36, WP-07): en RINEX 4-navigasjonsfil ble tidligere avvist med vilje; den leses nå (se Lagt til). For observasjonsfiler fra versjon 4 og senere matches headeretiketter bare i kolonne 61-80, slik at de nye frittekstpostene ikke kan passere som etiketter.

  • ionex::parse_ionex leser ekte IONEX-filer (0,36, WP-07): en full post med 16 verdier fyller kolonne 61-80, som leseren tok for en etikett, så den returnerte None på hver ekte IONEX-fil. Den leser nå en post der etikettfeltet er numerisk som verdier. Ingen utdata som ble levert brukte den.

  • Mottatte effekter for Galileo E1 og E5a etter OS SIS ICD Issue 2,1 (revisjon, 2026-10-14). Spektrumbåndene galileo-e1 og galileo-e5a, og de GNSS-offerne i LEO-signaler som henter effekten sin fra dem, bruker nå minimumseffektene mottatt fra tabell 12 i Galileo OS SIS ICD Issue 2,1: −157,25 dBW (var −157,0) og −155,25 dBW (var −155,0).

    • Ni scenarioresultater endres: spektrumeksemplene, spektrumkampanjen, tre LEO-robusthetsvertikaler og tre LEO-signaldesign. Effektiv C/N0 endres med −0,25 dB og J/S med +0,25 dB på disse båndene.
    • Hver endrede verdi (1766, gammel → ny) står i docs/revisions/CAP12-galileo-icd21-power-changes.md og dens CSV, sammen med dokumentasjonstabellene som endret seg. Ingen registerrad endrer status.
    • Andre del, samme dag: LEO-signaloffer galileo-e5b (−155,0 → −155,25 dBW, tabell 12 E5b) og galileo-e5-altboc (−152,0 → −152,24 dBW). ICD-en har ingen rad for fullt E5-bånd, så AltBOC-verdien er effektsummen av totalene for E5a og E5b i tabell 12, bygget slik den gamle verdien ble. Tre resultater for LEO-signaldesign endres (64 verdier: disse mottatte effektene og LEO-til-GNSS-degraderingen av C/N0 på de to ofrene), listet i den samme revisjonen (§5) og CSV-en. Ingenting annet endres.
  • Retting av atmosfærisk S2-tidevann (tides::atmospheric_tide). S2-harmonikkene for lufttrykk hos Ray (2001) er koeffisienter til unormalisert P_nm med cosinus-fasetilbakeslag; de ble brukt som fullt normalisert, med tilbakeslaget som IERS sinus-føring. De går nå inn delt på N_nm med ε = 90° − ψ; den nye tides::s2_air_waves gjengir modell A2 i GFZ STR06/01 tabell 5 for alle 21 bølger (verst 0,0005 cm, 0,05°; VALIDATED). Bare utdata med tidevann aktivert endres: Galileo CI-tilpasningen 0,132 → 0,133 m, Swarm-A-komponenter med 1–2 mm (forhåndsregistrert i xval/s2-air-tide-fix/).

  • Bare dokumentasjon: propagator::solve_kepler_checked, orbit::solve_kepler og ephem::solve_kepler er dokumentert som eldre løsere, numerisk uendret, med henvisning til kepler::solve_kepler_markley.

  • Status for D9 runde 3 (utck_bound). BIPM Circular T 465 kom ut 2026-10-12. Den forhåndsregistrerte prospektive scoringen er fortsatt ikke kjørt: utgave 465 har omtrent 285 testverdier, og stoppregelen trenger 1000, altså omtrent utgavene 465–468. Kjøringen trenger også de arkiverte filene per laboratorium fra 2026-09-30, fordi BIPM siden har skrevet om 87 av 113. Registerraden og testhodet sier det; testen, dens terskler og dens oppdeling er uendret.

  • Gjennomgang av dokumentasjonens riktighet (0,36). Veikart, funksjonsrader, statuslinjer i designdokumenter og modulkommentarer bragt i tråd med koden; ingen utdata endres. Punkter som allerede er bygget men fortsatt stod oppført som åpne er nå merket ferdige: ITU-T-maskekontrollene, holdover-scenarioet på 24 timer og klokkelogginnlesing (telecom timing), hurtigstartene for første minutt, Lense–Thirring og kryssjekken av Orekit-propagatoren, den ITRF-presise GCRS-kjeden, gyldne og kryssplattform-hasher, proveniens, ARAIM med flere feil (ADD v4.2), FDE for én satellitt, CRPA-biblioteket, CAI-grensen for fringe-flertydighet, dimensjonering av dekningsstrimler og 3D-banevisningen, stivlegemets holdningsdynamikk, OMM-skriveren og leseren for NAIF-kjerner, DE440 månelibrasjon, setningen om hva en kjøring betyr i lekeplassen, PositioningFom, den tett koblede navigatoren med 17 tilstander og gravity-map-typen. Radene sier også presist hva som fortsatt er åpent (for eksempel JD i to deler i orbit::Propagator, leseren src/ionex.rs mot et ekte produkt, og utelukkelse av flere satellitter i raim). Den manglende docs/design/evidence/cn0-m2m4/RESULTS.md er skrevet fra en fersk kjøring av testene (M1–M4 består), og utkastet til IQ-validering rettet mot partnere har gjeldende registertall.

  • Minnekodene for Galileo E1 følger ikke lenger med. data/galileo-os-sis-icd/C7_E1B.txt og C8_E1C.txt (ICD vedlegg C.7/C.8) er fjernet fra repoet og pakkene. ICD-ens vilkår (sitert i LICENSING.md) lar en bruker lagre kodene med kilden oppgitt og bruke dem i et produkt, men tillater videredistribusjon bare til ikke-kommersielle formål, og Kshana tilbys også under en kommersiell lisens. galileo::e1b_table / e1c_table returnerer nå en Result og leser brukerens egen kopi fra KSHANA_GALILEO_E1B / KSHANA_GALILEO_E1C, eller, i en kildeutsjekk, fra data/galileo-os-sis-icd/, der det nye scripts/fetch_galileo_e1_codes.sh trekker dem ut av ICD-ens PDF (kontrollert med hash). galileo::E1B_TABLE_TEXT / E1C_TABLE_TEXT er fjernet. Uten tabellene gir signalene for Galileo E1 (galileo-e1b, galileo-e1c) en feil som forklarer hvordan de skal skaffes, og E1-testene hoppes over med en melding. Med tabellene på plass er hver E1-utdata uendret. Ingen scenario-, golden- eller spektrumutdata bruker kodetabellene. Testfiksturene for E5a vedlegg C.3/C.4 (LFSR-referansen i tests/iq_signals.rs) behandles på samme måte: hentet av det samme skriptet, git-ignorert, og testen hoppes over uten dem.

  • Portabel matematikk overalt (0,36, STUDIO-15): hver transcendent f64-funksjon i biblioteket, og samplerne rand_distr for normal-, gamma- og eksponentialfordeling, beregner nå gjennom det rene Rust-biblioteket libm (portable_math::PortableFloat, portable_distr), slik at et native bygg og WebAssembly-bygget returnerer byte-identisk resultat-JSON for alle 141 medfølgende scenarioer og for den korte IQ-kjøringen. Prisen er at de siste bitene i resultater beregnet med vertens matematikkbibliotek er flyttet: 98 av de 141 medfølgende scenarioene endret seg, 43 ikke; 5 endret seg med mer enn 1e-3 i sitt største felt, og resten med mindre. Hver flyttet verdi er listet gammel -> ny i docs/revisions/STUDIO15-portable-math-rebaseline.md (med en CSV av alle 136 127 flyttede tall); ingen terskel, toleranse eller grense er endret. Publiserte tall som endret seg: tilgjengelighet for europa-surface-pnt med avstanden til Jorden 0,719 -> 0,713 og RMS-feil 86,147 -> 86,499 m (én epoke på tilgjengelighetskanten løses nå på samme måte overalt; den skrev ut 0,725 / 85,800 m på macOS arm64); stasjonsfeil for lunar-joint-od-clock 3,541350 -> 3,536885 m med VLBI og 2183,558 -> 2184,021 m uten; paper/crossover/inertial.json, åtte verdier av vibration_psd med 3 enheter i siste desimal (erratum i den tekniske rapporten); det utgitte dokumentet cislunar-observability i størrelser på avrundingsgulvet (åtte verdier utover seks gjeldende siffer, opptil 6.8e-5 relativt; ingen rangering eller terskel flyttet seg). De festede hashene til byte-identitetsvaktene (skyline_scenarios, geometry_corpus_identity, geometry_trust_no_change) er satt på nytt til en navngitt «0,36 portable»-grunnlinje med verdiene fra 0.35.0 beholdt som historisk register; den frosne prediksjonen for månens referansestasjon er urørt og dens portable gjenkjøring er lagret ved siden av (docs/predictions/*.portable-0.36.json). tests/lunar_joint_od_numpy_oracle.rs (den validerte raden for felles OD på Månen): fiksturer eksportert på nytt og numpy-sammenligningen kjørt på nytt med numpy 2.4.6, den registrerte versjonen, skriptet og terskelen uendret; alle seks nettverk består (docs/revisions/STUDIO15-lunar-joint-od-oracle-rerecord.md). Arbeidet i batch 2-3 som ble flettet inn etter STUDIO-15 bruker også portabel matematikk (457 kallsteder i 62 filer); det det flyttet står i docs/revisions/STUDIO15-batch4-rebaseline.md: 12 medfølgende scenarioer (største relative endring 5.2e-8, ingen utskrevet størrelse flytter seg), 28 skyline-vaktrader satt på nytt, M2M4-sjekksummen for iq_campaign, de eldre referansehashene for gnss-ins, datumsigma for fyr uten observasjon (632,3769 -> 632,3772 m), og to registrerte funn (CR3BP DRO-lukkinger; CRPA A3, 194 av 456 lenker). Greenhalls eksakte edf beholder sin validerte terskel med en dobbel-dobbel logaritme i kjernen (docs/revisions/STUDIO15-greenhall-edf-portable.md), og testbenk-referansen for gps-sdr-sim ble kjørt på nytt på de flyttede NMEA-eksportene, med alle terskler holdt (docs/revisions/STUDIO15-testbench-gpssdrsim-rerun.md).

  • README: raden for månesuiten oppgir evidensnivået til hver del (den sa at alle var MODELLED).

  • realdata::clk::rinex_clock_series returnerer RinexClockSeries (serie, griddingslogg, tidssystem, om det var deklarert, posttype) i stedet for en tuppel (PhaseSeries, GriddingLog). Den faller nå tilbake fra satellittposter (AS) til mottaker-/stasjonsposter (AR) med det forespurte navnet.

  • Ingen score endres med mindre geometrien er dårlig; etiketten rapporteres alltid. Med god eller grei geometri (en åpen himmel med bare GPS og 8 satellitter medregnet) eller ukjent geometri (monitoren kjører ikke) er hver score som i 0,35: tests/geometry_trust_no_change.rs holder begge eksempelsesjonenes utdata og tests/geometry_corpus_identity.rs hvert innsjekkede NMEA-korpus for fartøy (også som åpen himmel med bare GPS) og opplæringsscenarioene for mannskap til bytene fra 0.35.0 når de tillagte nøklene er fjernet; i de to opplæringsscenarioene der jamming gjør geometrien dårlig, avviker de dårlige epokene bare ved geometrifradraget. En logg med dårlig geometri mister opptil 15 poeng den ikke mistet i 0,35. Ellers tilsiktede endringer, alle tillegg: nøklene ovenfor i resultat-JSON og bevispakker (score_model.weights er uendret); skjemaet for live JSON-linjer går fra 1,2 til 1,3 (geometry lagt til, class i hvert fradrag); utdragssammendraget får geometry; telemetrien får geometriserier, felt og etiketten class bare for inndata som har dem, slik at en strøm eller et resultat fra 0,35 gjengis byte for byte som før. geometry er det 17. monitornavnet; det står sist i monitors_run når det avgjorde (et fartøy der loggen gir geometrien; en liste fra 0,35 beholder sin rekkefølge og sammendragets monitorantall øker med én) og har ingen oppføring i [score.weights] (å sette en avvises: dets fradrag settes i [geometry]).

  • tests/fixtures/dop/NOTICE oppga lisensen til gnss_lib_py som Apache-2.0; utgivelsen 1.0.4 er MIT.

  • NMEA-leseren leser nå GSA (en kort GSA ignoreres, telles ikke som hoppet over) og beholder GSV-elevasjoner og -asimuter, også for satellitter oppført uten signal; UBX-leseren beholder elevasjon og asimut fra NAV-SAT. C/N0 leses nøyaktig som før.

  • Resultatendring: bredbånds- og sveipede jammere bruker nå Q = 2. Anti-jam-ligningen bruker lærebokens justering Q for spredt spektrum for disse jammerne, der den brukte 1. Q = 2 er hvit støy over hovedloben med signaleffekten i båndet normalisert; den er festet i testene til den lukkede formen fra navsignal.

    • Uendret: CW- og smalbåndsjammere (Q = 1), en ukjent jammertype (Q = 1, den mest skadelige verdien), og q_override.
    • Virkning: der en bredbånds- eller sveipet jammer virker, øker effektiv C/N0 med opptil 3,0103 dB, utledede J/S-terskler øker med 3,0103 dB, og nektingsradier i fritt rom krymper med 0,7071.
    • Endrede medfølgende scenarioer: 12 av 144 endres, alle som forhåndsregistrert (xval/jammer-q/PREREGISTRATION.md, resultater i xval/jammer-q/RESULTS.md):
      • jamming-demo: C/N0 +3,01 dB;
      • jamming-harbour-approach-skyline: min_tracking 6 → 7;
      • lunar-jamming: tapte satellitter 26 → 0, avstand ved tap av lås median 27,4 → 19,4 km;
      • tracking-loop: nektingsradius for sløyfedynamikk 75,2 → 53,2 km;
      • og kampanjene og spektrumkryssjekkene som inneholder disse.
    • Berørte forbrukere: typene jamming, lunar-jamming, tracking-loop og impairment-eval, jamming_kind_cross_check i spektrumtypene, den MODELLED referansekurven til IQ-kampanjen og standard-Q i labfit, og interop-sceneeksport.
  • JetBrains-plugin: ingen utdatert plattform-API eller API som er planlagt fjernet. De fem valgdialogene bruker en liten DialogWrapper med en rullegardin i stedet for den utdaterte Messages.showChooseDialog; filvelgere for én fil bruker konstruktøren FileChooserDescriptor i stedet for den utdaterte FileChooserDescriptorFactory.createSingleFileDescriptor(); animasjonen åpnes med BrowserUtil.browse(Path) i stedet for browse(File), som plattformen 2026,3 har planlagt fjernet. Since-build forblir 243. IntelliJ Plugin Verifier rapporterer Compatible uten bruk av utdatert API eller API planlagt fjernet mot 2024,3 (IC-243.21565.193), 2025,2 (IC-252.23892.409), 2026.2.3 (IU-262.10968.63) og 2026,3 EAP (IU-263.6259.32); verifyPlugin kontrollerer 2024,3 som standard og enhver liste oppgitt i KSHANA_VERIFY_IDES.

  • gnss_sim::run_gnss_sim og jamming::run_jamming returnerer Result: en ugyldig seksjon [skyline] er en feil når den kalles direkte, slik den allerede var gjennom api::run_toml, i stedet for en stille tilbakegang til den flate masken. Brytende endring for Rust-kallere av disse to funksjonene.

Rettet#

  • Kampanjescorer: en ekte falsk lås i sporeren ble aldri talt (iq::campaign). Sporerens kontroll av falsk lås flytter en kanal fra LOCKED til LOST idet den utløses. Scoreren merket kanalens neste oppdatering i stedet, som da var ulåst og derfor aldri ble talt. En false-lock-hendelse rapportert fra LOCKED er nå én episode på sitt tidspunkt, i kjøringen og i hver oppgitt hendelse som inneholder den. En som oppdages under innlåsing, eller gjentas av en kanal som allerede er LOST, er ikke en ny episode. En ny test driver en ekte falsk lås: en legitim GPS L1 C/A-bærebølge som trinnvis endres med 1/(2T) mens den er låst (tests/iq_campaign_false_lock.rs).

    • I referansekampanjen i tests/iq_campaign.rs endres bare PRN 11 for ramp/agc-3bit (episoder med falsk lås 0 → 1, 426 og 437 per låst time).
    • DIGEST-ene for cellene er festet på nytt.
    • Den forhåndsregistrerte festingen av scorede resultater er fortsatt aktiv og gjengir fortsatt nøyaktig: i hashen er bare de seks feltene som ble endret av denne rettingen gjort etter registreringen tilordnet tilbake til sine verdier før rettingen. De rettede verdiene er festet hver for seg.
    • Ingen terskel ble endret, og ingen VALIDATED rad, figur eller nettside-tall flyttet seg.
  • lunar-frame-campaign: et fyr uten observasjon rapporteres nå (funnet av MR-05). Rapporten får unobserved_beacons og warning bare når et fyr ikke har noen observasjon, og da kommer sigmaene til de observerte fyrene fra deres egen informasjon i stedet for å være null alle sammen. Datumet er uendret, og ingen standard, medfølgende eller publisert utdata flytter seg (docs/revisions/BEACON-unobserved-cell-changes.md).

  • Månens hovedakseramme (lunar_frame::icrf_to_moon_pa, brukt av lunar_od og LRO-tilpasningen): DE421-forskyvningen fra middel-Jord til hovedakse i moon_080317.tf ble brukt i feil retning og med feil Euler-rekkefølge, slik at den analytiske PA-rammen lå omtrent 208″ fra PA i stedet for på den. Den er nå transkribert slik SPICEs Frames Required Reading definerer den og stemmer med SPICE pxform('MOON_ME','MOON_PA') til 2.6e-16 rad; den analytiske PA-rammen er 6″ til 8″ fra DE440 PA (forhåndsregistrert e1ead19b, registrert på nytt be33382e etter at den første foreslåtte endringen bommet på terskelen 1e-12; docs/design/evidence/fut05b-me-pa-offset-sign/). Publiserte tall som flytter seg: LRO-tilpasningen (tests/agency_lro.rs) rå overlapping 53,8 → 39,9 m, dynamisk 12,6 → 12,05 m, redusert-dynamisk 6,65 → 6,67 m (terskler uendret). Den analytiske stakken stemmer nå med ANISE DE-klasse kryssvalidering (12,0 / 6,67 m) på begge nivåer; det tidligere gapet på det dynamiske nivået var denne feilen.

  • MCP-serveren avviser [terrain] dem_hgt (oppfølging av CAP-06b). Stien til terrengflisen for typen jamming står nå i inline_only::FILE_SOURCE_KEYS. En inline-flate avviser et scenario som navngir en, med en melding som verken inneholder stien eller en feil fra operativsystemet. Testen for vakten mot filkilder flagger nå også felt som slutter på _hgt.

  • Jd2::from_parts med en brøkdel i dagsdelen mistet brøkdelen i konverteringene for UTC, TAI, UT1 og Jordens rotasjon (én times dagsdel snudde Jorden 15° feil); dagsdelen normaliseres nå til et heltall. Ingen kaller i motoren ble påvirket: hver sender en heltallsdag, og hver utdata som ble levert er bit-identisk.

Planlagt#

  • Geometrien fra en oppgitt skyline (0,36 punkt 1, nå i motoren som src/skyline.rs): sky-blocked og open_fraction fra skylinen der inndataene gir en (asimutgapet som reserve), en hendelse med naturlig degradering (fjord eller terminal) i nmea-scenario, og designnotatets to maskerte geometrier i raden sigma_UERE x DOP, forhåndsregistrert som et tillegg.
  • Geometri for RINEX-logger med navigasjon (fra motorens egen posisjonsbestemmelse) og Android-logger (fra radene Status); begge leser unknown i dag. Geometri i $PKSHT (versjon 1 uendret i 0,36) og integrasjonene med Signal K og OpenCPN.
  • Et eksisterende gap, ikke introdusert i 0,36: når SNR-feltet til hver satellitt er tomt, utløses verken loss-of-lock eller fradrag for C/N0; totalt signaltap er bare synlig gjennom geometrimonitorens signal_loss (klassifisert environment). Et fradrag for det er planlagt.
  • En strøm i skjema 1,3 i de eksterne telemetriorakelene (Prometheus' tekstformatparser og OTLP-collectoren), som i dag bare dekker strømmer i 1,2.
  • En toveis hindring (en kløft eller en smal fjord) leses som signaltap i stedet for en blokkert himmel til skylinen er integrert.

[0.35.0] - 2026-10-12#

En passasje som navngir tredjeparts AI-klienter er utelatt her; den står i CHANGELOG.md på GitHub.

Verifikator for Galileo OSNMA#

  • Ny modul kshana::osnma og kshana osnma verify <input>: en åpen verifikator i ren Rust på mottakersiden for Galileo OSNMA. Den leser I/NAV-sider og rapporterer, per satellitt og epoke, om navigasjonsdataene er autentisert, med en årsak for hver feil eller forsinkelse: tolking av HKROOT og MACK, gjenoppbygging av DSM-KROOT og DSM-PKR, Merkle-verifisering av den offentlige nøkkelen, verifisering av TESLA-nøkkelkjeden, MACSEQ- og tag-verifisering for ADKD 0, 4 og 12 inkludert kryssautentisering, og et resultat i form av $PKSOS for mottakertillitsmonitoren. Utdata har en veiledende merknad om at statusen ikke er en tjeneste for navigasjonsintegritet. docs/OSNMA.md oppgir hva som verifiseres og ikke verifiseres, tidskravet, og at Kshana ikke gir noen rettigheter under EUs IPR-er for OSNMA ICD (brukere støtter seg på ICD-ens vedlegg E om tillatelse). Implementert mot SIS ICD Issue 1,1 og Receiver Guidelines Issue 1,3. Sider kontrolleres med CRC, og en bytestrøm fra u-blox UBX-RXM-SFRBX kan leses direkte (--format ubx). Standardtestene bruker syntetiske data og publiserte known-answer-tester for primitiver; en valgfri test leser en lokalt nedlastet kopi av de offisielle vektorene. Etter uavhengig gjennomgang henter verifikatoren tiden sin bare fra verifiserte TESLA-nøkler (en forfalsket delramme langt frem i tid kan ikke lenger slette en feil), lar en autentisering utløpe og følge IODnav i bruk, tar hensyn til verifiserte varselmeldinger (hvis Merkle-blad nå inkluderer det tilfeldige NPK-feltet) og NMA-status «don't use», holder dummy-tagger utenfor satellittstatusen, holder kjeder per CID med tilbakekalling og fornyelse, kontrollerer paddinghashen i KROOT, og begrenser lengder på UBX-rammer og arbeidet med TESLA-verifisering. En satellitt leses som autentisert bare så lenge de nyeste efemeride- og klokkedataene den sender er, bit for bit, dataene som ble autentisert (ikke bare under samme IODnav), en status eller tilbakekalling fra den uautentiserte NMA-headeren teller bare når to satellitter er enige eller en verifisert KROOT bærer den, en avspilt eldre KROOT kan ikke erstatte en kjede, og en stanset nøkkelstrøm rapporteres.

Lagt til (MCP-serverkanaler)#

    En passasje som navngir tredjeparts AI-klienter er utelatt her; den står i CHANGELOG.md på GitHub.

  • kshana-mcp --http <addr>, streambar HTTP, selvhostet. Loopback som standard; en adresse som ikke er loopback trenger --allow-remote og et bearer-token i KSHANA_MCP_HTTP_TOKEN; ingen verktøy leser eller skriver en sti (IQ-filverktøyene er av); grenser for forespørselsstørrelse, tid og samtidighet; ingen CORS-header; kontroller av Host og Origin. Kshana drifter ingen endepunkt (docs/deploy/mcp-http.md, med maler for Docker, Fly.io og Cloud Run).

Lagt til (flater)#

  • osnma_verify i Python og WebAssembly. Verifikatoren bak kshana osnma verify på bytes i minnet, som returnerer JSON-en --json skriver ut (veiledende merknad i feltet advisory; bare autentiseringsstatus, ikke en tjeneste for navigasjonsintegritet). De samme avvisningene som kommandolinjen. Ikke på MCP: inndataene er en lang rå mottakerstrøm som egner seg bedre for CLI og Python. docs/SURFACES.md og docs/OSNMA.md sier det.

  • trust_telemetry i WebAssembly, Python og MCP, med en plugin-kommando og en JetBrains-handling. Gjengir en tillitsstrøm eller et resultat fra receiver-trust som Prometheus-tekst, CEF- eller LEEF-syslog-linjer eller en OTLP-JSON-nyttelast, med kodererne kshana trust-telemetry bruker (kshana::surface::trust_telemetry); ingen socket og ingen klokke. Plugin: /kshana-trust-telemetry og ferdigheten trust-telemetry. JetBrains: Render Trust Telemetry. Funksjonene wasm og python og MCP-serveren aktiverer nå også otlp, som ikke legger til noen crate.

  • Paritetssveip. JetBrains-handlingene Validate Scenario, List Scenario Kinds og Assess Receiver Stream; kshana --help lister nå receiver-trust evidence, evidence, trust-telemetry og nmea-scenario; notatboken compliance-and-test-bench (compliance-kartlegging og testbenk-eksport); og hver gjenværende JetBrains-celle «CLI only» i docs/SURFACES.md er nå en eksplisitt N/A med sin begrunnelse.

  • En passasje som navngir tredjeparts AI-klienter er utelatt her; den står i CHANGELOG.md på GitHub.

Lagt til (bevispakker)#

  • kshana receiver-trust evidence og kshana evidence verify: signerte, verifiserbare bevispakker for en GNSS-tillitshendelse. En pakke samler det rå loggutsnittet og hele loggens SHA-256, konfigurasjonen med hver terskel, resultatene og årsakene per epoke, motorversjonen, et hash-kjedet manifest og et selvstendig HTML-sammendrag, signert med Ed25519 (en nøkkel fra kshana evidence keygen eller din egen fil; nøkler lagres aldri i en pakke og *.evidence-key er git-ignorert). verify kontrollerer hver hash, kjeden og signaturen og navngir nøyaktig hva som feiler; med --pubkey fester den signereren. Et RFC 3161-token kan legges ved og leses og bindes til manifestet (autoritetens egen signatur kontrolleres ikke av dette bygget; openssl ts -verify dekker det). Loggutsnittet er vinduets eksakte bytes der leseren rapporterer kildeomfang (NMEA, UBX, RINEX 3, Android), ellers hele loggen, og manifestet sier hvilket. Opprettelse og verifisering er rene offentlige funksjoner (kshana::evidence) som bygges for wasm32. Pakkene oppgir at de er en teknisk journal, ikke en juridisk vurdering. De nye avhengighetene er treet ed25519-dalek (BSD-3-Clause og Apache-2.0/MIT, minimale funksjoner) og en direkte zeroize (allerede i det treet) for å slette nøkkelmateriale. Se docs/EVIDENCE-PACKS.md.

Lagt til (tillitstelemetri)#

  • kshana trust-telemetry: GNSS-tillit som kilde til sikkerhetstelemetri. Leser tillitsstrømmen per epoke (JSON-linjer: score 0-100, bånd, årsaker) eller et batch-resultat fra receiver-trust og mater et Prometheus-endepunkt /metrics (localhost som standard), syslog-hendelser i CEF eller LEEF inne i en RFC 5424-konvolutt (UDP eller TCP), og, bak funksjonen otlp som er av som standard, eksport som OTLP/HTTP-JSON. Leveringen kjører på arbeidstråder med tidsgrenser for tilkobling og skriving, begrenset reconnect-backoff og en teller kshana_trust_syslog_send_failures_total, slik at en død eller fastlåst collector ikke kan stoppe den løpende vurderingen eller fryse /metrics; årsaketiketter er begrenset til 64 serier. Ingen nye avhengigheter. Et eksempel på Grafana-dashbord ligger i deploy/grafana/. Metrikknavn, etiketter og CEF/LEEF-feltkartleggingen står i docs/TRUST-TELEMETRY.md. Strømformatet er isolert i src/telemetry/sample.rs.

Lagt til#

  • Maritim tillit: en løpende tillitsscore fra 0 til 100 for posisjonsbestemmelsen til et fartøy i bevegelse, fra NMEA 0183 som mottakeren allerede sender, med en valgfri port. kshana receiver-trust tar en tabell [platform] (kind = "static" eller "vessel", fartøyets maksimale fart, akselerasjon og svingrate, antennehøyde over vannlinjen og en valgfri retningssensor; hver standard er dokumentert med sin begrunnelse). For et fartøy erstattes monitoren for statisk posisjonshopp, som måler avstand fra kalibreringsgjennomsnittet og er feil på et skip i fart, av kausale monitorer for bevegelige plattformer: kinematisk konsistens mellom posisjonen og den rapporterte farten og kursen og mot fartøyets grenser, gyroretning mot kurs over grunn, fartslogg mot fart over grunn, antennehøyde mot den oppgitte høyden over vannlinjen, C/N0-spredning som kollapser og stiger sammen mot kalibreringens grunnlinje, og tidskonsistens (også mot denne datamaskinens klokke i live-modus). Den leser også en rapportert autentiseringsstatus, samlet eller per satellitt (bare en rapportert status: ingen OSNMA-kryptografi). Hver terskel oppgis i en tabell [maritime] før kjøringen. Hver epoke får så en score fra 0 til 100 ved en deterministisk, forhåndsregistrert kartlegging (ingen læring, ingenting tilpasset hendelser; vekter, båndkanter og evidensen ligger i en tabell [score]), avbildet på de eksisterende tillitstilstandene, med monitorene som trakk fra og deres poeng. Statiske scenarioer er uendret og hashes som før. kshana receiver-trust live <session.toml> leser stdin, en fil som utvides, TCP eller UDP og skriver én JSON-linje per epoke og en proprietær setning $PKSHT; med --gate sender den strømmen videre uendret så lenge posisjonsbestemmelsen er pålitelig og merker posisjonsbestemmelsen som ugyldig (GGA-kvalitet 0, RMC- og GLL-status V, GNS- og VTG-modus N) mens den ikke er det. Porten er av med mindre den bes om; --listen tcp:<port> serverer den portede strømmen til et hvilket som helst antall TCP-klienter (loopback som standard, en treg klient kobles fra i stedet for å blokkere de andre). Dette er veiledende programvare, ikke typegodkjent navigasjonsutstyr (IEC 61108, IEC 61162); operatøren er fortsatt ansvarlig. examples/maritime-trust/ er en syntetisk logg fra Tallinn til Helsingfors, skrevet bare som tekst, med en posisjons-drag-off et stykke ut der mottakeren fortsetter å rapportere en gyldig posisjonsbestemmelse; forventet utdata er festet av en test. Veiledning: docs/MARITIME-TRUST.md. Kontrollene kan ikke se en spoofer hvis posisjonsbestemmelse er konsistent med alt på bussen; veiledningen sier det.

Interferenskart#

  • kshana interference-map og kshana route-exposure: et offentlig bilde av hvor fly og skip rapporterte degraderte navigasjonsdata, og hvor mye av en rute det berører. Inndata er lokale CSV-filer laget fra åpent lisensierte data fra ADS-B (adsb.lol, ODbL 1,0) og AIS (NOAA MarineCadastre, Kystverket under NLOD 2,0); hver utdatafil er én kilde og én UTC-dag med GeoJSON som bærer metoden, dens terskler, datalisensen, kildehenvisningen og kildens dekningsskjevhet. ADS-B-metoden aggregerer NIC og NACp på et fast rutenett og kaller en celle degradert ut fra andelen distinkte fly, med vern mot utstyr som aldri rapporterer nøyaktighet, lav høyde og årsaker over store områder. AIS-metoden kjører fem detektorer: posisjoner på land (mot en kystlinje oppgitt av brukeren), sirkulære spor, usannsynlige hopp, usannsynlige hastigheter og mange fartøy i én posisjon. Tersklene er forhåndsregistrerte konstanter i en navngitt metodeversjon. Bare aggregater: identifikatorer hashes i minnet og skrives aldri, og celler med færre enn 5 distinkte fly eller fartøy publiseres ikke. En degradert celle er ikke et funn av interferens. Standardkommandoene bruker ikke nettverk; en valgfri hjelper fetch-land --allow-network laster ned Natural Earth-landpolygoner fra en adresse festet til en commit og beholder filen bare hvis dens SHA-256 stemmer. ADS-B-inndata er en CSV eller readsb-historikkfilene fra adsb.lol direkte (ny avhengighet: flate2 med sin rene Rust-backend, for gzip). Begge metodene er versjon 2: et kall om degradert eller avvikende trenger minst 5 fly eller fartøy (publiseringsminimum), hvert antall per celle under 5 holdes tilbake som null, og en dag der bakgrunnen ikke kan estimeres holder tilbake sine kall. Utdatafiler heter <source>-<dataset>-<date>.geojson og overskrives aldri; inndata strømmes linje for linje; ruteeksponeringen håndterer antimeridianen. Testene bruker bare syntetiske data. Se docs/INTERFERENCE-MAP.md og lisensgjennomgangen i docs/data/INTERFERENCE-DATA-SOURCES.md.

Lagt til (opplæringsstrømmer)#

  • kshana nmea-scenario: syntetisk bro-NMEA 0183 for mannskapsopplæring i gjenkjenning av GNSS-jamming og -spoofing. Fra en scenario-TOML skriver den en fil, eller strømmer over TCP eller UDP (unicast eller broadcast; sanntid, akselerert eller så fort som mulig), hele bro-settet GGA, RMC, VTG, GSV, GSA, GNS, ZDA, HDT og VBW for et fartøysspor med svingrate, akselerasjon og strømgrenser, med satellittgeometri fra motorens egne nominelle konstellasjoner. Skriptede hendelser på en tidslinje: jamming, posisjons-drag-off (en gyldig posisjonsbestemmelse som går bort), tids-spoofing og en forsinkelse ved avspilling, hver med ramper for inntreden og gjenoppretting. En instruktørlogg (JSON og tekst) registrerer hva som ble injisert når, med det sanne sporet mot det rapporterte. Et bibliotek i scenarios/training/ (jamming på åpent hav, drag-off ved kysten, tids-spoofing ved havneinnseiling, kombinert) har instruktørnotater. Utdata har gyldig sjekksum og er deterministisk per seed; testene fester et gyldent utdrag per scenario og leser hver setning med NMEA-leseren i receiver-trust. Bare tekst: ingen RF-, IQ- eller bølgeformutdata; strømmene er for opplæring og testing og må aldri mates inn i et fartøys løpende navigasjonssystemer. Se docs/NMEA-TRAINING.md.

Maritime integrasjoner (0.35.0, arbeidsstrøm B)#

  • Signal K-plugin (integrations/signalk/, ikke publisert til npm): kjører eller kobler til kshana receiver-trust live (serverens egen NMEA-inngang, egendefinerte inndataargumenter, en TCP-mating med JSON-linjer, eller setningene $PKSHT fra en portstrøm), publiserer tillitsscoren, båndet, årsakene, alarmene og portens tilstand under navigation.gnss.kshana.* (inkludert posisjonen rapportert av mottakeren som kontekst, aldri navigation.position), og sender et Signal K-varsel (warn ved degradert, alarm ved ikke-pålitelig, med terskler for holding, opphevelse og foreldelse, alle i konfigurasjonsskjemaet). Ingen npm-avhengigheter. Testet på innspilt syntetisk utdata.
  • OpenCPN: NMEA i port-modus serveres direkte av kshana receiver-trust live --gate --listen tcp:10110 (anbefalt); et avhengighetsfritt TCP-relé (integrations/opencpn/nmea-tcp-relay.mjs) er det valgfrie alternativet. Uansett hvilket ser OpenCPN en ugyldig posisjonsbestemmelse når tilliten kollapser og $PKSHT i sitt NMEA-feilsøkingsvindu; testene spiller av den syntetiske portede strømmen gjennom en ekte TCP-socket og kontrollerer hva en forbruker mottar. En innebygd plugin for scorepanel (integrations/opencpn/plugin/, plugin-API 1,18, CMake) leser $PKSHT fra OpenCPNs egen NMEA-strøm og varsler ved det ikke-pålitelige båndet; den bygges, logikken er enhetstestet, og den ble kjørt inne i OpenCPN 5.8.4 under en virtuell skjerm (evidens og et reproduksjonsskript i integrations/opencpn/evidence/); den er ikke pakket for plugin-behandleren.
  • Referansebygg (deploy/reference-build/): generisk delliste, oppsett av OS, systemd-enheter for den veiledende monitoren og den valgfrie porten (kontrollert med systemd-analyze verify av check-units.sh), et containeralternativ, kobling til Signal K.
  • Signal K-pluginen godtar live JSON-skjemaet 1,2 (en position og deretter en nøkkel advisory lagt til; ukjente tillagte nøkler ignoreres), kontrollert på ekte utdata i 1,2 og mot en ekte signalk-server.
  • Rettinger etter gjennomgang: systemd-enhetene starter alltid på nytt og kjører i sandkasse (ingen shell, ingen nettverk der det ikke trengs), et logrotate-utdrag, check-units.sh feiler ved ethvert funn; containeren kjører porten fra miljøvariabler med en helsekontroll og basebilder festet med digest; Signal K-scoremetadata, det foreldede varselet erstattes når data gjenopptas, feil i barneprosesser beholdes og avslutninger eskaleres, usikre inputArgs avvises, og varselet ligger på notifications.navigation.gnss.kshana.trust; releet begrenser en holdt delvis linje; parserne for $PKSHT avviser scorer utenfor 0 til 100; en kontroll av dokumentasjonslenker; en CI-arbeidsflyt (marine-integrations.yml) som kjører alt, inkludert den ekte binærfilen ende til ende.
  • docs/MARINE-INTEGRATIONS.md. Veiledende programvare, ikke typegodkjent utstyr; operatøren er fortsatt ansvarlig. Bare programvare: ingenting sender, og ingen tall for deteksjon eller falske alarmer hevdes.

Lagt til: compliance-kartlegging og testbenk-eksport#

  • docs/compliance/ og kshana compliance-report. En kartlegging fra Kshanas utdata til fem rammeverk og standarder for robusthet (US DHS Resilient PNT Conformance Framework v2.0, IMO-veiledning for skip, EASA-veiledning for luftfart, NIS2 artikkel 21, EN 16803, en betalt standard sitert etter del og etter de få klausulnumrene som er synlige i katalogteksten), én tabell per rammeverk: referansen, hva det ber om i vår parafrase, utdataene som gir belegg for det, og gapet. Kildeversjoner, URL-er og hva som ble og ikke ble lest er registrert. kshana compliance-report <result.json>... fyller kartleggingen fra kjøringene som er gitt og merker hver rad evidenced, partly-evidenced, not-evidenced eller out-of-scope, som Markdown og JSON, med gapet beholdt på hver rad. Formuleringen er «gir belegg for»; ingenting vurderes eller godkjennes. Testene bruker syntetiske kjøringer og feiler når en innsjekket tabell avviker fra koden.
  • kshana bench-export <scenario.toml>. Skriver bevegelsen og hendelsene til et kjøretøy i et scenario av typen gnss-ins, jamming eller gnss-sim for en GNSS-simulator i laboratoriet: en CSV med brukerbevegelse med dokumenterte rammer og en metadata-sidefil, NMEA 0183 GGA/RMC, tekst med veipunkter, og hendelsene som CSV og som blokker receiver-trust [[events]] (src/interop/testbench.rs). Bare bevegelse og hendelser: ingen signal skrives. Hver fil leses tilbake i tests/interop_testbench.rs og sammenlignes innenfor sin oppgitte toleranse. docs/TEST-BENCH.md gir metoden for å spille av eksporten gjennom en simulator og score mottakerens logg med kshana receiver-trust.
  • Hva som regnes som evidens. Et resultat teller for en funksjon bare når det har feltene typen skriver; en typeetikett alene teller ikke. Ukjente typer, et resultat som er uenig med sitt søskenscenario, ikke-heksadesimale hasher og feilformede antall for mottakertillit listes som ikke brukt, med årsaken. Rapporten escaper Markdown-celler og kan ikke krasje med panic på en ikke-ASCII-hash. compliance::run_from_text og assess_texts tar tekster, ikke stier.
  • Testbenk-eksport. --epoch områdekontrolleres (UtcEpoch::parse_iso); veipunktfilen kontrollerer hvert intervall og kommandoen sier hvorfor når en er utelatt; dokumentasjonen oppgir at retningen for gnss-ins er kroppens giring og ikke kursen, plassholderfeltene i GGA, og scenarioets egen høydeendring. bench-export og compliance-report står i bruksteksten.
  • fusion::pack::truth_trajectory eksponerer den sanne tilstandshistorikken til kjøreprofilen for gnss-ins (den samme steppingen som typens egen referanse bruker), og UtcEpoch får NMEA-felt for dato og tid.

Validering av interferenskartet#

  • Interferenskartets dekodingssemantikk og geometri er kontrollert mot uavhengige implementasjoner på syntetiske inndata. Betydningen av NIC- og NACp-kodene mot pyModeS-dekoding av syntetiske ADS-B-rammer, AIS-verdiene for ikke tilgjengelig mot pyais-dekoding av syntetiske AIVDM-setninger, tilordning av rutenettceller mot shapely, rutelengde per celletilstand mot shapely og GeographicLib, og maskering av innland mot shapely og pyproj, hver til en toleranse fastsatt før den første sammenligningen (tests/fixtures/interference_map_ref/PREREGISTRATION.md). Dette kontrollerer hvordan koder og feltverdier leses og geometrien, ikke at en flagget celle er interferens. Leseren for landpolygoner lukker nå en ring som ikke gjentar sitt første hjørne, som den tidligere leste uten siste kant. Dokumentasjonen oppgir terskelene for lav nøyaktighet for NACp og NIC som grensen hver kode står for (NACp 6 er en EPU-grense på 556 m, NIC 5 en inneslutningsgrense på 1 NM).

Lagt til (validering av telemetriformatene og bevispakkene)#

  • Eksterne kontroller av kryptografien i bevispakkene, pakkeverifikatoren og trådformatene for telemetri. Ed25519-testvektorene fra RFC 8032 avsnitt 7,1 (1, 2, 3 og 1024) og SHA-256-eksemplene fra FIPS 180-4 kjøres gjennom pakkens egne funksjoner for signering, verifisering og hashing, til eksakt likhet. En verifikator skrevet i Python fra bare den normative delen av docs/EVIDENCE-PACKS.md (hashlib og cryptography) er enig med Rust-verifikatoren på 71 intakte og manipulerte pakker: dom, feilmengde, signaturdom og begge kjedehodene. Vår Prometheus-eksposisjon leses av parseren i den offisielle Python-klienten og vår OTLP-JSON av den offisielle meldingen opentelemetry-proto, strengt, og begge stemmer med tilstanden de ble laget fra. CEF og LEEF har ingen uavhengig åpen validator og forblir modellert. docs/EVIDENCE-PACKS.md fikk det normative pakkeformatet og verifiseringsprosedyren clean-room-verifikatoren ble skrevet fra; VerifyReport fikk signature_valid. Referanser og fiksturer: scripts/gen_ed25519_rfc8032_ref.py, scripts/gen_evidence_pack_ref.py med scripts/evidence_verify_cleanroom.py, scripts/gen_telemetry_formats_ref.py; tester evidence_crypto_reference, evidence_pack_reference og telemetry_formats_reference. CI trenger ikke Python.

Lagt til (validering av CEF-hendelsene)#

  • CEF-hendelsene i telemetrien leses tilbake riktig av to uavhengige åpen kildekode-parsere. pycef 1,11 og Logstash CEF-kodeken (logstash-codec-cef 6.2.7 i Logstash 8.15.3) tolker 157 CEF-linjer (hver båndendring og hver epoke i den innsjekkede telemetristrømmen, pluss motstridig tekst som inneholder =, omvendte skråstreker, piper, linjeskift, tabulatorer og tekst med flere bytes) og gjenvinner hvert headerfelt, alvorlighetsgraden, det eksakte settet av utvidelsesnøkler og hver verdi nøyaktig. Logstash-kodeken leser også fire linjer der headerteksten trenger escaping, noe pycef ikke kan. Terskelen ble registrert før noen av parserne ble kjørt (tests/cef_reference.rs); fiksturer i tests/fixtures/cef/, referanseskript scripts/gen_cef_ref.py og scripts/gen_cef_logstash_ref.py; CI trenger verken Python eller Logstash. LEEF har ingen vedlikeholdt åpen parser og forblir modellert. CEF-hendelsene har nå tillitsscoren og epokeforskyvningen i CEF-ordbokens flyttallsfelt (cfp1, cfp2) i stedet for heltallsfeltene cn1 og cn2, som passet for ingen av verdiene; CEF er nytt i denne utgivelsen, så ingenting som ble levert endres.

Endret#

  • MCP: assess_receiver_log godtar loggen som text eller base64; verktøyinndata er begrenset til 4 MiB.
  • Jamming-diagrammet henter også fargene sine fra paletten. src/jamming.rs var den ene modulen som revisjonen av Observatory-paletten lot beholde sine egne farger mens arbeidet med jammer-Q landet; dens *.chart.svg (jamming, maritime-strait-jamming og andre scenarioer av typen jamming) leser nå src/palette.rs, og tillatelseslisten i tests/palette_sync.rs er tom. Bare farger og skrift: diagrammene jamming-demo og maritime-strait-jamming er lik sine tidligere registrerte gjengivelser når farge, font-family og versjonsbunnteksten er normalisert. Ingen plottet verdi flyttet seg. De registrerte Studio-kopiene under web/studio/recorded/ ble registrert på nytt ved overføringene av 0.33.0 og 0.34.0 (bare versjonsstempel): de har fortsatt jamming-diagrammets gamle maling, og får palettens maling ved neste overføring.

Rettet#

  • 3-sigma-grensen for klokkeensemblet dekker nå flicker-gulvet, og filterhelsekontrollen ser det. Med en flicker_floor hadde referanseklokken flicker FM, men filteret med to tilstander som gir integritetsgrensen hadde det ikke, så 3-sigma-dekningen i det leverte scenarioet clock-ensemble var 0,41 (klassisk) og 0,33 (kvante), og NIS/NEES-kontrollen, som trakk sin egen referanse fra filterets modell, rapporterte identiske verdier med og uten gulvet. Grensen er nå variansen fra de to tilstandene pluss den eksakte variansen til flicker-fasen akkumulert siden siste synkronisering, beregnet fra den samme banken som referanseklokken bruker; NIS/NEES-kontrollen trekker sin referanse fra den utvidede modellen med den banken og kjører det tilpassede utvidede filteret (og filteret med to tilstander mot flicker-referanse rapporterer consistent = false). Endring i utdata, bare for klokker med en flicker_floor som ikke er null: integrity på clock-ensemble går fra 0,40866 / 0,33026 til 0,99970 / 1,0 (klassisk / kvante) og NIS/NEES for filter_health inkluderer nå flickeren; tidsfeilen, holdover_s og timing_p95_ns er uendret, og scenarioer uten gulv er byte-identiske. scenarios/orbit-gnss-challenged.toml (orbit-type, seed 7, gulv 1e-16 / 2e-11) endres også: fom.integrity klassisk 0,7734 til 1,0 og kvante 0,9796 til 1,0, og NIS/NEES for filter_health og deres bånd endres. Dens kvante filter_health.consistent snur fra true til false: en samplingshendelse i flicker-ensemblet på 16 seeder ganger 60 steg (NIS 0,8815 mot et bånd på [0,9125, 1,0914]), ikke en defekt. Båndet er et 95 %-bånd, så omtrent 5 % av seedene flagger et tilpasset filter per konstruksjon (40 nye seeder av dette scenarioet: kvante 1 og klassisk 2 flagget); ved 64 ganger 200 ligger det samme seedet innenfor båndet for begge klokker (NIS 0,990 og 1,001). Kjent oppfølging: typen fusion har det samme gapet (klassisk integritet 0,80 med et gulv); typen hybrid forblir over 0,99.

[0.34.1] - 2026-10-10#

Sikkerhet#

  • Inndata til MCP-serveren herdet. Scenarioverktøyene i MCP-serveren godtar nå bare inline-innhold og avviser felt for filkilder; inndatastørrelsen er begrenset. Sikkerhetsmerknad: GHSA-8wpf-hqg5-6xjr.

[0.34.0] - 2026-10-09#

Lab replay: en sporingsmotor, deteksjonsmonitorer og en kampanjekjører for GNSS IQ-opptak, med sløyfedesignene, C/N0-estimatorene og scorene som hører til. Evidensklasse: alt nedenfor er MODELLED eller kontrollert for intern konsistens mot lukkede former og simulering med seed; ingenting av det legger til en VALIDATED rad, og verifikasjonsregisteret er uendret (251 rader: 124 validert, 123 modellert, 4 partner). Det er et programvarelag for analyse: ingenting her syntetiserer en bølgeform fra en jammer eller spoofer, og ingenting sender.

Lagt til#

  • Lab replay: testforhold, kampanjekjører og scoring (0.34.0). kshana iq campaign <campaign.toml> spiller av opptak × front-end-kjeder × sløyfedesign (kshana.loop-design/1) og scorer hver celle mot en testforholdsfil per opptak (kshana.test-conditions/1, TOML eller JSON). Den filen oppgir hva et laboratorium vet om opptaket: de forventede satellittene, og for hver hendelse typeetiketten, start og slutt, berørte satellitter og oppgitt J/S- eller jammereffektprofil. Det er bare metadata. Scorene per satellitt, for hele kjøringen og per hendelse, er:

    • tilgjengelighet, tid til tap av lås og oppgitt J/S ved tapet;
    • tid til gjenfangst, fra hendelsens slutt og fra tapet;
    • målt C/N0-degradering per oppgitt J/S-bin;
    • episoder med falsk lås per låst time (sporerens flagg, eller Doppler mot en sidefil med referanse);
    • jitter i PLL- og DLL-diskriminatorer.

    Ved siden av hver målte degraderingskurve tegnes en analytisk referanse for spektral separasjon (jamming::effective_cn0_dbhz med typens Q) og merkes MODELLED overalt der den vises.

    Celler kjører parallelt gjennom sporingsøktens tilstandsmaskin for lås, og hver skrives atomisk under en nøkkel med innholdshash. Nøkkelen dekker opptakets SHA-256, hashene for forhold, front-end, design, kjøring og scoring, den påkrevde data_class (synthetic | client-confidential) og motorversjonen. Med run.epochs satt beholdes også hver celles strøm kshana.track-epoch/1 og låshendelser, navngitt etter cellenøkkel og hashet inn i cellen. cell_key og report::digest er offentlige, slik at en forbruker kan utlede hver nøkkel og sammendraget på nytt. En ny kjøring hopper derfor over ferdige celler, og utdata avhenger aldri av antall arbeidere. Kjøringen skriver scorecard.csv/.json, en selvstendig report.html og en DIGEST. Terskler for bestått/ikke bestått ([scoring.bars], kan overstyres per opptak) brukes når rapporten bygges.

    • [scoring] cn0_estimator = "m2m4" | "nwpr" (standard "m2m4", del av scoringshashen) velger C/N0-en bak den rapporterte C/N0 og degraderingskurven. Begge estimatene scores og rapporteres alltid (medianer for hele kjøringen og grunnlinjen, og per J/S-bin), og cellen og scorekortet registrerer estimatoren. NWPR leser lavt med omtrent 8 dB × Bn·T under sløyfens egen jitter; M2M4 gjør ikke det.

    Også nytt:

    • kshana iq campaign report <dir> bygger scorekortene, rapporten og sammendraget på nytt fra cellene;
    • kshana iq conditions <file> kontrollerer en testforholdsfil mot sitt skjema;
    • events_from_sigmf = true importerer annotasjonene kshana:test_event i et SigMF-opptak som hendelser;
    • Python får iq_test_conditions, iq_campaign og iq_campaign_report;
    • kshana-mcp får iq_campaign, som er inkrementell og kan gjenopptas under samplingsbudsjettet per kall med hver fil begrenset til arbeidsmappen, og iq_campaign_status.

    Tester: tests/iq_campaign.rs kjører en syntetisk kampanje med 3 opptak × 2 front-ends × 2 design. Scenene har oppgitte C/N0-profiler, og den dekker:

    • hver metrikk kontrollert mot den injiserte referansen;
    • gjenopptakelse etter en delvis kjøring med én arbeider og en ødelagt celle, byte-identisk med en uavbrutt kjøring med fire arbeidere;
    • epokefiler per celle;
    • en regresjonstest for gjenfangst med 20 s og tre satellitter: med reacquire på er hver kanal tilbake innen 2 s etter et opphold på 2 s; utfallet med reacquire av er festet;
    • terskler vurdert på nytt uten ny kjøring;
    • CLI-en;
    • ignorerte kontroller av gjennomstrømning og minne i release-modus, inkludert et opptak på 4 GB (5,45× sanntid, toppminne 2 MB over RSS ved start; målinger på én maskin, ikke terskler).

    Bare programvare: ingenting sender, og ingen bølgeform for interferens eller spoofing syntetiseres. Notater om design og som bygget: docs/design/LAB-CAMPAIGN.md.

  • Sporingsmotor for lab replay (0.34.0: B3.1, B3.2, B3.3, B6.1).

    • Filer for sløyfedesign: kshana.loop-design/1 TOML (docs/design/LOOP-DESIGN-TOML.md; parser iq::track::design). Ett eller flere navngitte design setter hvert sløyfefelt:

      • bærebølgetype (PLL, FLL eller FLL-assistert PLL), ordener og båndbredder;
      • diskriminatorer for PLL/FLL/DLL og bærebølgestøtte;
      • avstand og integrasjon;
      • låsterskler og C/N0-vinduer, og bitsynkronisering;
      • tilstandsmaskinen for lås;
      • fangsten ved overlevering ("auto" eller eksplisitt).

      Design kan extends hverandre. Ukjente nøkler avvises. Hvert oppløst design har en SHA-256-hash over en kanonisk JSON-form (nøkler sortert på hvert nivå, fast tallformat), slik at hashen ikke avhenger av feltrekkefølge; hver utdata registrerer den. Flater:

      • kshana iq track --design <file> [--design-name], der eksplisitte flagg overstyrer designet og registreres;
      • kshana iq sweep --design <file>, som kjører hvert design i filen;
      • Python iq_track(design=, design_name=, reacquire=), iq_loop_designs;
      • MCP iq_track design/design_name.
    • M2M4 C/N0 (EpochOutput.cn0_m2m4_dbhz, kolonnen cn0_m2m4_dbhz i track-epoch etter cn0_beaulieu_dbhz; Python-epokeordbøker). Estimatet fra andre og fjerde moment over de samme vinduene som NWPR, fra bare promptens effekt: NWPR leser lavt under sløyfens egen bærebølgejitter (omtrent 8 dB × Bn_PLL·T) og M2M4 gjør ikke det. På GPS L2C CM (20 ms, nominelt 40 dB-Hz, PLL 1 til 10 Hz) leser den 39,93 dB-Hz ved hver båndbredde mens NWPR faller fra 39,55 til 38,22; på L1 C/A ved 45 dB-Hz leser den 45,34. NWPR og hver annen utdata er uendret (en festing bit for bit). Den binære posten forblir på 184 bytes (verdien tar den reserverte flyttallsplassen og flaggbit 6).

    • Ekstra korrelatortaps (multikorrelator / SQM). [design.integration] extra_taps_chips = [..] (forskyvninger i chips fra prompt, positive tidlig; høyst 16, hver innenfor ±2) korrelerer ekstra replikaer ved siden av E/P/L og returnerer dem som EpochOutput.extra ((offset, value) i designrekkefølge). Sløyfene bruker dem aldri. Nøkkelen utelates fra den kanoniske JSON-en når den er tom, slik at standarddesignets hash og hver utdata uten taps er uendret (kshana.track-epoch/1 forblir; CSV/JSONL/binær uten taps er bit-identisk). Med taps: CSV/JSONL-kolonner, og en binær post på 184 + 16 × taps bytes der headeren har extra_taps_chips, slik at en gammel leser avviser filen i stedet for å tolke den feil. --extra-taps (CLI), extra_taps (Python) og extra_taps_chips (MCP iq_track). Designene i én kjøring må være enige om taps.

    • Parallelle kanaler (iq track / iq sweep --threads <N|auto>; Rust TrackSession::with_threads). Hver delmengde av kanaler kjører på inntil N tråder (std::thread::scope; wasm32 forblir seriell). En kanals korrelasjon og tilstandsmaskin for lås berører bare den kanalen; dens epoker og hendelser bufres og skrives til sinkene i kanalrekkefølge, slik at utdata (CSV, JSONL, binær, hendelser, sammendrag) er byte-identiske med den serielle kjøringen for enhver N. Standard forblir 1 tråd. Målt på et opptak med 12 kanaler, 4 s, 4,092 MHz på 4 kjerner: 19,5 s seriell, 11,5 s ved 2 tråder, 6,3 s ved 4 (3,1×; den første fangsten er seriell).

    • Eksport av fangstoverflate (kshana.acq-surface/1; iq::acq_surface, docs/design/ACQ-SURFACE.md). iq acquire --surface <path> (én PRN; CSV, JSON eller binær), Python iq_acq_surface og MCP iq_acquire surface_out skriver hele korrelasjonseffektoverflaten Doppler × kodefase som søket beregner (cellene er acquire sine, bit for bit) med toppen og to finforfininger av Doppler: et parabolsk estimat og et finsøk på 1/16 bin (≈5 Hz ved 4 ms koherent, mot 167 Hz-bin). acquire selv og hver standard er uendret.

    • Strømmende epokeutdata (kshana.track-epoch/1; iq::track::sink). Hver sløyfeoppdatering har:

      • korrelatorene early/prompt/late;
      • alle tre diskriminatorutdataene;
      • NCO-tilstandene for PLL/FLL/DLL og bærebølgefasen;
      • PLI og låsflaggene;
      • begge C/N0-estimatene og bitene;
      • låstilstanden.

      Den skrives mens det skjer, som CSV, JSON Lines eller en versjonert binær form med lesere i Rust (BinaryEpochReader) og Python (iq_read_epochs).

      • iq track får --epochs, --events og --summary (kshana.track-summary/1), og iq sweep får --epochs og --events. MCP iq_track får epochs_out/events_out og bygger svaret sitt fra sammendraget med begrenset minne.
      • Heapen til en kjøring vokser ikke lenger med opptakets lengde: tests/iq_track_memory.rs måler den med en telleallokator (6× lengden, samme topp innenfor 64 KiB), med en kontroll som viser at stien i minnet vokser.
      • Strømmet utdata er bit-identisk med gjenspillingen i minnet.
    • Låsetilstandsmaskin (iq::track::lock, TrackSession): innfanging → låst → mistet → gjenfangst → innfanging, eller utfaset når et tap varer lenger enn reacq_window_s (standard 30 s). Mislykkede søk forsøkes på nytt hver reacq_interval_s (0,1 s), jevnt fordelt, slik at gjentaksplanen legger til høyst 0,1 s til en målt gjenfangsttid. En valgfri tilbakeholdelse (reacq_max_interval_s over reacq_interval_s) er av som standard, og max_reacq_attempts er en valgfri grense (0, ingen, som standard). Et avbrudd på 2 s på tre PRN-er ved 4,092 MS/s ender nå med at hver kanal er gjenfanget og låst. Med et budsjett på 3 forsøk ble hver kanal utfaset innen 0,2 s etter tapet.

      • Terskler (loss_dwell_s, pull_in_max_s, Doppler-vinduet for gjenfangst) kommer fra utformingen. Hver overgang er en hendelse med sin årsak.
      • Kontrollen av falsk låsing søker i den sporede Doppler-verdien mot dens ±1/(2T) FLL/PLL-alias. Den fanger den falske låsingen som PR #38 målte (−2400 Hz sporet 500 Hz ved siden av). Med gjenfangst på ender kanalen låst på den innsatte Doppler-verdien.
      • Et signalopphold på 0,8 s erklæres som tap og gjenfanges innen 0,3 s etter at signalet er tilbake.
      • --summary final_state (og tabellens kolonne) er tilstanden etter siste overgang, slik at en kanal som er utfaset etter sin siste sløyfeoppdatering, vises som RETIRED.
      • FLL-assistanse bare under innfanging ([design.carrier] fll_assist = "pull-in", standarden; "always" beholder den tidligere oppførselen bit for bit). FLL-en overleverer til PLL-en når den glattede PLI-en har holdt seg på eller over fll_off_pli (0,8) i fll_gate_dwell_s (0,1 s), og går tilbake under fll_on_pli (0,6). Når den ble stående på, brøt FLL-banen på 10 Hz faselåsen under omtrent 38 dB-Hz på rene signaler: ved 35 dB-Hz var faselåsandelen 10–16 %, med en sann fasefeil på 38–41°. Med portstyring holder standarden 100 % ved 35 dB-Hz med 4,5°, det samme som en PLL alene. Innfanging fra en overleveringsfeil på 100 Hz er uendret. Evidens med terskler fastsatt på forhånd: docs/design/evidence/carrier-lock/. Standardsløyfene er derfor ikke bit for bit like tidligere kjøringer av standardutformingen. Bruk fll_assist = "always" for å gjenskape dem. Kjent grense: ved 35 dB-Hz skjer overleveringen 1,9–2,6 s ut i sporingen, og ved 33 dB-Hz holder FLL-en på 10 Hz PLI-en under overleveringsterskelen, slik at innfangingen aldri fullføres.
      • Nye nøkler for sløyfeutforming og nytt API, oppført:
        • [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, der max_reacq_attempts er endret fra en standard på 3 til en valgfri grense (standard 0);
        • Rust: LoopConfig.fll_assist (FllAssist, FllGate), LoopCore::set_fll_enabled, EpochOutput.fll_active, ChannelSummary.final_state.
      • Utformingens hash er beregnet over en kanonisk JSON-form, og hashen til den innebygde standarden er 33261cd171a53803a6c262686e878e01f37d902a93d5918c20a44297b8ef8e80 (festet av en test).
      • Merknader om utdatakompatibilitet:
        • tabellen fra iq track har en avsluttende kolonne final_state;
        • CSV-en fra iq sweep har en avsluttende kolonne design_hash, og JSON-en har design_hash og warnings;
        • sveipets mean_cn0_dbhz er nå gjennomsnittet over hver oppdatering som har et NWPR-estimat (oppsummering med begrenset minne), ikke lenger over andre halvdel av kjøringen.
      • Gjenfangst er av i den innebygde standarden, der tilstandsmaskinen bare observerer og sløyfene kjører bit for bit som uten den. (Selve standardsløyfene er likevel endret: se FLL-assistanse ovenfor.) Slå den på per utforming ([design.lock] reacquire = true), med --reacquire, eller med reacquire=True.
      • En advarsel om commensurate_sampling: når fs ligger innenfor 1e-6 av et multiplum av halve brikkehastigheten (iq::track::commensurate_samples_per_chip), advarer iq track/iq sweep (utdata, --summary, sveip-JSON), MCP-svaret fra iq_track og Python-resultatet fra iq_track om at jitter og bias i kodesløyfen ikke er representative. Grunnårsaken er dokumentert med terskler fastsatt på forhånd i docs/design/evidence/dll-jitter/. Ved nøyaktig 2 sampler per brikke med 0.5 brikkes avstand er DLL-S-kurven ett enkelt trinn og sløyfen dirrer: ≈ 0,09 brikke RMS kodefeil (≈ 26 m) ved 45 dB-Hz, mot ≈ 0,004 brikke ved en ikke-kommensurabel hastighet. Den omtrent 2 dB lave NWPR C/N0 ved den hastigheten har samme årsak. Ved nøyaktig 0 Hz kode-Doppler og 4 sampler per brikke krysser koden aldri dødsonen på ±0.21 brikke, slik at en kodefasebias på opptil omtrent 0,2 brikke kan bestå uten å vise seg i jitteren (målt: 0.5 brikkes avstand gir 2,0× kontrollens kodefeil med et gjennomsnitt på +0,011 brikke; 0.25 brikkes avstand gir +0,125 brikke); advarselen dekker hastigheten.
      • Kjent grense: standardutformingen overleverer ikke fra FLL til PLL under omtrent 35 dB-Hz (et innfangingsgulv på ~35 dB-Hz; se FLL-assistanse ovenfor og docs/design/evidence/carrier-lock/).
      • Et søk etter falsk låsing eller gjenfangst som ikke kan kjøres (en hastighet uten et helt antall sampler per kodeperiode) stanser ikke lenger sporingen.
      • Tester: tests/iq_track_engine.rs, tests/iq_cli.rs, iq::track::design::tests, tests/python og MCP IQ-rundturen.
  • C/N0-profiler i syntetiske scener (0.34.0). iq::channel::cn0_profile planlegger tidsvarierende C/N0 per satellitt i Kshanas egne scener, som dB-forskyvninger i forhold til scenens C/N0. Former: trinn, rampe, stykkevis lineær, og seedet scintillasjonslignende Rice-fading med oppgitt S4 og dekorrelasjonstid. De anvendes gjennom den eksisterende kanalkroken i scenen (Cn0ProfileChannel, og kan kombineres med effektene fra ionosfære, troposfære, scintillasjon og flerveisutbredelse), uten endring i scenekjernen. Referansefilens cn0_dbhz følger profilen.

    • Flater: kshana iq scene … --cn0-profile <toml> og kshana.iq_scene(…, cn0_profile="<toml>").
    • Hva den brukes til: sløyfer, monitorer og kampanjescoring kan stresstestes mot en kjent referanse. Den endrer bare styrken til de legitime signalene.
    • Kontroller (tests/iq_cn0_profile.rs). Terskler: gjennomsnittlig fadingintensitet innenfor 5 % av 1, S4 innenfor 8 % av målet (ved S4 = 0,3, 0,7 og 1), intensitetskorrelasjon over 0,9 ved 0,05 τ og under 0,05 ved 5 τ; referansen nøyaktig den oppgitte C/N0 pluss profilen; et sporet fall i NWPR C/N0 innenfor 0,7 dB av et trinn på 6 dB. Målt: S4 innenfor 1,3 % av målet, og et sporet fall på 6,26 dB.
  • Deteksjonsmonitorer på IQ-banen (0.34.0 «Lab replay»). Ny modul iq::monitor, kommando kshana iq monitor og binding kshana.iq_monitor(path, ...). De observerer en opptaking og rapporterer tidsserier pluss flaggede hendelser (start-, alarm- og sluttidspunkt, topp, terskel). De oppdager og måler bare; ingenting her genererer et signal.

    • Totaleffekt / AGC: blokkeffekt og forsterkningen en ideell AGC ville brukt; flagger stigninger og fall.
    • Spektrum før korrelasjon: Welch-PSD per blokk mot en innlært grunnlinje. Terskelen for overskudd kommer fra et mål for falsk alarm. Også kompleks kurtose og en pulsdetektor. Pulsdetektoren teller samplene over en terskel i hver blokk og utløser en hendelse når den eksakte binomiale øvre halen for det antallet er under pulse_pfa (standard 1e-4 per blokk), ikke når en z-score passerer en grense: ved de små forventede antallene i korte blokker er et enkelt sample allerede flere sigma.
    • C/N0 per kanal: to ensidige CUSUM-endringsdetektorer (fall og stigning), matet med uavhengige estimater (steget settes ut fra sløyfens C/N0-vindu).
    • SQM fra korrelatorene: delta (I_E − I_L)/I_P og forhold (I_E + I_L)/(2 I_P), pluss asymmetritester fra ekstra korrelatorer når en kanal leverer dem.
    • Låseindikatorserier: PLI og en frekvenslåseindikator fra påfølgende prompt-verdier, som rå signaler. Avgjørelsene om lås og tap av lås blir hos sporingsmotorens låsetilstandsmaskin.

    Ett strømmende gjennomløp (iq::monitor::run::run_monitors) kjører alt, med en TOML/JSON-innstillingsfil (MonitorConfig); kampanjekjøreren bruker samme inngangspunkt. Alt er MODELLED. Hver statistikk er kontrollert mot sin lukkede form ved seedet simulering (tests/iq_monitor.rs):

    • overskridelser av blokkeffekt mot gammahalen;
    • kurtose med gjennomsnitt 2 og spredning 2/√N;
    • pulsandel e^{−t};
    • CUSUM-løpelengder mot Siegmunds tilnærming (målt 330 og 8,46 sampler mot 338 og 8,34);
    • faselåseindikatoren mot gjennomsnittet for Rice-fase;
    • på et sporet C/A-signal avviker SQM-delta og -forhold med omtrent 6 % fra de førsteordens lukkede formene (målt 5,97 %; testterskel 12 %).

    Formelen for falsk alarm ved spektralt overskudd er en tilnærming; den målte raten var 1,3× formelen. Fra ende til ende flagger monitorene:

    • et C/N0-trinn på 6 dB (endringstidspunkt innenfor ett estimat);
    • en reflektert bane som dukker opp midt i opptaket (forholdstest);
    • et signalbortfall (PLI faller fra 0,999 til −0,3 og FLI fra 0,93 til 0,03 under det);
    • en smalbåndstone og spredte samples med høy amplitude (spektral-, puls- og kurtosetester). Dette er generelle DSP-testinndata, ikke interferensmodeller.

Endret#

  • iq track/iq sweep strømmer gjennom den nye sesjonen (se Lagt til).
    • --csv beholder sine 0,32-kolonner, men strømmes nå, slik at rader fra flere kanaler flettes i tidsrekkefølge i stedet for å grupperes per kanal. --json beholder sin 0,32-form og holder fortsatt hver epoke i minnet: bruk --epochs for lange opptak.
    • iq sweep måler jitter over oppdateringene i andre halvdel av kjøringens varighet (tidligere andre halvdel av antall oppdateringer), og CSV/JSON får en kolonne design_hash.
    • Sporingstabellen får en kolonne final_state.
    • Bruksteksten hevder ikke lenger at iq track tar frontend-flaggene; bare iq acquire bruker dem.
    • Pythons iq_track har nå acq_noncoherent og doppler_max som standard satt til None (utformingens verdier, 1 og 5000 Hz i den innebygde utformingen). Epokene får tidlig/sen-korrelatorene, carrier_phase_cycles, bit_edge, bit og state, og resultatet får design og events.

Rettet#

  • Standard fangsttrinn gir ikke lenger Galileo E1-sporingen en restfeil som FLL-en ikke kan fange inn. Trinnet 2 / (3 · N · T_code) etterlater opptil 1 / (3 · N · T_code) Doppler-feil ved overlevering, men standard tokvadrants FLL fanger bare inn 1 / (4 T_track). For hver kode på 4 ms eller lengre (N = 1), inkludert Galileo E1-B og E1-C, lå resten (83,3 Hz ved 4 ms) utenfor innfangingen på 62,5 Hz, og sporingen låste seg falskt på +125 Hz, med en faselåseindikator på 0,97 som skjulte det. Standardtrinnet er nå også begrenset til 0.2 / T_track (kshana::iq::acq::default_step_hz), 0,8 av innfangingen, slik at overleveringen holder seg innenfor den selv når nabo-bin-en vinner. (0,4 ble prøvd først: det låste seg falskt 1 kjøring av 42 på E1-B, og et koherent GPS L1 C/A-søk på 1 ms valgte en bin 350 Hz ved siden av og låste på +500 Hz; 0,25 og 0,2 hadde ingen i de samme kjøringene.) Kostnad: Galileo E1-B/E1-C går fra bin-er på 166,7 Hz til 50 Hz, 201 bin-er over ±5 kHz i stedet for 61; kodene på 1 ms (166,7 Hz, N = 4) er uendret. "auto" i en sløyfeutforming betyr dette; en eksplisitt doppler_step_hz eller --doppler-step brukes som skrevet, og iq acquire (ingen sporingsoverlevering) beholder lærebokstrinnet. Epokeheaderen og --summary registrerer nå det løste trinnet og sløyfebåndbreddene for hver kanal (resolved). Standardutformingens hash er uendret. Endring i utdata: deteksjoner på koder på 4 ms og lengre kan havne i andre Doppler-bin-er.

  • GPS L2C CM (20 ms sløyfeoppdatering) holder lås med standardutformingen. Standard PLL på 15 Hz og FLL på 10 Hz har Bn · T på 0,3 og 0,2 ved T = 20 ms, og sløyfen mistet låsen selv fra en perfekt start (PLI −0,08, M2M4 15,8 dB-Hz). Ny utformingsnøkkel carrier.bn_t_max (standard 0,1) begrenser støybåndbreddene til PLL og FLL til bn_t_max / T når sløyfens oppdateringstid er lengre enn 4 ms (Design::loop_config_for): 5 Hz og 5 Hz ved 20 ms, 10 Hz og 10 Hz ved BeiDou B1C sine 10 ms; kodene på 1 ms og 4 ms beholder 15 og 10 Hz. Den gjelder også eksplisitte båndbredder; bn_t_max = 0 slår den av. Nøkkelen utelates fra den kanoniske formen ved standardverdien, slik at standardhashen er uendret; en utforming som setter en annen verdi, har en annen hash. Ved 45 dB-Hz gir L2C CM nå PLI 0,996, Doppler-feil 0,00 Hz og M2M4 42,71 dB-Hz. Kjent åpent punkt: NWPR C/N0 leses 1,76 dB for lavt der (og 2,45 dB for lavt på B1C ved 10 ms), så matrisens T5 for L2C forblir et ignorert funn.

  • docs/assets/clock-ensemble-band.svg generert på nytt: den innsjekkede figuren var utdatert mot sitt eget scenario (en dataendring, ikke en ny tegning). Diagrammet ble tegnet 2026-06-02 fra scenarios/clock-ensemble.toml; to dager senere satte 67fed19e gulvene for flicker-FM i det scenarioet (kvante flicker_floor = 1e-16, CSAC flicker_floor = 2e-11), og figuren ble aldri tegnet på nytt. Den viste kjøringen før gulvene: y-akse fra 0 til 47 ns, CSAC-avbrudd p95 per kjøring på 10,5 til 47,6 ns (gjennomsnitt 25,2 ns), klassisk holdover 4050 s i gjennomsnitt. Scenarioet slik det leveres (og slik veiledningen og CLI-oppsummeringen allerede oppgir) gir y-akse fra 0 til 407 ns, CSAC p95 per kjøring 40,8 til 374,0 ns (gjennomsnitt 167,0 ns), klassisk holdover 844 s [220 til 2130 s]; spesifikasjonslinjen på 20 ns ligger på de samme 20 ns på en akse som er omtrent ni ganger høyere. Motoren er uendret: dagens motor på scenariofilen fra juni gjengir den gamle figurens akse nøyaktig. Figuren er ikke referert fra README eller dokumentasjonen.

Kjente begrensninger#

  • NWPR C/N0 leses for lavt ved høy C/N0·T per prompt, og BOC(1 1) ved 5 MS/s taper omtrent 1 dB. NWPR er forventningsrett på ideelle prompt-verdier, men sløyfens egen PLL-jitter koster omtrent 8 dB × Bn·T etter tilpasning (én scene, fire punkter: −0.24/−0.44/−0.77/−1,58 dB ved 1/2.5/5/10 Hz og 20 ms; omtrent −1 dB ved standard bn_t_max = 0.1); M2M4 er ufølsom. BeiDou B1C-data ved 5 MS/s taper også omtrent 1 dB prompt-effekt på grunn av båndbegrensning (bruk 10 MS/s eller mer). Ingen av delene er en estimatorfeil; radene T5 i signalmatrisen for GPS L2C og BeiDou B1C forblir ignorerte funn med disse årsakene.

[0.33.1] - 2026-10-08#

Sikkerhet#

  • Diagramtekst og Studioets overtakelse av diagrammer er herdet. Tekst som et scenario fører inn i et generert diagram, escapes nå konsekvent av én felles rutine, og Studio overtar bare tegnemarkering fra et diagram. Studioets adresseparametere, oppslag etter type og scenariohentinger er begrenset til kjente verdier. Medfølgende diagrammer, registrerte resultater og publiserte tall er uendret. Oppgradering anbefales for alle som åpner scenariofiler fra ikke-pålitelige kilder i Studio eller bygger genererte diagrammer inn i nettsider. Sikkerhetsvarsel: GHSA-h25h-cg9f-v2cg.

[0.33.0] - 2026-10-08#

Dokumentasjon#

  • Omfanget av interferens og spoofing i IQ-laget, oppgitt riktig. Oppføringene for 0.31.0 og 0.32.0 nedenfor sier at IQ-laget legger til «ingen syntese av interferens- eller spoofingbølgeformer». Det stemmer for selve IQ-laget (iq::scene genererer bare legitime GNSS-signaler), men det ble lest som en påstand om hele motoren, og det er den ikke: siden 0.29.0 skriver delen [iq] i typen spectrum et SigMF-øyeblikksbilde av sin analytiske modell med de konfigurerte jammerne i (støylignende jammere bin for bin, toner og chirps som bølgeformer), og spoof_capture summerer et autentisk signal og en spoofer-kopi i minnet for å teste sløyfefangst (sammensetningen skrives aldri ut). Motoren har også hatt en programvare-GNSS-mottaker siden 0.20.0 (sdr: fangst og sporing; siden 0.31.0 også iq::acq og iq::track). Ingenting i Kshana sender eller styrer radiomaskinvare. Statuslinjen i README, docs/POSITIONING.md, docs/SPECTRUM.md og IQ-designnotatene sier nå dette; de utgitte oppføringene er latt stå slik de ble publisert. Ingen endring i oppførsel.
  • Kjent begrensning: kommensurabel sampling. Ved en samplingshastighet som er et heltalls- eller halvtallsmultiplum av brikkehastigheten, ligger samplene på de samme brikkefasene i hver brikke, og kodediskriminatoren blir en trapp. På et syntetisk GPS L1 C/A-signal ved 45 dB-Hz med 0.5 brikkes avstand gir 2,046 MHz (2 sampler/brikke) ≈ 0,09 brikke (≈ 26 m) RMS kodefeil og en bias på −0,09 brikke, mot ≈ 0,003 brikke ved en ikke-kommensurabel hastighet. NWPR C/N0 leses ≈ 2,4 dB for lavt der. Ved 4,092 MHz avhenger det av avstanden og kode-Doppler. Ved 0,5 brikke er det harmløst ved 1500 Hz Doppler, men 2× med en bias på 0,011 brikke ved 0 Hz, og ved 0,25 eller 0,1 brikke er det 8–10× kodefeilen. Bærebølgesporing påvirkes ikke. docs/design/iq-notes/receiver.md har målingene.

Lagt til#

  • GNSS IQ-laget på MCP-serveren (fase B.1). kshana-mcp får seks verktøy som styrer laget kshana iq fra en agent: iq_signals (de godtatte signalnavnene og IQ-oppsettet), iq_info (beskriv en opptaking), iq_scene (generer en scene med oppgitt profil eller kringkastet efemeride, med den valgfrie kanalen på signalnivå), iq_acquire (FFT-fangst, eventuelt bak frontend-trinn), iq_track (fang, deretter DLL/PLL/FLL-banken) og iq_frontend (båndpass, notch, blanking, ekskisjon, AGC, kvantiserer). IQ-sampler krysser aldri protokollen: hvert verktøy tar filbaner innenfor én arbeidsmappe satt av KSHANA_MCP_IQ_DIR (usatt slår IQ-filverktøyene av og lar alle andre verktøy være upåvirket), avviser baner som løses utenfor den og utdata som allerede finnes med mindre overwrite er satt, håndhever et samplebudsjett per kall (KSHANA_MCP_IQ_MAX_SAMPLES, standard 50 000 000) før noe arbeid, avviser ukjente argumenter, og svarer med en kompakt JSON-oppsummering (deteksjoner, C/N0, låsetilstand og hver skrevet fil med bytetall). Utdata per epoke går bare til filer som kalleren navngir. Verktøyene kjører den samme kodebanen som CLI-en gjennom et nytt offentlig skjøtepunkt, kshana::iq::cli::execute, som returnerer CLI-ens melding i stedet for å skrive den ut (stdout er MCP JSON-RPC-kanalen); iq::cli::build_code og iq::cli::signal_names er nå også offentlige. Bare programvare og additivt: IQ-laget legger ikke til noen syntese av interferens eller spoofer, ingenting sendes noen gang, og det er ingen nye avhengigheter. server.json deklarerer de to miljøvariablene. Rundturstester i mcp/kshana-mcp/tests/iq_round_trip.rs genererer en kort scene med to satellitter og kontrollerer fangst mot scenens egen referansefil, sporingslås og C/N0, frontend, SigMF-utdata, budsjettet, baneavgrensning og avslått tilstand.

  • GNSS IQ-laget i valideringsregisteret. En kryssjekk fastsatt på forhånd mot gps-sdr-sim (en uavhengig GPS L1 C/A-basebåndgenerator, MIT, commit 28ca29a6) er nå en del av den alltid påslåtte testsuiten (tests/iq_gpssdrsim_cross_generator.rs). Den innsjekkede referanseutdataen (tests/fixtures/iq_gpssdrsim_cross_generator/: 20 ms av gps-sdr-sims egen 8-bits I/Q, kanallisten og kanaltilstanden bak den fra en testrigg lenket mot samme bygg) genereres på nytt av scripts/gen_iq_gpssdrsim_ref.sh. Ingenting ved testtidspunktet trenger nettverk eller det eksterne verktøyet. To registerrader er lagt til (251 rader: 124 Validated, 123 Modelled, 4 Partner):

    • Signalgeometri i GNSS IQ-scene mot en uavhengig basebåndgenerator: Validert. Scenens referanse (synlig sett, pseudoavstand, kodefase, Doppler, siktevinkler) for en scene med kringkastet efemeride stemmer med gps-sdr-sims kanaltilstand på alle 11 kanaler: verst 1,6 mm, 5.5e-6 brikke, 7.4e-5 Hz, 4e-9 grad, mot terskler på 0,05 m, 2e-4 brikke, 0,02 Hz og 1e-4 grad fastsatt før kjøringen.
    • GNSS IQ-fangst på uavhengig genererte I/Q-sampler: Modellert, med et funn. iq::acq finner hver simulerte satellitt i gps-sdr-sims sampler innenfor de registrerte terskelene (kodefase innenfor 0,195 brikke, Doppler innenfor 72 Hz). Den registrerte terskelen «ingen annen PRN oppdaget» svikter likevel: på gps-sdr-sims støyfrie utdata krysses terskelen for gaussisk støy av de andre satellittenes krysskorrelasjon for alle 21 fraværende PRN-er. Den strenge testen er beholdt, ignorert med funnet, og en festet test registrerer det. Ingen motorkode eller offentlig API endres. I/Q-samplene sammenlignes ikke sample for sample: gps-sdr-sims heltallssinustabell, forsterkninger, nullstilte startfase for bærebølgen og avkortede LNAV-felt er ikke størrelser en mottaker trenger å være enig om. Sammenligningen gjøres på de observablene en mottaker måler.

Endret#

  • iq track overleverer som standard fra en fangst på ≈4 ms (endring i oppførsel). Fangsten som initialiserer hver sporingskanal integrerer nå ceil(4 ms / T_code) kodeperioder koherent i stedet for én, der T_code er kodens fulle periode (primær- ganger sekundærlengde for en lagdelt kode, enheten fangsten integrerer over). De ulagdelte kodene på 1 ms (GPS L1 C/A, BeiDou B1I, GLONASS L1OF) søker nå over 4 perioder (4 ms), slik at standard Doppler-trinn 2 / (3 · N · T_code) er ~167 Hz i stedet for ~667 Hz. Hver kode hvis fulle periode allerede er 4 ms eller lengre, beholder 1 periode: Galileo E1-B (4 ms), BeiDou B1C (10 ms), og de lagdelte kodene GPS L5-I/L5-Q, Galileo E5a-I/E5a-Q og E1-C (10 til 100 ms med overleggskodene), og GPS L2C. Hvert signal integrerer dermed minst ~4 ms. Et søk over én periode kunne overlevere en kanal opptil ~333 Hz feil, utenfor FLL-ens innfanging, og den sporet da en falsk lås ~500 Hz unna mens den rapporterte et rent spor. På et seedet sveip av 180 GPS L1 C/A-kanaler (Doppler over ±5 kHz, 38 til 47 dB-Hz, halvparten med navigasjonsdata; docs/design/evidence/iq-track-acq-default/, kan kjøres på nytt) faller falske låsinger fra 27 av 180 til 1 av 180 og mislykkede fangster fra 102 til 11, mot ~40 ms mer søk per PRN på GPS L1 (11 → 52 ms). Den ene gjenværende falske låsingen er ved 38 dB-Hz, 36 Hz ved siden av. Alle flater er enige: kshana iq track og kshana iq sweep (--acq-coherent), Python kshana.iq_track (acq_coherent=None er nå auto; stub oppdatert) og MCP-verktøyet iq_track. Brukere som stolte på den gamle standarden, kan oppgi acq_coherent=1 (--acq-coherent 1). Standarden for --coherent i kshana iq acquire forblir 1. Nye offentlige iq::acq::auto_coherent_periods og iq::acq::AUTO_COHERENT_S; regresjonstest tests/iq_cli.rs::track_default_handoff_does_not_false_lock_where_one_period_did.
  • Hver generert grafikk følger nå nettstedets Observatory-tema: bytene i hvert diagram endres. Dette er en bevisst revisjon av de publiserte figurene, bare farger og skrifter; ingen plottet verdi, koordinat eller etikett er flyttet. Hvert scenarios *.chart.svg (og dermed Studioets diagrameksport og demodiagrammene i README), rapport-HTML-en fra kjøringen (*.report.html), tidslinjeanimasjonen (--animate), HTML-sidene for scenarioresultat og studie, valideringsoppsummeringen og figurene og diagrammene i dokumentasjonen brukte den varme, mørke julipaletten (#0c0b08 bakgrunn, #e0bd84 gull) og et varmt papirtema for rapporter. De henter nå hver farge og skrift fra én modul, src/palette.rs, som speiler web/theme.css: diagrammer tegnes instrumentmørkt på Observatory-bakgrunnen (#060A14) i Geist-skriftstabelen; rapporten, animasjonsspilleren og resultatsidene følger seerens lys/mørk-preferanse med Observatory-tokenene for lys og mørk. De seks feildomenene beholder én farge hver (interferens korall, spoofing magenta, tidssynkronisering blå, baner cyan, integritet lime, navigasjon rav), og evidensnivåene leses validated lime, modelled rav, partner magenta. Fossefallsrampene beholder sin perseptuelle (inferno) rekkefølge, forankret på nytt i den nye bakgrunnen.
    • tests/palette_sync.rs holder modulen til web/theme.css i begge temaene, kontrollerer at docs/assets/palette.json og docs/diagrams/mermaid-config.json (begge generert fra modulen, for Python-figurverktøyene og mermaid-cli) er oppdaterte, og feiler hvis en hex-fargekonstant dukker opp i src/ utenfor paletten.
    • tests/published_figures_still_reproduce.rs får en tredje diagnose, «bare farger og skrifter er flyttet», slik at en palettrevisjon kan skilles fra en flyttet plottet verdi. Hvert README-diagram som er tegnet på nytt, ble kontrollert som lik forgjengeren under den normaliseringen.
    • tools/gen_validation_figures.py leser paletten og genererer nå også de tre resultatfigurene i README som ikke hadde noen innsjekket generator (domain-coverage-map, scenario-fom, sgp4-regime-bars), med ekte tekstelementer, fra web/capabilities.json, resultatet fra clock-holdover og tests/fixtures/sgp4_comparison.md. tools/gen_readme_assets.py leser den samme paletten, noe som retter opp avviket i lyst tema fra nettstedet. Verdiene i sgp4-regime-bars er kolonnen for verste tilfelle for kshana↔ref i den testdatafilen (7.31e-9, 8.05e-9, 8.18e-9 og 4.12e-6 km), uendret fra Matplotlib-figuren, og tests/figures_doc_sync.rs feiler nå hvis den innsjekkede figuren og testdatafilen er uenige.
  • docs/assets/figures/domain-coverage-map oppdatert til gjeldende data (en dataendring, ikke en ny tegning). Figuren oppga 28 funksjoner fordelt på 8 domener (11 validert, 17 modellert), utdatert mot sin egen oppgitte kilde; tegnet nå av sin nye generator fra web/capabilities.json viser den 46 funksjoner fordelt på 8 domener (17 validert, 29 modellert).

Rettet#

  • Q for CW/smalbåndsjammer er nå 1,0, ikke 1,5. Lærebokverdien for en tone på bærebølgen er 1 (en tone beholder signalets spektrale topp, κ = T_c, Q = 1/(R_c κ)); den gamle verdien 1,5 gjorde en tone mindre skadelig enn bredbåndsstøy ved lik J/S. Endring i utdata: omtrent −1,8 dB effektiv C/N0 under CW/smalbåndsjammere ved høy J/S i typene jamming, lunar-jamming og interop (tonen i det medfølgende eksempelet spectrum: 17,98 dB-Hz fra tabellen, var 19,74). Q for bredbånd forblir 1,0 (konservativt, omtrent 3 dB under lærebokverdien ~2) i påvente av gjennomgang i 0,34. Sett q_override for å beholde den gamle verdien 1,5.

  • Heltallsutdata fra kshana iq scene bruker heltallsområdet. Med støy med enhetseffekt og en skriveskala på 1 ble scenene i ci8/ci16 omtrent {-1, 0, 1}, og 2-bits scener hadde sine terskler ved 2,8 sigma. Heltallsformater skaleres nå slik at forventet RMS per komponent er en fjerdedel av full skala (31,75 LSB i ci8, 8191,75 i ci16) eller 2 LSB i 2-bit. Skalaen og antallet avkortede elementer skrives ut og skrives til sidefilen. Utdata i flyttall er uendret.

  • Åtte festede testdatapunkter i sju testfiler feiler ikke lenger på macOS på grunn av forskjeller i siste bit (del av issue #36). Festene som kontrollerer at motoren fortsatt bygger en uavhengig referanses innsjekkede inndata (Jacobian-matriser, en tilstandstabell, utskytningsazimuter) ble sammenlignet bit for bit og feilet på macOS arm64 med 2 til noen tusen enheter i siste siffer. De sammenlignes nå innenfor 1e-12 av en skala hentet fra testdatafilen; heltall, nøkler og lengder sammenlignes fortsatt eksakt, og en mutasjonstest viser at en relativ endring på 1e-6 fortsatt feiler. Festet for utskytningsazimut sammenligner sin az og grenen stigende/synkende i stedet for selve azimuten, fordi asin forsterker én ulp av argumentet til omtrent 3e-9 rad der en inklinasjon er lik et steds kobreddegrad. Ingen toleranse for en uavhengig referanse og ingen terskel fastsatt på forhånd er endret. To tester (felles banebestemmelse for månen, observerbarhet for månen) er ikke dekket: på macOS flytter selve sammenligningene som er fastsatt på forhånd, seg, og det overlates til en oppfølging.

  • kshana iq track og kshana iq sweep bruker frontend-flaggene. Bruksteksten oppga --bandpass/--notch/--blank/--excise/--agc/--bits på track, men track og sweep bygde aldri kjeden: flaggene ble stille ignorert, og et flagg uten verdi, som --notch, svelget flagget etter seg. Begge kommandoene tolker dem nå slik iq acquire gjør, og setter en fersk frontend-kjede foran fangstgjennomløpet og sporingsgjennomløpet. Utdataene er lik det du får ved å kjøre kommandoen på filen som iq frontend skriver for de samme flaggene.

  • IQ-scenedata plasseres per signal. kshana iq scene --data (og NavData::Seeded) la bits på 50 bit/s på hvert signal, også pilotene, og med GPS LNAV-hastighet på Galileo og BeiDou. Data følger nå hvert signals egen symboltiming, oppgitt av den nye SpreadingCode::data_modulation() (DataModulation, satt av hver konstruktør i iq::signals). Det er 10 ms på L5-I5, 4 ms på E1-B, 2 ms på BeiDou B1I GEO (D2), og bits på 20 ms med en meander på 10 ms på GLONASS L1OF. Data avvises på piloter, på GPS L2C som én CM/CL-strøm, og NavData::Lnav på alt unntatt L1 C/A. Egendefinerte koder beholder den tidligere timingen på 20 ms som standard. En programmatisk Scene som ba om NavData::Lnav på en annen kode enn L1 C/A, eller NavData::Seeded på en pilot, genererte tidligere stille og returnerer nå en feil ved første lesing.

  • GLONASS L1OF-kanaler fanges og spores på sin egen FDMA-bærebølge. iq::acq::acquire og sporingskanalene mikset hver kode ned fra if_hz alene. I et GLONASS-opptak med flere kanaler fant derfor et søk etter kanal +3 signalet til kanal 0 (alle kanaler deler én avstandskode) og så aldri 1,6875 MHz høyere. Begge bruker nå SampleSpec::baseband_hz(carrier) = if_hz + (carrier − center_hz). Bærebølgeleddet er null for ethvert opptak sentrert på signalets egen bærebølge og utelates når senteret er ukjent, slik at CDMA-behandlingen er uendret. Hvis du omgikk den gamle oppførselen ved å legge carrier − center inn i sidefilens if_hz, fjern det leddet: forskyvningen anvendes nå fra bærebølgen og senteret, så å la det stå anvender den to ganger. Kjent begrensning, uendret her: en GLONASS-scene identifiserer hver satellitt ved frekvenskanalen k, og satellitt-ID-en av typen u32 bryter rundt for en negativ kanal. Referansesidefilen skriver k = -7 som sat_id 4294967289 (k + 2^32). Les den tilbake som k med en i32-konvertering.

[0.32.0] - 2026-10-05#

Lagt til#

  • GNSS IQ-laget på CLI og Python (0.32.0 fase A). Den eksisterende modulen iq kan nå brukes uten å skrive Rust. Fem nye kommandoer under kshana iq kommer inn i datahåndteringsgruppen: scene genererer en lang IQ-scene med flere satellitter til en fil med en sidefil for referansen; acquire kjører FFT-fangst av én eller flere PRN-er over et opptak og rapporterer hver deteksjon (PRN, Doppler, kodefase, statistikk, terskel); track fanger og kjører deretter DLL/PLL/FLL-banken over et opptak og gir sporingsutdata per epoke (CSV/JSON) med konfigurerbare sløyfebåndbredder, integrasjonstid og korrelatoravstand; sweep spiller av ett opptak over flere sløyfeutforminger og rapporterer resulterende jitter- og låsemålinger per utforming; og labfit tilpasser modellen for tap av lås i sporingssløyfen til en tidslinje for mottakertillit. Den samme kjernen er eksponert for Python (kshana.iq_scene, iq_acquire, iq_track, iq_labfit, iq_signals) og returnerer NumPy-vennlige lister og ordbøker. Bare programvare og additivt: ingen nye avhengigheter, ingen sending, ingen syntese av interferens- eller spoofingbølgeformer; motoren, fangsten, sporingen og sløyfeutformingene er crate-ens egne, så en CLI- eller Python-kaller får de samme bitene som Rust-testene. Ny modul iq::cli; scenens egen referansefil er den uavhengige referansen i tests/iq_cli.rs (fangsten gjenfinner hver innsatte kodefase og Doppler, sporingen konvergerer mot den innsatte Doppler-verdien). Ingen publisert antall scenariotyper og ingen rad i verifikasjonsmatrisen endres.
  • Gjenværende GNSS IQ-bibliotekfunksjoner i CLI-en iq og Python (0.32.0 fase A.2). Bygger på fase A og gjør resten av laget iq tilgjengelig uten å skrive Rust:
    • Utbredelseskanal på iq scene (og Python-funksjonen iq_scene): en førsteordens ionosfære (--iono-stec/--iono-vtec eller --iono-klobuchar), Saastamoinen/Niell-troposfæren (--tropo), Cornell-scintillasjonsmodellen (--s4, --scint-tau0, --sigma-phi), speilende flerveisutbredelse fra bakken (--multipath-height/--multipath-ground), landmobilkanalen med tre tilstander (--land-mobile) og en blokk uten fri sikt (--nlos) gjelder for hver satellitt gjennom en ny crate-intern bro (iq::channel::SceneChannelAdapter) som konverterer kanalmodellenes absolutte baner til scenens form for overskudd i forhold til geometrien.
    • SigMF-utdata på iq scene (--format sigmf): skriver samplene som et par .sigmf-data/.sigmf-meta med en opptaking og annotasjoner per satellitt; acquire/track leser allerede SigMF, så en scene går rundt uten tap.
    • Frontend-DSP: en ny kommando iq frontend <in> <out> og de samme flaggene på acquire/track (--bandpass, --notch, --blank, --excise, --agc, --bits 1/2/3/8/14) kjører trinnene i iq::frontend (båndpass-FIR, adaptivt notch, pulsblanking, ekskisjon i frekvensdomenet, AGC, kvantiserer); speilet i Python som iq_frontend.
    • Scener med kringkastet efemeride: iq scene --nav <rinex_nav> --rx-pos lat,lon,alt (med --start/--window/--prn) plasserer hver friske GPS-satellitt i sin sanne kringkastede geometri ved hjelp av motorens RINEX-leser, slik at referansesidefilen bærer den virkelige avstanden, Doppler og kodefasen per satellitt; speilet i Python som iq_scene_broadcast. Bare programvare og additivt: ingen nye avhengigheter, ingen sending, ingen syntese av interferens- eller spoofingbølgeformer (kanalens utbredelseseffekter virker bare på det legitime signalet). Hver numeriske påstand er testet mot en uavhengig referanse (lukket form eller innsatt referanse) i enhetstestene for kanal/frontend og i tests/iq_cli.rs.

[0.31.0] - 2026-10-04#

Lagt til#

  • GNSS IQ-laget: simulering på signalnivå og programvaremottakerbehandling. En ny modul iq tar Kshana fra en frontend for én satellitt og korte blokker på L1 C/A til et fullt lag på signalnivå, tilgjengelig fra kommandogruppen kshana iq. Den genererer lange rå IQ-scener med flere satellitter og en sidefil for referansen per epoke (iq::scene); anvender utbredelse på signalnivå — ionosfære med kode-bærebølge-divergens, troposfære, amplitude- og fasescintillasjon (Cornell-modellen), Fresnel-flerveisutbredelse og en landmobilkanal med tre tilstander, med forhold uten fri sikt (iq::channel); fanger og sporer med FFT-fangst og en DLL/PLL/FLL-bank med flere kanaler, og spiller av ett opptak gjennom mange sløyfeutforminger (iq::acq, iq::track); modellerer frontend — FIR/IIR-filtrering, kvantisering fra 1 til 14 bit, AGC, notch, pulsblanking og ekskisjon i frekvensdomenet (iq::frontend); strømmer store innspilte datasett med begrenset minne — formatene int8/int16/float32/pakket 2-bit og reell IF, SigMF med flere filer, resampling, en datasettoversikt med SHA-256 per fil og en batchkjører (iq::io); legger til spredekoder for GPS L5/L2C, Galileo E1 (CBOC, ekte ICD-minnekoder) og E5a, BeiDou B1C/B1I og GLONASS L1OF, hver kontrollert mot sitt grensesnittkontrolldokument (iq::signals); og tilpasser modellen for tap av lås i sporingssløyfen til en virkelig mottakers observerte oppførsel i laboratoriekjøringer, med feil for tilbakeholdt kjøring (leave-one-run-out) og ekstrapolering merket som prediction (iq::labfit). Hver numeriske påstand er testet mot en uavhengig referanse (en ICD-tabell, en lukket form, eller en uavhengig mottaker som gjenfinner den innsatte referansen); de fysiske kanal- og sløyfemodellene forblir MODELLED. Dette er bare et programvarelag: det skriver IQ-filer for programvaremottakere og syntetiserer ikke interferens- eller spoofingbølgeformer og styrer ikke radiomaskinvare. Ingen publisert antall scenariotyper og ingen rad i verifikasjonsmatrisen endres. Design: docs/design/GNSS-IQ-PLAN.md.
  • Mottakertillit: vurder en virkelig GNSS-mottakerlogg. kshana receiver-trust <scenario.toml> leser en logg fra u-blox UBX, RINEX 3 (med en valgfri kringkastet navigasjonsfil), Android GnssLogger eller NMEA 0183 inn i én tidsstemplet tidslinje og kjører tillitsmonitorer over den: fall i bærebølge-til-støy-tetthet (C/N0), tap av lås, automatisk forsterkningsregulering (AGC), u-bloxs jamming-indikator, posisjonssprang og, med RINEX og navigasjon, motorens egen enkeltpunkts posisjonsbestemmelse med paritets-RAIM (receiver autonomous integrity monitoring) og den klokkestøttede monitoren. Hver epoke er nominell, degradert eller ikke betrodd, og resultatet sier når og hvorfor. Hendelser og predikerte C/N0-fall oppgitt i scenarioet scores mot toleranser oppgitt i samme fil: oppdaget, sen eller oversett, og enig eller uenig. Utdata er resultat-JSON, en CSV per epoke og et diagram; resultatet bærer loggens SHA-256 og hver terskel. Også tilgjengelig fra Python (kshana.receiver_trust), WebAssembly-pakken (receiver_trust, logger inline) og det nye verktøyet assess_receiver_log på serveren for Model Context Protocol (MCP). Veiledning: docs/RECEIVER-TRUST.md; eksempel: examples/receiver-trust/. På spoofingloggene fra JammerTest 2024 gjenskaper motorbanen den første alarmen i den forhåndsregistrerte referansekjeden ved hvert publisert starttidspunkt (tests/receiver_trust_jammertest.rs). Monitorene forblir MODELLED; ingen rad i verifikasjonsmatrisen endres.

0.30.0 - 2026-10-03#

En mindre utgivelse. Valideringsrunde 2 og pakkene fra bølge 1 tar verifikasjonsmatrisen fra 223 rader (93 VALIDATED) ved 0.29.3 til 249 rader (123 VALIDATED, 122 MODELLED, 4 PARTNER); hver opprykking ble kontrollert mot en uavhengig referanse ved en toleranse fastsatt før kjøringen, og hver uenighet er publisert som et funn. Nytt: en innebygd NAIF-kjernelser og DE440-bane, én validert SGP4-til-ITRS-propagerings- og tidsbane, et målt klokkebibliotek, en referansegenerator for LunaNet AFS, løsere med utvidet presisjon og kvadratrotinformasjon, og ekte månebasert IQ-behandling på LuGRE-data. Publiserte tall som har endret seg, er oppført som revisjoner nedenfor.

Syv og tjue rader i verifikasjonsmatrisen blir VALIDATED etter at en uavhengig referanse stemte innenfor en toleranse fastsatt før den første sammenligningen (opprykningsregelen i docs/VALIDATION.md): ti i en første valideringsrunde og sytten i en andre. Femtien MODELLED-rader ble lagt frem for en ekstern referanse i første runde og de gjenværende rutbare radene i andre; hver uenighet er registrert nedenfor som et funn i stedet for å bli justert bort. Tre rader ble delt slik at en validert del ikke bærer en uvalidert rest, noe som tar matrisen fra 223 til 226 rader; valideringspakkene som er føyd til siden, tar den til 249. Tallene leses fra den genererte docs/VERIFICATION-MATRIX.md.

0.29.0 etter runde 1 Ikke utgitt
Rader i verifikasjonsmatrisen 223 223 249
hvorav VALIDATED mot en ekstern referanse 83 93 123
hvorav MODELLED 136 126 122
hvorav PARTNER 4 4 4
Forkortelser brukt i denne oppføringen
Forkortelse Betydning
ADD, ARAIM, MAAST Airborne Design Document (for ARAIM); avansert mottakerautonom integritetsovervåking (ARAIM); Matlab Algorithm Availability Simulation Tool ved Stanford University
ADEV, VRW, ARW Allan-avvik; tilfeldig vandring i hastighet; tilfeldig vandring i vinkel
ANISE, SPICE, NAIF, PCK et åpen kildekode-verktøysett for astrodynamikk (Nyx Space); NASAs verktøysett Spacecraft, Planet, Instrument, C-matrix, Events fra Navigation and Ancillary Information Facility; kjerne for planetkonstanter
BCRS, TDB, TT Barycentric Celestial Reference System; Barycentric Dynamical Time; Terrestrial Time
BIPM, UTC(k) Det internasjonale byrået for mål og vekt; et laboratoriums realisering av koordinert universaltid
CCSDS, OEM, LTC, TCL Consultative Committee for Space Data Systems; Orbit Ephemeris Message; månetidssystemer skrevet i meldingens felt TIME_SYSTEM
CRLB Cramér–Rao nedre grense
CW Clohessy–Wiltshire relativ bevegelse
DE440 Development Ephemeris 440 fra Jet Propulsion Laboratory
DOP, PDOP geometrisk presisjonsforringelse (dilution of precision); posisjonsrelatert geometrisk presisjonsforringelse
EKF, UKF, INS, GNSS, IMU utvidet Kalman-filter; unscented Kalman-filter; treghetsnavigasjonssystem; globalt satellittnavigasjonssystem; treghetsmåleenhet
EMT, VPL, HPL effektiv monitorterskel; vertikalt og horisontalt beskyttelsesnivå
EOP, IERS, PCC, MAE Jordorienteringsparametere; International Earth Rotation and Reference Systems Service; Prediction Comparison Campaign; gjennomsnittlig absoluttfeil
ERFA, SOFA Essential Routines for Fundamental Astronomy; Standards of Fundamental Astronomy
GMAT NASAs General Mission Analysis Tool
NTN, SSB ikke-terrestrisk nett (3GPP); synkroniseringssignalblokk
IGS, ILRS, ITRF2020 International GNSS Service; International Laser Ranging Service; International Terrestrial Reference Frame 2020
ILS, LAMBDA heltallsminste kvadrater; Least-squares AMBiguity Decorrelation Adjustment
ISB bias mellom systemer
LEO lav jordbane
MHSS, PL, TPL løsningsseparasjon med flere hypoteser; beskyttelsesnivå; beskyttelsesnivå for tidssynkronisering
PSD, IQ, SigMF effekttetthetsspekter; sampler i fase og kvadratur; Signal Metadata Format
QPN kvanteprojeksjonsstøy
RAIM mottakerautonom integritetsovervåking
SBAS, WAAS, DFMC, GEO satellittbasert forsterkningssystem; det amerikanske Wide Area Augmentation System; dobbel frekvens og flere konstellasjoner; en geostasjonær SBAS-satellitt
RMS, SISRE kvadratisk middelverdi; avstandsfeil i signal i rommet
RTKLIB et åpen kildekode-bibliotek for GNSS-posisjonering
TCXO temperaturkompensert krystalloscillator
VLBI interferometri med svært lang grunnlinje

Validert#

Hver rad nedenfor oppgir typen uavhengig referanse (Bibliotek: et uavhengig tredjepartsbibliotek som beregner en entydig definert størrelse; Målt: virkelige måledata; P2: et uavhengig numerisk bibliotek som beregner en lineæralgebra-størrelse på nytt på innsjekkede inndata), den uavhengige referansen, toleransen fastsatt før kjøringen og resultatet. Hver opprykking ble kjørt på nytt av en andre gjennomgåer, som genererte testdatafilen på nytt byte for byte og viste at en bevisst mutasjon i motoren gjør testen rød.

  • GNSS/INS-sensorfusjon (Bibliotek), avgrenset til det løst koblede 15-tilstands feiltilstands-EKF-et: NaveGo v1.4 (LGPL-3.0, kjørt under GNU Octave) på sin egen virkelige kjøretur med Ekinox IMU/GNSS. Kshanas RMS for horisontal, vertikal og posisjonsinnovasjon er 0,912, 0,940 og 0,861 av NaveGos (terskel 1,2), og dens gjennomsnittlige normaliserte innovasjon er 0,395 (terskel 1,5). GNSS er til stede hele turen, så ingen utfall er testet. Det tett koblede UKF-et og det koblede klokkefilteret forblir utenfor påstanden.
  • 3-DOF holdning og feilbudsjett for pekning (Bibliotek), avgrenset til toppen av gravitasjonsgradientmomentet: Basilisk 2.9.1 GravityGradientEffector, 40 tilfeller, innenfor 1e-12 relativt (verst 2.1e-15). RSS-pekebudsjettet er en sum av tall levert av kalleren og forblir utenfor den.
  • Felles geometri for kommunikasjon og navigasjon på månen (Bibliotek), avgrenset til plassering av stasjon, azimut, elevasjon og avstand: ANISE 0.10.2, 768 sampler, innenfor 1e-6 grad og 1 mm (verst 2.2e-12 grad og 5.6e-9 m). Parameteren for avstandsmålingsnøyaktighet er en utformingsinndata utenfor påstanden.
  • Momentfri stivlegemeholdningsdynamikk (Bibliotek): Basilisk 2.9.1 spacecraft hub, 1e4 s på to generelle treghetsmomenter, kvaternion og vinkelhastigheter innenfor 1e-9 (verst 3.3e-11 og 3.4e-12 rad/s).
  • GNSS-løsning av heltallsflertydighet i bærebølgefase (LAMBDA) (Bibliotek), avgrenset til ILS-løsningen og dens to beste normer: RTKLIB v2.4.2-p13 lambda(), 300 kovariansmatriser, 0 heltallsavvik, normer innenfor 1e-9 relativt (verst 5.6e-13). Suksessraten for bootstrapping forblir bare kontrollert internt.
  • Sammensatt PL for tidssynkronisering, skalar MHSS (P2): numpy 2.3.5 og scipy 1.18.1 på 300 innsjekkede inndata, PL innenfor 1e-9 relativt (verst 1.2e-10), styrende delmengde identisk.
  • GLS-hvitgjøring av fellesmodus og Mahalanobis-identiteten (P2): numpy 2.3.5 LAPACK på 201 innsjekkede kovariansmatriser, innenfor 1e-12 relativt (verst 7.9e-16); konditionstall opptil 19,3.
  • Leverandør av DE440-orientering for månens hovedakser (Bibliotek): SPICE pxform på den binære PCK-en ved 2 000 epoker utenfor nodene, innenfor 1.7e-5 rad (verst 1.7e-6 rad, omtrent 3 m ved overflaten), etter rettingen som er oppført under «Rettet».
  • SigMF-opptak som inndata og utdata, og Welch-spektre (Bibliotek), avgrenset til lesing og skriving av SigMF og welch_psd: scipy 1.18.1 signal.welch innenfor 1e-12 relativt per bin (verst 6.0e-14); sigmf-python 1.13.0-opptak dekodet bit-identisk; crate-ens metadata gyldige mot SigMF v1.2.6-skjemaet. IQ-syntese og modellsammenligningene for den forblir utenfor den.
  • LEO-tilpasning av kringkastet efemeride og SISRE mot tilpasningsintervall (Målt), avgrenset til Kepler-tilpasningen med 16 parametere og dens SISRE bare for banen: presise baner fra TU Graz ITSG for fire satellitter mot statistikken fra Liu et al. 2025, komponenter innenfor 1.5x (0,804 til 1,087) og SISRE innenfor 1.5x (0,716 til 0,809).

Funn#

Den uavhengige referansen var uenig med disse radene, så de forblir MODELLED. Hvert funn er også skrevet inn i radens tekst om uavhengig referanse (og dermed inn i docs/MODELLED-RATIONALE.md), med en test som fester det.

  • Estimering av klokketilstand om bord: på tilbakeholdte IGS-klokker for 11 GPS Block IIF-satellitter er trestatsfilteret konsistent ett steg frem, men overmodig ved én time på 9 av 11 (periodiske ledd og flicker-ledd er ikke med i modellen).
  • Spoofingdeteksjon: på JammerTest 2024 slo ingen monitor på observasjonsnivå alarm innen 10 s etter noen av de 8 publiserte starttidspunktene, og tre vinduer før start hadde falske alarmer.
  • Beskyttelsesnivå for tidssynkronisering under spoofing: den målte uoppdagede tidsfeilen overstiger TPL ved 3 av 8 oppdagede starter (1.9x til 5.3x); en klokkekalibrering på 60 s dekker ikke driften i mottakerens TCXO.
  • Geometri for utskytningsvindu og stigning: mot Orekit 12,2 stemmer geometrien innenfor avrunding, men stedshastigheten fra jordrotasjonen bommer på 1e-6 relativt ved 62,9 grader bredde (1.12e-6, polarbevegelsen som den sfæriske modellen utelater). Runde 2: hastigheten med sann pol og en epoke stemmer, standardhastigheten uten epoke bommer fortsatt (se nedenfor).
  • Ballistisk innflyvingskorridor ved gjeninntreden (Allen–Eggers): den predikerte toppakselerasjonen for Stardust-gjeninntreden er 61,8 g mot den rekonstruerte 32,89 g (+88 %, toleranse 15 %).
  • Felles feil i UT1 og polbevegelse: mot nøyaktighetsformelen trykt i 178 utgaver av IERS Bulletin A stemmer polen innenfor 1.5x, men UT1 gjør det ikke (0,48 ved 10 dager, 1,59 ved 40 dager). Erstattet i runde 2: raden er nå VALIDATED (se nedenfor).
  • Frakoblet standard inndata for jordorientering: astropy bekrefter radtellingen, men de 12 radene som crate-en kaller Bulletin A-prediksjoner, er flagget som målt (I), ikke predikert (P). Tallene for enighet i raden for den operative prediktoren var derfor mot målte rader. Erstattet i runde 2: motoren klassifiserer rader etter flagg, og raden er VALIDATED.
  • Prediksjonsfeil for jordorientering i operativ stil: prediktorens UT1-feil er 2.4x til 12.6x Bulletin A ved 1 til 10 dager og 5,32 ms ved 10 dager, utenfor området 0,36 til 3,13 ms for den 2. EOP PCC.
  • Geodetisk VLBI på månen: mot ANISE-lystider gjennom DE440 ligger ingen forsinkelse innenfor 1 ps; det største avviket er 24 µs, for det meste det analytiske månesenteret (omtrent 200 km fra DE440). Runde 2: kjernebanen er VALIDATED i en egen rad; denne analytiske banen forblir MODELLED.
  • Interoperabel eksport for månen: Orekit 12,2 avviser tidssystemene LTC og TCL, så utveksling av OEM-filer for månen med en andre leser er ikke etablert.
  • Clohessy–Wiltshire relativ bevegelse: mot Orekits ikke-lineære bevegelse ved 100 m er avviket 1,2 til 6,3 mm, over 1 mm; det skalerer som det utelatte andreordensleddet, så toleransen fastsatt på forhånd lå under lineariseringsfeilen. Erstattet i runde 2: andreordenskorreksjonen er VALIDATED mot den samme terskelen.
  • Feilvekst ved fri treghetsnavigasjon i INS/TRN: mot en fri-treghets Monte Carlo fra NaveGo holder vekstlovene innenfor 5 % til 600 s og overvurderer utover det (2.2x til 8x ved én time), fordi de utelater Schuler-tilbakekoblingen. Erstattet i runde 2: Schuler-feilmodellen er VALIDATED.
  • Tjenestevolum på månen fra virkelig konstellasjonsgeometri: 4 av 12 publiserte tilgjengelighetsstatistikker avviker med mer enn 2 prosentpoeng (opptil 22,5).
  • Overgrense for sporbarhetsbias i heterogen UTC(k): på 105 024 BIPM-rader overskrides overgrensen av 50,8 % av radene; den publiserte usikkerheten avgrenser BIPMs måling av forskyvningen, ikke forskyvningen.
  • Klassifisering av nullrom for datum på månen: på den publiserte geometrien med fem reflektorer er korrelasjonen -0.78 mot -0.97, og CRLB for origo er 96 til 98 % under artikkelens.
  • Substrat for LLR-datumgeometri på månen: mot 192 lunare normalpunkter fra ILRS for 2024 var RMS for enveisresidualen 96 m med den tidligere orienteringsinterpolasjonen og er 22,7 m etter rettingen nedenfor, fortsatt over terskelen på 10 m (avrundede stasjonskoordinater, ingen polbevegelse). Orienteringsserien avkortes stille utenfor 2024-2025. Runde 2: modellen for målt avstand er VALIDATED i en egen rad (2,81 m); serien dekker nå 2014-2030 og gir feil utenfor.
  • Kobling mellom relativistisk klokkerate og referansesystem: selvpotensialleddet ligger 3.18e-4 over den publiserte verdien (toleranse 1e-4); artikkelen evaluerer et annet potensial, så ingen publisert verdi finnes for denne lukkede formen. Erstattet i runde 2: det ekvatoriale potensialet av grad 2 er VALIDATED mot den samme artikkelen.
  • Fysiske konstanter for hvert legeme i solsystemet: 12 av 84 konstanter for de tilføyde legemene avviker fra NAIF pck00011 og gm_de440 (eldre elementer for Mars-måner; andre GM-løsninger for Uranus, Neptun og Pluto). Runde 2: konstantene følger nå NAIF (en transkripsjon, ikke talt med), og den beregnede orienteringen stemmer med SPICE; raden forblir MODELLED.
  • Valgbare efemeridemodeller for LEO: tilpasningen med 22 parametere etterlater 1.71x og 1.86x den publiserte feilen langs banen på buer på 20 min, over 1.5x. Erstattet i runde 2: modellen med 22 parametere og dens tilpasning er VALIDATED i en egen rad.
  • Felles GNSS- og LEO-posisjonering: biasen mellom systemene stemmer med RTKLIB, men 93,2 % av epokene ligger innenfor 3 m av ITRF2020 mot 95 %; RTKLIB selv når 88,2 % på dataene (93,6 % etter rettingen av gruppeforsinkelsen i runde 2).
  • Integritetsblindhet i fellesmodus og dekning og DOP-kart: begge sammenligningene bestod, men ble avvist under gjennomgang fordi en bevisst feil motor også består dem (den første kontrollerer bare en intern identitet; de publiserte gulvene i den andre kan ikke se en doblet PDOP). Runde 2: integritetsblindhet i fellesmodus er VALIDATED på inndata med paritet; dekningskartene forblir et funn (se nedenfor).

Valideringsrunde 2#

Den andre runden tok hver rad som den første runden lot være rutbar, med nye forhåndsregistreringer innsjekket før noen testdatafil ble hentet eller noen uavhengig referanse kjørt, en kritisk andre gjennomgåer som kjørte hver sammenligning på nytt, og en bevisst mutasjon i motoren som må gjøre hver test rød. Eieren godtok den rettede ordlyden i raden for grensen utenfor Omega 2026-10-02 før den ble rykket opp (den gamle teksten motsa koden).

Rykket opp til VALIDATED (17). Typen uavhengig referanse i parentes; toleranse fastsatt før kjøringen.

  • Kobling mellom relativistisk klokkerate og referansesystem (Referanse): Ashby og Patla 2024 L_m innenfor 2.8e-6 (terskel 1e-4) fra det ekvatoriale potensialet av grad 2 for de to feltene artikkelen siterer; pyshtools tyngdefelt av grad 350 for den radiale oppføringen (8.3e-5); DE441 månehastighet (2.5e-3).
  • Frakoblet standard inndata for jordorientering (Bibliotek): astropy 8.0.1 og IERS Bulletin A nr. 039 bekrefter de 30 endelige, 54 raske og 90 predikerte radene i det omskårne utdraget.
  • Felles feil i UT1 og polbevegelse (Bibliotek): fulle rotasjoner i astropy og pyerfa gjenskaper den felles tabellen (UT1 og pol innenfor 6e-16, kombinasjonen innenfor 1.9e-7); de realiserte feilene i IERS Annual Report 2019 gir forhold fra 1,001 til 1,100.
  • EO-nyttelastens fotavtrykk og dekning (Bibliotek): Orekit 12,2 og GeographicLib 2,1 ved hver terskel fastsatt på forhånd, med J2-noderegresjonen nå i nodeavstanden.
  • Clohessy–Wiltshire relativ bevegelse (Bibliotek): med en andreordenskorreksjon i lukket form innenfor 1.2e-7 m av Orekits ikke-lineære bevegelse mot 1e-3 m; den lineære matrisen alene forblir karakterisert (1,2 til 6,3 mm).
  • B-plan-siktning og tyngdekraftassistanse med patched conic (Bibliotek): GMAT R2026a B-plan, asymptoter, C3 og heliosentriske elementer; sbpy 0.6.0 og Kasuga og Jewitt 2019 for Tisserand-parameteren.
  • Feilvekst ved fri treghetsnavigasjon i INS/TRN: en Schuler-feilmodell med ni tilstander innenfor 5 % av korrigerte NaveGo-kjøringer med fri bevegelse i alle 48 punkter (verst 3,70 %).
  • Integritetsblindhet i fellesmodus (P2): numpy lstsq på 1464 inndata med paritet innenfor 1e-12 (verst 1.06e-14).
  • Felles multiteknikk-OD og klokke for månen (P2): numpy beregner hvert Gauss-Newton-steg, sigma og stasjonsfeil på nytt på seks nettverk (innenfor 2.4e-11) etter en retting av QR-løsningen.
  • Kovarians for stasjonskoordinater i VLBI på månen (Bibliotek): en SPICE-bygd Jacobian gjenskaper planen, spekteret, sigmaene og nullrommet innenfor 1 % og 0,1 grad; numpy til 2e-13.
  • Udetekterbar fellesmodusgrense for residual utenfor Omega (P2, ordlyd rettet etter eierens beslutning): numpy LAPACK på 256 tilfeller innenfor 1e-12, seks eksakte uendeligheter.
  • Basisinvariant klassifisering av nullrom (P2): SciPy- og NumPy-snitt av underrom på 72 konstruerte matriser, heltall eksakte, projektornorm innenfor 6.0e-15.
  • Enkeltfrekvens ionosfære- og UTC-tjenester i en LEO-navigasjonsmelding (Bibliotek): GNSSTk 15.3.1 for Klobuchar, Az og UTC-driften; ERFA for de tre tilfellene med skuddsekund.
  • Grense for 5G-posisjonering i ikke-terrestrisk nett (P1): grenser for enkelt SSB fra Bachl, Lei og Nabeel 2026 innenfor et halvt trykt siffer; numpy for kovariansene til posisjonsbestemmelsen.
  • LLR-modell for målt avstand (Målt, ny rad delt ut fra LLR-datumsubstratet): 192 lunare normalpunkter fra ILRS ved 2,81 m RMS mot en terskel på 10 m, med den barysentriske lystiden fra IERS 2010; komponentene under terskelen er ikke løst én for én, og raden sier det.
  • Geodetisk VLBI på månen, kjernebane (Bibliotek, ny rad delt ut fra raden for VLBI på månen): SPICE-konvergerte lystider innenfor 1 ps og partielle deriverte innenfor 1e-6 ved epoker nær J2000; den analytiske standardbanen forblir MODELLED.
  • LEO-efemeridemodellen med 22 parametere fra Liu et al. 2025 og dens tilpasning (Målt, ny rad delt ut fra raden for valgbare modeller): virkelige presise baner innenfor 1.5x av den publiserte statistikken på artikkelens dager og tilbakeholdte dager (0,683 til 1,186); skalakonvensjonen for n_dot er transkribert og ikke validert av denne sammenligningen, og stoppregelen er Kshanas parameterkonvergensregel, ikke artikkelens regel for RMS-endring. ATOMIC-polynomet og tabellen med fem høyder forblir MODELLED.

Eksisterende VALIDATED-rader med ny støtte (ingen endring i antall).

  • Planetposisjoner fra JPL Standish-elementene og lystid mellom legemer i solsystemet: de etterpåfølgende terskelene på dobbelt nominelt er erstattet av sammenligninger fastsatt på forhånd mot JPL Horizons DE441 (RMS høyst tallet i Explanatory Supplement Table 8.10.1, verst 0,778, med Jord-delingen og ICRF-rotasjonen inkludert; lystider innenfor 1e-6 s av Horizons på DE441-posisjoner, verst 6.7e-9 s). Flaggene «grense satt etter sammenligningen» er fjernet.
  • Integritet (RAIM/ARAIM/SBAS): raden hviler ikke lenger på plausibilitetskontroller. Den sier nå: løsningsseparasjonen med flere hypoteser i ARAIM fra ADD v4.2 stemmer med Stanford MAAST for ARAIM 2 på 270 virkelige tilfeller (verste VPL-forskjell 2.2e-3 m mot 0,05 m); RAIM-deteksjon og -eksklusjon på øyeblikksbilde stemmer med RTKLIB raim_fde på 2016 av 2016 beslutninger, med beskyttelsesnivået for helning innenfor 2.7e-12 m; SBAS DO-229E L1-beskyttelsesnivåene stemmer med Stanford MAAST på virkelige WAAS-kringkastinger (2868 par innenfor 1.6e-5 m). Den sier tydelig at funksjonene med enhetlig sigma raim::araim_raim og raim::araim_dual_raim IKKE er i samsvar med ADD (avvik ved like inndata 0.75/4.04 m og 0.39/1.93 m VPL/HPL, et funn), at SBAS-sammenligningen for DFMC L5 er et funn (308 par uten GEO i sikte er beskyttet av Kshana og ikke av MAAST), og at raim::solution_separation_raim ikke har noen ekstern sammenligning. Dens egen selvflagging er fjernet.
  • LEO-tilpasning av kringkastet efemeride: den integrerte referansebanen er lagt til den validerte delen (Orekit 12,2 innenfor 4,55 mm over 6 t, terskel 2 cm); korreksjonspolynomene, klokketilpasningen og avveiningen av oppdateringsperioden forblir modellert.

Funn og blokkerte rader (forblir MODELLED). Hver rads tekst om uavhengig referanse bærer funnet og dets festede test.

  • Modulasjon av navigasjonssignaler (Betz 2001, Hein 2006): spektre og korrelasjoner stemmer; sidelobene på 24 MHz og hver flerveisbias (11 til 15 % for lav) gjør det ikke, årsaken er uløst.
  • TDOA/FDOA-geolokalisering: grensene stemmer med Ho og Chan og Ho og Xu, og med forfatternes kode til 3e-12; Ottawa-faktorene trykt fra en Monte Carlo avviker med 1,3 % og 4,4 %.
  • GNSS fra Jorden på månens avstand: GENESIS-gjennomsnitt i senit stemmer med Montenbruck et al. 2023 på 5 av 6; gjennomsnitt i nadir er 1,0 til 2,4 satellitter for høye.
  • Dekning og DOP-kart: jordutforminger stemmer med Orekit, gnss_lib_py og numpy på hver terskel; utforminger for Månen og Mars overskrider 1e-9 bare i nesten singulære celler.
  • Felles GNSS-posisjonering: to frekvenser 79,9 % og presise produkter 94,2 % innenfor 3 m mot 95 % (RTKLIB 67,9 % og 94,1 %); ISB-avviket for presise produkter skyldes at RTKLIB ignorerer antenneforskyvninger.
  • Sporingssløyfer (GNSS-SDR 0.0.19): stemmer ved 35 til 45 dB-Hz; ved 30 dB-Hz PLL +21 %, DLL -32 %, terskler +1,5 dB; slipptider 0,5 til 2 dekader kortere.
  • Tjenestevolum på månen (Orekit og Hipparchus): 155 av 160 verdier stemmer; kravet til verste sample svikter på nesten singulær LNCSS B-geometri.
  • Kvantetreghetssensor: gulvet med bare QPN er 21 til 31 % under Gauguet 2009 målt støy (terskel 30 %, bommet med 0,5 poeng).
  • Oscillatorforhåndsinnstillinger: målte enheter overskrider holdover for rubidium, kortidsverdien for cesium og CSAC-forhåndsinnstillingen for verste enhet; OCXO-forhåndsinnstillingen har ingen målt registrering.
  • Tetthet fra romvær: Jacchia 1971 er innenfor en faktor 2 av akselerometertettheter ved solmaksimum, men omtrent 1.7x for tett i minimumet i 2008.
  • Geometrifri skrå TEC: 33 av 36 buer innenfor 3 TECU av CODE-kartet (verst 6,84).
  • Spoofingdeteksjon og TPL mot den offisielle JammerTest 2024-loggen: 4 av 10 starter oppdaget i tide; TPL overskrides ved 4 av 10.
  • Klokkefilter på ferske IGS-klokker: to av 11 satellitter feiler kriteriet for innovasjonssum.
  • EOP-prediktor med minste kvadrater pluss autoregresjon: UT1 1,73 til 2.11x Bulletin A ved 2 til 10 dager.
  • Overgrense for realisert forskyvning i UTC(k): samlet overskridelse 0,0333 mot 1e-2.
  • Datum for månens referansesystem fra en kampanje: SPICE-leddet stemmer; P2-leddet med estimerte stasjoner bommer på 1e-9 på et problem med kondisjon 2.1e8.
  • Datum for månens referansesystem fra virkelig LLR: 15 av 16 størrelser stemmer med SPICE; sigma for z-translasjonen er 1,03 % for høy mot 1 %.
  • Gjeninntreden (Allen-Eggers): punktmasseløsningen stemmer med rekonstruksjoner fra romfartsorganisasjoner (bare en kryssjekk); sammenligningen med akselerometer er blokkert av mangel på en lesbar Hayabusa2-kilde.
  • ITU-T-masker: de trykte regneeksemplene stemmer; klassegrensene i G.8273.2 har ingen (blokkert).
  • Geometri for utskytningsvindu: stedshastigheten med sann pol og en epoke stemmer med Orekit (4.9e-8); standardhastigheten uten epoke bommer fortsatt (1.12e-6). Ikke rykket opp; oppfølging venter.
  • Fysiske konstanter for hvert legeme: nå avviker 0 av 84 fra NAIF (en transkripsjon), og den beregnede orienteringen stemmer med SPICE til 1.4e-10 rad. Ikke rykket opp; oppfølging venter.
  • Blokkert av en avgjørelse om avgrensning som eieren må ta, hver med sin samstemte sammenligning innsjekket: observerbarhet for absolutte stasjoner på månen, DOP for overflatebeaconer, eksporten utenfor siktelinjen, deteksjonskraft på tvers av modaliteter, konsistensstatistikken for fellesmodus og polar LEO-dekning.
  • Blokkert av data: feilbudsjett for tidsoverføring (trenger en datareduksjon på virkelige data), JammerTest C/N0 (antenneposisjon og effektfordeling er ikke dokumentert).

Revisjoner (publiserte tall som har endret seg, gammelt -> nytt).

  • Beskyttelsesnivåene fra snapshot_raim ligger nå på det geodetiske lokale nivået i stedet for det radiale: opptil 0,31 m HPL og 0,14 m VPL ved ABMF (16 grader N); ingen golden fil er flyttet, men den registrerte oppsummeringen i veiledningen for gnss-sim flyttes fra gjennomsnittlig HPL 22,1 m / VPL 40,0 m til 22,2 m / 39,9 m (docs/tutorials/scenarios/gnss-sim.toml).
  • Standardverdier for kobling i referansesystem for rate på månen: d_alpha/d_scale 3.139807e-11 -> 3.138801e-11; d_alpha/d_radial 1.807187e-17 -> 1.806185e-17 per meter.
  • Frakoblet standardkjøring for EOP (realtime-frame-eop, celler oppført i docs/revisions/M035-default-eop-recut-cell-changes.md): predicted_rows 12 -> 90; poltak 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; radene i tabell 2 i tests/golden/realtime-frame-eop.csv; enighet for operativ prediktor 0.256/0.695/1.252/3.885 ms -> 0.133/0.421/0.839/2.786 ms.
  • docs/LEO-NAVMSG.md liu22 SISRE bane/med klokke: 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.
  • Liu-høydetabell, Kshana (forhold): 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-navigasjonsmeldingens nDot-skala 2^-60 -> 2^-58 (ikke forhåndsregistrert, oppgitt åpent; utenfor tilpasningssammenligningen); CRC-en for liu22-eksempelrammen 0x62373A -> 0xDED99C.
  • Verifikasjonstabellen i docs/LEO-NAVMSG.md: raden for Liu og ATOMIC delt i en VALIDATED rad for 22 parametere og en MODELLED rad for ATOMIC og fem høyder.
  • Radtekst for DE440-orientering av månens hovedakser: spenn 2024-2025 / 731 rader -> 2014-2030 / 6 209 rader; «avkortes stille» -> gir feil utenfor spennet.
  • Scenarioet eo-coverage: equatorial_ground_track_spacing_km 2756,37 -> 2752,17 km; nye felt inclination_deg (98,19) og nodal_period_min (98,893).
  • constellation-multi-gnss-coverage (referanseklokken for TDOP/GDOP er nå konstellasjonen med lavest nummer i sikte): global GDOP maks 2,2236 -> 2,1205, gjennomsnitt 1,122 -> 1,131, median 1,115 -> 1,125, p90 1,255 -> 1,265, p95 1,305 -> 1,315, p99 1,41 -> 1,42, og GDOP-kartet per celle; mean_visible_by_constellation summert som heltall (omtrent 1e-12 relativt, usynlig med 4 desimaler).
  • Felles GNSS-posisjonsbestemmelse med én frekvens etter rettingen av kringkastet gruppeforsinkelse: 93,2 % -> 93,6 % innenfor 3 m; ISB-median -0.351 -> -0.114 ns.
  • tracking-loop jitter_table log10_mean_time_to_cycle_slip_s (Costas-sløyfe SNR rho/4): ved terskelen 25,47 dB-Hz 11,58 -> 2,10; ved 25 dB-Hz 9,55 -> 1,60; ved 22 dB-Hz 2,24 -> -0.14.
  • ins-trn-coast: hver utdata flytter seg med Schuler-feilmodellen; TRN-toppen i det medfølgende scenarioet 52,932679 -> 44,711834 m (tests/conflict_resilience_architecture_guard.rs).
  • Rapporten lunar-vlbi: ny nøkkel geometry_path («analytic» på standardkjøringen, ingen numerisk verdi endret); nye valgfrie felt planetary_kernel_path, earth_orientation_kernel_path og moon_orientation_kernel_path, med epoch_partials på kjernebanen; typens beskrivelse er skrevet om. Den uavhengige referansen for kjernebanen i verifikasjonsraden er SPICE (0,06 ps); ANISE (0,12 ps) blir en kryssjekk av kjerneevalueringen.
  • Legemekonstanter: Phobos GM 7.087e5 -> 7.087546066894452e5; Deimos 9.62e4 -> 9.615569648120313e4; Uranus 5.7939506103e15 -> 5.793951256527211e15; Neptun 6.83509997e15 -> 6.835103145462294e15; Pluto 8.69326e11 -> 8.696138177608748e11 (m^3/s^2); ekvatorialradius for Phobos 13,1 -> 13,0 km; pol og nullmeridian for Phobos og Deimos fra pck00011; prime_meridian_deg i solsystemet inkluderer nå de kvadratiske og periodiske leddene.
  • europa-surface-pnt (body-pnt på Europa), fra den fulle pck00011-orienteringen av Europa (7cfd66b4; orienteringen stemmer med SPICE pxform til 1.4e-10 rad), som flytter landeren i treghetsrommet: tilgjengelighet bare reléer / med avstanden til Jorden 0,485 / 0,725 -> 0,480 / 0,719 (83 -> 82 av 171 epoker bare reléer), median PDOP 5,266 -> 5,360, RMS for posisjonsfeil 129,516 / 100,983 m -> 112,742 / 86,147 m, median formell sigma 5,266 / 4,272 m -> 5,360 / 4,239 m. Tabellen i docs/SOLAR-SYSTEM.md og festet i mcp/kshana-mcp/tests/round_trip.rs følger med; mars-orbit-pnt er uendret.
  • space-weather (f107 180, f107a 165, kp 4), den kalibrerte faktoren erstattet av Jacchia 1971: activity_density_kg_m3 ved 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 fjernet, mean_exospheric_temperature_k lagt til (1186,7 K); tests/space_weather_reference.rs: solsyklussvingningen ved 800 km er nå 10.4x (NRLMSISE-00 13.6x), og høydepåstanden følger NRLMSISEs stigning til 500 km og fall ved 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 (oppsummeringsteksten uendret på 2,09 / 25,94 m).
  • lunar-joint-od-clock (QR-løsning): 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 sendt ut på nytt for de nye og fjernede feltene ovenfor.

Valideringspakker#

D12, utvidet presisjon og en løser med kvadratrot (to nye VALIDATED-rader: 226 -> 228 rader, 110 -> 112 validert).

Del 1, uavhengig referanse med utvidet presisjon:

  • Datum for månens referansesystem med estimerte stasjoner: en mpmath-referanse med 50 sifre utvidet presisjon (forhåndsregistrert 804662d5, kondisjonsskalerte terskler fra en a priori formel for bakoverfeil) stemmer på en ny kampanjedato (2026-03-18) og på det opprinnelige scenarioet fra 2024-01-01; ny VALIDATED rad under P2. Den avgjør den tidligere striden om dobbel presisjon: motorens datumsigmaer er feil med opptil 9.7e-6, NumPys inverse- og egenverdiruter med opptil 6.2e-6, og dens Cholesky- og QR-ruter med omtrent 1e-8. Motoren er innenfor sin feilgrense, men omtrent tusen ganger mindre nøyaktig enn en faktoriseringsrute.
  • Miljø for uavhengig referanse: mpmath 1.3.0 lagt til.
  • Revisjoner: ingen. Ingen golden fil eller publisert figur endres; raden «Datum for månens referansesystem fra en observasjonskampanje» forblir MODELLED (beslutning av grunnleggeren 2026-10-02, alternativ A: den låner ikke status fra den separate raden); dens tekst om tester viser til den nye testen og dens funn.

Del 2, datumløser med kvadratrotinformasjon:

  • Ny valgfri løser med kvadratrotinformasjon (linalg_sr; solver = "srif" i scenarioet for månens referansesystemkampanje): Householder-QR, marginalisering gjennom den trekantede faktoren, en Jacobi-SVD for spekteret, og kompenserte produkter fra bare korrekt avrundede operasjoner. Mot referansen med 50 sifre (forhåndsregistrert b41908c9) stemmer datumsigmaene til 3e-13 på en ny dato (2026-06-09); på inndataene fra 2026-03-18 og 2024-01-01 er standardløseren feil med opptil 1e-5. Ny VALIDATED rad under P2. Standardløseren og dens utdata er uendret. Terskelene fastsatt på forhånd dokumenterer bare feil over omtrent 2e-7 relativt: de avviser standardløseren, men ikke et snudd Householder-fortegn, et ukompensert skalarprodukt eller en spektral sluttinvers, og raden sier det.
  • Valgfrie kvadratrotbaner ved siden av de uendrede standardene: fim::crlb_srif, batch_ls::gauss_newton_srif, orbit_determination::determine_orbit_batch_srif, lunar_combination::formal_covariance_srif, precise_od::fit_srif og cislunar_srif::srif_cross_validation_sqrt, på nye linalg_sr::weighted_lstsq og covariance_from_sqrt_information. Hver stemmer med sin standard der begge er nøyaktige (en intern kontroll, ingen rad; ingen validering hevdes for dem). precise_od::fit delegerer nå til en felles rutine; dens utdata og hvert scenarios standardutdata er uendret.
  • Rangeringsbeslutninger i månens referansesystemkampanje: en forhåndsregistrert kontroll med utvidet presisjon over 40 dager bekrefter hver avgjørbar stasjonsblokk- og fullrangs-Helmert-beslutning. Den a priori grensen kan ikke bekrefte de 20 rangmangelfulle Helmert-dagene; i eksakt aritmetikk er defekten deres geometrisk, med terskelen 1e-9 innenfor kampanjens naturlige område av egenverdiforhold. Ingen rad.
  • Påstanden i raden for kampanjen med utvidet presisjon er innsnevret til «innenfor grensen for verste tilfelle», og kontrollen av svakeste retning med faste stasjoner måler nå en virkelig vinkel (6.6e-16 rad; sammenligneren er endret fra acos til en korde, terskelen er ikke endret).
  • Revisjoner: ingen. Ingen golden fil eller publisert figur endres; raden «Datum for månens referansesystem fra en observasjonskampanje» er uendret og forblir MODELLED (beslutning av grunnleggeren 2026-10-02, alternativ A).

D4, ryggraden for JPL-kjerneefemeride, fase 1 (fire nye VALIDATED-rader: 228 -> 232 rader, 112 -> 116 validert).

  • NAIF-kjernelseren har sin egen rad. naif_kernel (DAF-beholder, SPK type 2, binær PCK type 2) stemmer med SPICE Toolkit (CSPICE N0067 gjennom spiceypy 8.2.0) og med ANISE 0.10.6 på alle 600 DE440-tilstander og 200 rotasjoner av månens orientering i et tilfeldig rutenett trukket fra hashen til selve forhåndsregistreringscommit-en (abcd9133), innenfor terskler utledet på forhånd fra Chebyshev-evaluering i dobbel presisjon (verst 0,6 % av terskelen, 1.95e-3 m). Raden hevder at motoren leser JPL-kjerner riktig, ikke at DE440 eller den analytiske serien er nøyaktig (tests/naif_reader_spice_oracle.rs).
  • ephem_provider::KernelEphemeris: DE440- (eller en hvilken som helst type 2 SPK-) posisjoner gjennom motorens egen leser, med todelte TDB-epoker og kjernens SHA-256 beholdt for rapporter; den erstatter aldri en planet med et systems barysenter. LunisolarSource lar en geometribane velge den analytiske serien (standarden) eller en kjerne.
  • Valgfri kjerne-Måne for lunar-llr-datum og lunar-vlbi-fim: en nøkkel planetary_kernel_path leser det geosentriske månesenteret fra kjernen; ellers endres ingenting, og rapporten får en blokk moon_ephemeris som navngir kjernen og dens SHA-256. Uten nøkkelen er begge rapportene byte-identiske med før.
  • Kovarians for punkt på månens overflate på kjernebanen (ny VALIDATED-rad): med hver stasjon fast og beaconen på DE440-Månen stemmer beaconens kovarians med en SPICE-lystid-Jacobian (verst 1.7e-3 mot en terskel på 1 %) og en NumPy-invers (4e-14 mot 1e-9), forhåndsregistrert 4a51256 (tests/lunar_vlbi_surface_point_spice_oracle.rs). Raden for den analytiske banen forblir MODELLED: på den analytiske Månen er dens minste beacon-sigma 3,9 % under den uavhengige referansen.
  • Datum for månens referansesystem fra en virkelig kampanje, kjerne for Månens senter (ny VALIDATED-rad): på 447 usette normalpunkter fra 2019-Q2, forhåndsregistrert 830d945a før noe av dem ble hentet, stemmer datumkovariansen på kjernebanen med den uendrede uavhengige SPICE- og NumPy-referansen innenfor 7.6e-5 mot terskler på 1 % og 2 % (tests/validate_llr_datum_kernel_moon_fresh.rs). Grunnleggeren bestemte at denne raden bare rykkes opp på ferske punkter; diagnosen på sette data (c51f8b2) er et funn, ikke evidens. Terskelen skiller ikke mellom månemodeller: den analytiske Månen består også på den samme delmengden (verst 3.8e-3), den planlagte mutasjonen (kjerne-Månen én time sen) ble ikke oppdaget, og ved foldingen bestod også et månesenter som var omtrent 4 650 km feil (Månen tatt rundt Jord–Måne-barysenteret). Raden hevder kovariansen på den banen, ikke månesenteret, og sier det.
  • Posisjoner for Sola, Månen, Merkur og Venus fra DE440 ved UTC-epoker (ny VALIDATED-rad): KernelEphemeris::relative_position_utc stemmer med Skyfield 1,54 på 600 posisjoner mellom 1973 og 2026, verst 2,96 m, innenfor en terskel fastsatt på forhånd (0bfafe6d) av serien med to ledd for TDB − TT (tests/kernel_ephemeris_skyfield_oracle.rs). Planetposisjoner får denne nye kjerneraden nå; Standish-raden og raden for planetmåner er uendret, og månene venter på et scenario som trenger dem (beslutning av grunnleggeren).
  • Funn: den ene bommen i sammenligningen av LLR-datum (sigma for z-translasjon 1,025 % mot 1 %) faller til 0,049 % når bare månesenteret leses fra DE440, på sette data (tests/validate_llr_datum_kernel_moon.rs); på den ferske 2019-delmengden består den analytiske Månen også, så bommen i 2015 lå marginalt til den kvartalets geometri. De analytiske radene «Datum for månens referansesystem fra en VIRKELIG observasjonskampanje» og «Koordinatkovarians for punkt på månens overflate … holdt adskilt fra den for jordstasjoner» forblir MODELLED; teksten om uavhengig referanse peker nå til radene for kjernebanen.
  • lunar_ephemeris sier ikke lenger at motoren ikke har noen leser for binære kjerner; den peker til raden for leseren og forklarer hvorfor romfartøykjerner (typene 13 og 21) fortsatt kommer gjennom Horizons.
  • Revisjoner: ingen. Ingen golden fil, publisert figur eller eksisterende testverdi endres; de analytiske rapportene lunar-llr-datum, lunar-vlbi-fim og lunar-vlbi-fim med alle stasjoner faste er byte-identiske med før (prefikser for resultatets SHA-256 9927aac2, cf1d2671, 25c357e4).

D9, målt klokkebibliotek «Clock Atlas» (tre nye rader, én VALIDATED: 232 -> 235 rader, 116 -> 117 validert).

  • Målt klokkebibliotek (clock_library). Enhetskort (hvit fase, hvit, flicker og tilfeldig vandring i frekvensmodulasjon, en lineær frekvensdrift og eventuelt faseledd én til fire ganger per omløp) tilpasset en navngitt målt klokkeregistrering og scoret på tilbakeholdte data; Allan- og Hadamard-varianser som tar hensyn til hull; en kondisjoneringsdetektor som logger hvert hull, fasetoppavvik, fasesprang, utbrudd og frekvenssprang og ikke vet noe om fil- eller dagsgrenser; konvertering av et kort til støymodellen for slottiming, den utvidede Kalman-klokkemodellen og støynivåene til spoofingmonitoren. Lesere for RINEX- og IGS-klokkefiler, BIPM-filer per laboratorium og Circular T avsnitt 1 (realdata::clk); en samlet, hierarkisk aldringsgrense for UTC(k) (utck_bound, ikke scoret ennå).
  • Identifikasjon av støy med lag-1-autokorrelasjon (allan::lag1_noise_id, Riley og Greenhall 2004), ny VALIDATED-rad (Bibliotek): stemmer med allantools 2024,6 autocorr_noise_id på 140 tilfeller, heltall identiske, verste forskjell 9.6e-13 mot en terskel på 1e-9 (forhåndsregistrert 2ec76864; tests/clock_library_lag1_noise_id_allantools.rs).
  • Målte enhetskort med prediksjon på tilbakeholdte data, ny MODELLED-rad (et funn): tilpass på en tredjedel, prediker Allan-avviket for de to andre tredjedelene innenfor en faktor på 1,5 (forhåndsregistrert 2ec76864). GPS Block IIF i et ferskt IGS-vindu (2026-03-01 til 14): 10 av 11; G27 er optimistisk på tretimersskalaen (verste faktor 1,510). Cesium (innenfor, 1,070), OCXO (utenfor, 2,348) og strontium (innenfor) rapporteres, ikke blindt. Mottakerkortet for JammerTest og kortene for Galileo-masere og Deep Space Atomic Clock er blokkert. En TCXO-modellklasse for ZED-F9P-mottakere på 12 statiske Wroclaw-stasjoner (Zenodo 6488497) feiler: 1 av 11 blinde stasjoner i en åpent oppgitt rettet ny kjøring (tests/clock_library_device_cards_oracle.rs, tests/clock_library_f9p_cards_oracle.rs).
  • GPS Block IIF-kort med ledd per omløp, ny MODELLED-rad (et funn): i et andre ferskt vindu (2026-04-01 til 14) 9 av 11 innenfor terskelen; G03 (1,947) og G25 (1,581) er optimistiske fordi de tilbakeholdte registreringene deres er mer støyfylte enn tilpasningstredjedelene; å fjerne de periodiske leddene feiler på alle 11 (forhåndsregistrert fb475550; tests/clock_library_periodic_cards_oracle.rs).
  • M002, estimering av klokketilstand om bord, runde 3 (et funn, forblir MODELLED): etter den frosne kondisjoneringsdetektoren klarer det utvidede filteret fra runde 2, med uendret tuning og uendrede kriterier, (a) og (c) på alle 11 satellitter for første gang; (b) feiler på G09 (0,894) og G26 (0,876) (forhåndsregistrert fb475550; tests/clock_state_ext_igs_conditioned_oracle.rs).
  • M010, spoofingdeteksjon, runde 3 til 4b (forblir MODELLED): runde 3 blokkert (167 treningsepoker fra de andre øktene til JammerTest-enheten mot 3600); med et modellklassekort for ZED-F9P (runde 4 og 4b) gir klokkemonitoren null falske alarmer før start ved alle 10 loggførte starter (runde 2: 86) og 6 av 10 starter oppdages innen 10 s (runde 2: 4); de samme fire forblir sene (tests/clock_library_tcxo_card_jammertest_oracle.rs).
  • M083, overgrense for UTC(k), runde 3: forhåndsregistrert prospektivt (fb475550) på Circular T-utgaver fra 465, ikke kjørt ennå (tests/utck_bound_prospective_oracle.rs).
  • Miljø for uavhengig referanse: Wroclaw ZED-F9P-registreringen er datagated under $KSHANA_ORACLES/data/wroclaw_f9p (CC BY 4,0, omtrent 1,5 GB); IGS-klokketestdataene er medlevert (IGS-produkter, med kildehenvisning).
  • Revisjoner: ingen. Ingen golden fil, publisert figur eller eksisterende testverdi endres; M001 (re-forankring av holdover) følges ikke opp fordi ingen klokkeklasse ble rykket opp.

D8, én validert propagerings-, referansesystem- og tidsbane (tre nye VALIDATED-rader og M131 rykket opp: 235 -> 238 rader, validert 117 -> 121).

Jordbanetypene som hadde sine egne modeller med bare tolegemeproblem, sekulær J2 eller sideraltid, deler nå én bane: SGP4/SDP4-elementsett med todelte juliandatoer, ført til GCRS og ITRS (International Terrestrial Reference System) gjennom IAU (International Astronomical Union) 2006/2000A-kjeden, med valgfrie parametere for jordorientering.

  • Nye sgp4::MeanElementSet, sgp4::SgpOrbit, sgp4::Eop, sgp4::teme_to_itrs_matrix[_eop] og sgp4::gcrs_to_itrs_matrix[_eop]; Sgp4::new_at og Sgp4::propagate_at tar todelte epoker. Nye jd2::Jd2::from_utc_calendar (SOFA-konvensjonen dtf2d for skuddsekunddager), jd2::utc_to_tai, tai_to_utc, utc_to_ut1 (gjennom TAI, som SOFA utcut1), tai_to_tt og en todelt jd2::earth_rotation_angle.
  • Polarmodusen i leo-pvt propagerer med SGP4 ved 2026-01-01T00:00:00 UTC på IAU-kjeden (leo_fusion::polar::latitude_sweep_at tar en hvilken som helst epoke); SGP4 Walker-generatoren roterer til det jordfaste systemet gjennom IAU-kjeden.
  • Typen passes kjører en ny prediktor for tilsynelatende pass (passes::predict_passes_apparent, apparent_look_angles): SGP4 på IAU-kjeden, ITU-R P.834-9-refraksjon og lystid for nedlenken (nye brytere refraction og light_time, på som standard), parametere for jordorientering (ut1_minus_utc_s, xp_arcsec, yp_arcsec, standard 0), kryssinger løst til 1e-7 s og kulminasjonen med gyllent snitt-søk. Den geometriske passes::predict_passes er uendret.
  • tests/no_private_models.rs hindrer at pakkens kjerner for geometri, tid og propagering har en privat Kepler-propagering, sekulære J2-rater eller en rotasjon bare med sideraltid; navngitte raske nivåer og fysikk som er en rads tema, er begrunnede unntak.
  • Ny VALIDATED-rad «Todelte juliandatoer og skuddsekunder på tidsbanen for jordbaner»: pyerfa 2.0.1.5 dtf2d/utctai/taiutc på 224 tidspunkter rundt alle 27 skuddsekunder innenfor 1e-6 s (forhåndsregistrert e947e69d); verst 1.9e-11 s.
  • Ny VALIDATED-rad «Én jordbane»: TEME-posisjoner for 232 elementsett mot python-sgp4 2,24 (Vallados referanse-SGP4) innenfor 6.1e-8 m (terskel 1 cm), og rotasjonene GCRS -> ITRS og TEME -> ITRS mot ERFA c2t06a, pnm06a og ee06a innenfor 2.9e-6 mas og 0,41 mas (terskler 0,1 og 2 mas), med parametere for jordorientering (forhåndsregistrert 72ea9eb0). Oppgitt åpent: den første kjøringen feilet ved 2016-12-31T23:59:59,5 med ett sekunds rotasjon; UT1 ble tatt fra UTC-kvasi-juliandatoen på en skuddsekunddag, motoren går nå gjennom TAI, og den andre kjøringen stemmer ved de uendrede terskelene.
  • M131 «LEO-dekning og geometrisk presisjonsforringelse for polare og arktiske brukere mot MEO GNSS» blir VALIDATED: Orekit 13.1.8 tar motorens GCRS-tilstander, roterer dem og beregner synlighet og DOP (NumPy for klokkegrupper med flere klokker); posisjoner innenfor 6.8e-5 m (terskel 0,2 m), antall i sikte identisk på 4040/4040 sampler, median DOP innenfor 2.3e-11 relativt.
  • Ny VALIDATED-rad «Tilsynelatende pass-prediksjon for bakkestasjon med refraksjon og lystid»: Orekit 13.1.8 propagerer de samme elementsettene i en TEME den bygger etter den oppgitte definisjonen, med ITU-R P.834-refraksjon og dens målemodell for lystid, over 60 tilfeller på stasjoner ved havnivå: 1210 pass, kryssinger innenfor 3.4e-6 s (terskel 5 ms), maksimal elevasjon innenfor 5.5e-7 grader, tilsynelatende retning innenfor 8.8e-7 grader (terskel 1e-4 grader).
  • Funn, holdt festet: de første sammenligningene av hele påstanden mot Orekit fra ende til ende bommet på terskelene for posisjon og retning, ikke på grunn av motoren, men fordi Orekit 13.1.8s SDP4 avviker fra referanse-SGP4 for sirkulære (e = 0) baner i dypt rom (opptil 67 m), og dens standard-TEME er bygd på IERS 1996 (IAU 1980) nutasjon, omtrent 72 millibuesekunder fra IAU 2006/2000A-kjeden (2,7 m i LEO). Orekits ITU-R P.834-koeffisient for h*theta0^2 er 0,011380 der anbefalingen trykker 0,01380; sammenligningen er på havnivå, der leddet forsvinner, og forskjellen over det er festet.
  • «Pass-prediksjon for bakkestasjon (bakkesegment)» forblir VALIDATED med påstanden innsnevret til den geometriske passes::predict_passes; typen passes hører til den nye raden.
  • Miljø for uavhengig referanse: Orekit 13.1.8 med Hipparchus 4.0.3, pyerfa 2.0.1.5, python-sgp4 2,24 (xval/d8-orekit13/setup.sh).
  • Revisjoner: medfølgende scenarios/passes.toml total tilgang 1675 s -> 1659 s (fem pass som før; beste maksimale elevasjon 73,25 grader -> 70,08 grader), og hver utdata fra passes flytter seg med den nye banen (den utskrevne linjen i docs/examples/multi-tool-pipeline.md og oppføringen passes i docs/CAPABILITY.md sier nå det); medfølgende polar-arctic-leo-coverage GNSS-VDOP ved ekvator 1,19669 -> 1,19710, ved 89,9 grader 1,50645 -> 1,50590, fusjonert VDOP ved 89,9 grader 1,14388 -> 1,14250 (de publiserte tallene med to desimaler 1,20, 1,51 og 1,14 er uendret). Ingen golden fil endres.
  • Ikke rutet ennå: leo_pass, modusene doppler, joint og timing i leo-pvt og referansebanen leo_navmsg (modellene deres ligger i leo_link::geometry og leo_fusion::geom), og jordutforminger i constellation-design (et navngitt raskt nivå med tolegemeproblem).

D6, referansegenerator for LunaNet AFS, LSIS V1.0 (fire nye rader, to VALIDATED: 238 -> 242 rader, validert 121 -> 123).

  • Referansegenerator for LunaNet Augmented Forward Signal (AFS) (lunar_afs), festet til LunaNet Signal-In-Space Recommended Standard (LSIS) V1.0 av 29 januar 2025 og med den versjonen navngitt i hver utdata: bærebølgen på 2492,028 MHz; AFS-I BPSK(1)-datakanalen med 500 symboler per sekund og dens Gold-kode med 2046 brikker; AFS-Q BPSK(5)-piloten med dens primære Weil-kode på 10230 brikker, sekundære kode på 4 brikker og tertiære kode på 1500 brikker; rammen med identifikator 0 (synkroniseringsmønster, BCH (51, 8) delramme 1, CRC-24, LDPC-delrammer med rate en halv 2 til 4, blokkinterleaver 60 ganger 98) med en uttømmende dekoder for delramme 1 og en min-sum LDPC-dekoder skrevet fra paritetskontrollmatrisen alene; og IQ-syntese i basebånd med referanseetiketter skrevet som et SigMF-opptak. Kodene genereres fra standardens skiftregistre og Legendre/Weil-konstruksjoner. Ingenting kopiert fra standarden distribueres videre (den har ingen vilkår for gjenbruk): de primære indeksene for AFS-Q kommer fra IS-GPS-800J, og det som bare standardens vedlegg definerer (AFS-I G2-forsinkelser, tertiære koder, LDPC-delmatriser) leses ved kjøring fra en lokal hurtigbuffer som xval/lunar-afs/fetch_lsis.sh fyller fra den NASA-vertede PDF-en, hver fil kontrollert mot en festet SHA-256 (lunar_afs::lsis). Modellen er en referanse for kontroll mot standarden, ikke en kanal-, utbredelses- eller linkbudsjettmodell.
  • sigmf::meta_to_json_with_extensions og sigmf::annotation_extension_fields: et opptak kan bære felt for navnerom-utvidelser deklarert i core:extensions.
  • Ny VALIDATED-rad «LunaNet AFS-basebåndgjengivelse mot en uavhengig generator, gitt dens kanaltilstand»: mot LANS-AFS-SIM (BSD-2-Clause, commit 480c6bf3, S-bånd-bygg) null brikkeavvik over kodene for PRN 1 til 210, null symbolavvik over de tre rammene i kjøringen, og en normalisert kompleks korrelasjon på 0,999990 over 23,9 s av dens egne sampler (verste blokk på 2 ms 0,999948), innenfor terskler fastsatt før sammenligningen (forhåndsregistrert 986ac280). Den driver gjengiveren med simulatorens egen kanaltilstand og dekker ikke effektfordelingen ut fra bærebølge-til-støy-tettheten eller SigMF- og 8-bits-skrivingen.
  • Ny VALIDATED-rad «LunaNet AFS-kanalkoding av rammer, FID 0»: rammene på 6000 symboler er like LANS-AFS-SIMs symbol for symbol (forhåndsregistrert 986ac280); koden for delramme 1 gjenskaper regneeksemplet i LSIS Figur 8 og CRC-24 kontrollverdien i katalogen for CRC-24/LTE-A.
  • Begge radene som er rykket opp, er datagated på LSIS-hurtigbufferen: testen mot den uavhengige referansen hoppes over med en merknad til xval/lunar-afs/fetch_lsis.sh er kjørt.
  • Funn (ny MODELLED-rad), «LunaNet AFS-generering av spredekoder»: av 2 937 232 genererte brikker og bits sammenlignet med standardens tabeller og Annex 3-filer avviker én, «siste 24 brikker» som Tabell E-5 trykker for tertiær PRN 147, som dupliserer cellen for PRN 151 mens standardens egen Annex 3-fil stemmer med generatoren. Kriteriet om null avvik er bommet.
  • Funn (ny MODELLED-rad), «LunaNet AFS lukket sløyfe, dekodbarhet»: tre forhåndsregistrerte kjøringer mot PocketSDR-AFS; den tredje møtte terskelene for sporing og dekoding i sin helhet, men ikke sitt vern mot at et mottakerbygg som bare skriver ut, gjenskaper loggen til det festede bygget, fordi to kjøringer av den uendrede mottakeren allerede avviker i fangstregistreringene sine.
  • Rettet: standard bærebølge for lunar_service (export_antenna.carrier_hz), lunar_jamming og attack_surface var avrundede 2,4 GHz; den er nå LSIS-020 AFS-bærebølgen, 2492,028 MHz. Ved den gamle standarden var frittromstapet undervurdert med 0,327 dB.
  • Revisjoner: ingen. Hvert medfølgende scenario navngir sin bærebølge, og resultatene fra alle 138 scenariofiler er byte-identiske med forrige main.

D7, virkelig IQ fra månen og GPS LNAV (sju nye rader, ingen VALIDATED: 242 -> 249 rader, validert 123 uendret).

  • portable_math::FftPlan: en rask Fourier-transform (FFT) med blandet radix som gir de samme bitene på hver plattform; en SHA-256-festing av transformene på 8000 og 24000 punkter består på x86_64 og på wasm32-wasip1 (kjører i xval/portable-fft-wasm/).

  • acquisition: parallelt kodefasesøk på samplet IQ (pcps_acquire, pcps_grid) med koherent folding, ikke-koherent akkumulering, en kjikvadratterskel for en falsk-alarm-sannsynlighet for hele søket og en statistikk med celleaveraging for båndbegrenset støy; refine, prompt_series med kode-Doppler, og M2M4- og rutenetttopp-estimatorene for bærebølge-til-støy-tetthet (C/N0).

  • gps_lnav: en koder for IS-GPS-200 legacy-navigasjonsmeldingen (LNAV) for delrammer 1 til 3, med paritet fra Table 20-XIV og en felt-dekoder.

  • realdata::ion_sdr: en leser for ION GNSS SDR Metadata Standard (.sdrx) og dens samplefiler, med to_mid_rise for nivåer i toerkomplement.

  • realdata::lugre: LuGRE-ens (Lunar GNSS Receiver Experiment) IQS-batchheader, RAW-, ACQ- og NAV-telemetri og CLK-filer, og en kontroll som lister opp hvor .sdrx-metadata motsier den binære headeren.

  • antenna::GainPattern2D og, i earth_gnss_lunar, kroppsreferansesystemet for yaw-styring, sendeazimut og off-nadir-vinkler, og transmit_side_db for relativ C/N0 med målte mønstre.

  • Koding av GPS LNAV-navigasjonsmelding (ny rad, forblir MODELLED etter integratorens etterverifisering): på IGS-kringkastingsfilen for 2 mars 2025, tolket og dekodet av RTKLIB v2.4.2-p13, består alle 960 ord paritet, alle 96 delrammer dekodes og alle 608 kringkastede heltall er lik Kshanas (tests/gps_lnav_rtklib_integer_oracle.rs), men forhåndsregistreringen (d4d9eb9d) nådde den offentlige grenen to sekunder etter commit-en som holdt resultatet, så rekkefølgen «registrert før filen ble hentet» kan ikke vises og raden rykkes ikke opp.

  • realdata::ion_sdr fyller ord fra mest signifikante bit (I i den høye nibbelen i en LuGRE-byte; den tidligere lesingen ga det konjugerte signalet), beholder den gamle lesingen som SdrLayout::fill_lsb_first, og leser sampler som er bredere enn et ord.

  • acquisition::refine_doppler_coherent: fasekoherent Doppler-raffinering (0,2 Hz RMS ved 30 dB-Hz over 200 ms i simulering).

  • GPS L1 C/A mot gps-sdr-sim: brikker og paritetsbit bit-eksakte; 230 av 1152 LNAV-felt avviker med én enhet fordi gps-sdr-sim avkorter der det kringkastede heltallet trenger avrunding.

  • LNAV dekodet av RTKLIB: all paritet og alle delrammer består og hver parameter er innenfor et halvt kvantum; 41 skalerte verdier avviker med noen få enheter i siste siffer gjennom RTKLIBs desimale 2^-43-konstant, over den registrerte terskelen.

  • LuGRE-fangst mot GNSS-SDR 0.0.19: 266 av 266 beslutninger stemmer, 250 lokalisert i samme celle; de fleste positive er artefakter av et gjennomsnitt på −0,5 i de bare 4-bits nivåene; C/N0-leddet hadde ingen samtidige flydata. To batcher (OP5, OP12) ble utelatt ved en feil: metadataene deres stemmer med headerne, men leseren kunne da ikke lese en sample bredere enn et ord.

  • LuGRE-fangst mot orbit-predikert Doppler: med beslutningen om sampleeffekt krysser hvert søk på båndbegrenset støy; med beslutningen om celleaveraging stemmer de sterkeste parene i størrelse med motsatt fortegn, noe som viser at den registrerte I/Q-rekkefølgen er den konjugerte av dataene.

  • Blind fangst på batchene fra månens overflate: fire batcher fanger hver én satellitt (predikert synlig, ingen falsk alarm ved 1e-7), ingen to, så terskelen for Doppler-differanse har ikke noe par å score.

  • Relativ C/N0 på månens avstand (M039 omformulert): 15 Block IIR/IIR-M-registreringer og ett par, for få for den registrerte terskelen.

  • Revisjoner: ingen; ingen publisert tall, golden fil eller dokumentasjonsfigur er endret.

  • Raden M039 «GNSS fra Jorden på månens avstand» omformulerer påstanden sin på månens avstand som den relative C/N0 mellom satellitter ved én epoke pluss synlighet (absolutt C/N0 hevdes ikke); den forblir MODELLED. Den øverste NOTICE-filen bærer kildehenvisningen for LuGRE CC BY 4,0.

Rettet#

  • DE440-orienteringen av månens hovedakser interpoleres nå langs geodeten mellom daglige noder. Den tidligere elementvise interpolasjonen var feil med opptil 2.0e-4 rad (340 m på månens overflate) nær kvartpunktene i hvert døgn, ikke de «omtrent 14 m» raden oppga. Brukerne (geometri for lunar laser ranging, datum for månen, observerbarhet for feil på månen) får den korrigerte orienteringen.
  • Rettinger i motoren for runde 2, hver kjørt på nytt mot sin uendrede toleranse fastsatt på forhånd: IERS-vintagen til en EOP-rad leses fra I/P-flaggene i stedet for fra en tom Bulletin B-blokk; snapshot_raim bruker det geodetiske lokale nivået; koblingen i referansesystemet for rate på månen bruker ekvatorialradius, J2 og rotasjon; liu22-tilpasningen starter med null korreksjoner uten priorer og bruker artikkelens rate for middelbevegelse; nodeavstanden i EO bærer J2-noderegresjonen; syklusslipptiden for Costas bruker rho/4; den felles posisjonsbestemmelsen anvender den kringkastede gruppeforsinkelsen for paret; den felles løsningen for månen bruker et QR-steg; NTN-grensen evalueres i den sanne posisjonen; klokkereferansen for konstellasjonsutforming er konstellasjonen med lavest nummer i sikte; DE440-orienteringsserien spenner over 2014-2030 og gir feil utenfor i stedet for å avkorte.

Lagt til#

  • leo_navmsg::truth::TruthOrbit::from_ecef_states, en referansebane bygd fra tabulerte jordfaste tilstander, brukt av sammenligningen med tilpasning til virkelig bane.
  • Testfilene og testdataene for sammenligningene ovenfor, hver med sin generator og en NOTICE.md som oppgir kilde, lisens, hentedato og SHA-256.
  • Runde 2: araim_reference::add_v42_protection_levels og _ecef (ADD v4.2-feildeteksjon, etter Stanford MAAST for ARAIM 2, BSD-3-merknad i kilden); raim::snapshot_raim_fde; cw_dynamics::second_order_correction og propagate_second_order; INS-feilmodellen med ni tilstander inertial::coast::ErrorDynamics; partielle deriverte for lunar_vlbi::KernelGeometry og inndata for lunar-vlbi på kjernebanen; naif_kernel, en leser for SPK type 2 og binære PCK-kjerner; lunar_llr_geometry::llr_bcrs_one_way_m med ITRF2020-stasjoner; Jacchia 1971-tetthet; solar_system::link_on over en hvilken som helst efemeridetilbyder; launch::site_rotation_speed_at; eo_payload::j2_nodal_period og ground_track_spacing_equator_j2; batch_ls::gauss_newton_qr; precise_products (RINEX-klokke, ANTEX- og DCB-lesere).

[0.29.3] - 2026-10-01#

En patchutgivelse på 0.29.2. Kshana Studio er bygget om rundt to visninger: en enkel visning som svarer først og forklarer med vanlige ord, og en avansert visning med hele dashbordet. To små rettelser på kshana.dev følger med. Motoren endres ikke: hvert medfølgende scenario gir et byte-identisk resultat som i 0.29.2, bortsett fra versjonsstempelet.

Endret#

  • Kshana Studio har en enkel visning. Det er den Studio åpner på.
    • Svaret kommer først: et scenario åpnes på resultatet, formulert i én enkel setning. Hvert medfølgende scenario har sin egen setning, skrevet for det scenarioet måler.
    • Høyst fem innstillinger vises, de som endrer svaret mest. Resten ligger under «Avanserte innstillinger», skjult til du åpner dem.
    • «Slik beregnes dette» forklarer metoden i noen få linjer, og «For forskere» viser motorens egne tall, scenariofilen og evidensen bak resultatet.
  • Hele dashbordet er den avanserte visningen. Hvert panel, diagram, hver eksport og rapport fra den tidligere Studio-versjonen finnes der.
  • En bryter bytter mellom de to visningene og husker hvor du var. Scenarioet, visningen du var i og alle innstillinger du har endret blir med over. Studio husker hvilken visning du brukte sist. Lenker fra nettstedet og dokumentasjonen åpner den enkle visningen; en lenke med view=advanced åpner den avanserte visningen, og hver eldre Studio-lenke åpner fortsatt det samme scenarioet og den samme visningen.
  • En raskere første visning på trege forbindelser. Det registrerte svaret for et scenario tegnes før resten av Studio er lastet, så på en treg mobilforbindelse vises svaret på omtrent to sekunder i stedet for omtrent ni.
  • Bedre søk. Et søk viser nå først scenarioer der området eller tittelen samsvarer med ordene, foran scenarioer som bare nevner dem i filnavnet eller teksten.

Rettet#

  • Globusen på forsiden blir ikke lenger tom når redusert bevegelse er slått på. Med systeminnstillingen for redusert bevegelse på kunne en endring av vindusstørrelsen la globusen i toppfeltet stå tom til siden ble rullet. Globusen tegnes nå på nytt i samme bilde som størrelsesendringen.
  • L-bånd-konsollen på forsiden forklarer det tomme båndet. I «Watch a jammer take the band» forble panelet for GPS L5 / Galileo E5a mørkt i hele minuttet, noe som så ut som en feil. Ingen jammer sender i det båndet i dette scenarioet, og satellittsignalene ligger under støygulvet, så ingenting der stiger over det. En diskret merkelapp sier nå dette i alle panelstrekk der ingenting ligger over gulvet (L5 / E5a-panelet, og L2C-panelet før støyjammeren starter), med hvert båndets C/N0 og låsestatus fra samme kjøring. Den plasseres bare der ingenting er over gulvet, så den dekker aldri jammerenergi.

0.29.2 - 2026-10-01#

En patchutgivelse på 0.29.1. Den fjerner duplisert kode i modulene for LEO-navigasjonsmeldinger, fusjon og spektrum, legger til et lyst tema på kshana.dev, flytter Kshana Studio til sin egen adresse, gjør nettstedet lesbart for søkemotorer og AI-assistenter, retter flere små ting i Studio og lar npm-utgivelser publiseres uten lagret token. Ingen motorutdata endres: hvert medfølgende scenario gir et byte-identisk resultat som i 0.29.1, bortsett fra versjonsstempelet.

Lagt til#

  • Et lyst tema for kshana.dev. Hver side kan leses lyst eller mørkt. Nettstedet følger leserens systeminnstilling og har en bryter for å endre den.
  • Søkemotorer og AI-assistenter kan lese nettstedet. Hver side har nå sin egen tittel, beskrivelse, kanoniske adresse, tagger for sosiale kort og strukturerte data fra schema.org, og ren tekst for de delene et skript tegner. Nettstedet publiserer robots.txt, en sitemap.xml med datoen hver side sist ble endret, llms.txt og llms-full.txt (en kort og en full tekstveiledning for AI-assistenter), og en IndexNow-nøkkel slik at en utrulling kan fortelle søkemotorer hva som er endret.
  • npm-utgivelser kan publiseres uten lagret token. npm-jobben kjører nå Node 24 og npm 11.5.1 eller nyere, som støtter npm trusted publishing: npm bytter utgivelsesjobbens GitHub-identitet mot en kortlevd legitimasjon. Hemmeligheten NPM_TOKEN virker fortsatt og brukes så lenge den er satt, så ingenting endres før trusted publishing er slått på for pakken på npmjs.com. docs/RELEASING.md lister trinnene.

Endret#

  • Overskriften på forsiden er lesbar over globusen. En myk skygge ligger nå bak overskriften og teksten, og demper banelinjene og satellittprikkene i den animerte globusen der de krysser den.

  • Kshana Studio har sin egen adresse: https://kshana.dev/studio/. Hver lenke på nettstedet og i dokumentasjonen peker dit. Den gamle adressen, /playground/, virker fortsatt og videresender til den nye, med scenarioet, visningen og de andre innstillingene i lenken bevart.

  • Rettelser i Studio. Motorfilen lastes ned én gang i stedet for to. Mens den lastes ned, viser Studio scenarioets registrerte resultat med en gang, merket som registrert, i stedet for en tom skjerm. På en telefon er toppfeltet én kompakt rad. Nøkkeltallene brytes til to per rad, så ingen skjules utenfor skjermkanten. Feltetikettene bruker scenarioets egne ord, med feltnavnet ved siden av, og søket finner felt på begge.

  • Mindre duplisert kode. Enhetstabellen for LEO-navigasjonsmeldinger skrev de samme ti SISRE-statistikkradene for fire tilpasningssammendrag. Et makro skriver dem nå én gang. De to spektrum-fossefalldiagrammene deler én tidsakse, ett fargefelt og ett C/N0-søylepanel. Nedsamplingen av hovedrutenettet gjenbruker downsample_grid, og Simpson-integralet gjenbruker navsignal::simpson. De to inngangspunktene til LEO-passeringstypen deler ett oppsettstrinn. leo_link::geometry importerer vektorhjelperne i leo_fusion::geom i stedet for å kopiere dem. Den avanserte rapporten importerer API-rapportens HTML-escape i stedet for å kopiere den. Hver av de 139 scenariofilene i scenarios/ ble kjørt på 0.29.1 og på denne koden, og hver utdatafil er byte-identisk.

  • Enhetstabellene for leo-navmsg og leo-pvt har sine egne filer. De er flyttet ut av moduler som også inneholder logikk, til src/leo_navmsg/units.rs og src/leo_fusion/pvt_units.rs. PVT_UNITS beholder sin offentlige sti. Bare disse to tabellfilene kommer inn under unntakene fra påvisning av kopiert kode for deklarative kataloger i sonar-project.properties, som tests/sonar_cpd_exclusions_are_justified.rs kontrollerer.

Rettet#

  • CI-merket i README viser resultatet av pushes til main. Merket telte kjøringer av alle hendelser på main, så det kunne vise «failing» mens hver push-kjøring var grønn; det ber nå bare om push-kjøringer (event=push).

0.29.1 - 2026-10-01#

En patchutgivelse på 0.29.0: det målte dekningstallet, prosjektets navnelinje på kshana.dev, en raskere dekningsjobb og en oppfrisket README. Ingen motorutdata endres: hvert scenario gir samme resultat som i 0.29.0.

Revisjoner av publiserte tall#

  • Linjedekning: ~96 % → ~95 %. Dekningsjobben målte den utgitte 0.29.0-koden på nytt (commit db796dd, CI-kjøring 36809850252, 2026-10-01): 95.35 %, 55 970 av 58 697 linjer i src/. Det publiserte tallet var 95,63 % (37 697 av 39 419 linjer), målt på b1d350d før 0.28.0; det ble avrundet til ~96 %. Det nye tallet avrundes til ~95 %, så hver flate som tests/coverage_figure_doc_sync.rs fester flytter seg samlet: docs/COVERAGE.md, README-merket, Evidens-linjen og CI-tabellen, merkene for crates.io, PyPI og npm, den tekniske rapporten og dekningssiden på kshana.dev. Gulvet på 85 % er uendret.

Lagt til#

  • Navnelinjen på kshana.dev. «Kshana · क्षण · the precise instant» åpner nå forsidens hovedfelt og står under merkenavnet i bunnteksten på hver side. kshana.dev sender fortsatt ingen forespørsel til en annen vert: devanagari-skriften er et selvhostet utvalg av Noto Sans Devanagari med de tre bokstavene i क्षण (1 692 bytes, web/fonts/, med teksten i SIL Open Font License og SHA-256 i web/fonts/FONTS.json). web/tools/fetch_third_party.py har lært å lagre et utvalg fra Google Fonts text= under et innholdsadressert filnavn.

Endret#

  • Lenkene på nettstedet lander der de peker, på rene adresser. En lenke til en seksjon plasserer nå seksjonen rett under toppfeltet, på telefon og på stasjonær: en sektorlenke i Missions åpner den sektoren med panelet øverst; lenker i Capabilities og Editions holder plassen mens diagrammene over dem tegnes; Editions legger ikke lenger til en ekstra toppforskyvning; og en lenke inn i en sammenfoldet del av en dokumentasjonsside åpner den. Hver side lenkes med sin rene adresse (/evidence#research, /docs/changelog, / for forsiden), og de kanoniske lenkene, områdekartet og omdirigeringene fra gamle adresser bruker de samme; adressene med .html virker fortsatt. Research har sin egen lenke i toppfeltet, mellom Evidence og Developers, og i bunnteksten. Dokumentasjonen viser ikke lenger veikartet (ROADMAP.md blir i depotet): gruppen Project er Changelog, Licensing, Security, Contributing, Governance og Code of conduct, og Glossary er flyttet til Get started.
  • Dekningsjobben er raskere. På 0.29.0 tok den 143 minutter mot friske 91 til
    1. Fuzzeren tests/property.rs, årsaken forrige gang, tok 4 av dem. Det medfølgende korpuset vokste fra 74 til 139 scenarioer, og tre testbinærfiler gikk gjennom hele korpuset én fil om gangen (determinism to ganger, advanced_report og animation én gang): 37 minutter til sammen under dekningsinstrumentering, mot 3 på 0.27.2. De deler nå tests/support/corpus.rs, som kjører arbeidet per scenario på hver kjerne og leverer resultatene tilbake i sortert rekkefølge; hvert scenario og hver påstand blir stående. På en bærbar arm64, debug-bygg: determinism tar 143 s på 14 kjerner mot 612 s med KSHANA_CORPUS_THREADS=1 (den gamle serielle gjennomgangen).
  • README, oppfrisket. Den åpner med den samme navnelinjen som nettstedet; Studio-skjermbildene er tatt på nytt fra Studio 0.29.1, med et nytt av Studio på en telefon og dens trinnlinje nederst; en ny stripe «The site» viser tre sider av kshana.dev fra bygget 0.29.1 (tools/capture_site_shots.mjs, satt sammen av tools/readme_shots.py og registrert i docs/assets/readme/site/SHOTS.json); dekningstallet er ~95 %; og alternativteksten til forskningsfiguren, som gjentok arkitekturfigurens, beskriver nå artiklene. Merkene i toppen er mindre og kortere (18 px høye; «~95%», «83/223», «quality», «AGPL-3.0», «zenodo.20528627»), så de elleve får plass på to linjer; hver lenke og alternativtekst beholder sin fulle mening.
  • Jobben for containerbildet får 90 minutter. Ved v0.29.0 nådde det emulerte linux/arm64-bygget av bildet kshana-mcp den gamle grensen på 45 minutter mens den siste crate-en ble kompilert, så bildet, oppføringen i MCP-registeret og kanalkontrollen ble ikke publisert. Grensen er nå 90 minutter; bildet er uendret.
  • Åtte flyttallsliteraler gruppert på nytt i src/ephem.rs og src/sgp4.rs (0.323_273_64 → 0.323_273_640): SonarQube Cloud leste en siste gruppe på _64 eller _32 som et manglende suffiks f64 eller f32 (regel S7454). Verdiene er de samme tallene, så hvert resultat er uendret.

0.29.0 - 2026-10-01#

Tolv nye scenariotyper og tre nye måter å lese en kjøring på. Motoren dekker nå radiospekteret, hele solsystemet, konstellasjoner rundt et hvilket som helst legeme, kampanjer som lenker scenarioer til ett oppdrag, og posisjonering, navigasjon og tidssynkronisering (PNT) fra lav jordbane (LEO) fra signalet til posisjonsbestemmelsen. Hver kjøring kan også skrives som en animasjon, en full rapport og et sett interoperabilitetsfiler for andre verktøy.

Rundt motoren: en nytegnet kshana.dev (et nettsted med flere sider, og et nytt Kshana Studio-dashbord som kjører hver funksjon i nettleseren), en omskrevet README, fjorten verktøy på Model Context Protocol-serveren (MCP), et nettleserbygg som gir de samme tallene som det native, og en offentlig side for Kshana Pro.

0.28.0 0.29.0
Scenariotyper 63 75
Scenariofiler (pluss ett suitemanifest) 77 138, hvorav 132 er medfølgende for kshana example
Rader i verifikasjonsmatrisen 174 223
hvorav VALIDATED mot en ekstern referanse 66 83
hvorav MODELLED (oppgitt modell, kontrollert for intern konsistens) 104 136
hvorav PARTNER (trenger en partners maskinvare eller data) 4 4

Hvor veksten kommer fra:

Område Typer Scenariofiler Matriserader (validert + modellert)
Spektrum 1 1 3 (1 + 2)
Solsystemet og posisjonering rundt et hvilket som helst legeme 2 3 6 (2 + 4)
Konstellasjonsutforming 1 3 3 (2 + 1)
Kampanjer 1 5 3 (0 + 3)
Scenarioer for sjø, vei og bane 0 5 0
Animasjon, rapporter, interoperabilitetseksporter 0 0 0
LEO-signaldesign og flerbåndsspekteret 1 4 4 (2 + 2)
LEO-passering og lenkebudsjett 1 6 9 (6 + 3)
LEO-navigasjonsmelding 1 5 9 (3 + 6)
LEO-posisjonering, tidssynkronisering og fusjon 3 8 8 (1 + 7)
LEO-kjeden fra ende til ende 1 3 1 (0 + 1)
LEO-robusthet, fokusområder og sluttbrukerscenarioer 0 18 3 (0 + 3)
Totalt lagt til 12 61 49 (17 + 32)

LEO-funksjonen er systemuavhengig: den kjører på generiske, oppgitte parametere og trenger ikke noe navngitt system. Navngitte systemer er valgfrie forhåndsinnstillinger, hver i sin egen fil med sin offentlige kilde. Én forhåndsinnstilling, Celeste IOD (in-orbit demonstration), bruker tall presentert på ESA NAVISP LEO-PNT-workshopen, 2026 (ESA er European Space Agency; NAVISP er dets Navigation Innovation and Support Programme); den ligger i én fil, src/celeste_iod.rs, med sine fem scenarioer som bare finnes i depotet, så den kan holdes tilbake uten kildeendring, og ingen av workshop-tallene gjentas i denne endringsloggen.

Les «Revisjoner av publiserte tall» før du oppgraderer. Én motorutdata endres (kolonnene i treghetsreferansesystemet for typen ephemeris, etter en fortegnsrettelse i nutasjonsmatrisen), og dokumentasjonsrevisjonen rettet tall som tidligere dokumenter hadde trykt.

Forkortelser brukt i denne oppføringen

Statuser: VALIDATED betyr kontrollert mot en uavhengig ekstern referanse (en publisert tabell, en annen gruppes programvare eller målte data); MODELLED betyr en oppgitt modell som bare er kontrollert for intern konsistens; PARTNER betyr at kontrollen trenger en partners maskinvare eller data.

Forkortelse Betydning
3GPP, 5G, NTN 3rd Generation Partnership Project; femte generasjons mobilnett; ikke-terrestrisk nett
AD, BC kalenderæraer (anno Domini, før Kristus)
AIAA American Institute of Aeronautics and Astronautics
AltBOC, BOC, BPSK, MBOC alternativ binær offsetbærebølge; binær offsetbærebølge; binær fasetastmodulasjon; multiplekset binær offsetbærebølge (signalmodulasjoner)
ATOMIC Autonomous Time and Orbit Determination for Microsatellite Constellations (en publisert LEO-efemeridemodell)
C/A, L1, L2, L2C, L5 grov-/oppsamlingskoden (coarse/acquisition) og bærebølge- og sivilsignalnavnene i Global Positioning System
C/N0 forholdet mellom bærebølge og støytetthet
CIO Celestial Intermediate Origin
CLI kommandolinjegrensesnitt
CRC-24Q 24-bits syklisk redundanssjekk (Qualcomm-polynom)
CSAC chipskala atomklokke
CSS, HTML, SVG, XML Cascading Style Sheets; HyperText Markup Language; Scalable Vector Graphics; Extensible Markup Language
CSV, JSON, PDF, TOML, URL kommaseparerte verdier; JavaScript Object Notation; Portable Document Format; Tom's Obvious Minimal Language; uniform ressurslokalisator
CW kontinuerlig bølge
CZML, KML, GeoJSON Cesium Language; Keyhole Markup Language; Geographic JSON (kart- og globusformater)
DE441 Development Ephemeris 441 fra Jet Propulsion Laboratory
DOI digital objektidentifikator
DOP, GDOP, PDOP, HDOP, VDOP svekkelse av presisjon (dilution of precision): geometrisk, posisjon, horisontal, vertikal
E1, E5, E5a, E5b signalnavn i Galileo
E3F et sporenavn i konstellasjonstabellen til Global Positioning System
ECEF jordsentrert, jordfast
EE jevndøgnsligningen
EGM2008 Earth Gravitational Model 2008
EIRP ekvivalent isotropisk utstrålt effekt
ERFA, SOFA Essential Routines for Fundamental Astronomy; Standards of Fundamental Astronomy (astronomibiblioteker brukt som referanse)
ESA, NAVISP European Space Agency; dets Navigation Innovation and Support Programme
FDMA frekvensdelt flertilgang
GCRF, GCRS Geocentric Celestial Reference Frame; Geocentric Celestial Reference System
GLONASS Russlands Global Navigation Satellite System
GNSS, GPS globalt satellittnavigasjonssystem; Global Positioning System
IAU International Astronomical Union
ICD, OS SIS ICD, OS SDD grensesnittsspesifikasjon (interface control document); Galileo Open Service Signal-In-Space Interface Control Document; Galileo Open Service Service Definition Document
ICRF International Celestial Reference Frame
IMO Den internasjonale sjøfartsorganisasjonen
INS, MEMS treghetsnavigasjonssystem; mikroelektromekanisk system
IOD demonstrasjon i bane
IQ i fase og kvadratur
IS-GPS-200 grensesnittspesifikasjonen til Global Positioning System
ISS Den internasjonale romstasjonen
ITRF, ITRS, PEF, TEME International Terrestrial Reference Frame; International Terrestrial Reference System; pseudo-jordfast; sann ekvator, middels jevndøgn (referansesystemer)
ITU, ITU-R Den internasjonale teleunion; dens radiokommunikasjonssektor
J/S forholdet mellom jammer og signal
J2 til J6, J2000 sonale harmoniske i gravitasjonsfeltet; epoken 2000-01-01 12:00
JPL Jet Propulsion Laboratory
LEO, MEO lav jordbane; middels jordbane
MBSE modellbasert systemutvikling
NEES normalisert estimeringsfeil i annen potens
NeQuick-G ionosfæremodellen til Galileo
OEM, SP3, TLE Orbit Ephemeris Message; Standard Product 3 (presise baner); tolinjers elementsett
PNT, PPP posisjonering, navigasjon og tidssynkronisering; presis punktposisjonering
PSD, SSC effekttetthetsspekter; spektral separasjonskoeffisient
RAIM, SQM mottakerens autonome integritetsovervåking; overvåking av signalkvalitet
RINEX, RTCM Receiver Independent Exchange Format; Radio Technical Commission for Maritime Services
RMS kvadratisk middelverdi
RTKLIB et åpen kildekode-bibliotek for GNSS-posisjonering, brukt her som uavhengig referanse
SGP4 Simplified General Perturbations 4 (banemodellen til tolinjers elementsett)
SHA-256 Secure Hash Algorithm, 256 bit
SigMF Signal Metadata Format
SISRE avstandsfeil i signalet i rommet
SPS PS Standard Positioning Service Performance Standard
SRTM Shuttle Radar Topography Mission
STK Systems Tool Kit (dets efemeridefilformat .e)
STL Satellite Time and Location
SVID identifikator for romfartøy
T/P/F en Walker-konstellasjons totale antall satellitter, baneplan og faseforskyvning
TEC totalt elektroninnhold
UHF ultrahøy frekvens
UTC koordinert universaltid
WGS 84 World Geodetic System 1984
X1, X5 signalnavn i Xona Pulsar-systemet

Revisjoner av publiserte tall#

Et endret publisert tall er en revisjon og blir registrert, aldri rettet i det stille. Denne utgivelsen har én revisjon av motorutdata og flere av tall som er trykt i dokumentasjonen.

Motorutdata

  • TEME→GCRS-reduksjonen dreide med 2·Δψ: nutasjonsmatrisen hadde fortegnet til Δψ snudd. nutation::numat bygde Rx(−(ε̄+Δε))·Rz(Δψ)·Rx(ε̄) der SOFAs iauNumat bygger Rx(−(ε̄+Δε))·Rz(−Δψ)·Rx(ε̄), så nutation_matrix, nutation_matrix_2000a, teme_to_gcrs og gcrs_to_teme roterte med det dobbelte av nutasjonen i lengde, omtrent 25 buesekunder. Hver kontroll av kjeden var en egenskapstest (ekte rotasjon, rundtur, et ikke-null nutasjonsbidrag) som et fortegnsslurv passerer; ende-til-ende-testen mot Vallado dekket TEME→PEF, TEME→ITRF og GCRS→ITRS, men ikke TEME→GCRS. På Vallado-eksempelet (AIAA 2006-6753, 2004-04-06) bommet kjeden på den publiserte GCRF med 1 145 m; den lander nå 0,11 m fra den, og matrisen er lik ERFAs numat til 1e-14. tests/frame_reference_vectors.rs::teme_to_gcrs_matches_vallado_gcrf og nutation::tests::nutation_matrix_matches_erfa_numat feiler begge med det gamle fortegnet. Konsistenstesten for CIO (Celestial Intermediate Origin) i src/cio.rs hadde satt det resulterende avviket på ~130 m ned til «≈ 2·EE»; resten er nå 5 cm og grensen er strammet inn fra 250 m til 1 m. Dette flytter publiserte tall, registrert her som en revisjon: kolonnene gcrs_r_m og gcrs_v_m_s for typen ephemeris (omtrent 0,8–1,0 km for det medfølgende ISS-scenarioet (International Space Station); kolonnene for TEME, jordfast, sporet på jorden, siktevinkler og Doppler endres ikke), og Propagator::position_in_frame / state_gcrs for referansesystemene GCRS og ITRS. Ingen medfølgende scenarios sammendragslinje, diagram eller golden-hash leser disse kolonnene. De nye interoperabilitetseksportene bruker den rettede kjeden: CZML-posisjonen til den første orbit-sgp4-gps-satellitten stemmer med en ERFA-reduksjon av samme TLE (propagert av Python-pakken sgp4) til 2,3 cm.
  • Typen leo-navmsg, native og i nettleserbygget. Typen beregner nå hver transcendental funksjon gjennom ett portabelt matematikkbibliotek, så rammen er de samme bytene på hver plattform og i hvert bygg (under Fixed). Hvert tall for leo-navmsg flytter seg med det, og det samme gjør trinnet navmsg i leo-pnt-chain. Typen er ny i denne utgivelsen, så ingenting fra en tidligere utgivelse flytter seg, men tall trykt før rettelsen gjør det: kontrollverdien i docs/LEO-NAVMSG.md for scenarioet som koder og dekoder var 0x110315 og er 0x19105F, og SISRE for den dekodede meldingen er 0,129 cm. På kshana.dev viste Missions-kortet for leo-navmsg-fit-interval-trade en verste avstandsfeil på 1,6 mm med en tilpasning på 60 s og 40,3 mm med en tilpasning på 900 s; nettstedet er nå bygget fra denne utgivelsens motor og viser 1,8 mm og 46,6 mm.
  • Kartet over jamming-fotavtrykk på kshana.dev (Missions). Hver av de 875 cellene er én kjøring av maritime-strait-jamming der bare mottakerens posisjon er endret. Cellene beregnes nå ut fra de samme koordinatene med tre desimaler som cellens lenke «open this run» gir til Kshana Studio, så en celle viser nøyaktig det lenken gjengir. Gjennomsnittlig forhold mellom jammer og signal (J/S) for 30 celler flytter seg med 0,1 dB, opp eller ned; ingen celles sporingstilgjengelighet endres. Motoren gir identiske resultater for hver celle i 0.28.0 og 0.29.0.
  • Seedet resampling i WebAssembly-pakken (WASM). Nettleserbygget trakk andre bootstrap- og shuffle-indekser enn det native bygget fra samme seed (under Fixed). Intervallet for quantum-anomaly-detect for arealet under kurven i nettleseren var [0.9901265, 0.9938305] og er nå det native [0.99035875, 0.993861]. Ingen native tall flytter seg.

Tall trykt i dokumentasjonen

Dokumentasjonen ble revidert ord for ord mot kjøringer av denne utgivelsens motor. Der et trykt tall ikke stemte med kjøringen, ble dokumentet rettet, og hver rettelse er listet her, gammelt → nytt. I hvert tilfelle nedenfor endret ikke motorutdataene seg; dokumentet hadde feillest, feilrundet eller overlevd dem.

  • Dokumentasjonsrevisjon av sidene om spektrum, konstellasjon, kampanje, animasjon, rapport og interoperabilitet, og en ny docs/SOLAR-SYSTEM.md. Hvert tall ble kjørt på nytt med denne motoren. To publiserte tall flytter seg: docs/CONSTELLATION-DESIGN.md oppga dekningstesten med 5 000 satellitter som «om lag 0,13 s i et debug-bygg»; det lot seg ikke gjengi (1,24 s på en belastet bærbar), så siden oppgir nå forfilterets andel som testen skriver ut (9,9 % av 19 440 000 partester) og 0,14 s for release-binærfilen for det medfølgende leo-pnt-mega-shell. Den samme siden oppga kryssingen til E3F som «feil med 0,050 deg»; ingen test skriver ut det tallet, så siden oppgir nå bare terskelen på 0,06 deg som testen håndhever og utledningen 7,30 mot 7,36 deg bak den. Ingen motorutdata endres.
  • LEO-PNT-dokumenter: reviderte publiserte tall (kjørt på nytt med denne utgivelsens motor). docs/LEO-SIGNAL.md båndavveining: den første ordens ionosfæriske forsinkelsen for generic-s er 3,24 m (var trykt 3,25 m) og for generic-c-wide 0,77 m (var 0,78 m). docs/LEO-NAVMSG.md koding og dekoding: SISRE for den dekodede meldingen var trykt 0,119 cm der kjøringen ga 0,122 cm; siden oppgir nå 0,129 cm, tallet etter rettelsen for plattformuavhengighet under Fixed nedenfor. docs/LEO-PASS.md LEO mot GNSS-passering: 32 dB mindre fritt-rom-tap ved passeringens topp (var «26 til 32 dB»). For signal- og passeringstallene endret ikke motorutdataene seg; dokumentene hadde feillest eller feilrundet dem.
  • Veiledningene, det gjennomgåtte pipeline-eksempelet og kommandoen /kshana-run, revidert mot denne utgivelsens motor. Revisjoner av publiserte tall, gammelt → nytt: typene som skriver <scenario>.table.csv er seks, ikke fire (leo-navmsg og telecom-timing manglet; docs/tutorials/README.md, commands/kshana-run.md); kryssingen for kald-atom ½bT² i veiledning 3 er 18 443 s, ikke 18 440 s; rundturfeilen for oem-interop i docs/examples/multi-tool-pipeline.md er de målte 4.88e-7 km, ikke «~1e-7 km»; CSAC-holdover-båndet i veiledning 2 er de 2000–3200 s testen påstår, ikke «~2600–4400 s»; veiledning 1 siterer SP3-radene og geometriblokken med den presisjonen motoren skriver dem. Ingen motorutdata endret seg.
  • Sidene om validering, kvante, SGP4, animasjon, påstander og integritet. docs/VALIDATION.md: den håndhevde grensen for den simulerte Allan-avviket ved ett sekund for en klokke med hvit frekvensstøy er 20 % (var trykt 25 %; grensen på 25 % er den på kurven ved 1, 10 og 100 s); raden for hastighetens tilfeldige vandring oppgir nå sin håndhevde grense på 20 % ved siden av de omtrent 12 % som ble observert; og tilgjengeligheten til den brikkeskala atomklokken i orbit-gnss-challenged er omtrent 0,73 (var trykt omtrent 0,83). docs/QUANTUM.md: den vibrasjonsbegrensede støyen per skudd i sidens gjennomgåtte kaldatomeksempel er omtrent 46 ganger skuddstøygulvet (var «~45×»; 46,49 beregnet på nytt), og området «1–50 µg/√Hz» for utstyr i bruk, som motsa en enhet siden selv siterer, er erstattet av de to siterte enhetenes publiserte tall. docs/SGP4-VALIDATION.md: den verste posisjonsforskjellen er 4,12 mm (var «≈ 4 mm»), med satellitten navngitt. docs/ANIMATION.md: videokoder-eksempelet leste bildene med 24 bilder per sekund ved 12; det bruker nå 24, raten bildemanifestet oppgir. docs/CLAIMS-VS-REALITY.md: jamming-modellen har 10 tester (var 8), og det koblede filterets «2,97 m mot 48,8 m» er erstattet av det testen påstår (den koblede posisjonsfeilen under 0,6 ganger den frakoblede, og vinner i minst 90 av 100 forsøk). docs/INTEGRITY.md: stempelet «Today» sa v0.22.0; det navngir nå denne utgivelsen, og to funksjoner bygget siden (feilmodusen for hele konstellasjonen og støttemeldingen for integritet) er fjernet fra gaplisten.

Lagt til#

Spektrum

  • Scenariotypen spectrum: en L-bånd-spektrummodell og et fossefalldiagram (src/spectrum.rs, src/sigmf.rs, docs/SPECTRUM.md). Hele GNSS L-båndet som ett effekttetthetsspekter (PSD): GPS L1 coarse/acquisition (C/A) og L2 civil (L2C) (BPSK(1)), Galileo E1 (multiplexed binary offset carrier, MBOC(6,1,1/11), eller BOC(1 1)), GPS L5 og Galileo E5a (BPSK(10)), et kT-støygulv med en støytallsverdi for mottakeren, og jammere med kontinuerlig bølge (CW), smalbånd, chirp og matchet støy på en skriptet tidslinje. Hver jammer vurderes per bånd med sin spektrale separasjonskoeffisient (SSC), noe som gir forholdet mellom jammer og signal (J/S) og effektiv bærebølge-til-støytetthet (C/N0) per bånd per rad. Diagrammet er et SVG-fossefall med C/N0-søyler; result.json bærer rutenettet effektmiddelt per blokk. Valgfri [iq] tegner modellen som IQ-sampler, skriver og leser en opptaksfil i Signal Metadata Format (SigMF) (cf32_le, ci16_le) og sammenligner et Welch-estimat med modellen; valgfri [recording] estimerer en ekte SigMF-fil. Medfølgende eksempel scenarios/l-band-waterfall-jamming.toml: en chirp tar L1 C/A og E1 ved 10 s, en CW-tone på L1-bærebølgen holder C/A på 17,98 dB-Hz etter at chirpen stopper mens E1, hvis spekter har et nullpunkt der, kommer seg; L5 og E5a er urørt.
    • Ny VALIDATED rad: signal-PSD-ene og SSC-ene, mot hovedloben til BPSK(n) på 2n x 1,023 MHz, BOC(1 1)-lobene sentrert ved +/-1.023 MHz, de lukkede Parseval-formene bak de publiserte SSC-ene på -61.8 / -64.8 / -67.8 dB/Hz, og lærebokens Q = 1 (CW) og 1,5 (matchet). Maksimum for BOC(1 1)-PSD er ved +/-0.759 MHz, ikke ved lobens sentrum; testen fester begge.
    • To nye MODELLED rader: fossefallet og C/N0-tidslinjen, som reduseres nøyaktig til kjeden for typen jamming (krysskontrollert i hver rapport), og SigMF-kodeken og Welch-estimatoren. Ingen opptak fra tredjepart ligger i depotet.
    • navsignal: en MBOC-variant og spectral_separation_coeff_offset.
    • Rapporten skriver ut C/N0 som den representative Q-tabellen for typen jamming ville gitt ved siden av den spektrumutledede; for en CW-tone på C/A-bærebølgen avviker de med 1,8 dB. Tre nye matriserader: én validert (signalspektre og spektrale separasjonskoeffisienter) og to modellerte.

Solsystemet

  • Solsystemets efemeride og posisjonering rundt et hvilket som helst legeme. To nye scenariotyper.
    • solar-system: Solen, de åtte planetene, Pluto, Månen, Phobos, Deimos, Io, Europa, Ganymedes, Callisto og Titan ved én epoke: heliosentrisk posisjon og hastighet i International Celestial Reference Frame (ICRF), gravitasjonsparameter, radier, J2 (den andre sonale harmoniske) der den er publisert, siderisk rotasjon, polen og nullmeridianen til International Astronomical Union (IAU), et banespor over én omdreining, og lysets gangtid, ensrettet og tosidig avstand, solens Shapiro-forsinkelse og avstand fra Solen sett fra et observatørlegeme og for en hvilken som helst ekstra lenke. Planetene kommer fra de keplerske elementene til Jet Propulsion Laboratory (JPL) av Standish og Williams (tabell 1, 1800 AD til 2050 AD; tabell 2a/2b, 3000 BC til 3000 AD); månene fra JPLs middelelementer med IAUs synkrone rotasjonsrate, og Titan fra IAUs rotasjonsmodell. Eksempel: scenarios/solar-system-tour.toml.
    • body-pnt: en orbiter eller en landingsfarkost på overflaten rundt et hvilket som helst av disse legemene, som navigerer med pseudoavstander fra en Walker-konstellasjon rundt legemet og en klokkefri tosidig avstand fra Jorden; svekkelse av presisjon, formell usikkerhet og seedede minste kvadraters posisjonsbestemmelser med og uten Jord-lenken. Eksempler: scenarios/mars-orbit-pnt.toml, scenarios/europa-surface-pnt.toml.
    • Body får Merkur, Venus, Jupiter, Saturn, Uranus, Neptun, Pluto og de sju månene, et navneoppslag og en fysisk post; AnalyticSolarSystem gir et hvilket som helst legeme i forhold til et annet gjennom den eksisterende grensen EphemerisProvider.
    • VALIDATED mot JPL Horizons (Development Ephemeris DE441; fixtures og spørringer i tests/fixtures/solar_system/): Merkur til Saturn og Jorden fra tabell 1 innenfor det dobbelte av den oppgitte nominelle feilen (verst 1,87 ganger), alle åtte planetene fra tabell 2a/2b (verst 1,71 ganger), og lysets gangtid fra Jorden til Mars og Jupiter. MODELLED: Uranus og Neptun fra tabell 1, som overskrider den oppgitte feilen mot DE441 (2,0 og 5,2 ganger), Pluto, månene, legemekonstantene og resultatene for body-pnt.
    • Funn: den lunare serien til Montenbruck & Gill i src/ephem.rs er allerede referert til J2000-jevndøgnet av sitt eget presesjonsledd (0,05 grader fra Horizons), så den brukes uten en ytterligere presesjonsrotasjon. Seks nye matriserader: to validerte (planetposisjoner, lysets gangtid) og fire modellerte.

Konstellasjoner rundt et hvilket som helst legeme

  • Konstellasjonsdesign i stor skala (typen constellation-design, src/constellation.rs). Walker delta- og Walker star-mønstre (T/P/F), eksplisitte elementlister og design med flere skall, flere konstellasjoner per kjøring, rundt Jorden, Månen, Mars eller en hvilken som helst annen planet, Pluto eller en stor måne ut fra legemekonstantene som typen solar-system la til. Forhåndsinnstillinger fra publiserte nominelle elementer: grunnlinjen for Global Positioning System (GPS) og den utvidbare konstellasjonen med 24 spor (Standard Positioning Service Performance Standard, SPS PS, 2020), Galileo Walker 24/3/1 (Open Service Service Definition Document utgave 1,1), BeiDou middels jordbane Walker 24/3/1 pluss geostasjonære og skråstilte geosynkrone satellitter (Open Service Performance Standard 3,0) og GLONASS 24/3/1 (Interface Control Document 5,1). Dekning og svekkelse av presisjon (DOP) over et rutenett av breddegrad/lengdegrad: satellitter i sikte, GDOP, PDOP, HDOP og VDOP (geometrisk, posisjon, horisontal, vertikal) og tilgjengelighet per celle, globalt og på det verste stedet, med én mottakerklokke per konstellasjon. Et synlighetsforfilter (dekningshalvvinkel pluss et bånd av undersatellittbredde, nøyaktig på et sfærisk legeme) kjører 5 000 satellitter på et rutenett på 10 deg på omtrent 0,13 s i et debug-bygg.
    • VALIDATED: Walker-generatoren gjengir tabell 23 i Galileo OS SDD og sporformelen i GLONASS ICD; GPS-forhåndsinnstillingen gjengir ekvatorkryssingskolonnen i SPS PS (35 av 36 steder innenfor 0,0108 deg; E3F innenfor 0,06 deg, siden tabellens egen rad er selvmotsigende); den globale HDOP-fordelingen for GPS-grunnlinjen stemmer med SPS PS vedlegg B (median 0,940 mot 0,94, 95 % 1,255 mot 1,25, middel 0,965 mot 0,96; terskel 0,03).
    • MODELLED: vilkårlige design, andre legemer, BeiDou-fasen og de skråstilte geosynkrone nodene, tolegemebaner med valgfri J2, bare geometri.
    • Scenarioer: constellation-multi-gnss-coverage (102 satellitter, tilgjengelighet 100 %, median PDOP 0,95, 31,0 i sikte over 10 deg), leo-pnt-mega-shell (5 000 satellitter, tilgjengelighet 99,22 % ved PDOP 3 eller lavere over 20 deg, 0 % ved polarkalottene, forfilteret beholder 11,5 % av partestene), lunar-relay-constellation (14 satellitter rundt Månen, tilgjengelighet 21,33 % totalt og høyest over sørpolområdet). Alle tre er medfølgende for kshana example. Merknader: docs/CONSTELLATION-DESIGN.md. Tre nye matriserader: to validerte (Walker-generator og GNSS-forhåndsinnstillinger, global DOP for GPS) og én modellert.
  • En kampanje drevet av spektrummodellen, og konstellasjoner rundt et hvilket som helst legeme. scenarios/campaign-spectrum-holdover-integrity.toml lenker typen spectrum med en klokke-holdover og en integritetsovervåker (en chirp tar L1 C/A og E1; en CW-tone holder så C/A nede mens E1 kommer seg og mottakeren faller tilbake til en himmel med bare Galileo), festet mot det frittstående fossefalleksempelet i tests/campaign_composition_reference.rs. constellation-design løser nå sitt sentrallegeme gjennom Body::by_name, så en konstellasjon kan legges rundt en hvilken som helst planet, Pluto eller stor måne med konstantene som typen solar-system bruker.

Kampanjer

  • Kampanjer: mange scenarioer satt sammen til én kjøring. En ny type campaign (src/campaign.rs, dokumentert i docs/CAMPAIGNS.md) kjører medlemmer av eksisterende typer gjennom samme utsending som kommandolinjen og leser tall tilbake ut av resultatene deres. Fire seksjoner, i en hvilken som helst kombinasjon:
    • [[phases]]: et lenket oppdrag på én tidslinje. Forhåndsinnstillinger per type leser klokkens tidsfeil mot sin vaktgrense, det effektive middelforholdet mellom bærebølge og støytetthet (C/N0) mot sporingsgulvet, det vertikale beskyttelsesnivået mot alarmgrensen, posisjonsfeil, satellitter som spores og alarmflagg, holdt på et felles rutenett med fasegrenser og hendelser. Tilstand føres videre av carry, handoff og end_at.
    • [sweep]: én til tre punktnøkler av en hvilken som helst type, eventuelt med et seedet ensemble i hver node.
    • [monte_carlo]: realisasjon k med basisseed + k, med middel, spredning, persentiler og et bootstrap-konfidensintervall på 95% med fast seed.
    • [compose]: delte verdier bundet til flere medlemmer, med et kombinert beste og verste sammendrag. Hvert resultat bærer en kampanjehash og en digest over hvert medlemsresultat. Fire medfølgende scenarioer: campaign-jam-spoof-holdover-integrity (nominelt, jamming, spoofing avsluttet ved klokkeovervåkerens deteksjon etter 370 s, holdover som bærer den spoofede forskyvningen på 37,0 ns med en treghetsenhet som kjører fritt, en integritetsalarm, gjenoppretting), campaign-sweep-jammer-power, campaign-shared-jammer-sea-road og campaign-monte-carlo-clock-holdover. tests/campaign_composition_reference.rs fester sammensetningsidentitetene: en kampanje med én fase gjengir den frittstående kjøringen bit for bit på tre typer, et ensemble med fast seed er byte-stabilt, og på en klokke med hvit frekvensstøy ligger ensemblets middel innenfor det rapporterte intervallet med spredningen innenfor khikvadrat-intervallet for sqrt(q_wf * tau) = 16,459 ns. Tre nye modellerte matriserader.

Animasjon

  • Animasjonseksport (--animate svg|html|frames|all, src/animation.rs, docs/ANIMATION.md). Enhver kjøring der resultatet bærer en tidsserie kan nå skrives som en animert Scalable Vector Graphics-fil (SVG) (Cascading Style Sheets-keyframes, uten skript: kurvene tegnes inn bak en bevegelig tidsmarkør), en enkelt selvstendig HyperText Markup Language-spiller (HTML) (spill av og pause, skrubbing, hastighet, alle paneler på én synkronisert markør, hendelsesmarkører som søker ved klikk; ingen ekstern ressurs), eller en nummerert SVG-bildesekvens med en manifest.json som oppgir bilder per sekund, varighet og bildetider for en videokoder. En kampanje spilles som sine faser med alarmene markert; en spektrumkjøring animerer fossefallet rad for rad. Spilleren følger prefers-color-scheme, og under prefers-reduced-motion viser både SVG-en og spilleren det ferdige bildet i stedet for å bevege seg. --animate-fps og --animate-duration setter avspillingen; kshana::api::animate_toml og kshana::animation::animate_result er bibliotekets inngangspunkter, og result.json får en blokk animation bare når --animate kjøres. Utdata er en ren funksjon av resultatet og valgene, byte-identisk ved ny kjøring, uten tidsstempel. En type uten samplet tidsakse avvises med «no time series to animate» og ingenting skrives. Eksportøren tegner kjøringens egne sampler og legger ikke til noe tall, så den er MODELLED (intern konsistens) og har ingen rad i verifikasjonsmatrisen; ingen publisert tall endres. Tester: tests/animation.rs (determinisme, antall bilder, ingen ekstern adresse, velformet XML, stien for redusert bevegelse, og hvert medfølgende scenario med en tidsserie som animeres).

Rapporter

  • Avanserte kjøringsrapporter (src/advanced_report.rs, docs/REPORTS.md). Hver kjøring fra kommandolinjegrensesnittet (CLI) skriver nå <scenario>.report.html, en utskriftsvennlig HyperText Markup Language-rapport (HTML), og <scenario>.report.json, det samme innholdet som et maskinlesbart JavaScript Object Notation-dokument (JSON). Seksjoner: et sammendrag for ledelsen; hver scenarioinndata med enhet, lest fra enhetsskjemaet for feltene (resultatets units-blokk), ellers fra feltnavnets suffiks, ellers oppgitt som ikke oppgitt; resultatene med kjøringens diagram, hver skalar og et sammendrag av hver numeriske kolonne; for en kampanje, nodetabellen for sveipet, Monte Carlo-middelet, standardavviket, 5., 50. og 95. persentil og bootstrap-konfidensintervallet med et histogram per metrikk, fasetabellen for kjeden, eller sammensetningens medlemmer og kombinerte sammendrag (og rutenettet for en kjøring av sweep eller sweep-nd); en hendelsestidslinje; etiketten VALIDATED / MODELLED / PARTNER, den uavhengige referansen og testevidensen for hver rad i verifikasjonsmatrisen som kjøringens typer bruker, lest fra matrisen gjennom en kryssliste fra type til rad (en rad som vurderer én inndatasti, som banen Simplified General Perturbations 4 (SGP4) for orbit eller stien for målt opptak for slot-timing, listes bare når kjøringen tok den stien, og raden for leseren av Shuttle Radar Topography Mission (SRTM) listes for ingen type, siden intet scenariofelt leser en SRTM-flis); erklæringene om det som ikke er modellert og forutsetningene, hver sitert med sin kilde; og en reproduserbarhetspost (motorversjon, kildecommit når bygget setter KSHANA_GIT_COMMIT, Secure Hash Algorithm 256-bit-digester (SHA-256) av scenariofilen og resultatdokumentet, seed, plattform og den eksakte kommandoen). Rapporten leser ingen klokke: samme scenario, seed og motorbygg gir en byte-identisk rapport, og det eneste tidsstempelet den kan vise er det --study-name allerede skriver. Et utskriftsstilark passer A4 og US Letter, gjentar tabelloverskrifter og holder rader og figurer hele over sider; en Portable Document Format-fil (PDF) lages med nettleserens «Lagre som PDF». Det finnes ikke noe valg --report pdf, fordi det å tegne diagrammene inn i en PDF ville kreve en ny, tung avhengighet. Tester: tests/advanced_report.rs rapporterer hvert medfølgende scenario (ingen tom seksjon, ingen plassholdertekst, etiketter lik matrisen, scenariodigesten lik filens, byte-identisk ved ny kjøring) og tests/advanced_report_cli.rs kjører den registrerte kommandoen på nytt i en ny katalog og krever en byte-identisk result.json. Ingen publisert tall endres, og antallet typer, scenariofiler og matriserader er uendret.
  • Rapporten, animasjonen og eksportene virker sammen. Den avanserte rapporten får en seksjon «Animation and exports»: kjøringens animerte tegning innebygd som et inert bilde (eller grunnen til at det ikke finnes noe), lenker til animasjons- og eksportfilene som skrives ved siden av, og hvert interoperabilitetsformat med om det gjelder, hvorfor ikke, og spesifikasjonen; report.json bærer den samme blokken companions. HTML-animasjonsspilleren lister eksportfilene som skrives ved siden av den. Kommandolinjegrensesnittet (CLI) lager nå eksportene før det skriver rapporten, så begge kan navngi filene.

Interoperabilitetseksporter

  • Interoperabilitetseksporter og importer (--export, src/interop/, docs/INTEROP.md). kshana <scenario.toml> --export <format> skriver scenarioets geometri som CZML (Cesium Language), KML (Keyhole Markup Language 2,2, en standard fra Open Geospatial Consortium, med tidsmerkede spor i gx:Track), GeoJSON (Internet Engineering Task Force Request for Comments 7946) og Ansys STK-efemerider (Systems Tool Kit) .e (EphemerisTimePosVel, meter, én fil per bevegelig objekt), og det syntetiserte IQ-øyeblikksbildet (i fase og kvadratur) fra typen spectrum som et SigMF-par (Signal Metadata Format) gjennom den eksisterende src/sigmf.rs. --export all skriver hvert format som gjelder og skriver ut hvorfor de andre ikke gjør det; --export list rapporterer uten å kjøre. Bevegelige objekter skrives i Geocentric Celestial Reference System (CZML INERTIAL, STK ICRF) og jordfast WGS 84 (World Geodetic System 1984) lengdegrad, breddegrad og høyde (KML, GeoJSON); faste steder i CZML er FIXED. Typen jamming legger til to jammer-fotavtrykk fra sine egne lenkeligninger. --import-route <file.geojson> skriver en GeoJSON-LineString inn i sporinndataene til terrain-nav, terrain-slam, gravity-map og combined-altpnt. Eksporter er byte-deterministiske og bærer ikke noe tidsstempel. tests/interop_formats.rs validerer hver eksport mot sin publiserte spesifikasjon, sammenligner eksporterte satellitttilstander med motorens egne til 1 mm, og kjører hvert medfølgende scenario gjennom hvert format, der hvert enten eksporterer eller oppgir hvorfor ikke (tabellen i docs/INTEROP.md). Ingen publisert tall endres: IQ-syntesen til typen spectrum er flyttet inn i én delt funksjon og resultatdokumentet er byte-identisk, og PassesScenario får propagator() og epoch_calendar() som brukes av dens egen kjøring. Antallet typer, scenariofiler og verifikasjonsmatriserader er uendret. Et bane- eller integritetsscenario uten epoch dateres av satellittenes egne data: t = 0 er den tidligste epoken blant TLE (tolinjers elementsett), kringkastet efemeride eller SP3 (Standard Product 3), og hver slik satellitt roteres inn i GCRS og de jordfaste referansesystemene ved sitt eget tidspunkt; 2000-01-01T00:00:00Z brukes bare når ingen satellitt bærer en epoke. SP3- og OEM-eksportene (Orbit Ephemeris Message) beholder etiketten 2000-01-01. For å støtte dette er Sgp4::epoch_jd_utc, Sp3Interpolator::jd_ut1 og Propagator::own_jd_utc lagt til; ingenting som fantes fra før leser dem.

Navigasjon i lav jordbane: signal

  • LEO-PNT-signaldesign og et flerbåndsspekter. En ny type leo-signal og en type spectrum som rekker utover L-båndet: én type, fire scenariofiler (tre medfølgende; Celeste IOD-filen finnes bare i depotet) og fire matriserader (to VALIDATED, to MODELLED).
    • leo-signal: parametriserte signaldesign for posisjonering, navigasjon og tidssynkronisering (PNT) i lav jordbane (LEO) for et hvilket som helst system (bånd, sendebåndbredde, ITU-tildeling; akkvisisjons-, data- og pilotkomponenter med BPSK(n), BOC(m,n), MBOC eller flate spektre, effektandeler, FDMA-underbærebølger, kodelengder og datarater), fra offentlige forhåndsinnstillingsfiler kompilert inn under data/leo-signals/ (Xona Pulsar X1/X5, Iridium STL, et Starlink-signal av opportunitet, CentiSpace, et representativt C-bånd-design og representative UHF/L/S/C/bred-C-design, hver med sin kilde-URL) eller skrevet inline. Per signal: det båndbegrensede PSD-et og effektandelene i båndet, Gabor-båndbredden, båndbegrenset tidlig-sen kodesporingsjitter mot C/N0 og avstand (Betz & Kolodziejski 2009) og avstandsnøyaktigheten, akkvisisjonssøkerommet, deteksjonssannsynligheten og gjennomsnittlig seriell og kodeparallell akkvisisjonstid, SSC inn i og ut fra GPS L1 C/A, Galileo E1, GPS L5, Galileo E5a, E5b og AltBOC med C/N0-tapet, CW-, bredbånds- og matchet J/S-toleranse fra SSC-koden til spektrumtypen, en båndavveining (ionosfærisk forsinkelse, fritt-rom-tap, avstandsmåling ved lik C/N0 og lik EIRP, jammertoleranse), og valgfrie formkontroller mot en beskrevet måling. Eksempler: scenarios/leo-band-trade.toml, scenarios/xona-pulsar-signals.toml, scenarios/celeste-iod-classical-pilot-signals.toml (Celeste IOD-båndene og signalkonfigurasjonen presentert på ESA NAVISP LEO-PNT-workshopen, 2026; holdt tilbake sammen med forhåndsinnstillingen Celeste IOD, se «LEO-PNT end to end» nedenfor). Merknader i docs/LEO-SIGNAL.md.
    • spectrum: bånd kan nå være et forhåndsinnstilt signaldesign (hver komponent tegnet, båndbegrenset, C/N0 og J/S referert til den sporede komponenten) eller en egendefinert bærebølge og modulasjon; [[panels]] legger til fossefall over andre frekvensområder på én tidslinje; en wideband-jammer (barrage) kommer til som en femte bølgeform ved siden av de fire. Rapporten legger til bands[].tracked_power_dbw, bands[].design og panels, og én post not_modelled. Vanlige bånd gir de samme tallene som før. Eksempel: scenarios/multi-band-jamming-waterfall.toml.
    • navsignal får sinusintegralet, de lukkede formene for BPSK-effekt i båndet og båndbegrenset Gabor-båndbredde, den båndbegrensede tidlig-sen-jitteren for et hvilket som helst spekter og dens Gabor-grense, den lukkede formen for SSC for offset-BPSK, Galileo E5 AltBOC(15 10)-spekteret og en parser for modulasjonsetiketter; Modulation::label skriver ut BPSK(1/3) som en brøk.
    • Fire matriserader: VALIDATED båndbegrensede lukkede former (90,3 % av BPSK-effekten i hovedloben, jitteren som reduseres til Kaplan & Hegartys koherente form, 0,0039564 chip ved 45 dB-Hz, B_L 1 Hz, d 1 chip, T 20 ms, og til sin Gabor-grense, og BPSK-selv-SSC 2/(3 R_c); den lukkede Gabor-formen og offset-SSC mot sin Parseval-form er oppgitt som interne krysskontroller); VALIDATED maksimal LEO-Doppler (Xona X1 33,2 kHz innenfor de publiserte 32 til 34 kHz, Iridium innenfor 0,5 kHz av 36 kHz); MODELLED leo-signal; MODELLED flerbåndsspekter.
  • LEO-PNT-passering og lenkebudsjett per bånd: typen leo-pass. LEO-PNT er posisjonering, navigasjon og tidssynkronisering fra satellitter i lav jordbane (LEO). En bruker (på bakken, til sjøs, i luften eller innendørs, stasjonær eller i bevegelse) og én eller flere LEO-satellitter fra en designet passering, eksplisitte elementer, et tolinjers elementsett (TLE) gjennom SGP4, eller en Walker-konstellasjon fra koden for constellation-design. Per satellitt, bånd og epoke: siktevinkler, avstand, avstandsrate og avstandsakselerasjon i lukket form (kontrollert i hver kjøring mot sentrale differanser), Doppler og Doppler-rate, fritt-rom-tap, EIRP (ekvivalent isotropisk utstrålt effekt) med et isoflux-, gaussisk stråle- eller flatt satellittmønster, en patchantenne hos brukeren, gassdemping etter ITU-R P.676, regndemping etter ITU-R P.838/P.618, troposfærisk scintillasjon etter P.618, bygningsinntrengingstap etter ITU-R P.2109 for en innendørs bruker, polarisasjonsavvik, systemets støytemperatur og C/N0 (bærebølge-til-støytetthet); den første ordens ionosfæriske forsinkelsen per bånd fra en skrå TEC (totalt elektroninnhold) etter Klobuchar eller vertikal TEC under satellitten, og ionosfærefrie båndpar med deres støyforsterkning. Galileo- eller GPS-satellitter evalueres med samme mottaker ut fra mottatte effekter i grensesnittdokumentene, så den klokkeformede LEO-passeringen og de flate MEO-bærebølgene (middels jordbane) deler ett plott. En seksjon [iot] gir tid til første posisjonsbestemmelse, energi per posisjonsbestemmelse og batterilevetid mot driftssyklus (MODELLED).
    • Systemuavhengig: motoren trenger ingen forhåndsinnstilling. Valgfrie forhåndsinnstillinger, hver i sin egen fil og merket PUBLIC (med URL), REPRESENTATIVE eller WORKSHOP: generisk flerbånd (UHF, L, S, C), generisk C-bånd, Xona Pulsar X1/X5 (arXiv 2509,19551), Iridium STL, Starlink som et signal av opportunitet kun for Doppler, CentiSpace, og Celeste IOD (in-orbit demonstration), hvis signalparametere ble presentert på ESA NAVISP LEO-PNT-workshopen, 2026, og ligger i src/celeste_iod.rs så de kan holdes tilbake (se «LEO-PNT end to end» nedenfor).
    • Offentlige byggeklosser i src/leo_link/ (geometri, antenne, itu, iono, energi, forhåndsinnstillinger) som andre moduler kan kalle.
    • Scenarioer: leo-pass-vs-gnss-cn0, leo-indoor-uhf, leo-iot-energy, leo-pass-xona-pulsar, leo-pass-iridium, leo-pass-celeste-iod-multiband.
    • Ni matriserader. VALIDATED (6): koeffisientene i ITU-R P.838-3 mot dens tabell 5; regndemping og scintillasjon etter P.618-14 mot valideringseksemplene til ITU-R Study Group 3; bygningsinntrengingstap etter P.2109 mot regnearket til Study Group 3; første ordens ionosfærisk skalering mot gruppeforsinkelsesforholdet i IS-GPS-200, med fritt-rom-tapet; maksimal Doppler for en stasjonær bruker i en sirkulær bane mot arXiv 2509,19551 tabell 1. MODELLED (3): passeringen og lenkebudsjettet, forhåndsinnstillingene og budsjettet for lavenergi-posisjonsbestemmelse. Én type og seks scenariofiler. Merknader i docs/LEO-PASS.md.

Navigasjon i lav jordbane: navigasjonsmelding

  • LEO-navigasjonsmelding (typen leo-navmsg, src/leo_navmsg/). Den kringkastede efemeride- og klokkemeldingen til en satellitt for posisjonering, navigasjon og tidssynkronisering (PNT) i lav jordbane (LEO), for en hvilken som helst bane, bærebølge og modell; navngitte forhåndsinnstillinger er valgfrie data og hver funksjon kjører uten dem. Én type, fem scenariofiler og ni matriserader (tre VALIDATED, seks MODELLED). Se docs/LEO-NAVMSG.md.
    • Meldingsinnhold: SVID, datautgave, bånd og signalhelse; uke, ukens tid og et andre ordens klokkepolynom; efemeriden i en av fire modeller — det keplerske settet med 16 parametere fra Galileo OS SIS ICD, det settet pluss korreksjonspolynomer langs banen, på tvers av banen og radielt, modellen med 22 parametere av Liu et al. 2025 (doi 10.3390/rs17162894), eller ATOMIC-polynomet med null klokke i ECEF — og et Klobuchar-sett, NeQuick-G-koeffisienter med det effektive ioniseringsnivået, og parametere fra systemtid til UTC med ICD-ens skuddsekundtilfeller.
    • Tilpasser: en referansebane integrert med sonal J2–J6 eller EGM2008-gravitasjon og luftmotstand, en seedet fri eller styrt klokke, en Levenberg–Marquardt-tilpasning på ikke-singulære elementer, deretter lineære minste kvadraters korreksjonspolynomer og en klokke tilpasset netto av brukerens relativistiske ledd.
    • Fire analyser og scenarioer: leo-navmsg-fit-interval-trade (avstandsfeil i signalet i rommet (SISRE) mot tilpasningsintervall og oppdateringsperiode), leo-navmsg-model-comparison (fire modeller, biter, og Kshanas tilpasning med 22 parametere ved Liu et al.-høydene ved siden av de publiserte tallene, MODELLED), leo-navmsg-midpass-update (kontinuitet ved hvert meldingsbytte i en passering) og leo-navmsg-encode-decode (Kshanas egen dokumenterte binære ramme med CRC-24Q og et kvantiseringsbudsjett, en blokk i RINEX 4-stil merket som en Kshana-utvidelse, og en CSV-tabell).
    • VALIDATED: de globale gjennomsnittlige SISRE-vektene mot den publiserte tabellen for middels bane og geostasjonær bane av Montenbruck et al. 2018; Galileo-brukeralgoritmen mot RTKLIB på fire ekte kringkastede Galileo-efemerider (tests/leo_navmsg_reference.rs); CRC-24Q mot katalogens kontrollverdi og eksempelrammen RTCM 10403 1005.
    • Forhåndsinnstillinger, én fil hver med kilder: Xona Pulsar og Pulsar-0, Iridium, Starlink, CentiSpace, et representativt C-bånd-system, ATOMIC, og Celeste IOD (den eneste forhåndsinnstillingen som bruker materiale presentert på ESA NAVISP LEO-PNT-workshopen, 2026, lagt i src/celeste_iod.rs sammen med scenarioene sine så den kan holdes tilbake).

Navigasjon i lav jordbane: fusjon

  • Fusjonert MEO + LEO-posisjonering, -navigasjon og -tidssynkronisering: leo-pvt, leo-ppp og ntn-positioning. Tre nye scenariotyper i src/leo_fusion/, systemuavhengige: hver konstellasjon er Walker-skall, elementsett eller en GNSS-forhåndsinnstilling, hvert signal en bærebølge, en chiprate og en omhylling av bærebølge-til-støytetthet (C/N0), hvert feilbudsjett en eksplisitt ett-sigma, og navngitte systemer i lav jordbane (LEO) er valgfrie forhåndsinnstillinger, én fil hver med kildene merket offentlig, workshop eller utledet (Xona Pulsar X1/X5, Iridium Satellite Time and Location (STL), Starlink-signaler av opportunitet, CentiSpace, et representativt C-bånd-system, efemeridemodellen ATOMIC med null klokke, og én ESA Celeste-forhåndsinnstilling for demonstrasjon i bane med workshop-utledede parametere som ligger i src/celeste_iod.rs så de kan holdes tilbake).
    • leo-pvt har fire moduser: Doppler-posisjonering (batch minste kvadrater på avstandsrate med tilstander for klokkedrift og hastighet, en modus for signaler av opportunitet kun med Doppler, nøyaktigheten langs og på tvers av banen i én enkelt passering, og omhyllingen for Doppler, Doppler-rate og rykk); felles GNSS + LEO vektet minste kvadrater med én klokke per system (intersystembiasen) eller en kjent forskyvning, sigma per måling som inndata, og DOP mot antall LEO-satellitter; polar og arktisk dekning mot breddegrad; og LEO-tidsoverføring til koordinert universaltid (UTC) mot C/N0 og mottakerens oscillator med uttrykket for systemtid til UTC i IS-GPS-200.
    • leo-ppp: et utvidet Kalman-filter for flytende presis punktposisjonering (PPP) på ionosfærefri kode og fase, bare GNSS og med LEO-utvidelse, med konvergenstid og en Monte Carlo-konsistenstest av NEES (normalisert estimeringsfeil i annen potens). Det medfølgende scenarioet gir 7,4 min med fire MEO-systemer og 4,8, 3,2, 2,7 og 2,3 min med 60, 96, 192 og 288 LEO-satellitter, ved siden av 9,6, 7,0, 3,2, 2,1 og 1,3 min fra Li et al. (J. Geod. 93:749, 2019) som en MODELLED sammenligning av trenden.
    • ntn-positioning: 5G-posisjonering i ikke-terrestrisk nett (NTN) i S-båndet for mobilsatellitt 3GPP n256 ut fra Cramér-Rao-grensen for ankomsttid og Doppler.
    • Scenarioer: leo-doppler-positioning, starlink-sop-doppler-positioning, meo-leo-fused-pvt, leo-ppp-convergence, ntn-5g-positioning, polar-arctic-leo-coverage, leo-timing-utc (medfølgende) og celeste-iod-fused-pvt (bare i depotet, holdt tilbake sammen med forhåndsinnstillingen Celeste IOD).
    • Åtte matriserader: LEO-Doppler-omhyllingen VALIDATED mot de publiserte tallene for Iridium (±36 kHz: 35,9 kHz, innenfor 5%) og Xona Pulsar X1 (32 til 34 kHz: 33,6 kHz fra skallet på 97 deg, uten utvidelse) (tests/leo_doppler_reference.rs); Doppler-posisjonering, felles pseudoavstandsposisjonering, PPP-konvergens, NTN-grenser, LEO-tidssynkronisering, polar dekning og forhåndsinnstillingene MODELLED. Tre typer og åtte scenariofiler. Dokumentasjon: docs/LEO-PNT-FUSION.md.
  • LEO-PNT fra ende til ende: typen leo-pnt-chain, og LEO-trinnene koblet sammen. Ett posisjonerings-, navigasjons- og tidssynkroniseringssystem (PNT) i lav jordbane (LEO) fulgt fra signaldesignet til brukerens posisjon, hvert trinn motorens egen type på sin egen scenariotabell, med verdier ført videre i kode (docs/LEO-PNT.md):
    • Bånd i leo-pass kan navngi et design av typen leo-signal (signal = "xona-x5"): båndet tar designets senter, sendebåndbredde og chiprate for den sporede komponenten, fordeler sin EIRP (ekvivalent isotropisk utstrålt effekt) på designets komponenter, og rapporterer hver epokes C/N0 (bærebølge-til-støytetthet) for den sporede komponenten og båndbegrenset kodesporingsjitter (avstandsfeilen; støyen i paret iono_free bruker den også). Et bånd uten design gir samme utdata som før.
    • leo-pnt-chain kjører signal -> passering -> navigasjonsmelding -> fusjonert felles posisjonsbestemmelse i leo-pvt -> valgfri leo-ppp. Hvert LEO-system i posisjoneringstrinnet som lar dem stå usatt får en C/N0-linje i sin(elevasjon) tilpasset passeringen, meldingens avstandsfeil i signalet i rommet (SISRE: dens representasjonsfeil i banen til passeringens satellitt, med et oppgitt ledd od_sisre_m for banebestemmelse i kvadratsum), og designets bærebølge og chiprate; PPP-tilfellene (presis punktposisjonering) tar SISRE. Hver overlevering er listet med verdi og enhet, og tests/leo_pnt_chain.rs kontrollerer at hver er lik utdataene oppstrøms og at endringer oppstrøms flytter tallene nedstrøms. LeoNavmsgScenario::broadcast_sisre er det nye inngangspunktet for meldinger.
    • Scenarioer: leo-pnt-end-to-end (en generisk konstellasjon på 1080 km og det representative signalet generic-l), xona-pulsar-end-to-end (det offentlige X5-signalet), begge medfølgende, og den valgfrie celeste-iod-end-to-end som bare finnes i depotet.
    • Forhåndsinnstillingene for Celeste IOD (in-orbit demonstration) i områdene passering, melding og fusjonert posisjonering ligger nå i én fil, src/celeste_iod.rs, som build.rs bare kompilerer inn når den finnes (konfigurasjonsflagget kshana_celeste). Dens fem scenarioer (scenarios/*celeste-iod*.toml) finnes bare i depotet, så å slette den filen og de scenarioene holder tilbake hvert tall som ble presentert på ESA NAVISP LEO-PNT-workshopen, 2026, uten kildeendring; tests/workshop_preset_isolation.rs kontrollerer hvilke filer som kan navngi forhåndsinnstillingen eller bære dens bandplantall.
    • Hver LEO-type i den avanserte rapportens kryssliste, med radene for en bestemt sti listet bare når kjøringen tok den stien (en regnrate, en bygning, en analyse eller modus som kjørte). Dopplervinduene i leo-pvt får t_s og tilfellene i leo-ppp får t_min, så begge animeres; leo-pass og leo-pnt-chain eksporterer CZML-, KML-, GeoJSON- og STK-efemerider, og de andre LEO-typene oppgir hvorfor et format ikke gjelder.

Navigasjon i lav jordbane: robusthet, fokusområder og sluttbrukerscenarioer

  • LEO-PNT-robusthet, ett scenario per eksperimentfokusområde og ett per sluttbrukervertikal, og docs/LEO-PNT.md som oversikt over hver LEO-type og hvert LEO-scenario. Hvert scenario kjører uten noen Celeste-data og er medfølgende.
    • leo-pass får en seksjon [spoofer]: en spoofer forfalsker, selvkonsistent i avstand og avstandsrate, signalene fra en hevdet posisjon som hopper og/eller skyves bort fra den sanne etter en start (per LEO-bånd, og MEO-GNSS-signalet), med eller uten ionosfæren. To overvåkere kjører ved en oppgitt falsk alarmsannsynlighet: konsistens i Doppler og passeringsgeometri (målte avstandsrater mot de som er forutsagt fra banene og en uavhengig forhåndsposisjon og -hastighet; en generalisert minste kvadraters khikvadrat over et vindu, på GNSS-, LEO- og alle kanaler, støy i frekvenslåsesløyfen fra C/N0) og konsistens mellom bånd (steget i hvert LEO-båndpars modellkorrigerte geometrifrie kombinasjon). Resultatet gir statistikken per epoke (så det animeres), hvert par, og når hver overvåker detekterer. Byggeklosser i leo_link::spoof. Seksjonen er fraværende, utdata uendret.
    • Hvert båndpar i leo-pass rapporterer også det skrå totale elektroninnholdet (TEC) som den geometrifrie kombinasjonen gjenvinner ved passeringens topp og kodestøy-sigmaet til det estimatet (ionosfæresondering). Dette legger til to felt i hvert flerbåndsresultat i leo-pass; ingen eksisterende tall endres.
    • Tidsmodusen i leo-pvt tar trace = true: hver rad rapporterer da sin tidsfeil og forutsagte sigma ved hver epoke, med de samme trekningene, så radstatistikken er uendret og kjøringen animeres og lenkes i en kampanje.
    • En kampanje eksporterer nå hvert medlemsscenario som har geometri (faskjøringer, basisscenarioene for sveip og Monte Carlo, sammensatte medlemmer med sine delte verdier bundet) som sitt eget filsett, med medlemsetiketten i filnavnet; tidligere eksporterte en kampanje ingenting. Interoperabilitetstabellen i docs/INTEROP.md endres tilsvarende.
    • En sveipenøkkel i en kampanje kan indeksere en tabellrekke etter posisjon (system.2.sisre_m).
    • Robusthetsscenarioer: leo-resilience-multiband-diversity (en barrage på 50 MHz i L5-båndet sveipet i effekt: hvert L-bånd-signal faller, LEO-signalene i UHF, S og C beholder sin C/N0), leo-resilience-js-margin (J/S-margin fra mottatt effekt: GPS L5, Galileo E5a og Xona X5 mistet ved -105, -100 og -95 dBW, et generisk LEO-signal på -135 dBW som fortsatt sporer ved -90 dBW), leo-resilience-spoof-doppler (et hopp på 30 m som GNSS-bare Doppler-testen overser og testen på alle kanaler detekterer 105 s etter starten), leo-resilience-spoof-monitors (fire spoofere mot begge overvåkere) og leo-resilience-gnss-jammed-leo-carries (GNSS jammet, LEO-laget i S og C sporet, mottakerens autonome integritetsovervåking på LEO-laget alene alarmerer ved 2 av 30 epoker).
    • Scenarioer for fokusområder: 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 (robusthet i L, S og C er leo-resilience-multiband-diversity).
    • Vertikale kampanjer, hver animert og med eksport av sine LEO-passeringer: leo-vertical-autonomous-vehicle, leo-vertical-rail-maritime (de medfølgende scenarioene for sjø og bane pluss LEO), leo-vertical-critical-infrastructure-timing, leo-vertical-polar-arctic, leo-vertical-5g-network-timing, leo-vertical-asset-tracking-iot. Enlinjeresultater i docs/LEO-PNT.md.
    • Tre MODELLED matriserader: spoofingovervåkeren for Doppler og passeringsgeometri, spoofingovervåkeren mellom bånd, og ionosfæresondering. tests/leo_resilience_verticals.rs kontrollerer overvåkerne (stille før starten, Doppler-statistikken kvadratisk i et hopp, det ionosfæriske steget for en spoofer på bakken og ingen fra en som tar hensyn til ionosfæren), sonderingsidentiteten, tidssporet mot radstatistikken, og at en kampanjes eksport er lik hvert medlems egen.
    • Siden leo-pass flytter til docs/LEO-PASS.md; docs/LEO-PNT.md er oversikten.

Scenarioer for sjø, vei og bane

  • Scenarioer for sjø, vei og bane. Fem medfølgende eksempler på eksisterende typer, så skip, kjøretøy på vei og tog hver har et gjennomarbeidet tilfelle. Hvert tall er MODELLED; ingen er validert mot målte data.
    • scenarios/maritime-strait-jamming.toml (jamming): en bredbåndsjammer på 50 W på en mast på 30 m, 30 km over åpent vann fra et skip. Gjennomsnittlig forhold mellom jammer og signal (J/S) omtrent 48 dB, og tilgjengeligheten faller fra 1,00 til 0,00.
    • scenarios/maritime-port-approach-coast.toml (ins-trn-coast): et treghetsnavigasjonssystem (INS) av navigasjonsklasse ved 12 knop med GNSS tapt og uten støtte. Det krysser 10 m etter 281 s og 100 m etter 833 s, tallene for havneinnseiling og åpent hav i resolusjon A.1046(27) fra Den internasjonale sjøfartsorganisasjonen (IMO), brukt her som budsjetter.
    • scenarios/maritime-spoof-position-push.toml (spoof-detect): en spoofer på +2 dB som ikke er bærebølgejustert og skyver fire satellitter for å dra et skip 500 m. Den fusjonerte overvåkeren detekterer den (score 0,70 mot en terskel på 0,50) på mottakerens autonome integritetsovervåking (RAIM) og overvåking av signalkvalitet (SQM); effektovervåking alene overser den.
    • scenarios/automotive-urban-canyon.toml (gnss-ins): en bil gjennom en undergang på 15 s og et bortfall på 60 s fra en jammer ved veikanten, mot et budsjett på 1,5 m for et halvt kjørefelt. Den fusjonerte RMS-feilen (kvadratisk middelverdi) under bortfallet er 1,9 m for en enhet av bilklasse med mikroelektromekanisk system (MEMS) og 0,7 m for en taktisk sammenligningsenhet; kjørende fritt driver MEMS-enheten til 850,8 m.
    • scenarios/rail-tunnel-coast.toml (ins-trn-coast): et taktisk INS på et tog ved 160 km/t i en tunnel. Det krysser 2 m (skillet mellom spor) etter 35,8 s, omtrent 1,6 km inne, og 20 m etter 107,3 s. Dette er bare INS: motoren har ingen odometermodell, så det er den pessimistiske grensen. Antallet scenariofiler i README flytter seg fra 77 til 82. Alle fem er medfølgende for kshana example og listet i nettleserens playground.

Model Context Protocol-server

  • Serveren for Model Context Protocol (MCP) når hver type og hver visning av en kjøring: sju nye verktøy, fjorten til sammen. run_scenario sendte allerede ut hver type; det en agent manglet var en vei til et gyldig scenario av en type, og de tre utdataene kommandolinjen skriver ved siden av et resultat. Nye verktøy:

    • list_example_scenarios og get_example_scenario leverer de medfølgende referansescenarioene (tabellen kshana example), hvert med sin type og den første setningen i sin egen overskrift, byte for byte filen under scenarios/. Et scenario som finnes i depotet men ikke er medfølgende, avvises med grunnen. Hver type unntatt lunar-llr-datum (hvis datautsnitt bare følger med depotet) har minst ett eksempel.
    • report_scenario returnerer kjøringens rapport som JSON (JavaScript Object Notation) eller som utskriftsvennlig HTML-side (HyperText Markup Language) (docs/REPORTS.md).
    • animate_scenario returnerer kjøringens tidsserie som en animert SVG-tegning (Scalable Vector Graphics), en HTML-spiller eller nummererte bilder, etter et JSON-sammendrag av det som ble tegnet (docs/ANIMATION.md). Et svar bærer høyst 120 bilder; kommandolinjen skriver en hvilken som helst lengde.
    • list_export_formats, export_interop og import_route leverer interoperabilitetseksportene og GeoJSON-ruteimporten (docs/INTEROP.md): CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, STK-efemeriden (Systems Tool Kit) .e og SigMF (Signal Metadata Format), med en JSON-indeks over filene (suffiks, størrelse og SHA-256, den 256-bits Secure Hash Algorithm-digesten) og den binære SigMF-samplefilen som base64.

    Biblioteket får en funksjon bundled-scenarios som er av som standard og som eksponerer referansescenariotabellen som kshana::bundled_scenarios; bare MCP-serveren slår den på, så Python-hjulet og WebAssembly-modulen bærer fortsatt ikke scenarioteksten. Studiesuiter (--study) forblir bare for kommandolinjen, fordi en suite navngir filer på disk og serveren leser ingen. Rundturtestene kjører hvert nye verktøy mot medfølgende scenarioer og kontrollerer motorens tall: spektrum, solsystemet, konstellasjoner rundt Månen og Europa, et kampanjesveip, og typene for signal, passering, navigasjonsmelding, fusjonert posisjonering, presis punktposisjonering, ikke-terrestrisk nett og ende-til-ende i lav jordbane (LEO). Hver flate som oppgir antallet MCP-verktøy eller lister verktøyene sier nå fjorten, unntatt playground-siden under web/, som er erstattet av nettstedet.

kshana.dev, Kshana Studio og README

  • En nytegnet kshana.dev. Den enkelte playground-siden er erstattet av et nettsted med flere sider: Home, Missions, Capabilities, Evidence, Developers, Editions og Docs, med Kshana Studio ett klikk unna. Hvert diagram, kart og tall på det er en registrert kjøring av denne utgivelsens motor, med scenarioet og en lenke som åpner den samme kjøringen på nytt i Studio; byggingen av nettstedet avviser et opptak laget av en annen motorcommit. Dokumentasjonssidene genereres fra depotets docs/, og installasjonsvalgene fra dets kanaler. Skrifter og skriptbiblioteker leveres fra kshana.dev selv, så ingen side ber om noe fra en tredjepartsvert. Gamle adresser (/#playground, /#ledger, delingslenker med /#s=<scenario>, innbyggingslenker med /?embed=1&… og resten) omdirigeres til sin nye plass, og en ukjent adresse får en 404-side.
  • Kshana Studio, et dashbord for hver funksjon. Studio åpner på en startskjerm med domenefliser og gode første kjøringer, og tar så en kjøring gjennom fem nummererte trinn: Choose a scenario, Set its parameters, Run the engine lokalt i nettleseren, Read the results (nøkkeltall først, hvert med en PASS- eller FAIL-brikke der kjøringen oppgir en terskel, deretter panelene) og Share or export. Ett søkefelt finner scenarioer, domener og feltene i dem og hopper til kontrollen; kjøringer kan festes og sammenlignes; en brødsmulesti sier hvor du er; på en telefon blir trinnene en trinnlinje. Hver scenariotype har sin visning, inkludert spektrumfossefallet, solsystemet, konstellasjonsdekning, kampanjer, animasjonen, kjøringsrapporten, interoperabilitetseksportene og kjeden i lav jordbane. En dyp lenke (?scenario=…&tab=…) åpner den samme kjøringen på det navngitte panelet.
  • Forskning og sitering. Siden Evidence lister de fem Kshana-artiklene på arXiv (2606,22054, 2606,24210, 2607,02566, 2607,05415 og 2607,06212), hver med et sammendrag, et tall beregnet av denne motoren, kommandoen som gjengir det, en Studio-lenke og BibTeX, ved siden av hvordan programvaren siteres. README får den samme seksjonen Research.
  • En offentlig side for Kshana Pro. docs/PRO.md og nettstedets side Editions sier hva det proprietære Pro-laget legger til over den samme motoren (designoptimerer, usikkerhet og sensitivitet, oppdragsdossier, kampanjeovervåking, spektrumsameksistens, jobbtjeneste på egne servere, sporbarhet av krav), hva hvert produserer og hva det ikke gjør. Hvert Pro-tall nettstedet viser er oppgitt på den offentlige siden. Pro legger ikke til noen fysisk modell, og den åpne motoren forblir hel og gratis.
  • En omskrevet README. Korte seksjoner, ett bilde per seksjon, Kshana-merket, to rader med merker, genererte bilder av arkitektur, scenarioflyt, kjeden i lav jordbane og verifikasjon (tools/gen_readme_assets.py, som feiler på et utdatert bilde), og Studio-skjermbilder tatt fra den kjørende Studio av tools/capture_studio_shots.mjs. READMEene for crates.io, PyPI, npm og MCP-serveren følger samme design. Langt referansemateriale er brettet sammen eller flyttet til docs/.

Endret#

  • <scenario>.report.html er nå den avanserte kjøringsrapporten som er beskrevet under Added, og CLI-linjen wrote … navngir også <scenario>.report.json. Resultatkortet på én side som den erstattet er uendret som RunOutput::html_report(), som Python- og WebAssembly-bindingene fortsatt returnerer. OracleKind::modelled_reason() eksponerer setningen som docs/MODELLED-RATIONALE.md skriver ut for hver MODELLED rad; det dokumentet er uendret.
  • README sier hva Kshana Pro bygger på. Seksjonen Editions og linjen om Kshana Pro under «Support & professional services» oppgir nå hva Pros verktøy for modellbasert systemutvikling (MBSE) og programmer gjør og hvilke av den åpne motorens publiserte utdata det leser (hver kjørings result.json og report.json, scenariofilen, enhetsskjemaet for feltene og etikettene i verifikasjonsmatrisen), og hva klokkenes digitale tvillinger, avveiningsstudiene og bevispakkene hviler på i den åpne motoren. Bare ordlyd: ingen motorutdata og ingen publisert tall endres.
  • Kompatibilitet. Den offentlige enumen navsignal::Modulation får en variant Mboc, som er en brytende endring for en kaller som matcher den uttømmende. Kolonnene gcrs_r_m og gcrs_v_m_s for typen ephemeris endres (se «Revisjoner av publiserte tall»). En kjøring gjengis fortsatt av motorversjonen som laget den.

Rettet#

  • export_table_csv på MCP-serveren navnga fire typer som de eneste med en CSV-tabell (kommaseparerte verdier); seks publiserer en. Verktøyet returnerte alltid tabellen for telecom-timing og for leo-navmsg (dens analyse encode-decode på en meldingsmodell kepler16 eller kepler-rac), men beskrivelsen, avvisningsmeldingen og dokumentene som lister typene utelot begge, så en agent ble fortalt at den ikke skulle spørre. De er nå navngitt, og en rundturtest henter begge tabellene.

  • Rammen for navigasjonsmeldingen i lav jordbane (LEO) var ikke de samme bytene på hver plattform, og heller ikke i hvert bygg av én plattform. scenarios/leo-navmsg-encode-decode.toml kodet en ramme med syklisk redundanssjekk 0x110315 i release-bygget på aarch64 macOS, 0x898BD8 i et debug-bygg av samme kilde på samme maskin, og 0x6A82D9 i WebAssembly-bygget (WASM); leo-navmsg-celeste-iod.toml ga 0x6EDB2D native mot 0xC6E4F0 i nettleseren. Tre årsaker, hver sporet til den første verdien som avvek:

    • Mellom plattformer. Referansebanen var bit-identisk på begge; tilpasningens startpunkt var det ikke. truth::state_to_elements tar den oskulerende inklinasjonen fra en acos og perigeumsargumentet fra en atan2, og de to matematikkbibliotekene runder disse ulikt i siste posisjon (over 20 000 argumenter er de uenige for 781 sinuser, 858 cosinuser, 1 931 eksponentialer og 1 899 arctangenser med to argumenter).
    • Mellom byggprofiler. Et optimalisert bygg på macOS slår sammen en sinus og en cosinus av ett argument til ett enkelt kall til systemets kombinerte rutine, og dens sinus er ikke den alenestående sin for 379 av 200 000 argumenter; et uoptimalisert bygg gjør de to kallene. Typen tar en sinus og en cosinus sammen på tretten steder.
    • I klokken. Normalsamplereren i rand_distr kaller vertens exp og ln i sine to sjeldne grener: av fire millioner seedede trekninger avvek tre i siste bit mellom det native og WASM-bygget.

    Levenberg–Marquardt-tilpasningen, som på denne buen stopper ved grensen på 80 iterasjoner og ikke ved et minimum, bærer én enhet i siste posisjon inn i andre kvantiserte felt. Typen beregner nå hver transcendental funksjon gjennom den nye src/portable_math.rs, som kaller crate-en libm i ren Rust (allerede i avhengighetstreet, nå navngitt i Cargo.toml), kompilert fra én kilde for hvert mål og ikke et bibliotekskall som optimalisereren skriver om: leo_navmsg::{truth, fit, elements, codec, sisre, services} og scenariokoden. Heltallspotenser på den stien er skrevet ut som kvadrer-og-multipliser, fordi f64::powi har uspesifisert presisjon, og sannhetsklokken trekker sine normalavvik fra portable_math::standard_normal (Marsaglias polare metode på generatorens rå utdata). De delte rutinene som referansebanen integreres gjennom er skrevet én gang, generiske over matematikkbiblioteket, med et inngangspunkt _portable internt i crate-en ved siden av det eksisterende: akselerasjonen fra kulefunksjoner, de sonale akselerasjonene og luftmotstanden, de sekulære J2-ratene og Klobuchar-forsinkelsen. De eksisterende inngangspunktene er uendret til siste bit, så ingen annen typens tall flytter seg. leo_navmsg::tests::the_encoded_frame_is_the_same_bytes_on_every_platform fester hele rammen på 171 byte og én kontrollverdi per efemeridemodell, i den vanlige (uoptimaliserte) testprofilen, på hver plattform og uten noen port for grunnlinjeverten; the_kind_never_calls_the_host_mathematics_library leser typens kilder fra disk og feiler på et iboende transcendentalt kall, på en sampler fra rand_distr, eller på et kall inn i en modul som ikke er gjennomgått. Etter endringen gir et debug-bygg, et release-bygg og WASM-bygget byte-identiske resultatdokumenter for alle fem scenarioene i leo-navmsg. Dette flytter tall, registrert her som en revisjon. Typen leo-navmsg er ny i denne utgivelsen, så ingenting publisert i en tidligere utgivelse flytter seg, men hvert tall for leo-navmsg gjør det, native og i WASM-bygget, og trinnet navmsg i leo-pnt-chain med det: banetallene fordi tilpasningen nå starter fra de portable elementene, klokketallene fordi sannhetsklokken er en annen realisasjon av den samme prosessen. docs/LEO-NAVMSG.md er generert på nytt fra de nye resultatene; dens publiserte kontrollverdi for scenarioet som koder og dekoder var 0x110315 og er 0x19105F (posisjon innenfor 1,126 mm av den eksakte meldingen der den var 0,665 mm, klokke innenfor 0,185 mm der den var 0,451 mm). Størrelsen på endringene i sub-millimetertallene er tilpasningens følsomhet, ikke en feil i noen av settene: tilpasningen er uendret og stopper fortsatt ved sin iterasjonsgrense.

  • Seedet resampling trakk andre indekser på et 32-bits mål. Rng::gen_range over usize tar 64 biter fra generatoren på en 64-bits vert og 32 biter på en 32-bits, så det samme seedet ga andre indekser, og lot strømmen stå et annet sted, i WASM-bygget. Tre steder trakk slik: persentil-bootstrapene i eval_stats (bootstrap_ci, bootstrap_auc_ci), shufflen før hver treningsrunde i impairment_ml, og permutasjonstesten i impairment_study. De trekker nå gjennom portable_math::uniform_index, som alltid samples som u64: nøyaktig det en 64-bits vert gjorde, så ingen native tall flytter seg. Dette flytter publiserte tall i WASM-pakken, registrert her som en revisjon: bootstrap-intervallet for arealet under kurven for quantum-anomaly-detect (quantum_auc_ci, trade.foms[0].ci95) var [0.9901265, 0.9938305] i nettleseren og er nå det native [0.99035875, 0.993861].

  • Filnavn for STK-efemerider fra mover-id-er. En mover-id som inneholdt en / eller et mellomrom (et konstellasjonsskall og en satellitt, Pulsar inclined/S1-0163) fikk CLI-en til å panikke på --export stk; hver id går nå gjennom en trygg fildel (bokstaver, sifre, -, _).

  • Nutasjonsfortegnet for TEME→GCRS, beskrevet under «Revisjoner av publiserte tall» ovenfor fordi det flytter publiserte utdata.

0.28.0 - 2026-09-26#

Lagt til#

  • Scenariotypen slot-timing (src/slot_timing.rs): sekunder til en fritt gående klokke forlater vaktgrensen til et tidsindeksert rutings- eller oppgavespor, hvert bidragende ledd på det tidspunktet med det dominerende navngitt, tiden som er igjen siden siste posisjonsbestemmelse, og det største intervallet mellom posisjonsbestemmelser som holder klokken innenfor, netto av ventetiden for posisjonsbestemmelsen. Klokken kommer fra en klassestandard, en datablad-forhåndsinnstilling for telecom-timing, et inline datablad (maksima for Allan-avvik, aldring, temperaturkoeffisient) eller et målt faseopptak. Et brudd utover den lengste midlingstiden kilden støtter flagges som ekstrapolert. Medfølgende eksempel: slot-timing-ocxo-leo. Se docs/SLOT-TIMING.md.
  • Målt rødstøygulv. Det overlappende Allan-avviket for et faseopptak tilpasses med vektet minste kvadrater i grunnlaget for hvit fase og frekvensmodulasjon etter IEEE Std 1139 (slot_timing::fit_weighted), der hvert punkt vektes med sine ekvivalente frihetsgrader, så et holdover-svar kan hvile på klokkens eget gulv i stedet for klassens antakelse. En uvektet tilpasning la et falskt flikkergulv på et testopptak med hvit støy og forkortet et brudd på 2 000 s med 30 %.
  • Validering med tilbakeholdte data av holdover-inversjonen på en ekte klokke (tests/slot_timing_cs5071a_holdout.rs): tilpasset på den første tredjedelen av opptaket 5071A cesium mot hydrogenmaser, lander de forutsagte ett-sigma-bruddene ved seks terskler fra 0,5 til 2,5 ns innenfor 0,84 til 1,03 av bruddene målt på de to andre tredjedelene, mot en terskel på 1,5 fastsatt før testen først ble kjørt. En kontroll (Allan-avviket ved ett sekund lest som hvit støy) bommer med en faktor på omtrent 1 000 og besto ikke terskelen. Ny VALIDATED rad i registeret; arbeidsflyten realdata-clock kjører den nå.
  • Den samme prediksjonen på en ekte krystalloscillator (tests/slot_timing_ocxo_holdout.rs, scripts/fetch_ocxo.sh): på en målt ovnsstyrt krystalloscillator er den tilbakeholdte prediksjonen konservativ, på 0,59 til 0,70 av det målte bruddet og aldri senere, og for det meste utenfor terskelen på 1,5, fordi oscillatorens støygulv ble halvert i løpet av opptaket på 5.5 timer; tilpasset i utvalget lander den innenfor 0,98 til 1,17. Krystalltilfellet er ikke validert og forblir MODELLED. Kjøringen avslørte også et manglende ledd: en krystalls frekvens vandrer, så modellen bærer nå usikkerheten i frekvensen som er kjent ved posisjonsbestemmelsen (fix_frequency_sigma); uten den var prediksjonen optimistisk med opptil 2,5×.
  • Den samme prediksjonen på atomklokker i bane (tests/slot_timing_igs_holdout.rs, scripts/fetch_igs_clocks.sh): 14 dager med endelige klokker fra International GNSS Service for GPS Block IIF-satellittene, med protokollen skrevet ned før dataene ble lastet ned. Åtte av ti satellitter lander innenfor terskelen på 1,5; G25 og G30 predikerer brudd opptil omtrent dobbelt så sent som målt. Protokollen krever at hver satellitt består, så tilfellet i bane er ikke validert og forblir MODELLED; utfallet er festet.
  • Klokkeklassene temperaturkompensert krystall (TCXO), ovnsstyrt krystall (OCXO) og rubidium atomfrekvensstandard (RAFS) (ClockClass::Tcxo, Ocxo, Rafs), delene en kommersiell smallsat-buss eller en bakkegateway flyr, hver med ett offentlig datablad (ClockClass::source). ClockClass::ALL, id og from_id er lagt til. baseline_clock_class i quantum-trade godtar de tre nye id-ene. Å legge varianter til en offentlig enum er en brytende endring for en kaller som matcher den uttømmende.
  • Beskyttelsesnivå for tid for en mottaker i bane (src/orbital_timing.rs, den valgfrie seksjonen spoofing i typen slot-timing): hvor lenge en spoofer på bakken kan nå en satellitt i lav jordbane per passering, trekket en spoofer ved en oppgitt maksimal rampehastighet akkumulerer før satellitten forlater rekkevidden eller en uavhengig kontroll kjører, og om hver kontroll mot bakken eller krysslenke er uavhengig av den spooferen. Reduseres nøyaktig til tpl::timing_protection_level_ns for en klokke uten flikker-, hvitfase- eller tilfeldig-vandring-støy. MODELLED.
  • Tre notater: docs/SLOT-TIMING.md (inkludert hvilken vandringsmetrikk et spor bør godtas mot: maksimal absolutt tidsfeil, ikke maksimal tidsintervallfeil eller tidsavvik, og hvorfor), docs/DECEIVED-TIME.md (en signert kommando brukt på et bedratt tidspunkt rutes fortsatt feil) og docs/DEPLOYMENT-TARGETS.md (hvor Kshana kjører; ingen flykjerne med no_std tilbys).

0.27.4 - 2026-09-26#

Utgivelsen v0.27.3 nådde crates.io (kshana og kshana-mcp) og PyPI, og stoppet så ved npm, så npm, MCP-bildet på ghcr.io, MCP-registeret, JetBrains Marketplace og kshana.dev aldri fikk den. 0.27.4 bærer den samme motoren, med utgivelsesrettelsen nedenfor, til hver kanal.

Rettet#

  • npm-publiseringstrinnet navngir tarballen med en eksplisitt sti. npm leser en bar npm-dist/kshana-0.27.3.tgz som GitHub-forkortelsen owner/repo, så npm-jobben i v0.27.3 prøvde å klone github.com/npm-dist/kshana-0.27.3.tgz og feilet med «Permission denied (publickey)». Selve tarballen var bygget og attestert. Trinnet publiserer nå ./npm-dist/*.tgz. Alt etter npm i utgivelsesrekkefølgen (MCP-bildet, JetBrains-pluginen, kontrollen av kanalparitet og nettstedet) ble hoppet over, som tiltenkt.

Endret#

  • Enhetskatalogene for telecom-timing og gnss-ins er unntatt fra påvisning av kopiert kode, under samme policy og begrunnelsestest som de andre katalogene. Kvalitetsporten i SonarCloud hadde blitt rød på duplisering i ny kode (4,0% mot 3%), og hver duplisert blokk var en enhetsrad eller en ITU-T-maskeoppføring.

0.27.3 - 2026-09-25#

Lagt til#

  • scenarios/small-uas-jammed-nav.toml: hvor lenge navigasjonen til en liten drone holder etter at GNSS er jammet. Den kjører en mikroelektromekanisk (MEMS) treghetsenhet i flykontrollerklassen, en Bosch BMI088, mot en enhet av taktisk klasse. GNSS-signalet (Global Navigation Satellite System) er nominelt i 100 s, deretter nektet i 60 s (jamming-demo.toml viser hvorfor en jammer i nærheten gjør det). BMI088s bias er restene etter kalibrering ved oppstart, tatt fra temperaturkoeffisientene i databladet (BST-BMI088-DS000-19 rev 1,9): 0,015 °/s per K for gyroen og < 0,2 mg per K for akselerometeret. To antakelser er flagget i filen: en oppvarming på 10 K etter kalibreringen, og fortsatt oppvarming på 1 K per minutt under flyging. Driften under flyging er feilen filteret ikke kan lære før jammingen starter, og det er den som avslutter kjøringen uten støtte. Hvert tall er modellert; å validere det krever flygelogger fra et jammet miljø. kshana example small-uas-jammed-nav skriver det ut.

  • Hver sensor i gnss-ins kan sette sin egen filterprior ([imu_quantum.filter_prior] eller [imu_classical.filter_prior], med sigma_accel_bias og sigma_gyro_bias). Standarden er uendret, så hvert eksisterende scenario gir samme resultat. Den gjenværende gyrobiasen til en enhet av forbrukerklasse ligger omtrent 26 sigma utenfor standarden for taktisk klasse, der filteret aldri ville lære den. En prior som ikke er endelig og positiv avvises, og resultatet ekkoer prioren når en er satt.

  • kshana example [<name>] gir en registerbruker et scenario å kjøre. En bruker av cargo install kshana har den kjørbare filen og ingen katalog scenarios/, så den første kommandoen hver hurtigstart ga dem feilet. Kommandolinjegrensesnittet (CLI) bærer nå de 75 referansescenarioene som kjører på egen hånd, byte for byte, kompilert inn fra scenarios/ (src/bundled_scenarios.rs; tabellen ligger i CLI-binærfilen, så Python-hjulet og WebAssembly-modulen vokser ikke). kshana example lister dem; kshana example clock-holdover > clock-holdover.toml skriver ett. De to andre filene finnes bare i depotet: lunar-llr-datum leser arkiverte data fra lunar laser ranging som bare følger med depotet, og quantum-pnt-demonstrator.suite er et studiemanifest som kjører tre søskenfiler med --study. Å be om en av dem sier hvorfor og avslutter med 2 i stedet for å skrive ut noe som ikke kan kjøres på egen hånd. tests/cli_first_run.rs holder tabellen opp mot katalogen i begge retninger, så en ny scenariofil som verken er medfølgende eller navngitt som bare for depotet feiler.

  • Hvert kvalitetsmål i et klokke-, bane-, hybrid- eller fusjonsresultat sier nå om det er VALIDATED eller MODELLED, i selve resultatet. Resultatdokumentet får en blokk figure_tiers, alltid dens siste nøkkel. Den lister hvert rapportert tall (for eksempel quantum.fom.timing_p95_ns) med sitt nivå — VALIDATED betyr kontrollert mot en uavhengig ekstern referanse, MODELLED betyr en førsteprinsippsmodell som er testet internt — og raden i verifikasjonsmatrisen nivået er lest fra. Nivået kommer fra src/verification.rs gjennom src/fom_label.rs, så det finnes ingen andre tabell å drive fra hverandre. Før dette forekom ordene «validated» og «modelled» null ganger i et klokke-holdover-resultat, og en leser av rå JSON (JavaScript Object Notation) hadde ingen måte å skille de to på. Posisjonstallene for hybrid og fusion har ingen eierrad i matrisen, så de er listet under untiered i stedet for å få et nivå. Blokken bærer ingen tall. Den er bevist additiv, ikke antatt: å fjerne den gir det gamle dokumentet tilbake byte for byte, for alle fem typene (en motortest), og begge golden-harnessene (tests/registry_golden.rs, tests/cross_platform_golden.rs) fjerner nå nøyaktig denne nøkkelen, og bare når den er den siste, og hasher så resten mot sine uendrede frosne konstanter. En liste i hver harness fester hvilke scenarioer som må bære blokken, så unntaket ikke i det stille kan utvides.

  • En type telecom-timing svarer i en tidsingeniørs enheter: tidsfeil, maksimal tidsintervallfeil (MTIE) og tidsavvik (TDEV), hver med PASS eller FAIL og en margin mot maskene til International Telecommunication Union Telecommunication Standardization Sector (ITU-T). Maskene er transkribert fra utgavene som gjelder: G.8272 (07/2025) for klassene A og B av primær referansetidsklokke (PRTC), G.8272.1 (2024) Amd. 1 (07/2025) for den forbedrede PRTC i låst modus og i holdover (inkludert dens omhylling for tidsfeil, som stiger fra 30 ns til 100 ns over en holdover-periode bestemt av hvor lenge klokken var låst), G.8273.2 (2023) Amd. 2 (11/2025) for telekomgrense- og tidsslaveklokker, klassene A til D, og G.8271.1 (2022) Amd. 3 (05/2025) for nettgrensene ved referansepunkt C. Hver oppføring som disse anbefalingene lar stå «for further study» er utelatt, ikke estimert, og docs/TELECOM-TIMING.md lister hvert tall med sin tabell eller klausul og hver post som ble utelatt. Rapporten oppgir også tiden til hvert tidsfeilbudsjett overskrides: som standard holdover-standarden på 100 ns for ePRTC, en nettverks-holdover-tildeling på 400 ns, grensen på 1 100 ns ved punkt C og ende-til-ende-kravet på 1,5 mikrosekunder for klasse 4.

    Inndata er enten en syntetisk holdover eller en serie av din egen. Den syntetiske bruker en av fire oscillatorforhåndsinnstillinger (en ovnsstyrt krystalloscillator, en rubidiumstandard, en cesiumstandard og en brikkeskala atomklokke), hver med stabilitets-, aldrings- og temperaturtallene fra et navngitt Microchip-datablad. Hvordan disse tallene blir hvit, flikker- og tilfeldig-vandring-frekvensstøy, aldring og et temperaturledd er oppgitt i hver rapport og merket MODELLED. En serie av din egen er [time_s, time_error_ns]-par, inline (slik den kjører i nettleseren) eller, på native bygg, fra en fil med kommaseparerte verdier. MTIE/TDEV-tabellen, med grensen for hver valgt maske ved siden av, skrives som kjøringens CSV-artefakt.

    scenarios/telecom-prtc-holdover-24h.toml er en 24-timers rubidium-holdover med aldring, flikker og en daglig temperatursyklus: dens største tidsfeil er 603,2 ns, den krysser 100 ns 8 206 s etter tapet og holder seg innenfor 1,5 mikrosekunder hele dagen, og den består ikke holdover-omhyllingen for forbedret PRTC, slik en klokke som ikke er av cesiumklassen skal gjøre. scenarios/telecom-tie-ingest.toml viser inline-inndataene. MTIE og TDEV som typen rapporterer kontrolleres mot pakken allantools på en innsjekket holdover-serie med 2 048 sampler, nøyaktig for MTIE og til 1.1e-15 for TDEV, så matrisen får én VALIDATED rad og to MODELLED (transkripsjonen av maskene og forhåndsinnstillingene) og står nå på 171 rader — 65 VALIDATED, 102 MODELLED, 4 PARTNER. Dekningen av feltenheter går fra 60 av 61 typer til 61 av 62, og fra 1 742 til 1 788 beskrevne felt. Typen er ny og additiv: ingen eksisterende scenario, festing eller publisert tall flytter seg.

  • Playground kjører motoren i en Web Worker i bakgrunnen, så et tregt scenario fryser ikke lenger siden. web/engine-worker.mjs er vert for WebAssembly-motoren og web/engine.mjs videresender hver scenariokjøring til den — kjøringer, parametersveip og eksportene SP3 / OMM / OEM / CSV. En kjøring som varer lenger enn 150 ms viser en opptatt-tilstand (Run deaktivert, «Running… N s») og en Cancel-knapp som avslutter og starter workeren på nytt; en nettleser som ikke kan starte en modul-worker faller tilbake til den gamle stien i hovedtråden. cislunar-arc-recovery, som ble utelatt fra katalogen fordi den frøs siden, er tilbake i den, merket som treg: den tar omtrent 13 s i Chrome (fire motorkall på omtrent 3 s hver), og siden forblir responsiv i løpet av den tiden.

  • Hver rapportert størrelse i cislunar-observability har nå en enhet, en opprinnelsesklasse og en definisjon — den nest siste typen på unntakslisten for hele crate-en. Alle 41 numeriske felt i det UTGITTE dokumentet er beskrevet, så dekningen av feltenheter går fra 59 av 61 typer til 60 av 61 og fra 1 698 til 1 742 beskrevne felt, med baklisten uten definisjon uendret på 239.

    Dette ble blokkert av festingen som fryser det utgitte dokumentet, som navnga units som en nøkkel dokumentet aldri må få. Å legge til en ville ha betydd å slette den påstanden og sette tre hasher på nytt som grunnlinje i tre filer — en form som ikke kan skilles fra å dekke over en regresjon. I stedet beviser de to festingene som måler dette dokumentet nå at tilleggene er additive: hver fjerner blokken units igjen og hasher på nytt mot konstanten som ble frosset før blokken fantes, og begge konstantene er uendret. En mutasjon bekrefter at garantien er ekte — flytt en utgitt verdi og sett hele dokumentets hash på nytt som grunnlinje slik en uaktsom rettelse ville gjort, og fjerning-og-hash-på-nytt feiler fortsatt. Den tredje festingen, i den generiske registry-golden-harnessen, er satt på nytt som grunnlinje i takt med de seks søskenene som ble satt på nytt av nøyaktig denne grunnen, og dens verdibærende literal expect_summary flytter seg ikke.

  • realtime-frame-eop rapporterer hvilken referanse hver rad for jordorientering ble vurdert mot, og hvor ofte reserveløsningen slo inn. table3_joint_eop[].{ut1, polar_motion,combined} får truth_source og truth_fallback_rows. Gulvet final vurderes mot Bulletin B final og kan bare bruke epoker som publiserer en; hver rad dN vurderes mot truth_pm()/truth_ut1(), som faller tilbake til den raske verdien i Bulletin A. På det medfølgende utdraget for 2026 er det 12 av 31 sampler ved én dag, mot 0 ved gulvet — så gulvraden og prediksjonsradene ved siden av hviler på målbart ulik referanse, noe rapporten nå oppgir i stedet for å la det utledes av et samplingstall som stiger der nestede horisonter sier at det ikke kan.

  • moonlight-service-volume gir en keplersk grunnlinje i samme størrelse. ephemeris_comparison.keplerian_matched kjører den illustrative konstellasjonen på nytt ved antallet satellitter i det HENTEDE settet, til stede bare når antallene er ulike. Antallet er en del av det designets geometri — RAAN og middelanomali spres begge som 360k/n — så uten det ble et hentet sett med fem satellitter vurdert mot et illustrativt sett med åtte og design ble blandet sammen med størrelse. For LANS-referansesettet med fem satellitter viser det seg at 8,68 av dekningsgapet på 14.24 poeng skyldes de tre manglende satellittene og bare 5,56 poeng designet; for de fire romfartøyene som faktisk er i månebane når et spesialbygd sett med fire satellitter 4,86 % der de når 0 %. En test fester at den tilpassede raden er en gjenoppbygd konstellasjon og ikke den konfigurerte omdøpt, som var slik den først ble skrevet og det kjøringen da rapporterte.

  • Ni funksjonskort på det offentlige nettstedet, som dekker 22 rader i verifikasjonsmatrisen som ble levert uten kort på produktnivå. Motoren hadde vokst en familie av funksjoner — ARAIM-kontrollen mot publiserte referansevektorer fra Working Group C, ekte hentet geometri for månekonstellasjoner, månens nektelseskontur med et målt C/N₀-bånd, steget fra VLBI-plan til stasjonskovarians, optisk og RF-overlevering med feilinjeksjon på tvers av modaliteter, prediksjon av jordorientering i sanntid mot arkivert Bulletin A, deling av apertur mellom navigasjon og kommunikasjon, INS/TRN-kjøring uten støtte, og dekning av enheter og opprinnelse — hver med en matriserad og et medfølgende scenario, og ingen av dem navngitt på kshana.dev. Dekningen fra kort til rad går fra 72 av 168 rader til 94.

  • Åtte scenarioer er lagt til i playground-katalogen. Kjør-knappen på et funksjonskort vises bare når web/app.js også inneholder filen; seks kort navnga et scenario som den ikke hadde, så de ble vist uten noen måte å kjøre dem på. Ett av dem, datumet for ekte laseravstandsmåling, hadde vært i den tilstanden siden det ble levert. tests/scenario_examples_doc_sync.rs sikrer nå invarianten i begge halvdeler: målet run på et kort må være bundlet under scenarios/ og tilbudt av katalogen. Mutasjonstestet mot begge feiltypene.

  • moonlight-service-volume skriver ut geometrien per satellitt som <scenario>.table.csv når et eksportsted er konfigurert (G11). Det er den største tabellen crate-en publiserer, med 2304 rader i den utgitte felles tabellen for kommunikasjon og navigasjon, og den nådde brukerne bare inne i JSON, formatet som avkortet et søsterscenarios kurve på 57 punkter til 23 punkter under en kolonne som påstod å inneholde alle. Én rad per forbindelse, radantallet på overskriftslinjen, og antennekolonnene bare når en antenne var konfigurert. En kjøring uten eksportsted er uendret byte for byte og skriver ingen fil.

  • SBOM-en beskriver nå det som leveres: 60 komponenter ble til 66. scripts/gen-sbom.sh listet hver pakke i oppløsningen med standardfunksjoner, dev-dependencies inkludert. Det førte sgp4 og chrono, crates som bare brukes i tester og ikke kompileres inn i noe artefakt, inn i materiallisten, og utelot kjeden bak --features python som PyPI-wheelen lenker inn (pyo3, pyo3-ffi, pyo3-macros, pyo3-macros-backend, pyo3-build-config, portable-atomic, target-lexicon, heck), som er wheelens grense mot fremmedfunksjoner. Skriptet går nå gjennom oppløsningsgrafen fra kshana-pakken, bare via vanlige kanter og build-kanter, over unionen av funksjonssettene default, python og wasm (npm-pakken inneholder den samme SBOM-en), for hver målplattform. Den låste CycloneDX-vurderingen av overensstemmelse er satt på nytt som grunnlinje gjennom den innsjekkede generatoren: 60 → 66 komponenter, 53 → 60 sammensatte lisensuttrykk, og fortsatt null skjemafeil når disse er plassert i standardformen expression.

  • Reproduserbarhetstabellen i CSV nås fra hver inngang, ikke bare fra CLI-en og Python-wheelen. MCP-serveren får et sjuende verktøy, export_table_csv, som kjører et scenario og returnerer den byte-stabile tabellen som CLI-en skriver som <scenario>.table.csv, eller en feil som navngir typene som publiserer en (realtime-frame-eop, lunar-time-budget, lunar-jamming, og moonlight-service-volume bare når export_site_lat_deg + export_site_lon_deg er satt). WebAssembly-modulen får table_csv, som returnerer den samme teksten eller undefined. MCP-rundturstesten og Python-bindingstestene fester nå den returnerte CSV-en byte for byte mot tests/golden/realtime-frame-eop.csv, og fester at RunOutput.write_csv returnerer antall byte skrevet, og 0 uten at noen fil opprettes for en type uten tabell. Hver flate som oppgir antallet MCP-verktøy eller lister verktøyene, sier nå sju.

  • run_all i WebAssembly-modulen: én motorkjøring for alle utdata. run, chart_svg, summary og table_csv kjører hver scenarioet fra bunnen av, så playground betalte for fire fulle kjøringer per klikk, omtrent 12 s i stedet for 3 s for cislunar-arc-recovery i en nettleser. run_all returnerer {json, svg, summary, csv} fra én kjøring, og playground bruker den nå. Den stemmer byte for byte med de fire separate kallene.

Rettet#

  • REVISJON: koblingen mellom gyrobias og holdning i GNSS/INS-filteret hadde feil fortegn, og utfallstallene for gnss-ins endres. Det utvidede Kalman-filteret med feiltilstand (EKF) holder begge treghetsbiasene som residualer (sann verdi minus løpende estimat, tilbakeført ved addisjon). Akselerometerkolonnen drev hastighetsfeilen med +C_b^n b_a, men gyrokolonnen drev holdningsfeilen med −C_b^n b_g. En gjenværende gyrobias roterer i virkeligheten den beregnede holdningen med +C_b^n b_g, så hvert gyrobiasestimat dro i feil retning. Pakken holdt seg stabil bare fordi standard forhåndsverdi for gyrobias (1e-4 rad/s, 1-sigma) var stram nok til å holde disse tilstandene i ro. Med en videre forhåndsverdi divergerte filteret selv når den sanne gyrobiasen var null: 93 m fusjonert utfallsfeil ble til 4,3 km. De publiserte tallene for scenarios/gnss-ins.toml endres slik:

    gnss-ins.toml før (≤ 0.27.2) etter
    kaldatom-IMU, fusjonert RMS under utfall 96,1 m 1,9 m
    kaldatom-IMU, drift innenfor spesifikasjon (50 m) 30 s 60 s (hele utfallet)
    taktisk IMU, fusjonert RMS under utfall 62,5 m 3,1 m
    taktisk IMU, drift innenfor spesifikasjon (50 m) 37 s 60 s (hele utfallet)

    Tallene for fri drift (130,7 m og 314,3 m) endres ikke; de brukte aldri filteret. Pakkens tidligere tolkning, at den fusjonerte driften er begrenset av et gulv for overleveringsholdning og derfor ikke blir bedre med en bedre sensor, var en artefakt av denne feilen og er trukket tilbake. Med konstante, støyfrie biaser lærer filteret dem nå mens GNSS er tilgjengelig, så den fusjonerte driften er et beste tilfelle. Den eksterne filterpy-referansen (tests/gnss_ins_sensor_fusion_reference.rs) kontrollerer bare måleoppdateringene, og derfor så den aldri propagasjonen. To tester kontrollerer nå fortegnet direkte, og begge feiler på det gamle. Den første, i closed_loop.rs, mater en kjent gjenværende gyrobias gjennom strapdown-beregningen og krever at filteret forutsier den resulterende holdningsfeilen innenfor 2 %. Den andre krever at en vid forhåndsverdi lærer en gyrobias på 1e-3 rad/s og holder seg innenfor 6 m. Den tverrplattform-golden-verdien for gnss-ins er festet på nytt av denne grunnen og ingen annen.

  • Hver quickstart for registrene kjører nå som skrevet på en ren maskin. Målt før denne endringen leste eksemplene for crates.io og PyPI (Python Package Index) scenarios/clock-holdover.toml, som en registerinstallasjon ikke har, og npm-eksemplet krasjet under Node.js med TypeError: fetch failed, fordi pakkens init() henter WebAssembly-binæren og Nodes fetch ikke kan lese en lokal fil. Nå:

    • README.crates.md og README.pypi.md inneholder det scenarioet inline, slik README.npm.md allerede gjorde. Rust-blokken er et helt program med sin egen main, siden den rustdoc-skjulte linjen # Ok::<…> den endte med vises på crates.io og ikke kompilerer når den limes inn. tests/readme_code_fences_doc_sync.rs kompilerer den fortsatt byte for byte, og avviser nå også en skjult linje i blokken.
    • README.npm.md skiller nettleseren fra Node.js og gir en Node-oppskrift som leser binæren fra disk og sender den til initSync. Doc-sync-testen godtar initSync som lasteren wasm-bindgen genererer.
    • Alle tre bygger inn scenarioet med proveniensstrengene uforkortet, så scenariohashen er 5ba83a232b94 på hver flate. npm-eksemplet pleide å forkorte dem, og det ga det en annen hash enn CLI-en.
    • Gjengitt fra lokale bygg av dette treet: et nytt cargo new-prosjekt med en stiavhengighet til den pakkede crate-en bygde og kjørte Rust-eksemplet; en wheel bygd med maturin fra de pakkede kildene, installert i et nytt virtuelt miljø, kjørte Python-eksemplet; og pakken wasm-pack --target web, pakket og installert med npm, kjørte Node-oppskriften. Alle tre skrev ut den samme sammendragslinjen.
  • cargo run -- <scenario.toml> fungerer fra en klone. Cargo.toml setter default-run = "kshana". Uten det avviste cargo med «could not determine which binary to run», som hver cargo run ---linje i dokumentasjonen traff.

  • CLI-ens feilmeldinger det første minuttet sier hva du bør gjøre videre. En scenariosti som ikke finnes, legger nå til et hint som peker på kshana example, og et andre posisjonsargument skriver ut bruksteksten i tillegg til å navngi argumentet. --help, --version, feilen for ukjent alternativ (exit 2) og --validates enlinjes ok: ved suksess var allerede på main. tests/cli_first_run.rs dekker nå alle sammen, siden ingen test kjørte binæren for noen av dem før.

  • list_kinds() i Python er dokumentert som å returnere én JSON-streng, ikke en liste. Den returnerer de samme metadataene som scenario_kinds(), serialisert, så iterasjon går gjennom tegn. Den beholder strengreturen slik at eksisterende kallere ikke går i stykker. kshana.pyi, bindingens dokumentasjonskommentar, docs/PYTHON_API.md og README.pypi.md sier nå dette og peker til scenario_kinds().

  • De tre README-filene for registrene skriver ut hver forkortelse ved første bruk. PNT er nå utvidet i slagordet, der det først forekommer, og CLI, TOML, JSON, SVG, CSV, CSAC, HTML, URL og API er utvidet i filene som bruker dem. Overskriften på tabellen over uavhengige referanser sier ikke lenger «CI-gated» før CI er definert.

  • Rettet et publisert tall: tilgjengelighet for ARAIM med to konstellasjoner på de medfølgende Celestrak GPS- og Galileo-TLE-ene. docs/CAPABILITY.md oppga at å slå sammen Galileo løfter tilgjengeligheten fra 0,21 til 0,67 under en VAL på 12 m, og at modusen som er robust mot konstellasjonsfeil, er begrenset med bare to konstellasjoner. Det kom av at tests/araim_dual_real_data.rs propagerte hver satellitt fra sin egen TLE-epoke (parse_propagators dropper epoken), og epokene i disse filene spenner over 70,6 t (GPS) og 335,7 t (Galileo), så satellittene stod på innbyrdes inkonsistente tidspunkter. Testen beholder nå hver epoke (parse_tle) og evaluerer hver satellitt på ett felles UTC-tidspunkt, den seneste TLE-epoken i settet (2026-06-07T07:21:04). Den målte tilgjengeligheten over det samme rutenettet på 24 t med 289 sampler blir GPS alene 0,993 (var 0,208), sammenslått 1,000 (var 0,671) og dual robust mot konstellasjonsfeil 0,990 (var 0,031); ved APV-I-grensen går dual-modusen fra 0,180 til 1,000. Konklusjonen snus: på en konsistent himmel bærer to konstellasjoner hypotesen om konstellasjonsfeil ved en VAL på 12 m. De samme tallene fås med den tidligste TLE-epoken som referanse. En selvkontroll i testen fester tilgjengelighetsløkken sampel for sampel til araim_dual_constellation_availability, så den eneste forskjellen er tidsjusteringen. docs/CAPABILITY.md og docs/REAL_TLE_GUIDE.md §3 har de nye tallene; oppføringen for 0.13.0 nedenfor er latt stå slik den ble utgitt.

  • De offentlige flatene reklamerer ikke lenger for RINEX 4 som validert. Motoren avviser nå en RINEX 4-navigasjonsfil ved navn i stedet for å dekode den feil, men standardrutenettet viste fortsatt et kort «RINEX 3 / 4» med et validert-merke, knyttet til RINEX-3-evidensen for navigasjonsparseren. Kortet er nå «RINEX 3», og README, docs/CAPABILITY.md, docs/STANDARDS.md, ROADMAP.md og funksjonssammendraget oppgir det som er sant: RINEX 3.0x-observasjonsfiler parses, observasjonsoppsettet 4,00 forventes å parses, men ingen 4,00-fil er lest gjennom koden, og RINEX 4-navigasjonsfiler avvises.

  • --validate sier fra når «ok» betyr at det ikke var noe å kontrollere. Omtrent to tredjedeler av katalogen publiserer ikke noe obligatorisk felt; de pakkene kjører referansekonfigurasjonen sin fra en tom body, så lint-kontrollen kunne bare skrive ut «ok» for dem, med de samme ordene som den brukte etter å ha kontrollert seks felt. Suksesslinjen oppgir nå antallet obligatoriske felt den fant til stede, eller at typen ikke krever noen.

  • scripts/gate.sh avviser en ikke-numerisk REPEAT eller TEST_THREADS. Under bash 3,2 fikk REPEAT=no den numeriske sammenligningen til å gi feil og evaluere til usann, så gaten kunngjorde «repeatability loop SKIPPED (REPEAT=0)» for en verdi som ikke var 0, og skrev likevel en kvittering. Begge innstillingene avslutter nå med 2 med mindre de er rene heltall.

  • MSRV oppgis som 1,85 overalt der et menneske leser det. Cargo.toml gikk til 1,85 forrige utgivelse; README-merket, installasjons- og feilsøkingsteksten, codemeta.json og MCP-crate-ens egen begrunnelse sa fortsatt 1,75.

  • RunOutput.__repr__ i Python-bindingen rapporterer byte, ikke «chars». Den skrev ut len() av UTF-8-strenger, som er et antall byte: 710 «chars» for en tabell på 708 tegn.

  • README dokumenterer ikke lenger --study --study-name sammen. --study-name er et flagg for ett enkelt scenario og ignoreres med --study (binæren advarer). De to kopier-og-lim-eksemplene i README.md og README.crates.md viser nå study-kommandoen alene.

  • Nettstedets evidens for klokkestabilitet oppgir begge observerte toleranser. 5071A-cesiumserien gjenskapes til ≤ 3e-5 og PHASE.DAT til ≤ 5e-5; avsnittet oppga 3e-5 for begge.

  • To filer med motorutdata spores ikke lenger. scenarios/quantum-pnt-demonstrator.study.{json,html} var stemplet av motor 0.20.0 med hvert kvalitetsmål tomt, og READMEs egen study-kommando overskrev dem, noe som gjorde treet urent og blokkerte push-gaten. *.study.json / *.study.html ignoreres nå som de fire andre motorutdataene.

  • En seed-sveip i playground feiler ikke lenger ved hver kjøring. Sveipet steppet heltallsinnstillingen seed lineært (1, 10,9, 20,8, …), og motoren, som leste den som u64, avviste hver brøkverdi. Heltallsinnstillinger sveipes nå over distinkte hele tall.

  • Hver nedlasting fra playground sier hvilken motor og hvilke inndata som laget den. Noen få typer (for eksempel realtime-frame-eop) gir ingen engine_version eller scenario_hash, så nedlastingene deres het bare kshana-csv.csv. Navnet faller nå tilbake på den innlastede motorens versjon og et FNV-1a-64-fingeravtrykk på 12 heksadesimale tegn av scenarioteksten.

Endret#

  • Den publiserte crate-en er mindre enn halvparten så stor som før, og cargo install kshana bygger bare CLI-en. Pakken pleide å inkludere artiklene, innleveringspakkene deres, artefaktene for artikkelfigurene, notatbøkene, docs/, vedlikeholdsskriptene og eksempelprogrammene. Ingen av dem kompileres av biblioteket eller CLI-en. Den inkluderte også de tre interne generatorene under src/bin/ (crossover_study, gen_validation_artifacts, validation_report), så en registerinstallasjon kompilerte og installerte fire kjørbare filer, hvorav tre bare var nyttige inne i en utsjekking. Disse trærne og de tre generatorkildene er nå utelatt. Cargo lister en pakkes binærer fra filene den inneholder, så det publiserte manifestet navngir bare kshana. I en klone finnes generatorene fortsatt automatisk, så cargo run --bin <name> og utgivelsesjobben som kjører validation_report er uendret. Målt med cargo package: 763 filer, 16,7 MiB, 6,8 MiB komprimert før; 591 filer, 10,5 MiB, 3,0 MiB komprimert etter. Verifikasjonsbygget, som bare kompilerer de pakkede filene, består. cargo install --path på den pakkede crate-en installerte én kjørbar fil, kshana.

  • Utdata en tidssynkroniseringsingeniør kan lese: ikke mer p95 0.0ns, ikke mer security 0.000 uten angrep, og stedtall som stemmer med README-filene. Dette er en visningsrevisjon. Ingen publiserte tall endres; JSON-verdiene er identiske, noe golden-hashene ovenfor beviser.

    • Enlinjessammendraget skrev ut den optiske klokkens 95-persentil (p95) for tidssynkroniseringsfeil som 0.0ns mens tabellen ved siden av viste 1.20e-4 ns. Et tidssynkroniseringstall som ikke er null, men for lite for én desimal, skrives nå ut med tre gjeldende siffer (p95 1.20e-4ns); en eksakt null skrives fortsatt ut som 0.0. HTML-rapporten (HyperText Markup Language), sammenligningstabellen for studier og playgrounds nedlastbare rapport bruker den samme regelen, så heller ikke noe tall som ikke er null skrives ut som 0.000.
    • security er en analytisk grense for spoof-detekterbarhet som bare betyr noe mot et konfigurert angrep. Typene clock, orbit, hybrid og fusion konfigurerer ingen, så sammendraget deres skriver nå ut security n/a (no attack) i stedet for et tall som 0.000 som leses som en mislykket deteksjon. Verdien blir værende i fom.security, merket applicable: false med årsaken i figure_tiers, og rapporttabellene viser «not applicable». Typen spoof skårer fortsatt deteksjon.
    • To sammendragsfestepunkter i tests/registry_golden.rs flyttet seg av akkurat disse to grunnene og ingen andre: golden_clock (kvante-p95 og begge security-verdiene) og golden_orbit (begge security-verdiene; p95-verdiene er nøyaktig null). Hashene for hele dokumentene flyttet seg ikke. De forventede sammendragene i README, de tre veiledningene og undervisningsscenarioene deres er oppdatert så de stemmer, og tests/tutorials.rs kontrollerer undervisningskopiene mot motoren.
    • Playgrounds guidede tur åpnes ikke lenger ved første innlasting. Modalen fanget de første klikkene, og spotlighten scrollet siden bort fra der besøkende landet. Den starter fra knappen «Take the 60-second tour» eller den flytende Tour-knappen.
    • Siden scroller ikke lenger sideveis på en telefon. Ved 390 px kom merkeraden og GitHub-knappen til omtrent 410 px innhold, en overflyt på 4 px; toppen passer nå fra 320 px og oppover, og tabellen over kvalitetsmål scroller inne i sin egen boks i stedet for å gjøre siden bredere.
    • Funksjonsutforskeren åpnet med sitt eget kortantall («46 funksjonskort … 17 støttet av en ekstern uavhengig referanse») ved siden av README-filer som sier 64 av 168. Den åpner nå med verifikasjonsmatrisen, lest fra den genererte web/data/verification-matrix.json (den samme matrisen som README-tallene er festet til), og navngir kortene etterpå som det sammendragslaget de er. web/counts.test.mjs, et nytt steg i arbeidsflyten for kontinuerlig integrasjon (CI), kontrollerer regnestykket og krysskontrollerer README.md og sidens beskrivelser; tests/web_validation_counts_doc_sync.rs fester koblingen fra Rust-siden.
  • Den offentlige beskrivelsen åpner nå med tidssynkronisering og holdover, det best validerte området. README-åpningen og docs/POSITIONING.md presenterer Kshana som en åpen, reproduserbar PNT-robusthetsmotor for evidens med merket proveniens: tidssynkronisering og holdover for kritisk infrastruktur først (estimatorene for Allan, modifisert Allan, tidsavvik og maksimal tidsintervallfeil og inversjonen av coast-variansen i holdover er de VALIDATED radene bak), kvante som en nøytral metode for kvante-mot-klassisk-avveining der resultatene er merket MODELLED, og lunar / cislunar og dypromsnavigasjon som vedlikeholdte funksjoner og ikke hovedbudskapet. Begge sidene sier nå hva Kshana ikke er: ikke en simulator for radiofrekvenssignaler eller en rigg med maskinvare i løkken, ikke en erstatning for MATLAB/Simulink, STK eller Orekit, og peker til den nye typen telecom-timing og docs/TELECOM-TIMING.md. Den gamle linjen «there is no good open tool» er borte: et søk som ikke finner noe, er ikke evidens for at ingenting finnes. ROADMAP.md får en udatert prioritert rekkefølge (tidssynkronisering først, kvanteavveiningen som nummer to, lunar vedlikeholdt) og dropper tre utdaterte punkter (systematikk for Coriolis og lysskift, startbetingelsene for NRHO og lunar-scenarioet, alle levert); README-linjen «Coriolis and light-shift remain roadmap» er rettet på samme måte.

  • docs/CAPABILITY.md sluttet å underkommunisere. Raden for jordfaste referansesystemer sa «none» mens matrisen graderer GCRS→ITRS som VALIDATED; den er nå «full», og raden for kjernereferansesystemer registrerer ANISE-krysskontrollen som levert. Guidet modus var oppført som veikart; playground har levert guidede glidere og en guidet tur. En gjennomgang mot src/verification.rs rettet fem rader til som var eldre enn valideringene sine: kraftmodellen Cowell og batch-/sekvensiell banebestemmelse mot Orekit 12,2, bakkestasjonspasseringer mot Orekits elevasjonsdetektor, kjernen for dilution of precision mot gnss_lib_py, og OEM-import mot den uavhengige oem-parseren; raden for verifikasjon og validering navngir nå vaktene som kontrollerer at hver siterte test finnes.

  • Ordlisten forklarer hva en resultatfil sier. docs/GLOSSARY.md får forklaringer i klart språk for utdatabegrepene (holdover, p95, integritet, sikkerhetsscoren, PDOP, sigma_y, q_wf), begrepene for telekomtidssynkronisering (tidsfeil, max|TE|, cTE, dTE, MTIE, TDEV, PRTC, ePRTC, T-BC, T-TSC, OCXO, CSAC) og de tre evidensnivåene (VALIDATED, MODELLED, PARTNER).

  • Forkortelser skrives ut ved første bruk i hvert håndskrevne offentlige dokument. README og 24 filer under docs/ hadde flere hundre forkortelser brukt før, eller uten, utvidelsen sin; hver er nå utvidet der den først forekommer i den filen. De tre genererte filene (docs/VERIFICATION-MATRIX.md, docs/MODELLED-RATIONALE.md, docs/SCENARIOS.md) er latt stå: de skrives fra src/verification.rs og api::list_scenario_kinds(), så ordlyden må endres ved kilden.

  • Linjedekning har et målt tall som er førende. docs/COVERAGE.md registrerer 95,63 % (37 697 av 39 419 linjer) fra CI-jobben coverage på b1d350d, og tests/coverage_figure_doc_sync.rs fester de fem offentlige flatene med «~96%» til det, det ene hovedtallet som ble vedlikeholdt for hånd og som allerede hadde flyttet seg én gang uten at noen la merke til det.

  • Nye doc-sync-gater for flater ingenting leste. tests/readme_code_fences_doc_sync.rs kontrollerer hver import { … } from "kshana" i en JavaScript-blokk mot WebAssembly-eksportene, og fester Rust-eksemplet i README.crates.md byte for byte til en kopi testbinæren kompilerer. tests/security_md_doc_sync.rs feiler hvis src/lib.rs mister #![forbid(unsafe_code)] eller SECURITY.md slutter å oppgi det. tests/no_overclaims.rs skanner nå også web/README.md og de tre README-filene for registrene, og hver standard på nettstedet må oppgi sin proof eksplisitt.

  • De to kontrollene av ekte maskinvareklokker kjører på en runner. realdata-clock.yml (månedlig og ved dispatch) henter seriene 5071A og PHASE.DAT og kjører begge testene med KSHANA_REQUIRE_REALDATA=1, så en manglende inndata gir feil i stedet for å hoppes over. Begge hentingsskriptene er festet til én allantools-commit og verifiserer SHA-256.

  • Python-typestubben kontrolleres mot den bygde wheelen (mypy.stubtest i bindings-jobben), og det var slik csv/write_csv ble levert uten stubb.

  • Ordlisten definerer URE, EOP, FoM, CTI og TIB, som README og registeret brukte uten forklaring.

  • Hver types publiserte feltkontrakt er nå sann, og en test holder den der. Fem av de 61 typene endret seg. Typer med et ikke-tomt required_fields går fra 21 til 22: ephemeris krever nå tle|orbit+epoch (en bar kind = "ephemeris" pleide å bestå --validate og deretter feile kjøringen), og quantum-trade legger til candidate_adev_taus+candidate_adev_values|candidate_clock_class, som kjøringen allerede krevde. En obligatorisk oppføring kan bruke | (ett av disse) og + (alle disse sammen); --validate forstår begge. lunar-joint-od-clock, pvt og earth-gnss-lunar publiserer 9 ekte valgfrie felt de hadde utelatt. docs/SCENARIOS.md sier nå at kind er obligatorisk for hver type unntatt clock. tests/required_fields_are_true.rs kontrollerer hver type mot det medfølgende scenarioet: å fjerne en hvilken som helst obligatorisk oppføring må få kjøringen til å feile, og et dokument som bare har de obligatoriske feltene, må kunne kjøres.

  • Notatene for JetBrains Marketplace er gatet. scripts/check-version-sync.sh feiler nå med mindre den nyeste oppføringen <change-notes> i plugin.xml navngir versjonen som leveres; sju publiserte versjoner hadde servert notatene for 0.22.0 uendret.

  • Dekningstallet i den tekniske rapporten er det målte. paper/kshana-technical-report.md sa «near 97 %»; den sier nå nær 96 % (95,63 % målt, docs/COVERAGE.md) og er den sjette flaten dekningstesten fester.

  • Motorklienten utenfor hovedtråden er testet (web/engine.test.mjs, i CI): tillatelsesliste for dispatch, avbrytelse og ny oppstart, de tre reserverutene i hovedtråden og krasjgjenoppretting, mot en falsk worker.

  • Ingenting publiseres før den merkede commit-en har bestått testene sine, og en utgivelse er ikke ferdig før hvert register serverer den. Rekkefølgen er nå tag, verifiser, publiser, paritet, nettsted, i én kjøring av release.yml (docs/RELEASING.md).

    • Publisering venter på dommen. publish.yml, mcp-publish.yml og jetbrains-plugin.yml starter ikke lenger på tag-pushen; release.yml kaller dem fra jobber som har needs: verify. Før løp de i kappløp med den: på v0.27.2 hadde crates.io, npm og Python Package Index (PyPI) alle publisert innen 4,5 minutter etter taggen, og verify kom tilbake 84 minutter etter den; på v0.27.0 publiserte npm og PyPI mens crates.io-jobben feilet. Et manuelt nytt forsøk på en tag holdes tilbake av det nye scripts/check-release-verdict.sh, som krever en grønn verify for akkurat den commit-en fra Actions-grensesnittet og feiler lukket på alt annet.
    • Alt bygges før noe lastes opp, og crates.io, hvis pakkesteg var det som feilet midt i en utgivelse, publiserer først.
    • En manglende registertoken får jobben til å feile i stedet for å hoppe over opplastingen og rapportere suksess.
    • En paritetskontroll etter publisering. scripts/check_channel_parity.py poller crates.io (kshana og kshana-mcp), npm, PyPI (kildedistribusjonen og alle seks plattformwheels) og ghcr.io til hver serverer versjonen, ellers feiler kjøringen; docs.rs og Model Context Protocol-registeret (MCP) rapporteres, men kreves ikke. Kjørt mot tidligere utgivelser finner den at 0.22.0 mangler fra npm og PyPI, 0.23.0 fra PyPI og 0.27.0 fra crates.io.
    • Ferdigbygde kommandolinjebinærer for macOS (Apple silicon og Intel) og Windows x86-64, navngitt etter mål (kshana-aarch64-apple-darwin og så videre), ved siden av Linux-binæren kshana, hvis navn er uendret. En SHA256SUMS-fil dekker hver ressurs, og verify-release kontrollerer den og kjører macOS- og Windows-binærene på sine egne systemer.
    • kshana.dev viser en utgivelse, ikke main. Den pleide å deployes på nytt ved hver push til main mens sidene navngav den siste utgivelsen. pages.yml bygger nå bare en utgivelsestag: utgivelsen starter den når hver kanal serverer versjonen, og en manuell dispatch deployer den nyeste utgivelsen (eller en navngitt) på nytt.
    • Én kilde til wheels. Den håndkopierte matrisen med seks mål i publish.yml er borte; den kaller wheels.yml, så auditwheel-tag-gaten og kontrollen av byte-reproduserbarhet graderer nå de wheelene PyPI mottar, og en feil i en av dem stopper utgivelsen.
    • Festede byggeverktøy. Hver arbeidsflyt ber om Rust 1.93.0 (msrv-jobben om sin egen versjon); publish.yml og pages.yml hadde bedt om @stable, og loggen for v0.27.2 viser at rustup installerte 1.98.1 og deretter kompilerte med 1.93.0 bare fordi rust-toolchain.toml har forrang. wasm-pack er festet til 0.13.1 (versjonen som bygde v0.27.2, og som det ufestede installasjonsskriptet valgte) med en sjekksumkontroll, og mcp-publisher til 1.8.1 med sin publiserte SHA-256. scripts/check-toolchain.sh feiler nå hvis en arbeidsflyt ber om en annen kompilator eller piper et nedlastet skript inn i et skall. Ingen verifikasjonsjobb, golden-festing eller lokalt gate-skript er fjernet eller løsnet.

Sikkerhet#

  • Hver tredjeparts GitHub Action er festet med commit-SHA, 93 referanser i 15 arbeidsflyter, 92 av dem nye, med taggen beholdt som en etterfølgende kommentar slik at Dependabot kan oppdatere. Unntaket er dtolnay/rust-toolchain, hvis tag er verktøykjedevelgeren.

  • Basislagene i MCP-serverens image er festet med multi-arch-digest, og Dependabot overvåker nå Dockerfile-en til mcp/kshana-mcp, så OS-lagene fortsatt mottar sikkerhetsoppdateringer, gjennom en gjennomgått PR.

  • Kontrollen av tag mot manifest kjører i de to publiseringsarbeidsflytene som leverer tagens versjon. mcp-publish.yml (ghcr-image, MCP-register) og jetbrains-plugin.yml (Marketplace) løper i kappløp med publish.yml i stedet for å vente på den, så en feilkuttet tag ble bare gatet i en søsterarbeidsflyt. Begge kjører nå scripts/check-version-sync.sh før bygging.

  • Fire advisories Dependabot reiste dagen varslene ble slått på, er rettet. MCP-serveren går fra rmcp 1,7 til 2,2: tre advisories mot rmcp < 2,1 (en lekkasje i Streamable-HTTP-sesjonstabellen, manglende validering av OAuth protected-resource, egendefinerte headere som følger en kryssopprinnelse-omdirigering), ingen av dem nåbare her siden serveren bare snakker stdio, men en publisert crate bør ikke feste en sårbar SDK. Makroene i rmcp 2 trenger Rust 1,88, så bare kshana-mcp erklærer nå rust-version = "1.88"; biblioteket kshana blir på 1,85. Den ene API-endringen (Content → ContentBlock) er gjennomført, og rundturstestene består. SonarQube-skanneaksjonen går fra v5 til v6, som retter en advisory om argumentinjeksjon (≥ 4,0, < 6,0).

0.27.2 - 2026-09-22#

Lagt til#

  • Hvert Rust-element en rad i verifikasjonsmatrisen siterer, blir nå slått opp mot crate-en. Den eksisterende vakten kontrollerte siteringene som har form som filstier; 63 av de 164 radene som ikke er partner, navngir i stedet evidensen sin som et element i crate-en: navsignal::code_tests, integrity::tpl_scalar::tests, api::tests::tracking_loop_kind_round_trips_through_the_dispatch, og et token uten suffikset .rs var usynlig for en stiskanner. Disse radene kunne ha navngitt en omdøpt modul, en tømt testmodul eller en funksjon som aldri fantes, og hver gate ville ha holdt seg grønn.

    tests/verification_rows_name_a_test_that_exists.rs løser alle 339 slike siteringer gjennom modultreet, krever at hver rad som ikke er partner navngir minst én test som faktisk har #[test], og krever at partnerrader ikke navngir noen. Fire mutasjoner ble brukt til å gradere den: å omdøpe en sitert modul, å peke en rads eneste testsitering på en funksjon som ikke er en test, å omdøpe den ekte mod tests og å fjerne attributtene #[test] fra den; hver blir rød på påstanden som eier den.

    Én rad var allerede feil: Alternative / complementary PNT siterte tests/*, en glob, som ikke er en sitering. Den navngir nå tests/alternative_complementary_pnt_reference.rs og de tre testmodulene i crate-en bak den.

  • De publiserte figurene kontrolleres på nytt mot motoren ved hvert bygg (tests/published_figures_still_reproduce.rs). De tre demodiagrammene i README er motorens egne chart.svg-utdata, og ingenting kjørte scenarioet på nytt; artikkelens to krysningsstudier ble generert én gang og committet; og README oppgir fire kvalitetsmål i prosa ved siden av scenario-fom.png. Alle tre er nå festet til levende motorutdata.

    Avstemmingen ga det nyttige resultatet: demodiagrammene var tegnet med motor 0.22.0 og artikkelens krysnings-JSON med 0.20.0, og med 0.27.1 er hver plottede verdi i alle fem artefaktene identisk; de tre diagram-SVG-ene skiller seg fra en ny kjøring med nøyaktig to tegn hver, versjonsstempelet i bunnteksten. Diagrammene er rendret på nytt slik at bunnteksten stemmer. Artikkelens JSON er bevisst latt stå stemplet 0.20.0: den er opptegnelsen over kjøringen hvis figur en publisert artikkel bygger inn, og å stemple den på nytt ville hevde en proveniens PDF-en ikke har. Vakten påstår i stedet den sterkere egenskapen, at dagens motor fortsatt gjengir hver publiserte verdi.

Rettet#

  • SonarCloud-analyser ble registrert som VERSION=not provided, så perioden for ny kode i previous_version gikk aldri fremover: den var fortsatt forankret ved analysen 2026-07-02, gradererte åttito dagers arbeid som ett enkelt delta og målte 7877 «nye» duplikatlinjer mot en terskel på 3 %. Skanningen sender nå crate-versjonen. Den underliggende dupliseringen er reell og skjules ikke av dette: den er konsentrert i de deklarative FieldUnit-registrene som gjentas på tvers av ensemble, hybrid, fusion, inertial og report, og i verifikasjonstabellen med 168 rader, og den er navngitt her som arbeid og ikke utelatt fra målingen.

  • scripts/gate.sh hadde ingen lås for én enkelt skriver, og hver kjøring skrev den samme loggen. Det handler ikke om ryddighet: kvitteringens integration_binaries, tests_passed og tests_ignored leses tilbake FRA den loggen, og pre-push-kroken stoler på kvitteringen. En gate som var drept, men hvis testbinær fortsatt var i live, fortsatte å skrive inn i filen den neste kjøringen nettopp hadde avkortet, så én kjørings tall kunne ha blitt bekreftet som en annen kjørings og gitt tillatelse til en push på grunnlag av en suite som aldri kjørte på treet som ble pushet. Det er nå én gate per utsjekking (den avviser med exit 75 ved siden av en levende, og rydder bort en foreldet lås hvis pid er borte) og én logg per kjøring, med target/gate-run.log oppdatert fra den ferdige kjøringen på vei ut. Begge retninger er testet: en levende pid avvises, en død ryddes bort.

  • src/verification.rs hevdet at testene sine «do not prove the named test/oracle strings resolve to live code». To vakter gjør nå akkurat det, så moduldokumentasjonen sa det motsatte av sannheten; den oppgir nå hva som kontrolleres maskinelt og hva som overlates til menneskelig skjønn. En utdatert referanse til verification::gen, der modulen er artifacts, er rettet i søstervaktens egen dokumentasjon.

Endret#

  • main ble skrevet om 2026-09-22 og force-pushet. Ti commits ble til fire. Omskrivingen slo hver commit som lot en gate være rød sammen med commit-en som ryddet den, så hver commit på main har nå et tre som består, og fjernet de avbrutte kjøringene som en samtidighetsgruppe for hele grenen hadde latt ligge igjen på hver erstattet commit.

    Ingenting ble forkastet. Commit-ene fra før omskrivingen er fortsatt tilgjengelige gjennom taggene som peker på dem, og det endelige treet er byte-identisk med treet omskrivingen startet fra: git diff mellom den gamle spissen og den nye er tom bortsett fra de tre arbeidsflytfilene denne utgivelsen endrer.

    De erstattede SHA-ene, for alle som holder en referanse til en av dem:

    gammel emne
    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

    Taggene v0.27.0 og v0.27.1 ble bevisst IKKE flyttet. De peker fortsatt på 7bba514 og 7864142, de nøyaktige commit-ene hvis trær ga artefaktene som nå ligger på crates.io, npm, PyPI, ghcr.io og MCP-registeret. En crates .cargo_vcs_info.json registrerer sha1-en den ble pakket fra, registre er uforanderlige, og SLSA-attestasjonen av build-proveniens på ressursene i utgivelsen v0.27.1 er bundet til den commit-en. Å flytte taggene ville ha latt hvert av de publiserte artefaktene peke på en commit som ikke lenger finnes. Å la dem stå holder de gamle commit-ene tilgjengelige og hver publisert provenienskjede oppløsbar, til prisen av to tagger som ikke lenger er forfedre til main, og det er derfor denne utgivelsen finnes: v0.27.2 gir main en egen tag, pakket fra en commit som ligger på den.

    Dette er den andre opplyste omskrivingen av denne historikken; den første, 2026-09-21, kanoniserte forfatterskap og er registrert i notatene for 0.27.0 med sine egne to hengende crate-sha1-er. En omskriving opplyses her hver gang, fordi et repository som selger verifiserbar proveniens ikke i det stille kan flytte grunnen under et publisert artefakt.

0.27.1 - 2026-09-22#

Rettet#

  • Den publiserte crate-en kompilerte ikke. src/lunar_orientation.rs har en include_str! på toppnivå av tests/fixtures/llr_geometry/de440_moon_pa.csv, og manifestet utelater /tests/fixtures fra pakken, så tarballen crates.io mottar manglet en fil biblioteket selv bygger inn. Publiseringen av v0.27.0 feilet i verifikasjonsbygget av den grunnen, og ingen 0.27.0 nådde crates.io; npm og PyPI, hvis jobber ikke avhenger av den, publiserte normalt. Utelatelsen har nå et unntak for akkurat den katalogen.

    Hver annen include_str! av en fixture i src/ ligger inne i en #[cfg(test)]-modul og når derfor aldri det pakkede biblioteket. Bare en på toppnivå gjør det.

  • Ingenting i CI kjørte cargo package, og derfor ble en tarball som ikke kan kompileres, først oppdaget av publiseringsjobben, etter at to andre registre allerede hadde levert. En package-jobb bygger og kompilerer nå akkurat den tarballen ved hver push.

Endret#

  • Emisjonsfestene for lunar-frame-realisation flytter seg ikke lenger ved en versjonsøkning. SVG-bunnteksten inneholder motorversjonen, så hver utgivelse satte tre hasher på nytt som grunnlinje, to ganger på én dag, og et feste som tas på nytt av rutine, slutter å bli lest. Versjonsstrengen normaliseres til en plassholder før hashing, og emisjonen påstås separat å oppgi den kjørende versjonen, så det faktumet kontrolleres mer presist enn hashen noen gang kontrollerte det.

0.27.0 - 2026-09-22#

Lagt til#

  • lunar-llr-datum, lunar-referansedatumet fra en ekte observasjonskampanje. lunar-frame-campaign erstattet en injisert Helmert-transformasjon med en simulert kampanje og sa det: stasjonsnettverket, planen og sigmaet per observasjon er illustrative inndata. Dette scenarioet fjerner simuleringen fra de to stedene der en plan og en feilmodell går inn i svaret. Epokene er sendetidspunktene til 337 arkiverte ILRS normalpunkter for lunar laseravstandsmåling (2015-04-08 .. 2015-06-27, Grasse MeO 7845 og Matera MLRO 7941, alle fem retroreflektorarrayene), og hver observasjonsvekt er det normalpunktets egen arkiverte presisjon, bin_rms / sqrt(n_raw), en median på 5,13 mm ettveis avstand, hentet ut av filen og ikke valgt her. Stasjonskoordinatene kommer fra IERS ITRF2020 og reflektorkoordinatene fra JPL DE430 tabell 7; hver fixture registrerer en URL, en hentedato og en SHA-256 og regenereres fra kilden sin av en innsjekket generator som verifiserer kilden og avbryter i stedet for å skrive ut et tall. Rapporten navngir hvilke forbindelser som er målt og hvilke som fortsatt er modellert, og de modellerte er målt: forskjellen mellom observert og beregnet ettveis avstand over de ekte dataene er 156 494 m RMS, noe det samme testsettet bekrefter mot JPL Horizons over det samme tidsrommet (195 655 m RMS-vektor, verste epoke 0,054°, innenfor de ~0,3° den innebygde analytiske lunarserien hevder for seg selv). Additivt: en ny type, en ny leser (realdata::llr_crd) og en ny modul (lunar_llr); de eksisterende lunar-frame-pakkene er festet bit for bit.

  • sigma_ure_m som scenarioparameter på lunar-integrity og moonlight-service-volume. Nøyaktigheten for signal-i-rommet-avstandsmåling var en konstant ved kompileringstid (LUNAR_SIGMA_URE_M), så et sveip over tjenestevolumet kunne bare svare bestått/ikke bestått ved én fast verdi. Beskyttelsesnivåene er nøyaktig lineære i den, så å eksponere den gjør sveipet til et krav til avstandsmålingsnøyaktighet over hele volumet. Standardverdien gjengir tidligere oppførsel bit for bit.

  • Eksport av geometri per satellitt på moonlight-service-volume: export_site_lat_deg + export_site_lon_deg legger til en per_sat_geometry-tabell som gir azimut, elevasjon og skrå avstand til hver satellitt ved hver epoke for ett navngitt selenografisk sted, pluss synlighetsflagget. Det aggregerte dekningssammendraget slår bevisst sammen geometrien per satellitt, men skrå avstand er akkurat det et linkbudsjett bruker, så en felles analyse av kommunikasjon og navigasjon kunne ikke gjøres fra sammendraget alene. Av med mindre begge koordinatene er oppgitt; rent additivt.

  • lunar_service::topocentric, den offentlige hjelperen for siktevinkler bak eksporten.

  • En rad i verifikasjonsmatrisen for den nye geometrifunksjonen.

  • Det ekte antennemønsteret i geometrieksporten. Motoren har hatt et mønster for en sirkulær apertur med jevn belysning siden P1 (antenna::pattern_gain_dbi, Airy-formen [2·J₁(x)/x]²), og ingenting utenfor antenna.rs brukte det; en boresight-forsterkning sammen med en tommelfingerregel fra forsterkning til stråleåpning gjorde jobben i stedet. En valgfri export_antenna-tabell på moonlight-service-volume (leses bare når eksportstedet er satt) gir nå hver eksporterte rad vinkelen utenfor boresight ved satellitten og sendeforsterkningen mot stedet fra det mønsteret, og legger til en antenna_pattern-blokk som rapporterer antallet i strålen under det ekte mønsteret ved siden av antallet i strålen under den symmetriske tilnærmingen (θ₃dB[deg] = √(31000/G_lin)) med forskjellen som en navngitt korreksjon. Begge tallene skrives ut; ingen av dem erstatter den andre. Målt ved motorens egen representative lunar apertur (1 m parabol, 2,4 GHz, η = 0,60) over et sted ved sørpolen og det illustrative skallet i LCNS-klassen er de to uenige med mer enn én satellitt: det ekte mønsteret setter 0 av 76 synlige forbindelser innenfor halveffektstrålen, tilnærmingen påstår 28, en korreksjon på −2,33 satellitter per epoke, verste enkeltepoke 3. Tilnærmingen har sin egen aperturvirkningsgrad (0,641 mot gradregelen 70·λ/D den vanligvis oppgis med, 0,920 mot en uniform sirkulær apertur), så på en parabol med η = 0,60 gir den en stråle som er 1,238× for bred; blokken skriver ut begge de underforståtte virkningsgradene i stedet for å la dem utledes. Rent additivt: målt over det dokumenterte arbeidspunktet, 597 eksisterende blader, 0 endret, 0 fjernet, 494 lagt til.

  • 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 og lunar_service::nadir_off_boresight_rad, de offentlige delene bak den. Mønsteret er også nå forankret mot de publiserte Airy-konstantene og ikke bare mot seg selv: halveffektkrysningen lokaliseres ved bisection og sammenlignes med x = 1.61634, som gjør den eksakte halveffektbredden 1.02899·λ/D og registrerer ærlig at den konvensjonelle koeffisienten 1.02 setter pattern_gain_dbi til −2,955 dB, ikke −3,010 dB.

  • En reproduserbarhetstabell i langt format for lunar-time-budget. Scenarioets tabellverdiutdata, gridet av midlingstider, de sju kurvene x(τ) per ledd og deres kvadratroten-av-kvadratsummen-total, nådde brukerne bare som JSON-tabeller. Én utgitt tabell var avkortet ved 400 tegn og publiserte 23 av sine 57 midlingstider under en kolonne som påstod å inneholde alle, og manuskriptet gjenoppbygde kurvene per ledd fra lukkede former fordi motoren aldri skrev dem ut. En vanlig kjøring skriver nå også <scenario>.table.csv med én rad per (gridindeks, midlingstid, ledd), som ikke kan avkortes til noe som fortsatt ser helt ut. Gridindeksen er en eksakt join-nøkkel; τ skrives med 13 gjeldende siffer og hver x med 7, så byte-ene ikke forgrener seg mellom bygg av samme kilde. Rent additivt: rapport-JSON-en er byte-identisk.

  • Rapporten for hybrid-optical-rf beskriver nå seg selv. En link_configuration-blokk gjentar de oppløste linkinndataene (bærebølgelengde, sende- og mottaksapertur, avstand, pulsbredde, integrasjonstid, virkningsgrader og tap) med standardverdiene anvendt, så en artikkel oppgir konfigurasjonen den kjørte med i stedet for å sitere en standardverdi lest ut av kilden. En units-blokk gir enheten og proveniensklassen for hver størrelse en artikkel sannsynligvis siterer. Sporene til overleveringskovariansen er grunnen til at den finnes: de ble skrevet ut som en bar variance, og et manuskript utledet kvadratmeter fra en intern konsistenskontroll. Utledningen var riktig, og akkurat derfor var det en defekt: ingenting ville ha fanget det hvis den hadde vært feil. Rent additivt: målt over fire konfigurasjoner, 456 eksisterende felt, 0 endret, 0 fjernet, 196 lagt til.

  • En rad i verifikasjonsmatrisen for reproduserbarhetstabellen til tidsbudsjettet, ærlig InternalConsistency / MODELLED: totalen kontrolleres mot kvadratroten av kvadratsummen av leddene i den samme filen, som deler motorens egne leddefinisjoner og derfor ikke er en uavhengig referanse. Til sammen legger disse til tre rader. Den løpende totalen for denne uutgitte delen er 168 rader: 64 VALIDATED, 100 MODELLED, 4 PARTNER.

Endret#

  • Commit-forfatterskap i hele historikken er nå én enkelt identitet, og to publiserte crates peker på en commit som ikke lenger finnes. 2026-09-21 ble git-historikken skrevet om slik at hver menneskelig commit er skrevet og committet av ashfordeOU <236818772+ashfordeOU@users.noreply.github.com>. Den hadde tidligere tre skrivemåter av én person: 688 commits som ashfordeOU <contact@ashforde.org>, 34 som Chakshu Baweja <contact@ashforde.org> og 94 som allerede var kanoniske. Den ene dependabot[bot]-commit-en ble bevisst latt stå som sin egen forfatter: å merke en bots avhengighetsoppdatering om ville hevde forfatterskap til arbeid ingen her gjorde.

    Ingen innhold endret seg. Omskrivingen rørte bare forfatter- og committer-headere, og det kan kontrolleres i stedet for å påstås: treet til hver tag og hver gren er bit-identisk med det det var før. v0.26.0 løses fortsatt til treet 92284e9420605568f1bfabb78cd95d383b40f3e2, akkurat som før.

    Hva det kostet. En commits navn er en hash over treet, foreldrene og forfatterheaderne, så å endre en forfader gir nytt navn til hver etterkommer. Utgivelses-commit-en for v0.26.0 var dce2dbf7700788cf6de46260c14673c0e5347360 og er nå d4921f3025569e00e425e1747d0acfc261e96e18. To artefakter registrerte det gamle navnet ved publisering og kan ikke rettes, fordi en publisert registerversjon er uforanderlig av design:

    • kshana 0.26.0 på crates.io: .cargo_vcs_info.json registrerer dce2dbf…
    • kshana-mcp 0.26.0 på crates.io: den samme sha1-en, path_in_vcs: mcp/kshana-mcp

    Ingenting annet er berørt. npm-pakken registrerer ingen gitHead, og PyPI-distribusjonen registrerer ingen commit i det hele tatt; begge ble kontrollert i stedet for antatt.

    Det finnes ingen reparasjon som får dce2dbf… til å navngi den omskrevne commit-en: den strengen er den gamle aner-historikken, og den eneste måten den kan løses på er å holde historikken fra før omskrivingen publisert, noe som ville gjenopprettet forfatterskapet omskrivingen fjernet. Proveniensen for 0.26.0 går derfor gjennom taggen og ikke gjennom den registrerte sha1-en, og taggen leverer de identiske byte-ene crate-en ble bygd fra. Den neste utgivelsen registrerer en gyldig commit uten at det kreves noen handling.

Rettet#

  • realtime-frame-eop brukte som standard en EOP-fil uten prediksjonsrader (G12). Scenarioet bygde inn et utdrag av finals2000A med fem rader og bare endelige verdier som frakoblet standard, så en bar kjøring rapporterte predicted_rows.n = 0 og tabellen per horisont hvilte på 5, 4, 3 og 2 par. Motoren kunne alltid lese en prediksjonsrad; inndataene hadde bare ingen. Standarden er nå det ordrette IERS-utdraget fra 2026 (tools/finals2000A_2026.txt, MJD 61173–61204): 20 endelige verdier fra Bulletin B og 12 rader fra Bulletin A med bare prediksjon, så en bar kjøring uten filargument og uten nettverk rapporterer predicted_rows.n = 12 og en tabell per horisont ved n = 20 / 31 / 30 / 29, og sammenligningen med den operative prediktoren og samsvaret mot produktets egne publiserte prediksjoner fylles også ut. Det langvarige utdraget med 45 rader ble målt som alternativ og avvist: det har også bare endelige verdier, så det ville ha latt predicted_rows.n stå på 0. Dette flytter publiserte tall, etter regel R4 og med grunnleggerens tillatelse: ti av de 22 cellene i den utgitte p4_frame_eop.csv og 24 av de 42 utfylte cellene i tests/golden/realtime-frame-eop.csv. Det målte gulvet for pol, rask minus endelig, blir 0,0678 mas (fra 0,0769 mas), som er verdien artikkel P4s egen polbevegelsestabell allerede publiserer ved n = 20; de to stemmer nå overens i stedet for å avvike med 13,5 %. Hvert annet tall P4 skriver ut fra denne tabellen er uendret ved presisjonen som skrives ut. Hele oppstillingen gammel → ny, inkludert feltene som ikke flyttet seg, står i docs/revisions/G12-default-eop-cell-changes.md. Utdraget med bare endelige verdier leveres fortsatt, er festet byte for byte og blir kjørt: et prediksjonsradantall på null for det er filens egenskap, og en test beviser det fortsatt.

  • En utdatert begrensning av antall satellitter i moonlight-service-volume. Scenarioet begrenset n_sats til 12 selv om konstellasjonsbyggeren støtter 24 og en test påstår 24, så hvert forespurt antall over 12 ble stille redusert, og et sveip over satellittantall ga identiske verdier over 12, umulig å skille fra ekte geometrisk metning. Nå begrenset ved byggerens grense. Dette er en oppførselsendring bare for n_sats > 12.

  • Den samme utdaterte begrensningen i lunar-differential-pnt. lunar_dpnt begrenset n_sats til 12 med den samme konsekvensen, og denne nådde en publisert tabell: dpnt_nsats_sweep.csv har en rad n = 16 som er byte-identisk med raden n = 12, fordi motoren returnerte et svar for tolv satellitter under en merkelapp for seksten satellitter. Nå begrenset ved byggergrensen på 24, og en ny test fester det: hver større konstellasjon må både rapportere sitt eget antall og strengt forbedre beskyttelsesnivået, så begrensningen ikke kan komme tilbake ubemerket. Dette flytter publiserte tall: beskyttelsesnivået for n = 16 blir 16,92 m → 14,57 m. Sveipet til 24 er kurven strengt monoton (11,94 m ved 24 satellitter, 29,5 % bedre enn ved 12), så det er ingen metning ved 12; det tilsynelatende platået var begrensningen. Oppførselsendring bare for n_sats > 12.

0.26.0 - 2026-09-18#

En utgivelse om dokumentasjon, åpenhet og playground. Ingen endringer i motoroppførsel: verifikasjonsmatrisen står på 102 rader: 56 VALIDATED, 42 MODELLED, 4 PARTNER, uendret fra 0.25.0.

Lagt til#

  • Rustdoc på crate-nivå (//! i lib.rs) som dekker inngangspunkter, modellen for ærlighet og evidensnivåer og reproduserbarhet, så docs.rs åpner på en ekte landingsside i stedet for en bar modulvegg.
  • docs/SCENARIOS.md, en referanse per type for alle 50 scenariotyper, generert fra api::list_scenario_kinds() (den eneste sannhetskilden) av gen_validation_artifacts og vokttet av tests/scenarios_reference_doc_sync.rs, så den ikke kan drive bort fra dispatcheren.
  • Moduldokumentasjon for de 11 tidligere udokumenterte offentlige modulene (allan, estimator, fom, hybrid, inertial, models, report, run, scenario, timetransfer, types).
  • Litteraturkilder for fem formelmoduler som oppga en ligning, men ikke navnga noen referanse: batch_ls (Tapley/Schutz/Born; Bjorck), cr3bp (Szebehely; Koon et al.), detection (Kay), attitude_budget (Wertz; Sidi), reentry (Allen-Eggers, NACA TR-1381).
  • En publisert security.txt på kshana.dev for koordinert avsløring.
  • Valideringsnivå per kjøring i playground. Tabellen over kvalitetsmål for én enkelt kjøring har nå et merke per tall, VALIDATED/MODELLED, lest fra det samme oppslaget fomTier() som den nedlastbare rapporten bruker (speiler src/fom_label.rs, selv utledet fra verifikasjonsmatrisen), så nivået som vises ved siden av et levende tall aldri kan være uenig med registeret.
  • lunar-attack-surface i playground-menyen: alle 50 typer som kan dispatches, er nå ett klikk unna (var 49/50).
  • Fem kjørbare funksjonskort til (romvær, evaluering av RF-forstyrrelser, robusthet, CCSDS OEM-interoperabilitet, KIF), som løfter antallet kjørbare kort fra 11 til 16. Kort som bare gjelder API og bibliotek beholder en ærlig dokumentasjonslenke i stedet for en falsk kjør-knapp.

Endret#

  • Dokumentasjonsdekning er nå en skralle i CI. check-doc-coverage.sh kompilerer biblioteket med missing_docs, teller advarslene og feiler bare hvis antallet stiger over et festet tak (986). En hard #![warn(missing_docs)] under -D warnings ville ha gjort ~1000 offentlige elementer som nå er udokumenterte, til et byggebrudd over natten; på denne måten feiler nye udokumenterte offentlige elementer bygget mens den eksisterende etterslepet nedbetales bevisst.

Rettet#

  • MCP-verktøyraden list_scenario_kinds annonserte «~17 built-in scenario kinds» mens api::list_scenario_kinds() en stund hadde eksponert 50; en agentrettet dokumentasjon som underkommuniserer reell funksjonalitet med en faktor tre. Festet til det sanne antallet.
  • Regenererte den uavhengige referansen for overensstemmelse for CycloneDX SBOM for den oppdaterte avhengighetsgrafen (60 komponenter). Vurderingen av overensstemmelse er uendret: null normaliserte skjemafeil og hver atomære lisens-id er fortsatt i den offisielle SPDX-opptellingen.

0.25.0 - 2026-07-15#

Lagt til#

  • Fem funksjoner er hevet til eksternt VALIDATED, hver nå krysskontrollert mot en uavhengig tredjepartsimplementasjon av den samme entydig definerte størrelsen (ikke-sirkulært, med fixtures som kan regenereres offline):
    • IEEE-1139-konvertering fra potenslov til Allan-deviasjon mot lukkede former fra allantools for alle fem støytyper (tests/powerlaw_oadev_reference.rs);
    • CRPA MVDR / minimumsnorm-vekter for nullstyrende stråleformer mot numpy/scipy LAPACK (tests/crpa_reference.rs);
    • Wahba / TRIAD / QUEST holdningsbestemmelse mot SciPys SVD Rotation.align_vectors på støyfrie observasjoner (tests/wahba_reference.rs);
    • CCSDS 502,0 OEM-utveksling av kovariansblokk rundturstestet gjennom parseren i det uavhengige biblioteket oem (tests/ccsds_oem_covariance_reference.rs);
    • deteksjonsstatistikkjernen for kvadratlov-akkvisisjon (generalisert Marcum-Q / P_d / P_fa / terskel) mot SciPy ncx2/chi2 (tests/acquisition_reference.rs). Den maskinkontrollerte valideringsmatrisen går til 56 VALIDATED · 42 MODELLED · 4 PARTNER over 102 rader (var 51 · 47 · 4). Ærlige forbehold om omfang er bevart: for eksempel dekker hevingen av akkvisisjon bare deteksjonsstatistikkjernen; CFAR/straddling-tap forblir MODELLED.
  • Kvalitetsmål i posisjonsdomenet (fom::positioning_performance): eksakt CEP, SEP og 2DRMS fra den 3-D ENU-posisjonskovariansen til en navigasjonsløsning pluss et horisontalt beskyttelsesnivå. CEP/SEP er de eksakte medianene for radiell feil (ikke den lineære regelen 0.589·(σ₁+σ₂)), krysskontrollert mot rayleigh/maxwell-kvantiler fra scipy.stats og en uavhengig Monte Carlo-median i NumPy (tests/positioning_fom_reference.rs). Erstatter den forrige ærlige stubben som ikke var implementert; funksjonssignaturen endret seg fra () som returnerte en feil til (cov_enu, hpl_m) som returnerer en PositioningFom.
  • Ekvivalente frihetsgrader (EDF) for konfidensintervall er fullført for alle estimatorer i Allan-familien (assurance::uncertainty::edf): EDF for modifisert Allan, Hadamard og total varians bruker nå den kombinerte EDF-algoritmen til Greenhall & Riley og TOTVAR-formen i NIST SP 1065 tabell 7 (tidligere var bare EDF for overlappende Allan implementert; de andre gjenbrukte den stille), krysskontrollert mot allantools edf_greenhall/edf_totdev (tests/uncertainty_edf_reference.rs).
  • Uavhengige eksterne krysskontroller for lunar-PNT-geometri, DOP, EOP, DRO og RF-avstandsmålingsfunksjoner (tests/validate_p*.rs, med fixtures og generatorer for den uavhengige referansen under tests/fixtures/{p1_footprint,lunar_service,eop_prediction,rf_ranging_precision,dro_family_jpl,p2_independent_dop}/). Hver kontroll driver en allerede levert modellert funksjon mot en referanse produsert av en annen implementasjon, så samsvaret er ikke-sirkulært: orbitalt sende-/fangstfotavtrykk mot scipy.special.j1 (Cephes, en genuint annen Bessel J1); DOP for overflatebeaconer mot en uavhengig NumPy-løsning av (HᵀH)⁻¹; veksten i prediksjonsfeil for UT1/EOP-persistens mot en separat NumPy-parsing på nytt av de samme ordrette IERS-radene i finals2000A; den plane familien av distant-retrograde-baner mot NASA/JPL Three-Body Periodic Orbit Database; og budsjettet for RF-avstandsmålingspresisjon mot en referanse fra første prinsipper. Dette er ekstra regresjonsevidens for eksisterende moduler; å legge til disse krysskontrolltestene omklassifiserer ikke i seg selv noen funksjon (de fem hevingene ovenfor er separate statusendringer støttet av uavhengig referanse i src/verification.rs).
  • Scenarioet lunar-attack-surface (src/attack_surface.rs, kind = "lunar-attack-surface"): en sammensatt P1-kjøring for lunar signalsikkerhet som kan nås fra binæren (CLI / Python / MCP / wasm via run_toml), og som setter sammen effektunderskuddet i linkbudsjettet og dets følsomhetsbånd på 12–18 dB, den nødvendige sendeeffekten for jamming/spoofing mot avstand, det orbitale fangstfotavtrykket under et ekte antennemønster, utfallet av pull-in for spoof-fangst i sporingsløkken, horisontrekkevidden for et legeme uten atmosfære og budsjettet for OSNMA/TESLA-autentisering. En tom body gjengir P1-grunnlinjen.
  • Følsomhetsbånd for effektunderskudd (linkbudget::deficit_sensitivity_band, deficit_power_factor): et genuint sveip over flere akser (referanse × EIRP × skrå avstand) bygget på sweep::SweepAxis og evaluert gjennom received_signal_power_dbw, som gjengir P1-båndet på 12–18 dB og forener de lineære faktorene 32× (avrundet) / 36× (uavrundet).
  • Tredimensjonal kube for spoof-fangst (spoof_capture::capture_cube): legger bærebølge-/Doppler-forskyvningsaksen til fangstkartet (J/S × kodeforskyvning × bærebølgeforskyvning, låsetid per celle); skiven med null bærebølge reduseres nøyaktig til den 2-D capture_map.

Endret#

  • Deteksjon i et spredt overvåkingsnettverk (monitor_network) setter nå sammen den fysiske AGC-statistikken spoof_monitors og det selenografiske synlighetsrutenettet lunar_service for å utlede hver stasjons deteksjonsstatistikk og geometri, i stedet for frie parametere og en ad hoc-overlapp langs storsirkel; deteksjonssannsynlighetene per monitor og for nettverket er fortsatt de lukkede formene for kjikvadrat/Marcum-Q i detection. Feltene SurfaceMonitor / SpoofEvent endret seg til fysiske størrelser (bredde/lengde/høyde/effekt).

Rettet#

  • Dimensjonering av OSNMA/TESLA-autentiseringsoverhead (nma_budget): feltandelene per side for OSNMA (8-bit HKROOT + 32-bit MACK per side på 2 s) var feilmerket som totaler per subramme, noe som underkommuniserte overheaden med en faktor 15 (1,33 bit/s). Rettet til de publiserte totalene per subramme på 30 s i SIS-ICD (HKROOT 120 + MACK 480 bit ⇒ 20 bit/s). Konsekvensen oppgis nå ærlig: ved en AFS-navigasjonsrate på 50 bit/s er autentiseringsoverheaden en kostnad av første orden på ≈40 %, ikke noen få uvesentlige prosent; feltet auth_latency er dokumentert som forsinkelsen for nøkkelavsløring (en nedre grense for tiden til første autentiserte posisjonsbestemmelse fra ende til ende).

0.24.0 - 2026-07-09#

En bred funksjonsutgivelse. Den leverer to fullt eksternt validerte analysesuiter, en komplett familie for flerkriterie beslutningsanalyse (MCDA) og estimatorene for Allan-wander / langtids klokkestabilitet med lang τ, og åpner et nytt lag av kjørbare scenarioer for lunar tidsbudsjett, sanntids ramme/EOP, optisk/RF-hybrid, cislunar observerbarhet og lagdelt PNT-robusthet ved konflikt oppå substratet, pluss et substrat for lunar overflatebeacon og signalsikkerhet. Den maskinkontrollerte valideringsmatrisen vokser til 51 VALIDATED · 47 MODELLED · 4 PARTNER over 102 rader (var 40 · 47 · 4 over 91): alle elleve nye rader er valideringer mot uavhengig ekstern referanse for beslutningsanalysen og tidsestimatorene, kontrollert mot uavhengige biblioteker (SciPy, pymcdm, pyDecision, allantools) til stram toleranse, mens den nye PNT-funksjonsflaten ærlig fremstilles som MODELLED. Som alltid oppgraderes ingen numerisk modellpåstand uten et eksternt datasett bak.

Lagt til#

Kjørbare scenarioer, hvert en registrert scenario-kind, dispatchet gjennom motoren og bevist ende til ende i CI av tests/determinism.rs (som kjører hver medfølgende scenarios/*.toml og feiler hardt på enhver fixture som ikke kan kjøres):

  • Lagdelt PNT-robusthet ved konflikt (conflict-resilience, src/conflict_resilience.rs): en seedet Monte Carlo-motor for robusthet for en PNT-arkitektur med flere lag, med en overlevelsesmodell per vektor for graceful degradation i §4,2 (fire navngitte trusselvektorer, den lukkede overlevelsesformen for brukbar PNT som Monte Carlo per lag konvergerer mot, skrevet ut i resultat-JSON) og dokumentert, drift-vokttet proveniens for trusselparametrene (src/conflict_threat_params.rs). MODELLED arkitekturer; konvergensen fra overlevelses-Monte Carlo til lukket form er den validerte kjernen.
  • Cislunar observerbarhet (cislunar-observability, src/cislunar_observability.rs): et egenspektrum for observerbarhetsgramianen over en bue, en differensialkorrigert seeder for distant retrograde-baner (DRO) og en uavhengig krysskontroll med kvadratrotinformasjonsfilter hvis posteriorkovarians blir endelig nøyaktig ved full observerbar rang. MODELLED konstellasjon; invariantene for rang/gramian/STM/SRIF er den validerte kjernen.
  • Heterogen optisk/RF-hybrid kontinuitet og integritet (hybrid-optical-rf, src/hybrid_integrity.rs, src/optical_availability.rs, src/optical_linkbudget.rs, src/cross_raim.rs): tilgjengelighet og integritet på tvers av domener når optisk og RF PNT kombineres. MODELLED.
  • Endogent lunar tidsbudsjett (lunar-time-budget, src/lunar_time_budget.rs) og sanntidsbudsjett for ramme / EOP (realtime-frame-eop, src/realtime_frame_eop.rs, src/frame_eop.rs): P3/P4-budsjettene for lunar tid og jordorientering utledet endogent fra tidssynkroniseringskjeden og ikke påstått. MODELLED.

Eksternt validerte analysesuiter, biblioteksfunksjoner som hver kommer inn i matrisen som nye VALIDATED rader (kontrollert mot en uavhengig ekstern referanse, ikke en selvkontroll):

  • Full suite for flerkriterie beslutningsanalyse (MCDA) (src/mcda/): de fire metodefamiliene verdiaggregering (WSM, WPM, WASPAS), ratiosystem (MOORA) og proporsjonal (COPRAS), avstand til ideal (TOPSIS), kompromissprogrammering (VIKOR) og outranking (PROMETHEE II med seks generaliserte kriterieformer, ELECTRE I konkordans/diskordans), pluss AHP prioritetsvekter fra Perron-egenvektor med Saatys konsistensratio-gate (CR < 0,10), MAUT-nytte, uttrekking av Pareto-front og sensitivitetsanalyse av vekter. De ni aggregatorene gjengir pymcdm / pyDecision, og AHP-egenvektoren stemmer med SciPy/LAPACK, alt til < 1e-9 (tests/mcda_*_reference.rs). Sensitivitets-tornadoen vises også inne i scenarioet for robusthet ved konflikt.
  • Allan-wander og estimatorer for klokkestabilitet med lang τ (src/allan.rs): MTIE (wander-statistikken for tidsfeil fra topp til topp som synkroniseringsmaskene i ITU-T G.810/G.823/G.8261 er skrevet mot), tidsdomene-wander for MDEV og TDEV, og estimatorer med utvidet område, Theo1 / TOTVAR. VALIDATED mot allantools på NIST SP 1065-seriene; den bias-fjernede hybriden ThéoH bygget på TOTVAR forblir ærlig MODELLED.
  • Rammeverk for sikring / ekstern uavhengig referanse (src/assurance/): et rammeverk for uavhengig referanse koblet direkte til ærlighetsgaten i CI, en W3C-PROV-proveniensregistrering med en deterministisk Merkle-rot, og Greenhall ekvivalente frihetsgrader + kjikvadrat-konfidensintervaller på stabilitetsestimater.
  • PackRegistry / ExternalPack, utvidelsessømmen (src/registry.rs, src/api.rs): en dispatch-søm slik at funksjonspakker rutes gjennom ett register (innebygd dispatch ligger på den varme stien i CLI-en; pakker utenfor treet kobles på bak en ExternalPack::register_into med standardverdi), vokttet av en golden-suite for byte-identitet og testing av overensstemmelse og av frittstående / wasm32-gater i CI.

Modellert funksjonssubstrat, nye bibliotekmoduler som mater scenarioene ovenfor og fremtidige (ennå ikke en frittstående scenario-kind):

  • DOP for lunar overflatebeacon (src/lunar_beacon.rs) med budsjett for realisert nøyaktighet, sveip over N satellitter og GDOP-kart, pluss en perturbert lunar efemeride (src/lunar_perturbed.rs) og geometri for horisont uten atmosfære / invers av spoof-effekt / AFS-underskuddsbånd (src/jamming.rs, src/linkbudget.rs). Gjenbruker DOP-kjernen validert mot gnss_lib_py.
  • Innlesing av DEM i LOLA-format + siktlinje over terreng (src/realdata/lola_dem.rs).
  • Tredelt forsvar for signalsikkerhet: spoof-fangst, kryssensor-integritet og dimensjonering av overvåkingsnettverk (src/spoof_capture.rs, src/cross_sensor_integrity.rs, src/monitor_network.rs) med et orbitalt antennefotavtrykk og et autentiseringsbudsjett for OSNMA (src/antenna.rs, src/nma_budget.rs). MODELLED.

Endret#

  • Valideringsmatrisen og hvert avledet artefakt ble regenerert fra den eneste sannhetskilden (src/verification.rs): registeret på nettstedet, diagrammene for modulkart og valideringsproveniens, og README- og tellestrengene per flate lyder nå 51 / 47 / 4 av 102 (var 40 / 47 / 4 av 91); ærlighetsvakten for tellinger skanner nå hele git-historikken, og README-figurene er samlet på den mørke merkepaletten.
  • Én delt adaptiv integrasjonsdriver ligger nå bak både integrate og integrate_dopri (src/integrator.rs), og den duplikate stepperen er fjernet.
  • Statisk analyse med SonarQube Cloud lagt til i CI (Rust + importert dekning), med merker for vurdering av sikkerhet / vedlikeholdbarhet / pålitelighet i README.
  • En passasje som navngir tredjeparts AI-klienter er utelatt her; den står i CHANGELOG.md på GitHub.

  • Disiplin for utgivelse / pakking: CI registrerer et deployment-miljø per pakke-/registerpublisering, og den fokuserte jobben for offentlig frittstående bygg er avgrenset bort fra de trege valideringsbinærene.
  • Vakten for hygiene mot attribusjon er avgrenset til forfattermarkører alene, så å navngi en integrasjonsvert eller et produkt ikke lenger får bygget til å feile.
  • Dokumentasjon: README-delen Citing lister nå de fire publiserte arXiv-preprintene, og DOP-funksjonen for overflatebeacon er dokumentert i lunar-raden.

Rettet#

  • Heltallsløkketellere for flyttalsdrevne løkker (Sonar S2193).
  • Nøyaktig invers kjikvadrat ved lave frihetsgrader via Newton-forbedring i stien for konfidensintervaller i sikringen.
  • kshana.dev: standardseksjonen åpnes nå som standard og reserveverdien for registertallet er rettet; utdaterte README- og nettstedstrenger rundt observerbarhetslaget er synkronisert.

0.23.0 - 2026-06-29#

En funksjonsutgivelse som legger til et generelt lag for Fisher-informasjon / Cramér–Rao-observerbarhet og optimal eksperimentdesign, og utgivelsen artikkelen om observerbarhet for lunar PNT hviler på. Den maskinkontrollerte valideringsmatrisen vokser til 40 VALIDATED · 47 MODELLED · 4 PARTNER over 91 rader (var 39 · 46 · 4 over 89): den nye estimeringsmotoren er kontrollert mot en ekstern uavhengig referanse og er VALIDATED; den lunare anvendelsen av den er ærlig MODELLED. Som alltid oppgraderes ingen numerisk modellpåstand uten et eksternt datasett bak.

Lagt til#

  • src/fim.rs: Fisher-informasjon, Cramér–Rao-grenser og optimal eksperimentutforming. En generell, gjenbrukbar motor for estimeringsteori: Fisher-informasjonsmatrisen M = HᵀWH fra en måle-Jacobian og vekter; en symmetrisk egenverdiløser (syklisk Jacobi); den nedre Cramér–Rao-grensen via inversen, eller Moore–Penrose-pseudoinversen pluss en nullromsbasis når informasjonen er rangdefekt (tilfellet med fritt nettverk / datumdefekt); og D-, A-, E- og T-optimale metrikker for eksperimentutforming med en best_design-velger over kandidatgeometrier. VALIDATED mot NumPy (eigh/inv) og de publiserte lukkede grensene til Kay (1993) til 1e-9 (tests/fim_observability_reference.rs), så den kommer inn i matrisen som en rad med ekstern uavhengig referanse og ikke som en selvkontroll.
  • Lunar observerbarhet for felles banebestemmelse (lunar_observability i src/lunar_combination.rs, vist i rapporten for lunar kombinasjon): anvender FIM/CRLB-motoren på den felles løsningen for bane og klokke for å vise datumdefekten for absolutt stasjon, gjenopprettingen av rang når stasjoner på jordbaselinjen legges til, den oppnådde CRLB for stasjonsposisjon og E-optimal kondisjonering. Ærlig MODELLED: estimeringsmotoren er eksternt validert, men det lunare nettverket den anvendes på er en representativ simulering, og ingen eksisterende datasett kan gjøre den geometrien til en måling.
  • Representativ geometri for elliptisk lunar frossen bane (ELFO) for scenarioet for lunar kombinasjon (orbit_ecc, orbit_inc_deg, orbit_argp_deg, orbit_planes; sirkulær plassering forblir standard) og et observerbarhetsfelt uten VLBI i rapporten, slik at resultatet om datumdefekt kan vises å være geometrigenerelt. Den samme stigen 3→1→0 og terskelen på tre stasjoner holder på en ELFO i familien Moonlight/LCNS, og med tre jordbaserte VLBI-baselinjer er den absolutte stasjonsposisjonen observerbar ved en grense under en meter, låst av elfo_geometry_confirms_the_observability_structure. Fortsatt MODELLED.

Endret#

  • Valideringsmatrisen og hvert genererte evidensartefakt ble regenerert fra den eneste sannhetskilden (src/verification.rs): registeret (web/data/verification-matrix.json), docs/VERIFICATION-MATRIX.md, docs/MODELLED-RATIONALE.md, figurene for valideringsfordeling og type uavhengig referanse, og README-tellestrengene på alle distribusjonsflater lyder nå 40 / 47 / 4 av 91.

0.22.1 - 2026-06-29#

En utgivelse som bare gjelder pakking. Ingen endringer i motor, scenario eller resultater; valideringsmatrisen er uendret på 39 VALIDATED · 46 MODELLED · 4 PARTNER over 89 rader.

Rettet#

  • npm publish: pakken repository.url utledet fra crate-manifestet brukte GitHub-eieren med feil store/små bokstaver (AshfordeOU), noe som feilet verifiseringen av npms sigstore-proveniens (den matcher eieren skille mellom store og små bokstaver). Manifestet repository er nå det kanoniske med små bokstaver, ashfordeOU, så den genererte package.json stemmer med proveniensemnet og npm-utgivelsen publiseres.

Endret#

  • Wheel-bygget fester codegen-units = 1 slik at manylinux-wheelen er byte-reproduserbar på tvers av gjenbygg (kontrollen av reproduserbarhet ved gjenbygg og diff).

0.22.0 - 2026-06-29#

En konsolideringsutgivelse med fokus på evidens, proveniens og distribusjonsdisiplin. Den maskinkontrollerte valideringsmatrisen vokser til 39 VALIDATED · 46 MODELLED · 4 PARTNER over sine 89 rader (var 15 · 42 · 4 over 61), drevet av krysskontroll av modellerte funksjoner mot uavhengige eksterne referanser. Hvert distribuerte artefakt har nå en kryptografisk SLSA-attestasjon av build-proveniens, leveres med en CycloneDX SBOM og publiseres i lås på alle flater. Ingen numerisk modellpåstand oppgraderes uten et eksternt datasett bak; ny funksjonalitet forblir ærlig MODELLED.

Lagt til#

  • Holdningsdynamikk (src/attitude_dynamics.rs, MODELLED): dreiemomentfrie Euler-ligninger for stive legemer + kvaternionkinematikk (RK4), med selvtester av bevaringslover (kvaternionnorm, kinetisk energi, |Iω|, presesjon for symmetrisk topp).
  • Krysskontroll av modellerte funksjoner mot uavhengige eksterne referanser, som tar valideringsmatrisen til 39 VALIDATED rader, hver støttet av et eksternt datasett (ærlighetsgaten i CI forbyr statusen VALIDATED uten et). De nyeste valideringene mot uavhengig ekstern referanse: målt stabilitetskurve for optisk klokke (ADEV-kurvetilpasningen i quantum_trade gjengir den publiserte σ_y(τ) for ⁸⁸Sr-optisk gitterklokke fra Norcia et al., Science 366:93 (2019), Zenodo 10.5281/zenodo.3382347, CC-BY-4.0, medfølgende under tests/fixtures/optical_clock_adev/); generering av GPS L1 C/A-spredningskode (G1/G2-LFSR-en i src/sdr.rs gjengir kodefaseoktalene i IS-GPS-200 tabell 3-Ia for PRN 1–9); og SRTM-leseren for digital høydemodell på ekte terreng (src/altpnt/terrain.rs leser en medfølgende SRTM v3-flis fra NASA/USGS i det offentlige domene, N36W117 / Death Valley, og plasserer Badwater Basin innenfor sitt dokumenterte målebånd).
  • Nye MODELLED funksjoner, hver internt krysskontrollert mot en lukket form eller en søsterkodesti: relativ bevegelsesdynamikk etter Clohessy–Wiltshire / Hill, passiv geolokalisering av sendere med TDOA/FDOA, holdningsbestemmelse etter Wahba/TRIAD/QUEST, oppløsning av heltallsflertydighet i GNSS bærebølgefase (LAMBDA), B-plane-målstyring og gravitasjonsassistanse med patched conic, antijam-stråleforming med CRPA-array, akkvisisjonsstatistikk for GNSS med kvadratlov, flertydighet i kvante-treghetssensorens fringes / dynamisk område, IEEE-1139 potenslov for klokkestøy + flicker-FM-gulv, og CCSDS-OEM-utveksling av kovariansblokk.
  • Evidensregister fra én enkelt kilde med genererte verifikasjonsdokumenter og en drift-vakt; et bla-bart valideringsregister på kshana.dev med dypelenker til evidens per kort.
  • Maskinlesbare siteringsmetadata: codemeta.json (CodeMeta 2,0) og .zenodo.json, festet til Cargo-manifestet av tests/citation_metadata_doc_sync.rs.
  • Proveniens for forsyningskjeden: SLSA-attestasjon av build-proveniens for crate-tarballen, wheels, sdist og npm-tarballen; PyPI OIDC Trusted Publishing; CycloneDX SBOM levert inne i wheelen og npm-pakken; reproduserbar build-diff og verifikasjon etter utgivelse.
  • Auffinnbarhet: robots.txt, sitemap.xml og metadata for Open Graph / JSON-LD på kshana.dev; en generert figur validation-breakdown utledet fra matrisen.
  • README-filer per flate for crates.io / PyPI / npm med en ærlighetsvakt for tellinger.

Endret#

  • Sagnac-tidsoverføring, uavhengig referanse oppgradert til ExternalDataset: Sagnac-korreksjonen for en omsegling langs ekvator kontrolleres nå mot Ashbys publiserte 207,4 ns (Living Reviews in Relativity 6:1, 2003, ligning 1,29; gjengitt til < 0,05 ns). Den sammensatte funksjonen for tidsoverføring forblir ærlig MODELLED.
  • Dokumentasjon, diagrammer og figurer oppdatert til den levende matrisen (39/46/4/89): valideringsproveniensdiagrammet, figuren oracle-kind-stacked (nå generert fra matrisen med en drift-vakt i CI), VALIDATION/PROVENANCE/CAPABILITY/QUANTUM-MODELS/WHEEL_TAGS, arkitektur- og veiledningsdokumentene og totalen i registeret på kshana.dev.
  • Omformaterte kildetreet med den festede rustfmt (verktøykjede 1.93.0): ren stil, ingen endring i oppførsel.
  • Versjonering i lås. Hver distribusjonsflate (crate, PyPI, npm, MCP-crate + OCI-image, JetBrains-plugin) versjoneres nå i lås med motoren, håndhevet av scripts/check-version-sync.sh i CI.
  • JetBrains-pluginen er relisensiert til AGPL-3.0-only (den publiserte 0.1.1 oppga fortsatt Apache-2.0) og utleder nå Marketplace-versjonen fra utgivelsestaggen.
  • Herding av robusthet: unwrap i kode som ikke er test er fjernet eller begrunnet; clippy::unwrap_used er gatet på kode som ikke er test.
  • kshana.dev fullstendig omarbeidet med bevis først: dominerende hero, arkitekturdiagrammer og resultatfigurer, i18n, sammenleggbare og responsive seksjoner for register og standarder.

Rettet#

  • SP3 presis efemeride: bruk IGS-korreksjonen for jordrotasjon ved noden under interpolasjon.
  • Registerbilder: README-filene for PyPI/crates.io/npm bruker absolutte bilde-URL-er; de relative bildestiene i hoved-README ble vist som ødelagte bilder på PyPI-siden for 0.21.0. En CI-vakt (tests/surface_readme_image_urls_doc_sync.rs) hindrer regresjonen.
  • CI: fmt + clippy grønne; slutt å kompilere mot git-ignorerte ekte data.

Tester#

  • Kalman-klokkekovariansen forblir PSD og symmetrisk (egenskapstest, tests/property.rs).
  • Doc-sync-vakter: hver offentlige tellestreng for validering, siteringsmetadata, den genererte figuren og bilde-URL-ene i README for flatene er festet til sin sannhetskilde.

0.21.0 - 2026-06-26#

Denne utgivelsen legger til to MODELLED applikasjonssuiter i den åpne motoren: en demonstrator for kvanteaktivert PNT (pålitelig kvantetidsoverføring, GNSS-fri kvantenavigasjon, kvantefeil-/anomalideteksjon) og en suite for lunar / cislunar PNT (lunar koordinattid, lunar VLBI, felles banebestemmelse + klokke, realisering av referansesystem, tjenestevolum, differensiell PNT, interoperabilitetseksport), hver kjørbar fra én kind, hver med en ærlig TradeEvidence-registrering pluss et register over representativitet / hull mot flyvning. Den leverer også seks nye valideringer mot uavhengig ekstern referanse, som tar den maskinkontrollerte valideringsmatrisen til 15 VALIDATED · 42 MODELLED · 4 PARTNER over sine 61 rader. De nye applikasjonstallene er MODELLED fra illustrative parametere fra offentlige kilder, uten TRL, flygehistorikk, sertifisering eller støtte fra noe byrå, og de validerte kjernene de gjenbruker, er merket som sådan.

Lagt til#

  • Demonstratorsuite for kvanteaktivert PNT (quantum-time-transfer, quantum-gnss-free-nav, quantum-anomaly-detect). Tre kjørbare MODELLED applikasjonsområder bak motoren, hvert med TradeEvidence pluss en registrering av representativitet / hull mot flyvning:
    • Pålitelig kvantetidsoverføring (src/timetransfer_chain.rs): et tovegsbudsjett for optisk gitterklokke + fotonisk link mot CSAC + RF, som gjenbruker beskyttelsesnivået for tidssynkronisering, med et sikkerhetskvalitetsmål mot forsinkelses-/replay-angrep (1 − P_md) og klokkeanomalideteksjon + CUSUM-latens.
    • GNSS-fri kvantenavigasjon (src/quantum_nav_od.rs): en treghetsdrift med kaldatom-interferometer mot et INS av navigasjonsklasse over et GNSS-utfall, ærlig på at uten ekstern posisjonsbestemmelse forblir akselerometerbiasen ikke observerbar, så feilen fortsatt vokser.
    • Kvantefeil- / anomalideteksjon (src/quantum_faults.rs): en merket feilkatalog med ROC AUC med bootstrap-konfidensintervall og en minste detekterbare feil ved en fast falsk alarmrate.
    • Et delt bibliotek for feilmodeller for kvanteenheter (src/quantum_devices.rs) og et samlet rammeverk for avveining mellom kvante og klassisk (src/qtrade.rs) ligger under alle tre.
  • Suite for lunar / cislunar PNT. Sju kjørbare MODELLED enheter av typen kind, lagt oppå CR3BP-kjernen: lunar koordinattid (sekulær rate LTC/TCL − TT, src/lunar_time.rs), observerbar for geodetisk lunar VLBI-forsinkelse (src/lunar_vlbi.rs), estimator for felles banebestemmelse + klokke med flere teknikker i batch (src/lunar_combination.rs), realisering av referansesystem (7-parameter Helmert + IAU 2015 WGCCRE-tie, src/lunar_frame_realise.rs), analyse av tjenestevolum i klassen Moonlight / LCNS (src/lunar_service.rs), lunar differensiell PNT (src/lunar_dpnt.rs) og en eksport for interoperabilitet i tråd med LunaNet / IOAG (CCSDS-OEM + lunar tidsskala i KIF-konvolutten, src/lunar_interop.rs). Alt MODELLED fra illustrative parametere fra offentlige kilder; ikke validert mot ekte VLBI / Gateway-sporing; ingen tilknytning til eller støtte fra noe byrå.
  • Seks nye valideringer mot uavhengig ekstern referanse (valideringsmatrisen står nå på 15 validerte):
    • ADEV / HDEV på en ekte 5071A-cesiumklokke, validert mot desimalpunktreferanser fra Stable32 (tests/cs5071a_reference.rs).
    • OADEV / MDEV / TDEV på Stable32-referansen PHASE.DAT, validert mot Stable32s publiserte tabeller (tests/phasedat_reference.rs).
    • ROC AUC for anomalideteksjon på ekte ESA OPS-SAT-telemetri, validert mot scikit-learn (tests/opssat_ad_reference.rs).
    • Syntese av ICGEM-gravitasjonsfunksjonaler, validert mot GRS80-standarden for normaltyngde (Somigliana γ til 3.5e-12; EGM2008-forstyrrelseskart, tests/icgem_gravity_reference.rs).
    • Klobuchar-modellen for kringkastet ionosfære, validert mot RTKLIB (tests/klobuchar_reference.rs).
    • RAIM-deteksjonskjerne (171 tilfeller, tests/raim_reference.rs) og SBAS DO-229E-beskyttelsesnivå på ekte EGNOS-data (RTKLIB SBAS-PL-fork, tests/sbas_reference.rs), begge validert mot sine eksterne uavhengige referanser.
  • Register over representativitet og hull mot flyvning (src/representativeness.rs). En strukturert registrering hver demonstrator skriver ut: hva som er representativt, hva som er forenklet og hva som står mellom modellen og flyvning, den ærlige følgesvennen til hver MODELLED avveining.
  • Studieaggregering og CLI-ergonomi. Et manifest for scenariosuiter med studieaggregering i én kommando, hash-stabile studiemetadata + --study-name, lint-kontroll av scenarioer med --validate og visning av valideringsnivå per kvalitetsmål i studierapporter.

Endret#

  • kshana.dev er omdesignet rundt en delt domenerygg: funksjoner og validering er slått sammen til én domeneutforsker med et felles vokabular, de nye validerte øyene er løftet frem, en landnøyaktig animert jordinstrument og en CTA for å be om en studie, og Ashforde OÜ-merkevare og -lenker.
  • README + ARCHITECTURE gjennomgått for fullstendighet og ærlighet: utdaterte antall validerte er rettet (nå 15 eksterne uavhengige referanser), diagrammene er utvidet, og preprintene om Conditional Timing Protection Level (arXiv:2606,24210) og optimismegapet for RF-forstyrrelser (arXiv:2606,22054) er sitert.
  • Kildene i paper/ og JOSS-utkastpipelinen holdes i det offentlige repoet.

0.20.0 - 2026-06-22#

Denne utgivelsen legger til fire studiefunksjoner i den åpne motoren: et betinget beskyttelsesnivå for tidssynkronisering, rammeverkstilpasset skåring av PNT-robusthet, en evaluering av optimismegapet for RF-forstyrrelser og en front end for programvaredefinert mottaker / ekte data, hver reproduserbar fra én kommando og skriver et byte-deterministisk artefakt. Alle studier er MODELLED (syntetisk eller kalibrering mot offentlige datasett), bærer sin ærlige proveniens (motorversjon, seeds, konfigurasjonshash) og valideringsmerker, og er ikke sertifiseringer.

Lagt til#

  • Betinget beskyttelsesnivå for tidssynkronisering (tpl). En holdover-begrenset grense for den uoppdagede tidsfeilen under GNSS-spoofing, med et monitorgulv på k sigma, en van Loan-variansdrift over deteksjonslatensen og en CUSUM-tid til alarm. Kalibrert på et ekte registrert angrep (JammerTest 2024, scenario 2.1.1) via cargo run --release --example tpl_jammertest, som gjengir referansetabellen fra skalarer hentet fra den offentlige opptaket (det rå datasettet redistribueres ikke).
  • Rammeverkstilpasset skåring av PNT-robusthet + studie av beslutningsustabilitet (resilience). Arkitekturmodell, RPCF-tilpasset skåring, Dirichlet-vektingssimpleks, Kendall-tau og ustabilitet i top-1-flipprate, og kollaps av fellesmodus-diversitet (Hill-N2), med cargo run --release --example resilience_report -- paper-artifacts/resilience-study.json. Krysstabell i docs/RESILIENCE-CROSSWALK.md.
  • Studie av optimismegapet for RF-forstyrrelser (impairment_study, impairment_ml, eval_stats). Et panel på 13 detektorer over et parameterforankret syntetisk korpus, et optimismegap mellom innenfor og utenfor fordelingen, trender i skaleringslover med en permutasjonsnull og en leave-one-out-prediktor for degradering, via cargo run --release --example optimism_study -- paper-artifacts/optimism-study.json.
  • Front end for programvaredefinert mottaker (sdr) og adaptere for ekte data (realdata/). Rå IQ/IF til korrelatortapper og SQM, pluss innleseradaptere (RINEX, u-blox UBX, GnssLogger, JammerTest, Yunnan, SatGrid) og probe-eksempler. Disse leser opptak brukeren leverer lokalt; ingen opptak er committet.
  • Committede studieartefakter. De byte-deterministiske optimism-study.json og resilience-study.json spores nå under paper-artifacts/ slik at studietallene kan kontrolleres uten å bygge på nytt; de kan fortsatt regenereres fra generatorene ovenfor. Rå datasett holdes utenfor repoet (/realdata-cache/).

Endret#

  • Versjonen er økt til 0.20.0 i Cargo.toml, CITATION.cff og README; artefaktene for krysningsstudiene er regenerert slik at stempelet stemmer med den utgitte versjonen.

0.19.0 - 2026-06-18#

Endret#

  • Relisensiert fra Apache-2.0 til GNU AGPL-3.0-only, med en kommersiell lisens tilgjengelig fra Ashforde OÜ (dobbel lisensiering). Den åpne motoren forblir fullt åpen og offentlig verifiserbar; AGPLs nettverks-copyleft (§13) betyr at en lukket eller driftet avledet versjon må komme tilbake til åpen kildekode, eller ta en kommersiell lisens. Dette forsvarer den validerte kjernen mot fork-and-close og bevarer troverdigheten til en offentlig, kjørbar og reviderbar motor. Se LICENSE (AGPL) og den nye LICENSING.md (hva hver lisens dekker og når den gjelder).
    • LICENSE inneholder nå AGPL-3.0-teksten; SPDX-headere i alle kilder er oppdatert til AGPL-3.0-only; NOTICE, README, GOVERNANCE, GLOSSARY, nettstedet og crate-/pakkemetadata (Cargo.toml, pyproject.toml, CITATION.cff, MCP-crate-en + imaget) er oppdatert tilsvarende.
    • Bidragsvilkår (CONTRIBUTING.md) lisensierer nå innkommende bidrag under AGPL og gir Ashforde OÜ retten til å ta med bidrag i den kommersielt lisensierte utgaven, slik at dobbeltlisensieringen fortsetter å virke.
    • Avhengighetspolicyen er uendret, men begrunnet på nytt (deny.toml, GOVERNANCE): avhengigheter forblir permissive (Apache/MIT/BSD/ISC). AGPL er bare tillatt for kshanas egen crate; en avhengighet med copyleft ville smitte den kommersielle utgaven og bryte dobbeltlisensieringen.
    • Merknad for etterfølgende ledd: dette er en relisensiering til copyleft. Brukere som stolte på de permissive Apache-2.0-vilkårene, kan fortsette å bruke den siste Apache-2.0-utgivelsen (v0.18.0 og tidligere, som publisert); fra v0.19.0 og utover er det AGPL-3.0 / kommersiell.

Sikkerhet#

  • Hevet pyo3 0,24 → 0,29 for å fjerne RUSTSEC-2026-0176 / RUSTSEC-2026-0177 (GHSA-36hh-v3qg-5jq4 / GHSA-chgr-c6px-7xpp) fra eksterne OSV-/avhengighetsskanninger. Begge er advisories på funksjonsnivå hvis berørte funksjoner (BoundList/TupleIterator::nth/nth_back, PyCFunction::new_closure) Kshana aldri kaller, og pyo3 er en valgfri avhengighet (funksjonen python), så den reelle eksponeringen var null, men hevingen gir en ren skanning for revisorer lenger ned. Migrerte src/python.rs til pyo3 0,29-API-et (Bound-returtype for scenario_kinds; eksplisitt skip_from_py_object på pyclass RunOutput). Alle 11 Python-bindingstester består mot den gjenbygde utvidelsen.

0.18.0 - 2026-06-17#

Lagt til#

  • Elleve nye kjørbare scenariotyper: demonstratorer for to anbud, en CCSDS-interoperabilitetsbro og en førsteordens suite for oppdragsanalyse / miljø (alle MODELLED, additive; eksisterende golden-verdier for reproduserbarhet er uendret). Hver kan dispatches fra CLI / Python / WASM / MCP, leveres med en scenarios/<kind>.toml og bærer en eksplisitt MODELLED-merking i resultat-JSON og enlinjessammendraget (en test per type i tests/dominance_demonstrators.rs påstår at merkingen er til stede og at utdataene aldri inneholder strengen VALIDATED):

    • impairment-eval (src/impairment_eval.rs): testbed for evaluering av maskinlæringsdeteksjon av RF-forstyrrelser: et merket syntetisk korpus + et detektoragnostisk ROC/AUC-rammeverk + en rapport om optimismegap innenfor / utenfor fordelingen (bare operasjonskarakteristikker, aldri felt-/IQ-data).
    • quantum-trade (src/quantum_trade.rs): avveining mellom kvante og klassisk PNT med innlesing av målt ADEV og et robusthetskonvolutt for GNSS-nektede forhold.
    • space-weather (src/space_weather.rs): sol-/geomagnetiske indekser (Kp↔ap IAGA-tabell, daglig Ap, sentrert 81-dagers F10.7a), eksosfærisk temperatur etter Jacchia-71 og en aktivitetsdrevet kobling til termosfærisk tetthet over en statisk atmosfære (IKKE en absolutt tetthetsmodell som NRLMSISE).
    • oem-interop (src/oem.rs): import av CCSDS 502,0 OEM + rundturbro for efemerider fra GMAT / Orekit / STK (leseren parse_oem, eksakt invers av skriveren).
    • launch-window (src/launch.rs): utskytningsazimut for to legemer (sin Az = cos i/cos lat), Δv for planendring, bonus fra stedets rotasjon og geometri for daglige muligheter.
    • reentry (src/reentry.rs): ballistisk gjeninntrengingskorridor etter Allen-Eggers: maksimal retardasjon, hastigheter ved maksimal g og maksimal oppvarming, høyde ved maksimal g.
    • eo-coverage (src/eo_payload.rs): EO-geometri for swath / GSD / tilgang / revisit (SMAD space-triangle).
    • space-packet (src/space_packet.rs): koding/dekoding av primærheader for CCSDS 133.0-B Space Packet med bit-eksakt rundtur.
    • attitude-budget (src/attitude_budget.rs): 3-DOF gravitasjonsgradient-dreiemoment + RSS-budsjett for pekefeil (skalart budsjett før maskinvare, ikke en kontrollsløyfe).
    • passes (src/passes.rs): prediksjon av passeringer for bakkestasjon (AOS/TCA/LOS, maksimal elevasjon, tilgang).
    • link-budget (src/linkbudget.rs): enveis linkligning etter CCSDS-401 / DSN-810-005 (C/N₀ = EIRP − FSPL − L_other + G/T − k, FSPL / Eb·N₀ / margin / lukking).
  • Hybrid tett koblet UKF med 17 tilstander, kvante + klassisk, vist som et kjørbart scenario (MODELLED). En ny scenariotype hybrid-ukf (src/fusion/hybrid_ukf.rs, scenarios/hybrid-ukf.toml) som gjør det tidligere bare API-tilgjengelige tett koblede GNSS/INS-filteret med unscented-transformasjon og 17 tilstander (src/fusion/tightly_coupled17.rs) til et scenario CLI-, Python-, WASM- og MCP-bindingene kan dispatche. Feilvektoren med 17 tilstander er de 15 INS-feiltilstandene (posisjon, hastighet, holdningsfeiljustering, akselerometer- + gyrobias) utvidet med den CAI-utledede korreksjonen av akselerometerbias (kaldatom-interferometeret (src/inertial/quantum_imu.rs) setter gulvet for hastighets-random-walk q_va, så langtidsdriften er den som er begrenset av kvantesensoren) og en klokke med 2 tilstander, fase + frekvens, hvis prosessstøy kommer fra q-parametermotoren for klokker (clock_state::q_from_allan, som avbilder en klokkes profil for Allan-deviasjon til PSD-ene q_wf/q_rw, skalert til avstandsenheter). Plattformen er GNSS-støttet i en innledning (filteret lærer biasene, hastigheten og klokken), og driver deretter gjennom et GNSS-utfall på CAI-IMU og klokke alene, så kjøringen demonstrerer hybridiseringen klassisk IMU på kort sikt + kvante på lang sikt. Kvalitetsmålet er filterets selvkonsistens: samlet NEES (Normalised Estimation Error Squared, over den estimerbare delmengden posisjon/hastighet/klokke) og NIS for innovasjonshvithet (Normalised Innovation Squared) over et Monte Carlo-ensemble, kontrollert mot sine 95%-bånd for χ² (Bar-Shalom §5,4). Det matchede filteret havner innenfor båndene; et bevisst feiljustert filter (innstillingene q_factor / r_factor) flagges: en objektivt kontrollerbar, diskriminerende gate og ikke en gummistempel. Kontrollen av NEES / innovasjonshvithet er DEN STATISTISKE REFERANSEN: en påstand om selvkonsistens (filterets rapporterte kovarians stemmer ærlig med spredningen i filterets egne feil under den modellerte støyen), IKKE en garanti for nøyaktighet i den virkelige verden. Ærlig omfang: alt er modellert / simulering; CAI- og klokkeinndataene er bracketerte, litteraturrepresentative verdier og ikke målt maskinvare; CAI-maskinvaren og dens nøkkelperson forblir eid av partneren; ingenting her antyder TRL > 3, flygehistorikk eller ekstern validering (resultat-JSON og enlinjessammendraget bærer disse merkene eksplisitt). Den ene banen med konstant hastighet og i plan lar holdnings- og IMU-biastilstandene være bare svakt observerbare, så NEES vurderes over de 8 estimerbare tilstandene; en manøvrerende bane for full observerbarhet av alle 17 er veikart. Legger også til instrumentering for konsistens med Ukf::update_stats (returnerer NIS per oppdatering) og TightlyCoupled17::{update_gnss_nis, nees, nees_subset}. Alle eksisterende scenarioer er upåvirket (additivt; golden-verdier for reproduserbarhet er uendret).

  • Sekvensiell (rekursiv) terrengreferert navigasjon: SITAN som et løpende filter. En ny scenariotype terrain-slam (src/altpnt/sequential.rs, scenarios/terrain-slam.toml) som kjører den eksisterende målemodellen høydemåler mot DEM epoke for epoke gjennom SIR-motoren particle_filter, i stedet for det grove-til-fine batchsøket terrain-nav bruker for å gjenvinne ett enkelt konstant INS-avvik. Ved hvert veipunkt propageres skyen med inkrementet INS rapporterer (selv forvrengt av veksten i drift per steg), revektes med terrengmatchen og resamples ved degenerasjon, så en tidsvarierende INS-drift blir fulgt langs sporet, noe en tilpasning med konstant avvik strukturelt ikke kan. På den syntetiske DEM-en holder det rekursive estimatet seg begrenset og konvergerer på nytt (sluttverdi ≈ 70 m) mens den uassisterte treghetsløsningen divergerer ubegrenset til ≈ 5 km; feilen per epoke følger terrengets særpreg (den driver på det biasede INS over flate sadler og låser seg på nytt over distinkt relieff), og monitoren for effektivt utvalg bekrefter en frisk sky. Ærlig omfang: kartet er kjent og fast: rekursiv lokalisering mot en lagret DEM (lokaliseringshalvdelen av terreng-SLAM), ikke felles kartestimering; ikke-sirkulært per konstruksjon (den injiserte driftsrampen er den uavhengige referansen). Alle eksisterende scenarioer er upåvirket (additivt; golden-verdier for reproduserbarhet er uendret).

  • Ryggrad for robusthet mot GNSS-nekting + demonstratorskiver for FutureNAV (src/holdover.rs, og grunnlag for robusthetskonvolutt under src/impairment_eval.rs, src/quantum_trade.rs, src/navsignal.rs, src/inertial/quantum_imu.rs, med verifikasjonsskiver for FutureNAV i src/verification.rs). Setter sammen byggeklossene for alternativ PNT (holdover for klokke, signalsporing, treghetsdrift, terreng) til én enkelt fortelling om robusthet ved GNSS-utfall. MODELLED; additivt.

  • Kshana Interchange Format (KIF): en versjonert, selvbeskrivende artefaktkonvolutt (src/interchange.rs). En skjemamerket innpakning rundt scenarioresultater slik at et lagret artefakt bærer med seg typen, skjemaversjonen og merkene MODELLED/VALIDATED, og eldre konvolutter forblir forover-kompatibelt lesbare. Additivt; eksisterende resultat-JSON er uendret.

  • Modulasjon / sporing av navigasjonssignal + differensialkorrektor for CR3BP halo/NRHO (src/navsignal.rs, src/cr3bp.rs). En førsteordens modell for modulasjon og sporing av navigasjonssignal, og en differensialkorrektor for det sirkulære begrensede trelegemeproblemet for halo-baner / nesten rettlinjede halo-baner, vist på den eksisterende funksjonsaksen for dypt rom. MODELLED.

  • Evalueringsmodus for fordelingsforskyvning + innstilling for alvorlighetsskala i korpus for impairment-eval (src/impairment_eval.rs). Legger til et eksplisitt skille mellom innenfor og utenfor fordelingen og en justerbar alvorlighetsskala i korpuset til rammeverket for ROC/AUC og optimismegap (bare operasjonskarakteristikker, aldri felt-/IQ-data).

  • ROI for kostnad per dekning + kartlegging av integritetspåvirkning ved uoppdaget feil (src/frugal.rs, src/integrity_impact.rs). Et ROI-perspektiv for sparsommelig ingeniørkunst (kostnad per enhet dekning) og en kartlegging fra rate for uoppdagede feil til integritetspåvirkning. MODELLED; additivt.

  • Sitert parameterark for feilmodellen for kaldatom-interferometer (CAI) (src/inertial/quantum_imu.rs). Et litteraturreferert, bracketert parameterark for den inertiale CAI-modellen; inndataene er sitert, ikke målt maskinvare (ingen TRL- eller flygepåstand); det mater gulvet for hastighets-random-walk i hybrid-ukf.

  • Prosjektstyring. GOVERNANCE.md dokumenterer beslutningsmodellen og grensen mellom åpent og lukket; raden for fellesskap/styring i funksjonskartet går none → partial for å gjenspeile det.

Rettet#

  • Beskyttelsesnivå for ARAIM-integritet: nominell bias (b_nom) og σ_URA er nå anvendt. MHSS-beskyttelsesnivået trekker nå fra den ensidige projeksjonen av nominell bias b_k = Σ_i |s_i|·b_nom per feilmodus, og bruker integritets-sigmaet σ_URA (forskjellig fra nøyaktighets-sigmaet σ_URE) som bæres i Integrity Support Message. Dette gjør beskyttelsesnivået mer konservativt og standardriktig, og endrer derfor PL-verdiene som eksisterende integritetsscenarioer rapporterer. ISM/scenarioet får feltene #[serde(default)] sigma_ura_m / b_nom_m, så inndata som lar dem stå usatt beholder tidligere oppførsel. Se docs/ARAIM_REFERENCE.md for den gjenopprettede formelen b_k og den ærlige implementasjonsmerknaden.

  • Konsistens for kjikvadrat i spoof-monitoren. parity_raim_test bruker nå den delte stien for invers kjikvadrat i raim::chi2_quantile, og en andre, avvikende kjikvadratimplementasjon er fjernet slik at RAIM og paritetsmonitoren for spoofing er enige om terskelene sine.

  • gravity-map-nav koblet til CLI-dispatcheren. Scenarioet var tidligere bare nåbart gjennom API-et; det dispatches nå som en kind= som alle andre scenarioer.

  • Nøyaktig dokumentasjon/antall. Antall scenariotyper i README er nå festet til api::list_scenario_kinds().len() av en scenario_count_doc_sync-test, slik at det dokumenterte antallet ikke lenger kan avvike fra dispatcheren.

0.17.0 - 2026-06-14#

Lagt til#

  • Deep-space & Mars PNT — åpen radiometrisk navigasjonsmotor + GSE-simulering. En ny, fullt additiv funksjonsakse oppå den jordvaliderte kjernen (hvert eksisterende jordscenario er byte-identisk — reproduserbarhetens golden-filer består uendret uten regenerering). Legger til: en flerlegemedynamikkjerne (Body{mu, re, zonals, gravity, rotation, IAU-pole} med tesseral tyngdekraft GMM-3 for Mars, et IAU-definert Mars-fast referansesystem, en utskiftbar EphemerisProvider-søm, todelte julianske datoer med sub-mikrosekund og TT↔TDB); radiometriske observabler (iterativ lystid + Shapiro-forsinkelse, to-/ett-/treveis Doppler og avstand via Moyer-løsningen med to ledd, koherent transponderomsnuing, regenerativ/PN-avstandsmåling iht. CCSDS 414, Δ-DOR iht. CCSDS 506, medier som solplasma/tropo/iono); parsing og utskrift av CCSDS-TDM (503); et redusert-dynamisk Square-Root Information Filter med empiriske RTN-akselerasjoner, en tretilstands klokke ombord og en Mars-luftmotstandsmodell; en felles estimator som fusjonerer enveis og toveis; scenarioflaten mars-pnt (reléstjernebilde + LMO/overføring/ overflate) på tvers av CLI, Python, WASM, MCP og playground; og en ende-til-ende GSE-ytelsessimulator (geometri → linkbudsjett → observabler → SRIF → kovarians). Valideringsnivå — validert ved simulering: syntetisk banebestemmelse (OD) i lukket sløyfe (Mars-LMO ≈ 0,2 m) og analytisk selvkonsistens, der den solsentrerte Mars-dynamikken er uavhengig kryssjekket mot JPL DE440 (xval/anise-mars-od, avhengig av tilgjengelig kernel: 137 m @ 1-dagers bue, den ærlige residualen fra umodellert n-legeme). Rapporterte dyprommsnøyaktigheter er simulerings-/kovariansbaserte kvalitetsmål, ikke resultater fra reelle oppdrag; validering mot reelle DSN/ESTRACK-sporingsdata står fortsatt på veikartet. ANISE (MPL-2.0, edition-2024) er avgrenset til en krysskontroll-crate utenfor workspace, slik at lisensporten cargo deny og MSRV-1.75-jobben er urørt.
  • Byrånøyaktige bakkespor fra reell IERS-jordorientering. Scenarioet ephemeris tar et valgfritt felt eop_finals2000a — den innebygde brødteksten i en reell IERS finals2000A-fil — og reduserer bakkesporet gjennom UT1−UTC og polbevegelse per epoke, interpolert fra den (den samme EopSeries som precise_od bruker), og overstyrer de nominelle skalarene dut1_s/xp_arcsec/yp_arcsec. Dataene følger med i scenarioet, så kjøringen forblir reproduserbar og trenger ikke noe filsystem (den fungerer i WASM-playground). Et flagg kshana --eop <finals2000A> legger en reell fil inn i scenarioet fra CLI. Lukker asymmetrien der bare precise_od brukte reelle jordorienteringsdata.

Rettet#

  • Konsistens i referansesystem for avstandsrate. Bakkestasjonen avbildes nå inn i det inertielle systemet gjennom den eksakte inversen av satellittens reduksjon (frames::itrf_to_teme, som angrer polbevegelsen og sideralrotasjonen) i stedet for en GMST-rotasjon som ikke tar hensyn til polbevegelse, slik at begge endepunkter deler ett referansesystem. Virkningen på rapportert Doppler ligger under valideringsgulvet, men det fjerner et reelt avvik mellom referansesystemene og en «eksakt»-overdrivelse i kilden.
  • carrier_hz valideres. En null eller ikke-endelig bærefrekvens gir nå en feil i stedet for stille å produsere null Doppler (den hadde gjort λ = c/bærefrekvens uendelig), på linje med den eksisterende kontrollen for step_s.

0.16.0 - 2026-06-11#

Lagt til#

  • Validering av kraftmodell ved efemeridetilpasning, kryssvalidert mot reelle byråprodukter. En ny batch-estimator med minste kvadrater (src/precise_od.rs) med variasjonell tilstandsovergangsmatrise og utlierredigering, drevet av en full kraftmodell (PreciseForceModel: EGM2008-geopotensial, tredjelegemer, tidevann fra fast jord + hav + atmosfære, og empiriske CPR/2-per-omløp-akselerasjoner), matet av en reell IERS finals2000A-parser for jordorientering. Validert mot publiserte referansebaner: Galileo MEO til 13 cm etter tilpasning, ESA Swarm-A LEO og LRO måne (selenosentrisk, GRAIL-tyngdefelt, IAU-2015 legemefast system — redusert-dynamisk 6,6 m, ærlig talt over målet på 5 m på den åpne stien; DE-klasse-stien ANISE/DE440 som når målet, er en crate utenfor workspace).
  • Scenarioet spoof-detect — en integrert flerlags spoofing-detektor som kombinerer RAIM-paritet per epoke, AGC- og signalkvalitetsmonitorer (SQM) og en fusjonert beslutning, validert mot de publiserte scenarioparametrene i TEXBAT (Humphreys et al., ION GNSS 2012), inkludert det vanskelige tilfellet med bærebølgejustering.
  • Scenarioet ephemeris — tilstand, referansesystemer, bakkespor og Doppler. Propagerer én satellitt (TLE→SGP4 eller en analytisk bane) og gir for hvert steg ut den inertielle TEME- og GCRS-tilstanden (posisjon og hastighet), den jordfaste ITRF/ECEF-posisjonen, WGS-84 bakkesporet under satellitten (breddegrad / lengdegrad / høyde), og toposentrisk asimut / elevasjon / avstand med avstandsrate og Doppler fra en bakkestasjon. Tilgjengelig fra CLI, Python, WASM og MCP-serveren, og levert som forhåndsinnstillingen «Ground track» i web-playground, der sporet tegnes over et reelt verdenskart (Natural Earth 1:110m kystlinjer, innebygd — ingen nettverk eller ekstern avhengighet).
  • CCSDS OEM-eksport (--export-oem / export_oem = true) — den hastighetsbærende Orbit Ephemeris Message som brukes av GMAT / Orekit / STK, på linje med de eksisterende SP3- og OMM-eksportørene.
  • Jordtidevann: fast, hav (FES2004) og atmosfærisk (Ray 2001 S2) på geopotensialet (IERS Conventions kap. 6), koblet inn i kraftmodellen.
  • ARM64-wheels — PyPI-bygget lager nå også wheels for Linux aarch64 (manylinux_2_28), macOS arm64 og Windows arm64.
  • Utvidet teknisk rapport (preprint) lenket fra README, og JOSS-artikkelen gjort innsendbar (forfatterens ORCID, kompilert til PDF i CI ved hver endring).

Endret#

  • Referansesystemer validert til millimeternivå mot publiserte Vallado-vektorer. Reduksjonen TEME→PEF/ITRF, hele CIO IAU 2006/2000A GCRS→ITRS-kjeden og konverteringen ECEF→geodetisk WGS-84 er nå festet til regneeksempelet i Vallado et al. (AIAA 2006-6753) med dets IERS EOP, ikke bare til intern selvkonsistens.
  • Uavhengige krysskontroller av tidsskalaer. ERA og skalaene UTC/TAI/TT stemmer overens med hifitime til < 1 µs, og den planetariske efemeriden DE440 stemmer overens med JPL Horizons (geosentriske posisjoner for Måne/Sol), begge som alltid-på CI-porter.
  • Web-playground skjuler fanen for kvalitetsmål når et resultat ikke har noen rader med kvalitetsmål, slik at pakker med bare diagram (efemeride, RAIM, spoof) åpner på diagrammet sitt — for efemeride, bakkesporet — i stedet for en tom tabell.
  • Playgroundens veiledede glidere og parametersveip fungerer nå for efemeride-/bakkesporscenarioet: knottene (stasjonens breddegrad / lengdegrad, tidssteg, varighet, UT1−UTC) kan justeres, og et sveip kan plotte overflygingsgeometri (maks. elevasjon, topp-Doppler, høyde, hastighet) mot hvilken som helst av dem — for eksempel maks. elevasjon mot stasjonens breddegrad. Sveip-fanen vises nå bare når et scenario faktisk kan sveipes, slik at ingen pakke tilbyr en kontroll som ikke plotter noe.
  • Dokumenterte SGP4-tilnærmingen DUT1 ≈ 0 ved GMST-kallstedet (en rotasjonsfeil på ≤ ~13″, godt innenfor SGP4s egen modellfeil) og oppdaterte CAPABILITY.md.

0.15.1 - 2026-06-09#

Lagt til#

  • JetBrains-pluginen Kshana — PNT simulator er nå publisert og akseptert på JetBrains Marketplace. README, kshana.dev og distribusjonsdokumentene lenker direkte til den.

Rettet#

  • Publisering til MCP-registeret lykkes nå: server.json description var over registerets grense på 100 tegn (HTTP 422). Forkortet den og justerte servernavnet (og eierskapsetiketten på container-imaget) til det kanoniske navnerommet io.github.ashfordeOU/kshana-mcp.
  • Publisering til JetBrains Marketplace lykkes nå: CI lastet opp på nytt den samme plugin-versjonen som var oppført manuelt, noe Marketplace avviser. Plugin-versjonen er økt til 0.1.1, og idempotensvakten behandler nå også et svar med «already contains version» som en vellykket no-op.
  • Cache-busting for kshana.dev: spørrestrengene style.css/app.js med versjonsstempel følger utgivelsen, slik at gjenkommende besøkende alltid får gjeldende bygg.

0.15.0 - 2026-06-08#

Lagt til#

  • kshana-mcp — Kshana som en Model Context Protocol (MCP)-server (mcp/kshana-mcp/). En frittstående crate utenfor workspace (SDK-en rmcp er edition 2024) som eksponerer den validerte motoren for AI-agenter og assistenter — Cursor, JetBrains AI Assistant / Junie og enhver MCP-klient — over stdio. Verktøy: run_scenario, list_scenario_kinds, validate_scenario, export_sp3, export_omm, hvert en tynn wrapper rundt kshana::api.
  • JetBrains IDE-plugin (ide/jetbrains/). Høyreklikk et scenario .toml → Run Kshana Scenario; kvalitetsmål og resultat-JSON strømmes inn i et Kshana-verktøyvindu. Ren plattform-Kotlin-plugin som fungerer med alle JetBrains IDE-er 2024,3+.
  • Offentlig distribusjon + automatisk publisering per utgivelse for begge:
    • kshana-mcp til crates.io (cargo install kshana-mcp) via publish.yml.
    • kshana-mcp som et OCI-image for flere arkitekturer på ghcr.io (docker run ghcr.io/ashfordeou/kshana-mcp) via en ny mcp-publish.yml.
    • kshana-mcp til det offisielle MCP-registeret via GitHub OIDC (null hemmeligheter); registeroppføringen (server.json) bruker OCI-pakketypen med en eier verifisert via etikett.
    • IDE-pluginen til JetBrains Marketplace via publishPlugin (token-styrt, valgfri utviklersignering) ved hver utgivelses-tag.

0.14.1 - 2026-06-08#

Lagt til#

  • Uavhengig kryssvalidering av referansesystemer med ANISE/SPICE (xval/anise-frames/). En frittstående crate utenfor workspace krysssjekker IAU 2006/2000A CIO-reduksjonen i kshana (kshana::cio::gcrs_to_itrs_matrix, GCRS→ITRS) mot ANISE (den rene Rust-reimplementasjonen av NAIF/SPICE) som roterer GCRF→ITRF93 fra JPLs earth_latest_high_prec.bpc, med de samme IERS finals2000A-parametrene for jordorientering gitt til begge sider, over åtte kvartalsvise epoker 2020–2023. De to uavhengige realiseringene av referansesystemet stemmer overens med en maksimal relativ rotasjon på 0,028″ — ≤ 0,86 m på bakken, ≤ 0,93 m i LEO, ≤ 3,6 m i GNSS-bane, noe som innfrir det mangeårige ROADMAP-målet «< 10 m» for krysskontroll av referansesystemer med god margin (den kompletterer, og erstatter ikke, de eksisterende bit-for-bit SOFA/ERFA-ankrene). Craten er isolert fordi anise + hifitime er MPL-2.0 / edition-2024 og aldri må komme inn i den publiserte avhengighetsgrafen til kshana, dens Cargo.lock, lisensporten cargo deny eller MSRV-bygget; ANISE er festet med default-features = false. Inkluderer en binærfil frame-xval (henter ~5 MB BPC, skriver ut en tabell, skriver report.{json,md}), en testport som hopper over seg selv når kernel/nettverk mangler, og en valgfri CI-jobb som bare kjøres ved workflow_dispatch (blokkerer aldri main). Dokumentert i docs/VALIDATION.md (CIO-raden) og ROADMAP.md.

Rettet#

  • Mobilvennlig playground. Rettet horisontal overflyt i playgroundens .panel på telefoner (et CSS-grid-element som er standard min-width: auto ble gjengitt ~100 px bredere enn visningsvinduet) via min-width: 0 og breddebeskyttede kontroller; verifisert uten feil ved 360 / 390 / 414 / 768 px. Justerte handlingsknappene "Pin to compare" / "Download report" (like marginbokser i flex-raden). Forstørret kjøreknapper, glidere, utvalgslister og navigasjonslenker til minstestørrelsen for berøringsmål på ~44 px (WCAG 2.5.5 / Apple HIG) på telefoner og berøringsenheter, med uendret størrelse på skrivebordet.

0.14.0 - 2026-06-08#

Rettet#

  • Robusthetsherding fra en adversariell battle-test-runde. (1) sbas_protection_level avviser nå ikke-endelig elevasjon/asimut/varians og negative eller ikke-endelige kovariansdiagonaler (en nesten-singulær geometri skalert opp av en liten σ kunne tidligere slippe gjennom den absolutte pivotporten og returnere en NaN VPL / absurd HPL som en gyldig Some — en stille integritetsfeil). (2) Den numeriske propagatoren (propagate/propagate_dopri) feiler lukket på en ikke-endelig starttilstand i stedet for å la den adaptive regulatoren spinne evig. (3) DEM-cellehjelperen kaster ikke lenger panic på et rutenett med én prøve (1×N). (4) Asimut i lunar_look_angle holdes strengt i [0, 360). (5) SphericalHarmonicField::from_gfc avviser ikke-fysiske (NaN / ikke-positive) GM/radius.

Lagt til#

  • Binærfilen validation_report + utgivelsesartefakt: en avhengighetsfri generator som lager en utskriftsklar HTML-valideringsoppsummering på én side som indekserer hver CI-håndhevet validering (SGP4 666/666, EGM2008, bit-for-bit referansesystemer, NIST Allan, IMU-datablad, ARAIM/SBAS, reproduserbarhet på 3 OS, dekning) til sin test og sin eksterne uavhengige referanse. Utgivelsesarbeidsflyten genererer kshana-validation-summary.html og legger den ved (med SLSA-proveniens) til hver tagget utgivelse.
  • numpy-interop-pytest + wheel-herding: tests/python/test_numpy_interop.py (kjøres i CI) pluss en festet manylinux-container og et verifiseringssteg med auditwheel show i wheel-bygget.
  • Veiledninger og undervisning: docs/tutorials/ (tre gjennomarbeidede veiledninger, annoterte scenarioer per fagområde, øvelser på nivå 1/2/3) med tests/tutorials.rs som fester hvert oppgitt tall til live motorutdata.
  • Artefakter for ekstern innsending (paper/, notebooks/, submissions/): et utkast til JOSS-artikkel, en notebook om kvante mot klassisk, og klare pakker for innsending til awesome-gnss / ESA Navipedia / NASA ASCL / ESA ESSR / ION/IAC, pluss FUNDING.yml — som klargjør de eksterne stegene for innsending.
  • Terrengreferert og kombinert alt-PNT-navigasjon (modulen altpnt): en TERCOM/SITAN-terrengmatchende navigator over en DEM (laster for .hgt + generator for syntetiske testdata) og en kombinert tyngde- + magnetisk (IGRF) + terrengbasert GPS-nektet navigator, eksponert som scenariotypene terrain-nav og combined-altpnt. Validert ved terrengmatchkonvergens (et kjent injisert avvik gjenfunnet) og en avgrenset feil i det kombinerte filteret over et GPS-nektet vindu.
  • LunaNet LANS-geometri (lunar): navngitte månesteder (Apollo 11/15/16, Shackleton-kanten) med autoritative selenografiske koordinater, overflatesiktevinkler (az/el/avstand), synlighet/dekning og DOP for stedet, validert mot Månens radius, de publiserte stedskoordinatene og identiteten for radial overhead på 90° elevasjon.
  • Veiledet nettleser-playground: glidere i veiledet modus, et faneinndelt utdatapanel, en førstegangsomvisning som overlegg, moduser for parametersveip og overlegg av flere kjøringer, en avhengighetsfri canvas/SVG 3D-banevisning (orbit-pakken gir nå ut et additivt eci_track), en embed/iframe-modus og nedlasting som HTML-rapport — hver med node-enhetstester i CI.
  • Datablad-validert IMU-feilmodell (tests/imu_allan_spec.rs): ADIS16465/16488/16460 ARW/VRW/bias-ustabilitet gjenfunnet fra den syntetiserte Allan-deviasjonen og kontrollert mot produsentens spesifikasjoner (NIST SP1065 / identifikasjon etter IEEE 952).
  • Validering av Allan-estimatorene i NIST SP1065 (tests/allan_nist_sp1065_1000point.rs): de fire estimatorene gjengir de publiserte referansedeviasjonene for 1000 punkter og konfidensgrensene i tabell 32.
  • SBAS / DO-229E beskyttelsesnivåer, L1/L5 ionosfærefri og et DO-316 compliance-kart (modulen sbas). sbas_protection_level danner den vektede geometrimatrisen fra hver satellitts elevasjon/asimut og feilbudsjettet UDRE/GIVE/airborne/tropo, inverterer normalmatrisen (delt orbit::invert4) og projiserer variansene til HPL/VPL via K-faktorene i DO-229E (PA 6.0/5.33, NPA 6,18). iono_free_l1l5 legger til den ionosfærefrie GPS L1/L5-pseudoavstanden (IS-GPS-705, γ₁₅ = 1.79327), validert til å kansellere motorens uavhengige førsteordens ionosfæreforsinkelse. do316_compliance_map sporer DO-316/DO-229E-kravene til de implementerende funksjonene. Validert mot lukkede formdefinisjoner av K-faktorene, numpy-referansegeometrien inv(GᵀG) og identiteten for kovarians via to ruter; krysskontrollen av overensstemmelse med publiserte PL-verdier fra RTKLIB/gLAB er dokumentert som under gjennomgang i docs/COMPLIANCE.md.
  • Full tesseral sfærisk-harmonisk tyngdekraft — EGM2008-feltet til grad/orden 70. En ny gravity_sh::SphericalHarmonicField evaluerer geopotensialet og akselerasjonen fra det i det jordfaste systemet ut fra fullt normaliserte C̄_nm, S̄_nm-koeffisienter, ved hjelp av den stabile normaliserte Legendre-rekursjonen til Holmes–Featherstone (avnormalisering ville gitt overflyt ved denne graden). De medfølgende koeffisientene er NGA-produktet EGM2008 (offentlig eiendom, via ICGEM), samlet i egm2008_data.rs og gjengitt bit-for-bit av tools/gen_egm2008.py fra den innsjekkede tools/egm2008_to70.gfc; enhver ICGEM-modell i formatet .gfc lastes via from_gfc. Validert mot tre uavhengige referanser: kollaps til punktmasse (kun C̄00 = −μr/|r|³), et felt med bare sonale ledd som gjengir den eksisterende forces::zonal_accel til ~1e-9, og den analytiske akselerasjonen som stemmer med endelig-differanse-gradienten av det direkte summerte potensialet til <1e-6.
  • Generell-relativistisk Lense–Thirring-akselerasjon (rammedragning) (forces::lense_thirring_accel, IERS 2010 lign. 10,12), det gravitomagnetiske leddet utover den eksisterende Schwarzschild-korreksjonen, koblet inn i den numeriske propagatoren via et nytt flagg ForceModel::lense_thirring(). Validert som lineært i jordens spinnmoment og 1–2 størrelsesordener under Schwarzschild-leddet, regimet for målingene med LAGEOS / Gravity Probe B.
  • Et trait Propagator som forener de analytiske og numeriske banepropagatorene. Den numeriske Cowell-propagatoren med kraftmodell er nå en førsteklasses likemann til SGP4: en ny type NumericalPropagator (starttilstand + ForceModel + Tolerance + valg av enten step-doubling eller Dormand–Prince Integrator) og Sgp4 implementerer begge propagator::Propagator, hvis state_at(t_seconds) -> StateVector returnerer den inertielle TEME-tilstanden i SI-enheter (m, m/s), slik at de to kan byttes mot hverandre bak en Box<dyn Propagator>. SGP4-implementasjonen er den eksakte km/min→SI-konverteringen av den iboende metoden (verifisert med en likhetstest); den numeriske implementasjonen klarer den samme sub-meter-porten mot eksakt Kepler gjennom trait-et, de to adaptive driverne stemmer overens, og en PropagatorError viser den underliggende SGP4-koden.

0.13.0 - 2026-06-08#

Denne utgivelsen lukker det største korrekthetsgapet i motoren: jordorientering og reduksjon av referansesystemer er nå gjort på nivå med en referanseimplementasjon (validert bit-for-bit mot ERFA/SOFA), integritetsstakken får ARAIM med to konstellasjoner på reelle GPS+Galileo-TLE-er, og lagene for propagering, kvantesensorer, måne/cislunar og geomagnetisme blir alle dypere — sammen med et typet Python-API, en rikere nettleser-playground og en reproduserbarhetsmatrise på tre OS. Høydepunkter:

  • Referansesystemer, bit-for-bit. Full IAU 2000A- og 2000B-nutasjon, presesjon etter IAU 2006, den CIO-baserte (X, Y, s) IAU 2006/2000A GCRS↔ITRS-reduksjonen, IERS-polbevegelse og utdata-systemene TEME→GCRS/ITRS — hver validert bit-for-bit mot referanserutinene i ERFA/SOFA.
  • ARAIM med to konstellasjoner (GPS + Galileo) på reelle TLE-er, med HPL/VPL, utdata som Stanford-diagram og en åpen docs/ARAIM_REFERENCE.md.
  • Cislunar PNT: en CR3BP-propagator for Jord–Måne, referansesystemene MCI↔MCMF, selenografiske koordinater og et kjørbart LunaNet-scenario for månens integritet.
  • Kvantesensing: Coriolis- og AC-Stark-systematikk for kaldatom-interferometeret, et driftsveip og validering mot Freier-budsjettet (2016).
  • IGRF-14 geomagnetisk hovedfeltmodell, selvstendig og validert.
  • Typet Python-API (PyO3 RunOutput/ScenarioMeta, .data(), scenario_kinds, validate_toml, typestubber) med et CI-wheelbygg, pluss førsteklasses GCRS/ITRS-utdata fra propagatoren og CCSDS OMM-eksport.
  • Troverdighet og reproduserbarhet: en head-to-head-sammenligning av SGP4-nøyaktighet mot den uavhengige craten sgp4, en CI-dekningsport (~97% linjer på src/) og en reproduserbarhetsmatrise på tre OS (ubuntu/macos/windows).

Endret#

  • Hvert playground-diagram følger nå nettstedets tema. Alle tolv SVG-diagramgeneratorene — resultat-/holdover-diagrammet (src/report.rs + src/chart.rs), Allan-deviasjonsdiagrammet (web/app.js) og alle scenariodiagram (src/hybrid.rs, jamming.rs, timetransfer.rs, spoof.rs, raim.rs Stanford + tilgjengelighet, lunar.rs, ensemble.rs, sweep.rs, gnss_sim.rs, fusion/pack.rs, inertial/mod.rs) — brukte kjølige marineblå paneler (#0e131b), kjølige grå akser/tekst og en skurrende rød/blå/lilla seriepalett. De bruker nå den varme grafittpaletten hele veien: --bg-paneler, varmt --line-rutenett, --fg-etiketter, med en konsekvent seriefordeling: kvante = honninggull (--accent-bright), klassisk = varm rav (--partial), spesifikasjon/grense = --crit. Sikkerhetskodede visninger beholder betydningen sin: RAIM Stanford-diagrammet forblir grønt (tilgjengelig) / rav (villedende) / rødt (farlig) / dempet stål (utilgjengelig), og HPL/VPL leses som gull/bronse.
  • Diagrammer er nå selvforklarende når de lagres/lastes ned. Begge diagrammene bakes inn tittelen i SVG-en (tittelen og undertittelen «lower is better» i Allan-diagrammet var tidligere bare HTML rundt bildet, så et lagret bilde hadde ingen bildetekst), og begge har en proveniensfot — Kshana v<version> · <scenario-hash> · kshana.dev — slik at et nedlastet diagram står på egne ben og forblir reproduserbart.
  • Hvert diagram har nå proveniensfoten. Foten — Kshana v<version> · scenario <hash> · kshana.dev — stemples sentralt for alle scenariotyper i api::run_toml (tidligere bare på holdover- og Allan-diagrammene), slik at ethvert lagret eller nedlastet bilde — fra playground, CLI-ens eksport av .chart.svg eller HTML-resultatkortet — identifiserer versjonen, scenariofingeravtrykket og kilden. Hashen er merket scenario for tydelighet og kommer fra resultatets scenario_hash der den finnes, med en reserve med kildehash for integritets-/månerapportene. Hva fingeravtrykket er og hvorfor det er der, er dokumentert i README-delen «Output» og docs/PROVENANCE.md.

Rettet#

  • raim::chi2_quantile og RAIM Stanford-støysamplerne er nå panikkfrie ved inndata utenfor område / ikke-endelige (et funn fra fuzzing som avhenger av rekkefølgen til read_dir, fra de nye ARAIM-scenarioene). chi2_quantile vokter nå p/k som normal_quantile (returnerer en grenseverdi i stedet for å panikke via assert!), og tilgjengelighetens Stanford-støy Normal klemmer til en strengt positiv σ — slik at integritets-/ARAIM-stakken aldri kaster panic på muterte eller feilkonfigurerte scenarioer.

Lagt til#

  • CI-matrise for kryssplattform-reproduserbarhet. En ny jobb reproducibility-matrix kjører reproduserbarhetstestene på ubuntu-latest, macos-latest og windows-latest ved hver push. Fordi hele resultat-JSON-en ikke er byte-identisk på tvers av OS-er (avvik i libm i siste ULP), kontrollerer den den plattforminvariante projeksjonen eksakt — inndatafingeravtrykket pluss utdataformen, festet per scenario som SHA-256-golden-filer i tests/golden/ av den nye tests/cross_platform_golden.rs — ved siden av de numeriske festene (golden.rs, til 1e-6), SGP4-tilstandene (sgp4_verification.rs, til 2e-5 km) og determinisme innenfor samme prosess (determinism.rs). Sammen beviser dette reproduserbarhet på tvers av plattformer på tre OS uten skjørheten ved eksakt byte-hashing av hele utdataen. docs/REPRODUCIBILITY.md dokumenterer oppdelingen.
  • Kodedekningsport i CI. En ny jobb coverage kjører cargo-tarpaulin med den LLVM-kildebaserte motoren, publiserer en lcov-rapport som byggeartefakt og håndhever et gulv for linjedekning på src/ (genererte datatabeller, CLI-inngangspunktet, testene og web-ressursene er utelatt). Målt linjedekning er ~97% på src/ (SGP4 og klokkemodulene ≥95%); porten er satt til 85% — over målet på ≥80% og klar av den målte verdien, slik at den fanger regresjoner uten å flakke. Et dekningsmerke publiseres i README.
  • SGP4/SDP4 head-to-head mot den uavhengige craten sgp4. En ny test (tests/sgp4_crate_comparison.rs) kryssvaliderer Kshanas propagator mot det mest brukte Rust-biblioteket for SGP4 (neuromorphicsystems/sgp4, lagt til som en dev-avhengighet kun for test) over de samme 666 AIAA 2006-6753-vektorene. Med begge kjørt på tyngdemodellen WGS72 som vektorene bruker, stemmer de to uavhengige implementasjonene overens til sub-mikron på jordnære og resonante baner og 4,12 mm i verste tilfelle på tvers av alle regimer, og begge gjengir referansetabellen tcppver.out. Den innsjekkede sammenligningstabellen (tests/fixtures/sgp4_comparison.md, regenerert via KSHANA_REGEN_FIXTURES=1) bryter resultatet ned per regime (LEO/MEO, dypt rom, ½-dags og 1-dags resonans) og noterer de fire bevisst patologiske tilfellene som craten avviser ved konstruksjon. De kjørende kontrollene holder begge innenfor 2e-5 km av referansen og stemmer overens innenfor 4e-5 km — en regresjonsvakt, ikke en engangsøvelse. Dette er konkurransedyktig dokumentasjon av kvalitet: korrekthet mot en uavhengig kodebase, ikke bare en statisk tabell. (Standardfunksjonen from_elements i craten bruker WGS84 og avviker derfor fra WGS72-referansen med ~km — vist ærlig i tabellteksten.)
  • CCSDS OMM-eksport kan nå nås ende-til-ende. OMM-skriveren (src/omm.rs) hadde tidligere ingen sti via CLI/API; middelelementene i et orbit-scenario kan nå publiseres som en CCSDS 502.0-B-2 OMM-katalog — én OMM KVN-melding per TLE-definerte satellitt — via kshana <orbit.toml> --export-omm out.omm, eller export_omm = true i scenarioet skriver automatisk <scenario>.omm (i likhet med den eksisterende --export-sp3). Hver melding bærer satellittens reelle NORAD-katalognummer, COSPAR internasjonale betegnelse (YYYY-NNNP) og epoke (CCSDS-form med dag i året), parset fra TLE-linje 1 av den nye tle::parse_tle_identity; navnelinjen blir OBJECT_NAME (ellers OBJECT <id>). CREATION_DATE er scenarioets epoke, ikke veggklokketid, slik at utdataen er reproduserbar. Nytt API: api::export_omm / api::auto_export_omm, OmmFile::from_tle_block, OrbitClockScenario::to_omm_string. Et syntetisk Walker- eller RINEX-scenario (uten TLE-middelelementer) gir feil i stedet for å skrive en tom fil. Validert mot det medfølgende øyeblikksbildet gps-ops med 30 satellitter (tests/sp3_export_roundtrip.rs).
  • Interaktive avlesninger ved hover på playground-diagrammene. Når markøren flyttes over et diagram, snapper et trådkors til nærmeste prøve og viser et verktøytips med verdi (web/hover.mjs, koblet inn i web/app.js). På Allan-diagrammet viser det τ og σ_y(τ) for hver klokke; på tidsseriediagrammene for scenarioer (klokke-holdover, dødregning, tidsoverføring, hybrid PNT, GNSS/INS) viser det tiden og verdien for hver serie i diagrammets egne enheter (ns / m / ps / utnyttelse), parset fra resultatet slik at avlesningen stemmer med kurven. Spesialiserte diagrammer (RAIM, spoof, sveip) får ikke noe overlegg. Diagrammene forblir selvforklarende blob-bilder (<img>) — overlegget er et gjennomsiktig trådkors + verktøytips på toppen, så nedlasting/sammenligning/eksport er urørt. Koordinatmatematikken (nærmeste prøve, markør→plottbrøk, polylinje-parsing) er enhetstestet (web/hover.test.mjs, kjøres i CI).
  • A/B-sammenligningsmodus i playground. Fest hvilken som helst kjøring som grunnlinje A, kjør et andre scenario, og de to vises side ved side med en deltatabell for kvalitetsmål (holdover, RMS/p95 for tidssynkronisering, tilgjengelighet) som farger vinneren per måltall (web/compare.mjs, koblet inn i web/app.js; deltalogikken er enhetstestet i web/compare.test.mjs, kjøres i CI). Alle verdier settes inn som tekst og alle diagrammer via blob <img>, slik at ingenting fra en scenariostreng noen gang injiseres som markup.
  • Nedlastingsknapper for diagram (SVG + PNG). Hvert playground-diagram har nå en verktøylinje "Download SVG / PNG" som passer til temaet (web/chartdl.mjs, koblet inn i web/app.js). SVG gir tilbake den trofaste, skalerbare originalen; PNG rasteriserer det samme selvforklarende bildet i 2x for lysbilder og dokumenter. Filene får navn med proveniens — kshana-<chart>-v<version>-<scenario-hash>.<ext> — og logikken for filnavn/størrelse er enhetstestet (web/chartdl.test.mjs, kjøres i CI).
  • IGRF-14 geomagnetisk hovedfeltmodell (src/igrf.rs). Det sfærisk-harmoniske standardfeltet fra IAGA (grad/orden 13, epoke 2025,0 + sekulær variasjon 2025–2030; koeffisientene er maskingenerert fra den offisielle igrf14coeffs.txt av tools/gen_igrf.py til src/igrf_data.rs, bit-for-bit reproduserbart). En Schmidt-normalisert syntese gir feltvektoren (nord/øst/ned) og avledede elementer (deklinasjon, inklinasjon, horisontal/total intensitet) på ethvert geodetisk sted/dato, pluss den geomagnetiske polen og dipolstyrken — det magnetiske motstykket til tyngdekartmatcheren for alternativ PNT-navigasjon. Validert selvstendig: syntesen stemmer med den eksakte lukkede formen for den vippede dipolen, hele det analytiske feltet av grad 13 stemmer med en endelig differanse av skalarpotensialet, dipolaksen gjengir den kjente geomagnetiske polen (~80,7°N, −72,7°E) og styrken ~29,7 µT, og det globale feltet er fysisk.
  • Typede Python-bindinger (src/python.rs). Utover run/run_full med streng inn/streng ut eksponerer modulen nå en typet klasse RunOutput (.json, .svg, .summary og en tilgangsmetode .data() som returnerer resultatet parset til en innebygd Python-dict — ingen JSON-reparsing, kan pakkes inn i NumPy), pluss run_typed, scenario_kinds() (parset liste med metadata-dicts) og validate_toml() (en liste over feilmeldinger som ikke kaster unntak). Leverer en typestub for PEP 561 (kshana.pyi + py.typed) for mypy/pyright/editorer og en hurtigstart i docs/PYTHON_API.md. De eksisterende funksjonene er uendret.
  • Førsteklasses utdata-systemer for propagatorer (src/orbit.rs: enumen Frame + position_in_frame + state_gcrs). Enhver Propagator (Kepler, SGP4, RINEX, GLONASS, SP3) kan nå gi posisjonen sin i TEME, GCRS (≈ J2000) eller ITRS (jordfast) — TEME er nativt, GCRS via den validerte TEME→GCRS-reduksjonen, ITRS ved å kjede den inn i IAU 2006/2000A CIO-rotasjonen gcrs_to_itrs — og den fulle GCRS-tilstanden (posisjon + hastighet) via state_gcrs. Den inertielle utdataen for gjeldende dato er ikke lenger bare TEME.
  • CIO-basert IAU 2006/2000A-reduksjon fra himmelsk til terrestrisk system (src/cio.rs). Den moderne, jevndøgnsfrie kjeden GCRS↔CIRS↔ITRS: CIP-koordinatene X, Y avlest fra IAU 2006/2000A bias-presesjon-nutasjon-matrisen (gjenbruker den validerte FW-presesjonen + 2000A-nutasjonen med justeringen eraNut06a P03), 66-leddsserien for CIO-lokalisatoren s (eraS06, maskingenerert fra ERFA-referansen av tools/gen_s06.py til src/cio_s06_data.rs, bit-for-bit reproduserbar), GCRS→CIRS-matrisen (eraC2ixys), jordrotasjonsvinkelen (eraEra00) og den fulle GCRS→ITRS-rotasjonen (eraC2tcio, sammensatt med den eksisterende IERS-polbevegelsen). Validert bit-for-bit mot den publiserte eraXys06a (X=0.5791308482835292617e-3, Y=0.4020580099454020310e-4, s=-0.1220032294164579896e-7 ved JD_TT 2453736,5), samt testvektorene for eraC2ixys og eraEra00. CIO-kjeden og den eldre reduksjonen TEME med jevndøgn/GMST-1982 vises å stemme overens opp til den dokumenterte forskjellen på ≈2·(jevndøgnsligningen) i konvensjonen for sideraltid. Dette er den strenge reduksjonen som jevndøgn/GMST-stien tilnærmet.
  • Full IAU 2000A-nutasjonsserie (src/nutation.rs: nutation_iau2000a, nutation_matrix_2000a). Hele MHB2000-modellen — 678 luni-solare + 687 planetariske ledd — nøyaktig til < 0,1 mas, ved siden av den eksisterende trunkeringen med 77 ledd i 2000B. Tabellene er maskingenerert fra IAU SOFA / ERFA-referansen nut00a av tools/gen_nut00a.py til src/nutation_iau2000a_data.rs (generatoren gjengir den innsjekkede filen bit-for-bit), og hele serien — både settene med fundamentale argumenter fra IERS-2003 og MHB2000 og de planetariske lengdegradene — er validert bit-for-bit mot den publiserte testvektoren eraNut00a (Δψ = −0.9630909107115518e-5, Δε = 0.4063239174001679e-4 ved JD_TT 2453736,5, til 1e-13 rad). Standard TEME→GCRS-reduksjon beholder 2000B-serien (~1 mas, under kjedens forenkling av rotasjon i hastighetssystemet); nutation_matrix_2000a eksponerer matrisen for gjeldende dato på < 0,1 mas for kallere som trenger den.
  • Kjørbart scenario for månens integritet (kind = "lunar-integrity", scenarios/lunanet-araim.toml). Kobler beregningen av beskyttelsesnivå ved månens sørpol (src/lunar.rs: LunarScenario → south_pole_hpl_pass) inn i scenariokjøreren med en JSON-rapport LunarReport og et SVG-diagram for HPL mot tid, slik at cislunar integritetstilfellet kan nås rett fra CLI. Den viser gapet ærlig: med LANS σ_URE på 30 m overstiger HPL ved sørpolen (≈ 260–450 m) en varslingsgrense på 50 m (0 % tilgjengelig) — integritet for PNT på månen er ennå ikke oppnådd.
  • Tilgjengelighet for ARAIM med to konstellasjoner på reelle GPS+Galileo-TLE-er, og kobling til scenariokjøreren (src/raim.rs, src/orbit.rs, scenarios/araim-gps-galileo.toml). Legger til araim_dual_constellation_availability (den avanserte ARAIM-motoren — feil i enkeltsatellitter og i hele konstellasjoner — kjørt over et tidsrutenett) og visible_positions_labeled, og kobler den inn i kjøreren IntegrityScenario via et flagg araim_dual, slik at en multi-GNSS ARAIM-studie kan nås rett fra TOML. En test med reelle data (tests/araim_dual_real_data.rs) på medfølgende Celestrak-øyeblikksbilder fra 2026-06-07 for GPS+Galileo viser at å slå sammen Galileo løfter ARAIM-tilgjengeligheten fra 0,21 til 0,67 under en krevende VAL på 12 m (10,5→21,8 satellitter i sikte), mens modusen som er robust mot konstellasjonsfeil er fundamentalt begrenset med bare to konstellasjoner — den kvantitative grunnen til at robust integritet med to konstellasjoner trekker mot en tredje konstellasjon eller SBAS. Ærlig rest: den numerisk eksakte gjengivelsen av EU ARAIM TN Table A-3 mot én versjonslåst epoke, og en Zenodo-post for testdata.
  • Det sirkulære begrensede tre-legeme-problemet (CR3BP) for systemet Jord–Måne (src/cr3bp.rs). En ny kjerne for cislunar dynamikk som to-legeme-/SGP4-propagatorene ikke kan gi: bevegelsesligninger i roterende system (cr3bp_accel), en RK4-propagator (propagate_cr3bp), Jacobi-konstantens integral (jacobi_constant) og de fem Lagrange-punktene (lagrange_points). Validert mot lukkede/publiserte anker: de kollineære punktene Jord–Måne (L1 ≈ 0,83692, L2 ≈ 1,15568, L3 ≈ −1,00506), de eksakte likesidede L4/L5 = (½−μ, ±√3/2, 0), alle fem bekreftet som likevektspunkter i kraftfeltet, Jacobi bevart til integratorens presisjon under propagering, og den utenfor-planet-gjenopprettende kraften som gjør halo-/NRHO-baner mulig. Dette er grunnlaget for å representere en reell NRHO. Ærlig rest: differensialkorrigerte periodiske startbetingelser for NRHO 9:2, den eksentriske/efemeridebaserte (DE) modellen og den avnormaliserte transformasjonen inn i de selenosentriske referansesystemene i src/lunar.rs.
  • IERS-polbevegelse og reduksjonen TEME→ITRF (src/frames.rs). Legger til polar_motion_matrix (SOFA iauPom00: W = Rx(−y_p)·Ry(−x_p)·Rz(s′) med TIO-lokalisatoren s′), pef_to_itrf / itrf_to_pef og teme_to_itrf — GMST-basert TEME→PEF-rotasjon etterfulgt av polbevegelse — som fullfører en ITRF-presis jordfast posisjon oppå den rene GMST-versjonen teme_to_ecef (polbevegelse er en effekt på titalls meter ved banens radius). x_p/y_p er observerte IERS-størrelser som kalleren leverer. Ærlig rest: en fullt CIO-basert (X, Y, s)-kjede og en numerisk krysskontroll mot ANISE/SPICE på <10 m gjenstår som videre arbeid.
  • Systematikk i kaldatom-interferometeret, driftsveip og en validering mot en publisert enhet (src/inertial/quantum_imu.rs, docs/QUANTUM.md). Utvider det førsteprinsipp-baserte CAI-akselerometeret med de to ledende deterministiske systematikkene: Coriolis/rotasjon-fasen Φ_cor = 2·k_eff·v_⊥·Ω·T² (coriolis_phase, med den tilsvarende akselerasjonsbiasen 2·Ω×v via coriolis_accel_bias) og fasen for AC-Stark lysforskyvning Φ_LS = (δ_LS,1 − δ_LS,3)/Ω_eff (ac_stark_phase, som kanselleres av symmetrien π/2–π–π/2 for en konstant forskyvning). Legger til cai_drift_sweep (posisjonsdrift ved dødregning mot syklustid — kjernen i en sammenligning kvante mot klassisk) og en valideringstest mot den mobile gravimeteren til Freier et al. 2016 (arXiv:1512,05660): det modellerte gulvet for kvanteprojeksjonsstøy ligger under, og innenfor ~2 størrelsesordener av, den publiserte kortsiktige støyen på 96 nm/s²/√Hz. docs/QUANTUM.md oppdatert. Ærlig rest: systematikk fra bølgefront/stråleretning, oppløsning av fringe-flertydighet, den eksakte reproduksjonen av flytester for CARIOQA-PMP / Boeing-AOSense (krever publiserte PSD-er for plattformen) og en JS-playground-forhåndsinnstilling.
  • Cislunar referansesystemreduksjon og en integritetsberegning for månens sørpol (src/lunar.rs). Utvider den lunare ARAIM-motoren med rotasjonen MCI↔MCMF (månesentrert inertiell ↔ månefast) (mci_to_mcmf / mcmf_to_mci, en forenklet middelrotasjonsmodell med månens sideralrate), selenografisk breddegrad/lengdegrad/høyde (mcmf_to_selenographic / selenographic_to_mcmf) og south_pole_hpl_pass — en landet mottaker i Artemis-området mot et representativt sett med LunaNet-reléer over en passering på 24 h, som ærlig kvantifiserer integritetsgapet: med nominell LANS σ_URE på 30 m er beskyttelsesnivået endelig, men overstiger en varslingsgrense på 50 m for overflateoperasjoner. Ærlig rest: den presise LANS NRHO-efemeriden (en cislunar bane med 3 legemer), den fysiske librasjonen / presesserende månepolen (DE421/SPICE) og et LunaNet TOML-scenario gjenstår som videre arbeid.
  • Integritetsstøttemelding for ARAIM, Stanford-diagram som SVG og den åpne ARAIM-referansen (src/raim.rs, docs/ARAIM_REFERENCE.md). Legger til en eksplisitt IntegritySupportMessage (σ_URA / σ_URE / b_nom / P_sat / P_const, med WG-C-referanseverdiene for GPS+Galileo og omformerne .fault_priors() / .dual_fault_priors() inn i motorene for enkeltfeil araim_raim og konstellasjonsomfattende feil araim_dual_raim), en frittstående renderer stanford_svg av Stanford-integritetsdiagrammet (de fire sonene, grensen PL = error, hjelpelinjene for varslingsgrense, én fargekodet markør per epoke) og docs/ARAIM_REFERENCE.md som dokumenterer algoritmen, ISM, feilhypotesene, kontrakten for beskyttelsesnivå og fordelen med to konstellasjoner. Testene viser gevinsten i geometri/redundans (å slå sammen en andre konstellasjon strammer inn HPL for enkeltfeil) og toleranse for konstellasjonsfeil (brukeren med to konstellasjoner overlever tap av en hel konstellasjon; en bruker med én konstellasjon kan ikke). Ærlig rest: å numerisk gjengi EU ARAIM TN Table A-3 / tilgjengelighetstallet på 15–25 % mot et versjonslåst reelt TLE-øyeblikksbilde, en Zenodo-post for testdata og å koble araim_dual_raim inn i scenariofilkjøreren.
  • IAU 2000B-nutasjon og den fulle inertielle reduksjonen TEME→GCRS/J2000 (src/nutation.rs). Legger til del to og tre av en ekte inertiell reduksjon av referansesystem oppå den eksisterende presesjonen etter IAU 2006: den luni-solare MHB2000-nutasjonsserien med 77 ledd (nutation_iau2000b, standard trunkering IAU 2000B, nøyaktig til ~1 mas) med de fundamentale Delaunay-argumentene og SOFA-nutasjonsmatrisen iauNumat, og Vallado-kjeden AIAA-2006-6980 TEME→TOD (jevndøgnsligningen) → TOD→MOD (nutasjon) → MOD→GCRS (bias-presesjon) eksponert som teme_to_gcrs(r, v, jd_tt) / gcrs_to_teme. Serien, argumentene og enhetskonstantene er transkribert fra IAU SOFA / ERFA-referansen nut00b og validert bit-for-bit mot den publiserte testvektoren eraNut00b (Δψ, Δε til 1e-13 rad). Ærlig rest: den fulle IAU 2000A-serien med 678 ledd (<0,1 mas), en numerisk krysskontroll mot ANISE/SPICE på <10 m og polbevegelse gjenstår som videre arbeid (se ROADMAP.md).

0.12.0 - 2026-06-06#

Denne utgivelsen leverer Kshanas første ikke-analytiske banepropagator — en Cowell-integrator med en hierarkisk kraftmodell med seks perturbasjoner (to-legeme + sonale J2–J6 + epokestyrt tredjelegeme Sol/Måne + solstrålingstrykk med konisk umbra-/penumbraskygge + atmosfærisk luftmotstand + den post-newtonske relativistiske Schwarzschild-korreksjonen) drevet av et valg mellom to adaptive integratorer (RK4 med step-doubling og det innebygde paret Dormand–Prince RK5(4)) — sammen med et lag for manøver og baneutforming (impulsive og endelige brenninger, en Izzo Lambert-løser og et porkchop-sveip), et alt-PNT-lag med matching av tyngdekart som gjenfinner et 60 minutter langt GPS-nektet spor til under 500 m, en pipeline for banebestemmelse med batch + sekvensiell, og en full 17-tilstands tett koblet GNSS/INS UKF med dødregning med kvante-CAI. Hver numeriske funksjon er festet mot analytisk referanse eller en håndutledet lukket form; perturbasjonene som er av som standard, lar de utgitte golden-filene være urørt.

Lagt til#

  • Post-newtonsk (Schwarzschild) relativistisk korreksjon (forces::relativistic_accel + propagator::ForceModel::relativity). Legger til den dominerende generell-relativistiske perturbasjonen på en jordnær bane — hovedårsaken til den relativistiske perigeumforskyvningen — i formen β = γ = 1 fra IERS / Montenbruck–Gill: a = (μ/c²r³)·{[4μ/r − v²]·r + 4(r·v)·v}. Som atmosfærisk luftmotstand er den hastighetsavhengig, så den følger med i høyresiden til integratoren (r, v) via [accel_rv], valgfri og av som standard. Validert selvstendig: på en sirkulær bane kollapser den til den lukkede formen 3μ²/(c²r³)·r̂ (rent radial og utover, komponenter utenfor aksen er eksakt null); dens forhold til to-legeme er det lærebokmessige ≈1.9·10⁻⁹ i LEO (signaturen til μ/(c²r)); et tilfelle med radiell hastighet stemmer med den håndforenklede μ(4μ + 3v²r)/(c²r³); og i propagatoren forstyrrer den banen uten å dissipere den — store halvakse er bevart til godt under en meter/døgn, den strukturelle motsetningen til luftmotstandens monotone forfall. Fordi den er av som standard, er golden-filene for to-legeme/J2/sonale urørt. Tuning av PPN-parametrene (β,γ) og Lense–Thirring-leddet for rammedragning gjenstår som videre arbeid.
  • Konisk umbra- + penumbraskyggemodell (forces::conical_shadow), nå brukt av solstrålingstrykket. Oppgraderer den binære eklipsen med umbra-sylinder til en jevn faktor ν ∈ [0,1]: Solen og Jorden modelleres som skiver med tilsynelatende vinkelradier a = asin(R☉/d☉), b = asin(Rₑ/|r|) og tilsynelatende sentravstand c, og ν er én minus andelen av solskiven som skjules av jordskiven (arealet av linseoverlappet mellom sirklene) — full sol for c ≥ a+b, total umbra for c ≤ b−a, ringformet for c ≤ a−b og en kontinuerlig penumbra imellom. srp_accel bruker den nå, slik at SRP-kraften avtar jevnt gjennom eklipsen i stedet for å slå av/på. Legger til den nominelle IAU-verdien forces::SOLAR_RADIUS. Validert selvstendig: ν = 1 i full sol og ν = 0 dypt i umbra (eksakt), en jevn monoton penumbra (ν stiger 0 → ~½ ved c = b → 1 over båndet [b−a, b+a]), og den koniske penumbraen strekker seg utover umbra-sylinderen (et punkt som den binære sylinderen kaller fullt opplyst, er 0 < ν < 1 for kjeglen). Den enklere cylindrical_shadow er fortsatt tilgjengelig; solrandmørkning og skyggen fra den oblate Jorden gjenstår som videre arbeid.
  • Innebygd integrator Dormand–Prince RK5(4) (integrator::dopri54_step / integrator::integrate_dopri + propagator::propagate_dopri). Legger til det standard innebygde Butcher-tabellparet Dormand–Prince (1980) ved siden av den eksisterende RK4-driveren med step-doubling: sju FSAL-trinn gir en 5. ordens løsning og et 4. ordens feilestimat fra ett sett evalueringer (7 mot 11 funksjonskall per steg), et billigere estimat av lokal feil. Den adaptive driveren gjenbruker den samme RMS-feilnormen og stegregulatoren 0.9·(1/err)^(1/5), så den er et direkte alternativ; propagator::propagate_dopri eksponerer den på kraftmodellen for baner. Validert selvstendig: det innebygde feilestimatet er O(h⁵) (å halvere steget kutter det ~32×); DP5(4) integrerer y' = y til e og den harmoniske oscillatoren over 50 perioder med energibevaring til <1e-6; den når det samme endepunktet ved samme toleranse med færre funksjonsevalueringer enn step-doubling (uten å ofre nøyaktighet); og propagate_dopri klarer den samme porten med analytisk referanse som RK4-stien — sub-meter mot den eksakte Kepler-løsningen med universelle variabler over en 24 h LEO-bane — mens de to driverne stemmer overens til <1 m på en J2..J6-bane (ingen lukket form). Høyere innebygde par (RKF7(8) / DOP853) gjenstår som videre arbeid.
  • Atmosfærisk luftmotstand koblet inn i propagatoren som dens første hastighetsavhengige kraft (forces::atmospheric_density + forces::drag_accel + propagator::ForceModel::drag). Legger til den stykkvis eksponentielle atmosfæren fra Vallado Table 8-4 ρ = ρ0·exp(−(h−h0)/H) (28 bånd fra havnivå forbi 1000 km, avgrenset under overflaten) og den kvadratiske luftmotstanden a = −½ · ρ(h) · (C_D·A/m) · |v_rel| · v_rel mot den medroterende atmosfæren v_rel = v − ωₑ ẑ × r (forces::EARTH_ROTATION_RATE = 7.2921151467e-5). Fordi luftmotstand avhenger av hastighet, får ForceModel en ny accel_rv(t, r, v), og høyresiden til integratoren sender nå hastighet (f(t,[r;v]) = [v; a(t,r,v)]); den rene posisjonsavhengige accel_at er uendret, så de konservative leddene og golden-filene er urørt. Validert selvstendig: tettheten forankres i havnivåverdien 1,225 kg/m³, avgrenses under overflaten, avtar monotont gjennom LEO, ligger i solmiddelbåndet ~1e-12 kg/m³ ved 400 km, og dens gjenvunne lokale skalahøyde (≈ 58 km ved 400 km) er fysisk; luftmotstanden motvirker den medroterende relative hastigheten med størrelsen ~2e-6 m/s² i LEO for C_D·A/m = 0.02 m²/kg; og — den sentrale signaturen — luftmotstand er dissipativ: en bane på 300 km mister spesifikk energi monotont og store halvakse forfaller med en avgrenset ~km/døgn, der vakuum-grunnlinjen bevarer energi til <1e-9. NRLMSISE-00-termosfæretettheten (klausulen om tetthet for luftmotstand på < 5 %) gjenstår som videre arbeid.
  • Solstrålingstrykk koblet epokestyrt inn i propagatorens kraftmodell (forces::srp_accel + propagator::ForceModel::solar_radiation). Legger til kanonkule-SRP-modellen a = ν · P☉ · cᵣ · (A/m) · (AU/d)² · d̂ med en eklipsefaktor med sylinderskygge (forces::cylindrical_shadow, ν ∈ {0 1}): strålingstrykket P☉ = Φ☉/c fra den moderne totale solinnstrålingen på 1361 W/m² (≈ 4,5398·10⁻⁶ N/m²), flukstapet etter kvadratloven (AU/d)² og det radiale dyttet bort fra Solen. Den går på den samme epokestyrte høyresiden som tredjelegemet, og henter Solen fra ephem én gang ved den framskrevne epoken epoch_jd_tt + t/86400, som deles mellom tredjelegemet Sol og SRP. Kan settes sammen: with_zonals_j2_j6().third_body(true, true, epoch).solar_radiation(1.5, 0.02). Validert selvstendig mot håndutledede signaturer: strålingstrykket ved 1 AU festes til lærebokverdien ≈ 4,5398·10⁻⁶ N/m²; SRP for en fullt opplyst LEO-satellitt er bit-identisk med kanonkuleformelen, peker bort fra Solen og ligger i båndet ~1,36·10⁻⁷ m/s² for cᵣ = 1,5, A/m = 0,02 m²/kg; å doble avstanden til Solen firedeler størrelsen (kvadratloven); sylinderskyggen formørker bare umbra-sylinderen (anti-solvendt og innenfor én jordradius fra linjen Jord–Sol) og gir nøyaktig null SRP i eklipse; og i propagatoren forstyrrer SRP en LEO-bane med en liten avgrenset størrelse som skalerer ~lineært med A/m — mens en modell uten perturbasjoner forblir bit-for-bit tidsuavhengig, slik at golden-filene for to-legeme/J2/sonale er urørt. Den koniske umbraen/penumbraen (jevn ν ∈ [0 1]), atmosfærisk luftmotstand og ekstern kryssvalidering mot GMAT/Orekit gjenstår som videre arbeid.
  • Epokestyrt tredjelegeme Sol/Måne koblet inn i den tidsvarierende høyresiden i propagatoren (propagator::ForceModel::third_body / accel_at). Tredjelegemeperturbasjonen er ikke lenger et frittstående kraftledd — den integreres nå av Cowell-propagatoren som en genuint tidsvarierende kraft: hver evaluering av høyresiden sampler posisjonene til Sol/Måne fra ephem ved den framskrevne epoken epoch_jd_tt + t/86400 (gjenbruker precession::julian_centuries_tt for omregningen mellom dager og århundrer), slik at perturberne beveger seg langs banene sine under integreringen i stedet for å være frosset ved starten. Kan settes sammen med hvilken som helst tyngdemodell (ForceModel::with_zonals_j2_j6().third_body(true, true, epoch)). Validert selvstendig: Sol-leddet i høyresiden er bit-identisk med third_body_accel evaluert ved efemeridens posisjon for det øyeblikket ved både t = 0 og t = 1 day (som beviser koblingen 86400 s ↔ 1 døgn ↔ 1/36525 århundre eksakt), perturberen forflytter seg ~2,6·10⁹ m/døgn mellom prøvene (ikke frosset), de øyeblikkelige tidevannsstørrelsene i LEO treffer lærebokbåndene ~5·10⁻⁷ m/s² (Sol) og ~1,1·10⁻⁶ m/s² (Måne, ≈ 2× Solen), hvert legeme forstyrrer banen over et døgn målbart, men forblir avgrenset, og den samme starttilstanden propagert ved epoker et kvart år fra hverandre gir en annen bane (tidevannsaksen roterer 90°) — mens en modell uten noen av legemene aktivert er bit-for-bit tidsuavhengig, slik at golden-filene for to-legeme/J2/sonale er urørt. Efemeridenøyaktighet på DE-nivå og ekstern kryssvalidering mot GMAT/Orekit gjenstår som videre arbeid.
  • Månens efemeride med lav presisjon (ephem::moon_position), som fullfører paret Sol/Måne for tredjelegemer. Legger til den lunare serien med lav presisjon fra Montenbruck & Gill (§3.3.2) ved siden av Sol-modellen, slik at den legemeuavhengige forces::third_body_accel nå kan drives av begge himmellegemer med ingen ekstern DE/SPK-kernel. Validert selvstendig mot håndutledede lunare signaturer: den geosentriske avstanden holder seg innenfor den reelle perigeum-/apogeumsonen (~356 500–406 700 km) over en måned og månedsmiddelet gjenvinner den store halvaksen på ~384 400 km; den ekliptiske breddegraden overstiger aldri banehelningen på ~5,3° for månebanen (kontrollert ved å projisere på ekliptikkens pol i ekvatorialkoordinater, som validerer breddegradsserien og skråstillingsrotasjonen sammen); Månens retning kommer tilbake til innenfor 1° etter én siderisk måned (27,3217 d) og dens daglige bevegelse holder seg i det fysiske båndet 12–15°/døgn; og tredjelegemeperturbasjonen fra Månen på en LEO-satellitt har størrelsen ~1,1·10⁻⁶ m/s² fra læreboka (≈ det dobbelte av Solens). Posisjonsnøyaktighet på DE-nivå, atmosfærisk luftmotstand og SRP gjenstår som videre arbeid.
  • Tredjelegemetyngde (Sol) med en innebygd efemeride med lav presisjon (forces::third_body_accel, ephem::sun_position). Legger tredjelegemeperturbasjonen til kraftmodellen: a = GM₃·((s−r)/|s−r|³ − s/|s|³) (direkte tiltrekning minus det indirekte leddet som det geosentriske systemet må trekke fra), med Sol-posisjonen levert av den nye modulen ephem med analytisk serie med lav presisjon fra Montenbruck & Gill — ingen ekstern DE/SPK-kernel nødvendig for en kjøring med lav presisjon. Validert selvstendig: akselerasjonen stemmer med den eksakte gradienten av sitt eget forstyrrende potensial (third_body_potential), perturbasjonen forsvinner i geosenteret og har størrelsen ~5·10⁻⁷ m/s² på en LEO-satellitt fra læreboka, og Sol-efemeriden treffer håndutledede J2000-anker — avstand i perihel ≈ 1,471·10¹¹ m, deklinasjon ≈ −23° nær desembersolverv, en tilsynelatende bevegelse på ≈ 1°/døgn (≈ 90° per kvartår), og en avstand som holder seg innenfor jordbanens sone 0,983–1,017 AU over et helt år. Leverer tredjelegemehalvdelen av kraftmodelltrinnet i milepælen for den numeriske propagatoren (Månen leveres i en følgeoppføring ovenfor); posisjonsnøyaktighet på DE-nivå, atmosfærisk luftmotstand og SRP gjenstår som videre arbeid.
  • Kraftmodell med sonale harmoniske J2–J6 (forces::zonal_accel / zonal_potential). Utvider kraftmodellen i Cowell-propagatoren utover J2 til hele jordens sonale felt til og med grad 6 (standard publiserte EGM-96 unormaliserte J2..J6), koblet inn i propagatoren som ForceModel::with_zonals_j2_j6(). Akselerasjonen er den eksakte analytiske gradienten av det forstyrrende sonale potensialet R(r) = −(μ/r)·Σ Jₙ(Re/r)ⁿPₙ(z/r) (Legendre-polynomer ved oppadgående rekursjon), validert på tre uavhengige måter: den reduseres til den 666-vektor-validerte j2_accel til maskinpresisjon når den begrenses til [J2]; den stemmer med den numeriske gradienten av sitt eget potensial gjennom hele J2..J6-feltet (gullstandardkontrollen for konservative felt); og de odde leddene J3 mot de partalls J2/J4..J6 viser sin karakteristiske nord–sør-(anti)symmetri under z → −z — asymmetrien med pæreform. En propagert J2..J6-bane bevarer total energi (kinetisk + sentral + sonalt potensial) til ~1e-8 over et døgn og forstyrrer banen med bare J2 med en liten ikke-null størrelse. Dette leverer trinn 2 («J2–J6 sonale harmoniske») i milepælen for den numeriske propagatoren; det tesserale EGM-feltet av høy grad, luftmotstand, SRP, tredjelegeme og ekstern kryssvalidering mot GMAT/Orekit gjenstår som videre arbeid.
  • Numerisk (Cowell) banepropagator (src/propagator.rs). Kshanas første ikke-analytiske propagator (resten av banestakken er analytisk SGP4/SDP4): den kobler kraftmodellen to-legeme + J2 (src/forces.rs) inn i den adaptive RK4-driveren med step-doubling (src/integrator.rs) som f(t,[r;v]) = [v; a(r)], med en bryter ForceModel. Validert mot analytisk referanse som er sterkere enn et numerisk verktøy ville vært: den uforstyrrede banen gjengir den eksakte Kepler-løsningen med universelle variabler til sub-meter over en 24-timers LEO-bane (en strammere port enn «mot en numerisk referanse < 10 m» som milepælen formulerer), spesifikk energi og dreieimpuls bevares til ~1e-9 relativt, og J2-nodalregresjonen gjengir den lukkede formen j2_secular_rates til førsteordens teori (innenfor 2 %, residualen O(J2²)). Legger også til solve_kepler_checked, en Newton-løser for Keplers ligning som returnerer Err i stedet for et stille feil svar når den ikke konvergerer innenfor et avgrenset iterasjonsbudsjett (tilfellet e = 0.999 nær perigeum). Ærlig omfang: kraftmodellen er bare to-legeme + J2 — det tesserale EGM-feltet av høy grad (200×200 + laster), luftmotstand (NRLMSISE-00), SRP, tredjelegemekrefter og en ekstern kryssvalidering mot GMAT/Orekit gjenstår som videre arbeid.
  • 60-minutters GPS-nektet matching av tyngdekart til < 500 m (run_gps_denied_gravity_nav). Utdyper alt-PNT-laget mot valideringsmålet Quantum Wayfarer i ESA NAVISP: et kjøretøy flyr et spor på ~700 km gjennom et helt ett timers GNSS-bortfall — der den inertielle løsningen driver til ≈ 70 km — og et kaldatom-gravimeter pluss en hierarkisk grov-til-fin partikkel-/rutenettmatcher gjenvinner den konstante INS-driften til ≈ 145 m (< 500 m), en reduksjon på > 480×. Gravimeterets reelle hvitstøygulv injiseres som en deterministisk seedet sekvens, slik at matcheren aldri får støyfri referanse, men kjøringen likevel er eksakt reproduserbar (verifisert bit-identisk, og stabil til noen få meter over støyrealisasjoner). En test på regresjonsnivå viser at raffineringen er nødvendig — et enkelt grovt rutenett stopper opp på ~2 km, og bare den tretrinns raffineringen bryter barrieren på 500 m. Nytt innsjekket scenario scenarios/gps-denied-gravity-nav.toml. Raden docs/CAPABILITY.md forblir ærlig delvis (fortsatt ingen medfølgende EGM2008-kart) med bevisene oppdatert til resultatet < 500 m over 60 minutter. Ærlig omfang uendret: lavgrads sfærisk-harmonisk felt + syntetiske mascons; en Monte Carlo over realisasjoner av feil i kartrepresentasjonen gjenstår som videre arbeid.
  • Register over overdrevne påstander + regresjonsvakt (docs/CLAIMS-VS-REALITY.md, tests/no_overclaims.rs). Avslutter sporet for ærlighet/fjerning av påstander: de fjorten overdrivelsene en tidligere revisjon katalogiserte (OC-0…OC-13) er nå alle GREEN — de sterke påstandene (OC-0 koblet klokke+posisjon-Kalman, OC-2 jamming J/S→C/N₀→tap av lås, OC-7 Mach–Zehnder CAI-fysikk, OC-8 ARAIM HPL/VPL) er erstattet av leverte, testede funksjoner i stedet for mykere formuleringer, og de gjenværende radene er fjernet som påstander slik at de stemmer med koden. En ny CI-test skanner de levende offentlige flatene (README, CAPABILITY, GLOSSARY, web/) og feiler hvis en utfaset, uforbeholden overdrivelsesformulering dukker opp igjen, slik at en GREEN-rad ikke i det stille kan regrediere. «Integritets»-kvalitetsmålet per kjøring forblir ærlig merket filterets selvkonsistens (ikke luftfartsintegritet); den reelle ARAIM HPL/VPL vises separat slik at de to aldri blandes sammen.
  • Navigasjon med matching av tyngdekart (GPS-nektet alt-PNT). En ny src/gravimeter.rs legger til alt-PNT-laget som studiene om tyngdekartmatching i ESA NAVISP (Quantum Wayfarer / QT-CCI) etterlyser: en målemodell for kaldatom-gravimeter der hvitstøygulvet er utledet fra ASD for CAI-akselerometeret (σ = ASD/√τ); et sfærisk-harmonisk felt for tyngdeanomali av lav grad, fullt normalisert (validert mot de lukkede Legendre-funksjonene P̄₁₁=√3·cosφ, P̄₂₀=(√5/2)(3sin²φ−1), P̄₂₂=(√15/2)cos²φ og en håndutledet enkeltleddsanomali på 1,897 mGal) pluss syntetiske mascons for de lokale egenskapene av høy grad; og et partikkelfilter for matching av tyngdekart (sammensatt av mapmatch + particle_filter) som gjenfinner et GPS-nektet spor fra anomalisekvensen det flyr gjennom. En innsjekket NAVISP-benchmark (scenarios/gravity-map-nav.toml) kutter en fri inertiell drift på ~73 km til noen få km. Ærlig omfang: Kshana inkluderer ikke det fulle koeffisientsettet EGM2008 2190° — feltet er lav grad + mascons, ikke et reelt kart med høy oppløsning; EGM/EIGEN-laster, magnetisk kart, terrengstøttet SLAM og kobling av kind= i scenariomotoren med et SVG-driftsdiagram gjenstår som videre arbeid. docs/CAPABILITY.md "Gravity-map / alt-PNT navigation" → delvis.
  • Manøvermodellering og et første fotfeste for baneutforming. En ny src/maneuver.rs legger til det første laget for baneutforming over SGP4: impulsive ΔV-noder som anvender en hastighetsdiskontinuitet og fører en kovarians på 6×6 videre (deterministisk brenning ⇒ identitet som tilstandsovergang; utførelsesfeilens kovarians roteres fra brennsystemet — ECI eller LVLH — inn i hastighetsblokken), en integrasjon av endelig brenning (konstant skyv over en brennbue med masse som tilstand) der oppnådd ΔV kontrolleres mot den lukkede Tsiolkovsky-rakettligningen til bedre enn 0,01 %, en Izzo-2015-løser for Lambert med én runde (r1, r2, flytid ⇒ v1, v2), en eksakt Kepler-propagator med universelle variabler (to-legeme-referanse) og et porkchop-sveip som avbilder et rutenett av oppskytingsepoke × ankomstepoke til avgangs-C3 og ankomst-V∞, gitt ut som en 2-D JSON-array for konturtegning i nettleseren. Valideringen er selvstendig og sterkere enn en avlesning fra en veiledning: hver Lambert-utdata sendes tur-retur gjennom Kepler-propagatoren (den må lande tilbake på r2), og porkchop-minimumet kontrolleres mot den analytiske Hohmann-overføringens C3-gulv for to koplanare sirkulære baner. Kshana posisjonerer dette som ytelsessimuleringslaget over GMAT/Orekit, ikke en erstatning (grener med flere runder og en reell planetefemeride er utenfor omfanget). Ti tester.
  • Full 17-tilstands tett koblet GNSS/INS UKF med dødregning med kvante-CAI. En ny src/fusion/tightly_coupled17.rs bærer hele den inertielle navigasjonstilstanden et tett koblet filter estimerer — [position, velocity, attitude-error, accelerometer bias, gyro bias, clock bias, clock drift] (17 tilstander) — propagert gjennom strapdown-mekaniseringen drevet av målt spesifikk kraft og vinkelrate, med den småvinkelbaserte rotasjonen C ≈ I + [ψ×] fra kropp til inertiell slik at holdningsfeil kobler seg inn i horisontal akselerasjon (standard INS-tiltkobling). Under et GNSS-bortfall ruller den videre på IMU alene; prosessstøyen for hastighets-random-walk er den utledede q_va (crate::inertial::quantum_imu) for kaldatom-interferometer-akselerometeret, slik at dødregningsdriften er den som er begrenset av kvantesensoren — et bortfall på 120 sekunder holder seg begrenset til noen hundre meter mot de kilometerne et fritt INS i navigasjonsklassen ville nådd. Oppdateringen med pseudoavstand/avstandsrate går gjennom det delte unscented-filteret (med α = 1 for velkondisjonerte vekter ved denne tilstandsstørrelsen). Fem tester: identitet i målemodellen, integrasjon med konstant hastighet med perfekt IMU, GNSS-støtte, estimering av akselerometerbias og benchmarken for CAI-begrenset 120-s bortfall.

0.11.0 - 2026-06-05#

Endret#

  • Ærlig innramming av kvantepositioneringen. Den overordnede beskrivelsen er nå gjennomgående en "PNT-resilience simulator with quantum-sensor performance models" i README-slagordet, siteringslinjen, CITATION.cff (tittel + sammendrag) og bannergrafikken — i stedet for den løsere markedsføringsformuleringen "hybrid quantum/classical PNT simulator". Avsnittet What it is / is not i README får en eksplisitt avgrensning "It is not (yet)" (ikke en fysikkmotor for atominterferometri fra første prinsipper, ikke en GNSS-mottaker/PVT-løser, ikke et verktøy for oppdragsutforming), og en ny ROADMAP.md på toppnivå gjør kvantefysikklaget til et P2-punkt (Mach–Zehnder CAI-fase, projeksjonsstøy, vibrasjonstensor) slik at leserne vet at fysikken fra første prinsipper er planlagt og kommer, ikke forlatt. Ingen endring i oppførsel eller API.

Lagt til#

  • Avveiningsstudie for konstellasjonsutforming: Walker-utformingssveip med en Pareto-front, JSON for revisit-tid og en validering av Walker-formelen på under én kilometer. src/walker.rs får walker_design_sweep, som kjører et rutenett planes × sats_per_plane (f.eks. en avveining på 3×3) ved en fast inklinasjon og tabulerer, per utforming, dekningsandelen, verste PDOP og maks./middels revisit-gap; pareto_front flagger de ikke-dominerte utformingene (færre satellitter, mer dekning, lavere PDOP, kortere revisit), og WalkerDesignReport::to_json serialiserer cellene og Pareto-fronten — inkludert revisit-tidsfeltene — som JSON. Ny validering fester generatoren til Walker-formelen i:T/P/F: satellitter i samme spor i nabobaner vises å avbildes på hverandre av en eksakt rotasjon R_z(2π/P) til under 1 km over hele 24 h med SGP4-propagering (J2-pustingen med kort periode er fellesmodus og kanselleres), og sporene i banen er bekreftet med avstanden 2π/S i middel. Bygger på det innsjekkede øyeblikksbildet av reelle Celestrak gps-ops fra 2021-07-28 (scenarios/orbit-sgp4-gps.toml, brukt av testene for scenariodekning og SP3-tur-retur).
  • Avansert overføring av tid og frekvens: TWSTFT, GNSS common-view, PPP, optisk, IEEE-1139 potenslov-tilpasning og et klokkeensemble. En ny src/timetransfer_adv.rs bygger de operative overføringsmetodene på de eksisterende lukkede formene for Sagnac/common-view og Allan-stabilitetsverktøyene. twstft_sagnac gir Sagnac-korreksjonen for Two-Way Satellite Time and Frequency Transfer som sløyfesummen over tre hopp, nøyaktig lik BIPMs lukkede form Δt = 2·A·ω_E/c² (krysskontrollert av den uavhengige twstft_sagnac_bipm); run_twstft gir ut en døgnserie T_A − T_B og dens TDEV. gnss_common_view_series tar enkeltdifferanser mellom to syntetiske bakkestasjoner slik at satellittklokken kanselleres. iono_free_combination + ppp_receiver_clock er den ionosfærefrie PPP-kombinasjonen og løsningen for mottakerklokke mot en (syntetisk) referanse i SP3-klassen, som kansellerer førsteordens ionosfære eksakt. rytov_variance, fried_parameter og den lognormale lognormal_fading med enhetsmiddel modellerer turbulensindusert scintillasjon i en optisk fri-rom-lenke. fit_power_law_psd er en full IEEE-1139 minste-kvadraters tilpasning av h_α med fem koeffisienter til Allan-variansekurven (alle fem kanoniske støyprosesser samtidig) med den dominerende prosessen rapportert per τ-tiår. ensemble_timescale danner en invers-varians-vektet papirtidsskala hvis Allan-deviasjon faller strengt under den beste bidragsytende klokken. 31 enhetstester; valideringsmålene er lukkede former og syntetisk referanse — en reell innlesing av BIPM Circular-T / IGS SP3 gjenstår.
  • IONEX-ionosfærekart: filparser, tidsinterpolasjon og skrå obliquity-kartlegging. src/ionex.rs får parse_ionex, som leser filformatet IONEX (headerens rutenettdefinisjon + blokker START/END OF TEC MAP) inn i en sekvens av IonexMap, normaliserer filens breddegradsrekkefølge fra nord til sør til et TecGrid med positivt steg og skalerer verdier med 10^EXPONENT. interpolate_tec_in_time blander to påfølgende kart til en spørreepoke, og obliquity_factor / slant_tec avbilder vertikal TEC på en skrå stråle via enkeltlags tynnskall-faktoren M(z) = 1/cos z′ (sin z′ = (Rₑ/(Rₑ+H))·sin z). Sammen med den eksisterende rutenettmodellen gjør disse et målt globalt ionosfærekart fra IGS til en brukbar skrå forsinkelse.
  • Konstellasjonsutforming: dimensjonering med streets-of-coverage + sammenligning av flere konstellasjoner. src/walker.rs får min_satellites_streets_of_coverage, en idealisert løser for minste antall satellitter med streets-of-coverage — fra den eksisterende halvvinkelen for dekning λ og gatens halvbredde c dimensjonerer den den nær-polare konstellasjonen for kontinuerlig enkeltdekning globalt som p = ⌈π/(2c)⌉ baner (f.eks. trenger et plan med 4 satellitter i GPS-høyde 2 baner, 8 satellitter), og rapporterer None når satellittene er for spredt til å danne en kontinuerlig gate. compare_constellations er verktøyet for sammenligning av flere konstellasjoner: det skårer hver navngitte Walker-utforming på samme stasjon/vindu via pdop_sweep og returnerer dekning / PDOP / størrelse side ved side. Ærlig omfang: den sømeksakte Rider-korreksjonen ved grensen mellom motroterende plan og en 3-D dekningsglobus gjenstår som videre arbeid.
  • Spoof-deteksjon i flere lag: paritetsdetektor for RAIM-konsistens + fusjon av lag. src/spoof_monitors.rs får det tredje og siste deteksjonslaget og fusjonstrinnet: parity_raim_test tilpasser med minste kvadrater posisjons-/klokkeløsningen til et redundant sett pseudoavstander og tester den gjenværende vektede kvadratsummen av residualer mot terskelen χ²(m−4) — og flagger en forskjøvet delmengde av satellitter mens en fellesmodus-skjevhet (absorbert av mottakerklokken) korrekt blir stående usynlig for RAIM, ikke tilslørt. fuse_spoof_layers kombinerer lagene for paritet, AGC og SQM til én vektet beslutning som registrerer hvilke lag som utløste. En Monte Carlo karakteriserer detektoren: empirisk P_fa ≈ 0,068 mot et utformingspunkt på 0,05, med sannsynligheten for uteblitt deteksjon som faller fra 0,885 ved en spoofing-skjevhet på 2σ til 0,16 ved 8σ. Ærlig omfang: krysskontroll mot bestemte publiserte (Spirent / ION GNSS+) testvektorer for spoofing krever de eksterne datasettene og gjenstår som videre arbeid.
  • Valideringsensemble for koblet mot frakoblet Kalman. En Monte Carlo med 100 forsøk i src/fusion/coupled.rs kvantifiserer verdien av å ta med kryss-kovariansen posisjon↔klokke: en trofast inline-grunnlinje uten kobling (validert bit-for-bit mot den eksisterende CoupledPntFilter) behandler de samme dataene med krysblokkene nullet, og etter nesten-degenererte pseudoavstander pluss en bestemmelse med bare klokke gjenvinner det koblede filteret posisjon til 2,97 m RMS mot 48,8 m for det frakoblede filteret, og vinner 97 av 100 forsøk — klokkebestemmelsen skjerper posisjonen bare gjennom korrelasjonen som den frakoblede pakken forkaster. Dette fullfører valideringspakken for Kalman-korrekthet (Joseph-form, PSD-sikkerhet, NEES/NIS-konsistens og nå ensemblet for det koblede filteret).
  • Pipeline for banebestemmelse (batch + sekvensiell). En ny src/orbit_determination.rs gjenvinner en satellitts banetilstand [r, v] fra avstandssporing fra bakkestasjoner og setter sammen tre eksisterende deler: kraftmodellen to-legeme + J2 (src/forces.rs) og RK4-integratoren (src/integrator.rs) propagerer en kandidattilstand over buen, en målemodell for avstand predikerer hver stasjonsavstand, og Gauss–Newton-batchkorrektoren (src/batch_ls.rs) driver kandidaten til beste tilpassede tilstand (determine_orbit_batch). Den samme dynamikken og avstandsmodellen driver også en sekvensiell rekursiv bestemmelse på det eksisterende unscented-filteret (determine_orbit_sequential). Fire tester validerer den: avstandsprediksjon over buen; batchgjenfinning til sub-meter / mm·s⁻¹ fra støyfrie avstander; batchgjenfinning til ~2 m med en residual etter tilpasning ved støygulvet på 5 m (signaturen til en konsistent minste kvadraters tilpasning); og sekvensiell gjenfinning til innenfor titalls meter. Ærlig omfang: målinger av avstandsrate/Doppler og vinkler, en analytisk J2-tilstandsovergangsmatrise og masking av stasjonssynlighet er videre arbeid.
  • Tett koblet GNSS/INS UKF-navigator. En ny src/fusion/tightly_coupled.rs kobler den eksisterende unscented Kalman-kjernen (src/fusion/ukf.rs) til en fungerende tett koblet navigator over den åttetilstands [px,py,pz,vx,vy,vz,b,d] (ECEF-posisjon/hastighet pluss mottakerens klokkebias og -drift i avstandsenheter). Den tar inn de rå satellittmålingene — pseudorange (ρ = |p − sᵢ| + b) og range_rate/Doppler (ρ̇ = (p − sᵢ)·(v − ṡᵢ)/|p − sᵢ| + d) — i stedet for en ferdigdannet posisjonsbestemmelse, slik at TightlyCoupled (med propagate/propagate_orbital/ update_gnss) fortsetter å korrigere med færre enn fire satellitter og ruller gjennom GNSS-bortfall på sin propagerte dynamikk. Fem tester validerer den ende-til-ende, inkludert akseptscenarioene fra milepælen: geometrien for pseudoavstand/Doppler mot håndverdier; støyfri konvergens til sub-meter med fem satellitter; et tilfelle med tre satellitter som konvergerer fra ~212 m til ~13 m der en PVT fra øyeblikksbilde ikke engang kan dannes; et bortfall på 120 sekunder med konstant hastighet innenfor 50 m; og — hovedakseptansen — en 30 minutter lang kurvet LEO-passering (reell to-legeme + J2-bane) med et GNSS-bortfall på 120 sekunder, holdt til 0,77 m RMS over passeringen og 2,9 m i verste tilfelle gjennom bortfallet. Den banebaserte rullingen setter sammen den eksisterende tyngdekraftmodellen (src/forces.rs) og RK4-integratoren (src/integrator.rs) til UKF-prosessmodellen (propagate_orbital), slik at filteret følger banens krumning — noe en rulling med konstant hastighet ikke kan (krumningen alene er ~58 km over 120 s i LEO). Ærlig omfang: den banebaserte rullingen bruker kraftmodellen to-legeme + J2 i stedet for rå IMU-spesifikk kraft (for en ikke-drevet orbital plattform sammenfaller de); å ta inn en feiltilstand for strapdown-IMU og iono/tropo-korreksjoner i sløyfen er videre arbeid.
  • Målemodell for map-matching (navigasjon referert til terreng/tyngde). En ny src/mapmatch.rs leverer målemodellen som gjør det eksisterende partikkelfilteret med sekvensiell viktighetsresampling (src/particle_filter.rs) til en fungerende GPS-nektet navigator: field_likelihood (en gaussisk sannsynlighet for feltmatch) og map_match_likelihood, som sampler et hvilket som helst georeferert referansefelt — terrenghøyde (TRN) eller en tyngdeanomali — ved en partikkels posisjon og vekter den etter hvor godt den stemmer med kjøretøyets målte verdi. Feltet er en hvilken som helst sampler Fn(lat, lon) -> value, så det kan settes sammen med det bilineære rutenettet i src/ionex.rs eller en closure. To tester forankrer det — sannsynligheten topper seg (=1) ved perfekt match og faller til e^(−½) ved én sigma, og et partikkelfilter over en markant syntetisk terrengflate gjenfinner den sanne posisjonen til innenfor 0,1. Ærlig omfang: de reelle referansekartene (SRTM-høyde, EGM/EIGEN-tyngdeanomali) og lasterne for dem er videre arbeid.
  • Integritet for cislunar PNT (lunar ARAIM). En ny src/lunar.rs anvender ARAIM-motoren MHSS på jordsiden på en navigasjonstjeneste i LunaNet-stil på månen med månens parametere (σ_URE ≈ 30 m mot GPS 0,6 m, P_sat ≈ 1e-4): lunare konstanter, en selenosentrisk øst/nord/opp-basis og hjelper for himmelgeometri, og lunar_araim (HPL/VPL). Tre tester forankrer det — den ortonormale selenosentriske basisen, geometrien for skrå avstand og den eksakte lineære skaleringen av beskyttelsesnivået med σ_URE (månens 30 m gir et 50× større beskyttelsesnivå enn den samme geometrien ved GPS 0,6 m — den kvantitative grunnen til at PNT-integritet på månen er vanskelig). Ærlig omfang: den presise LANS NRHO-efemeriden, feilbudsjettet for signal i rommet og reduksjonen av referansesystemet MCI↔MCMF er videre arbeid.
  • Todelte (høypresisjons) julianske datoer. En ny src/jd2.rs legger til Jd2, en juliansk dato delt i en heltallig day og en brøkdel frac i [0,1) (konvensjonen i SOFA/hifitime), med new/from_parts/add_seconds/diff_seconds/total. Differanser mellom nære epoker forblir eksakte til gulvet for f64 der en JD med én f64 taper ~50 µs nær J2000. Fire tester forankrer den: tur-retur, normalisering av brøkdelen, eksakt gjenfinning av mikrosekunder (med feilen for én f64 demonstrert ved siden av) og additiv/reversibel sekundaritmetikk.
  • Skriver for CCSDS OMM (Orbit Mean-Elements Message). En ny src/omm.rs utfyller efemeriskriveren oem med meldingen med middelelementer: OmmFile::from_tle avbilder SGP4/TLE-middelelementer til OMM-enheter (middelbevegelse i rev/day, vinkler i grader, pluss BSTAR), og to_omm_kvn serialiserer KVN-formen CCSDS 502.0-B-2 på standardiseringsløpet — slik at en Kshana-bane kan brukes av ethvert verktøy som forstår OMM i stedet for som en spesialtilpasset TLE. To tester forankrer enhetskonverteringen TLE→OMM (≈ 15,5 rev/day, 51,6° inklinasjon osv.) og at de påkrevde KVN-nøkkelordene finnes. Ærlig omfang: KVN-formen og TLE-avbildningen leveres her; XML-gjengivelsen (ndm/omm) og en tur-retur med en referanseparser er videre arbeid.
  • Partikkelfilter med sekvensiell viktighetsresampling. En ny src/particle_filter.rs legger til den ikke-lineære, ikke-gaussiske estimatoren bak kartstøttet, GPS-nektet navigasjon (terrengreferert eller matching av tyngdekart): predict (propager partikler gjennom dynamikken + gaussisk prosessstøy), update (revekt etter en sannsynlighet for måling per partikkel), systematisk resample, degenerasjonsmonitoren effective_sample_size og det vektede middelestimatet. Seks tester forankrer den deterministiske kjernen eksakt — ESS over 1…N, systematisk resampling som velger indekser i forhold til vekt, den konvekse kombinasjonen i det vektede middelet, en gaussisk sannsynlighet som trekker estimatet mot målingen, resampling til uniform oppførsel og seedet determinisme i predict. Ærlig omfang: motoren leveres her; referansekartene (SRTM-høyde, EGM-tyngdeanomali) og målemodellen for kart er videre arbeid (rutenett + bilineær sampler i ionex ville tjent et tyngde-/terrengkart like godt).
  • TEC-ionosfærekart i IONEX-stil. En ny src/ionex.rs legger til et alternativ med målt ionosfære til den kringkastede Klobuchar-modellen: en TecGrid (et regulært breddegrad/lengdegrad-rutenett med vertikal TEC, et globalt ionosfærekart fra IGS) med bilineær interpolasjon ved et gjennomtrengningspunkt (vtec_at, avgrenset utenfor rutenettet) og førsteordens forsinkelse Δ = 40.3·TEC/f² (vtec_to_delay_m, delay_at). Fire tester forankrer den: 1 TECU ≈ 0.162 m ved L1 med skaleringen 1/f², nodeeksakt interpolasjon, bilineære midtpunkter som midler hjørnene og kantavgrensede spørringer utenfor rutenettet. Ærlig omfang: rutenettet og interpolasjonen leveres her; parsing av filformatet IONEX, tidsinterpolasjon mellom kart og kartleggingsfunksjonen for skrå stråle er videre arbeid.
  • Geometriske korreksjoner for tidsoverføring (Sagnac + GNSS common-view). En ny src/timegeo.rs legger til de to deterministiske effektene en reell klokkesammenligning må ta hensyn til, som supplerer den stokastiske toveismodellen i timetransfer: sagnac_correction (Δt = (ω_E/c²)·(x₁y₂ − x₂y₁), forsinkelsen fra den roterende Jorden — titalls ns for kontinentale grunnlinjer) og common_view_offset, enkeltdifferansen for GNSS common-view som kansellerer satellittklokkefeilen eksakt og gjenvinner forskjellen mellom stasjonene. Tre tester forankrer dem på eksakte referanser: Sagnac på ≈ 33 ns for en ekvatorial kvartomdreining, antisymmetri og de radiale/polare nulltilfellene, og eksakt kansellering av satellittklokken. Ærlig omfang: et fullt budsjett for TWSTFT-transponder/maskinvareforsinkelse og en ionosfærefri PPP-løsning for tidsoverføring er videre arbeid.
  • Kraftmodell for baner (to-legeme + J2). En ny src/forces.rs legger til akselerasjonsmodellen en numerisk propagator integrerer: two_body_accel (−μ·r/|r|³), oblatenhetsperturbasjonen j2_accel (den lukkede ECI-formen) og gravity_accel som summerer dem — bruk den sammen med src/integrator.rs som f(t,[r;v]) = [v; a(r)]. Den eksponerer også de analytiske sekulære J2-ratene (j2_secular_rates): nodal regresjon Ω̇, apsidal rotasjon ω̇ og drift i middelanomali Ṁ. Seks tester forankrer fysikken på eksakte referanser: μ/r² for to-legeme-leddet, den lukkede J2-formen ved ekvator (~10⁻³ av to-legeme-størrelsen), den kritiske inklinasjonen (63,4349°) som fryser perigeum (ω̇ = 0), nodal regresjon for ISS (Ω̇ ≈ −5°/day) og den østover driften for en retrograd solsynkron bane. Ærlig omfang: bare to-legeme + J2; J3–J6, luftmotstand, SRP og tredjelegeme er videre arbeid.
  • Delbare permalenker for scenarioer. En ny src/permalink.rs legger til en avhengighetsfri Base64-kodek etter RFC 4648 (standardalfabetet +/ med padding og et URL-sikkert alfabet -_ uten padding) og omslagene encode_scenario / decode_scenario, slik at en TOML fra playground kan kodes til en spørreparameter ?s= og deles som en URL. Eksponert for nettleseren som wasm-bindinger encode_permalink / decode_permalink. Fire tester forankrer den på de kanoniske testvektorene i RFC 4648 ("foobar" → "Zm9vYmFy" osv.), en URL-sikker tur-retur for scenario (ingen +///= å escape), avvisning av ugyldige symboler og en tur-retur for alle 256 byte. Ærlig omfang: kodeken og bindingene leveres her; Share-knappens UI i playground, flerseriediagrammet med Plotly/D3 og A/B-sammenligningsmodusen er videre arbeid.
  • Gauss–Newton batch minste kvadrater (den differensielle batchkorrektoren). En ny src/batch_ls.rs legger til estimeringskjernen som en batch-banebestemmelse (eller enhver parametertilpasning) hviler på: gauss_newton lineariserer en brukerlevert modell h(x) med en Jacobi-matrise med sentral endelig differanse, danner og løser de vektede normalligningene (HᵀWH)·Δx = HᵀW·(z − h(x)) (gjenbruker den testede matriseinversen) og itererer til konvergens med vekter per måling. Fire tester forankrer den: en lineær linjetilpasning som når den eksakte vektede minste kvadraters løsningen, en ikke-lineær tilpasning a·exp(b·t) som gjenvinner de sanne parametrene, en 3-D avstands-multilaterasjon som gjenvinner en kjent posisjon fra støyfrie avstander (varianten av banebestemmelse) og avvisning av underbestemte inndata eller inndata med ulike dimensjoner. Ærlig omfang: dette er den generiske korrektormotoren; den banespesifikke målemodellen for avstand/avstandsrate/asimut-elevasjon, den analytiske J2-tilstandsovergangsmatrisen og validering mot publiserte tilfeller er videre arbeid.
  • RF-lagsmonitorer for spoofing (AGC-effekt og SQM). En ny src/spoof_monitors.rs legger til to uavhengige spoofdetektorer i mottakerens frontend som utfyller den klokkestøttede tidsspoofmonitoren i spoof: en AGC-effektmonitor (combine_power_dbm inkoherent effektsum + AgcMonitor) som flagger den overskytende mottatte effekten en spoofsender legger til utover en konfigurerbar dB-margin, og en signalkvalitetsmonitor (bpsk_autocorr trekantet kodeautokorrelasjon + SqmMonitor) som flagger Early-minus-Late-ubalansen i korrelatoren som multipath/meaconing/replay fører med seg. Fire tester forankrer de eksakte lukkede formene (3,01 dB for en dobling av effekt, aggregatet 10·log10(N), den trekantede R(τ)=1−|τ| og varslingsterskelen på 10 % for Early/Late). Ærlig omfang: den fulle paritetsspoofdetektoren for RAIM-konsistens, flerlagsfusjonen av monitorutdataene og validering mot publiserte spoofingvektorer fra Spirent/ION GNSS+ er videre arbeid.
  • Adaptiv numerisk ODE-integrator. En ny src/integrator.rs legger til den første delen av en numerisk propagator (Kshanas banepropagering er ellers analytisk SGP4/SDP4): et generisk Runge–Kutta-steg av fjerde orden (rk4_step) over et hvilket som helst førsteordens system y' = f(t, y) og en adaptiv driver (integrate) som kontrollerer lokal feil med step-doubling (Richardson-ekstrapolasjon) med standard stegregulator 0.9·(tol/err)^(1/5) og logikk for å akseptere/avvise. Seks tester forankrer den på eksakte løsninger: den eksponensielle y' = y → e til < 1e-9, feilreduksjonen på ~16× per halverte steg som beviser fjerde ordens konvergens, bevaring av energi/retur for den harmoniske oscillatoren over en full periode, og den adaptive driveren som oppnår en stram toleranse med variable steg. Ærlig omfang: dette er integratorkjernen og feilkontrollen dens; de innebygde tabellene Dormand–Prince RK5(4)/RKF7(8) og den hierarkiske kraftmodellen for baner (to-legeme + J2–J6 + luftmotstand + SRP + tredjelegeme) som gjør den til en NumericalPropagator er videre arbeid.
  • Unscented (sigmapunkt) Kalman-filter. En ny src/fusion/ukf.rs legger til det skalerte unscented Kalman-filteret (Julier & Uhlmann; Wan & van der Merwe) som en generell estimator med n tilstander over brukerlevert prosess- og målefunksjoner — sigmapunktestimatoren en tett koblet GNSS/INS-navigator bruker når modellen for pseudoavstand/Doppler er sterkt ikke-lineær og Jacobi-matrisen i et EKF forringes. Den inkluderer den støttende tette lineære algebraen (Cholesky-faktor for spredningen av sigmapunkter, Gauss–Jordan-invers for innovasjonskovariansen) og en Joseph-fri oppdatering P⁺ = P⁻ − K S Kᵀ. Seks tester fester den, der de viktigste utnytter den eksakte egenskapen at for en lineær modell gjengir den unscented transformasjonen Kalman-filteret til numerisk presisjon (predict, update og en full syklus predict+update er alle sammenlignet med et håndkjørt lineært KF, pluss en analytisk 1-D Bayes-posteriorkontroll og identitetene for Cholesky/invers). Ærlig omfang: dette er estimatormotoren; den tett koblede GNSS/INS-navigatoren med 17 tilstander, målemodellen for pseudoavstand/Doppler og valideringsscenarioet med bortfall er videre arbeid.
  • Beskyttelsesnivåer for ARAIM med to konstellasjoner. En ny araim_dual_raim utvider ARAIM med enkeltfeil (araim_raim) med konstellasjonsomfattende feilmodus fra EU ARAIM / DO-316: ved siden av hypotesene feilfri og per satellitt bidrar hver konstellasjon (merket per satellitt) med én hypotese som fjerner alle satellittene i den på én gang, med prior P_const (en ny DualFaultPriors { p_sat, p_const }). Hver hypotese legger et ledd til den samme MHSS-integritetssummen, slik at VPL/HPL er de minste grensene der den totale P_HMI holder seg innenfor budsjettet over feilfri + enkelt-SV + feil per konstellasjon (Bonferroni-delingen av falsk alarm er over alle N + C hypoteser). Med P_const = 0 er resultatet bit-for-bit araim_raim; en bruker med én konstellasjon returnerer None mot sin egen konstellasjonsfeil (den kan ikke ekskluderes) — som er nettopp grunnen til at dekning med to konstellasjoner betyr noe. Fire tester dekker ekvivalensen, utvidelsen av beskyttelsesnivået, utilgjengeligheten for én konstellasjon og validering av inndata, og gjenbruker det eksisterende maskineriet for delløsninger med løsningsseparasjon.
  • Presesjon etter IAU 2006 (Fukushima–Williams-vinkler og bias-presesjonsmatrise). En ny src/precession.rs implementerer presesjonen etter IAU 2006 (P03; Capitaine, Wallace & Chapront 2003): de fire Fukushima–Williams-vinklene (γ̄, φ̄, ψ̄, ε̄_A) som polynomer i TT-julianske århundrer (fw_angles) og rotasjonsmatrisen for bias-presesjon fra GCRS til middel for datoen, bygget fra dem via SOFA-konstruksjonen iauFw2m (precession_matrix, med hjelperne gcrs_to_mod / mod_to_gcrs). Dette er den første delen for inertielt referansesystem oppå den eksisterende GMST-baserte reduksjonen frames. Åtte tester validerer mot lukkede anker — middels ekliptikkskråstilling for J2000 ε̄ = 84381.406″ = 23.4392794°, de publiserte konstantleddene i vinklene, akkumuleringen av generell presesjon ψ̄ ≈ 5039.998″ over et århundre, matriseortonormalitet og det = +1, nesten-identitetsverdien (bare referansesystembias) ved J2000, og nettorotasjonsvinkelen ≈ 1.40°/århundre. Ærlig omfang (ROADMAP.md): bare presesjon — nutasjonen IAU 2000A med 678 ledd, den fulle kjeden TEME→GCRS og en numerisk krysskontroll mot SOFA/ANISE på µas/<10 m er videre arbeid.
  • Fysikk for kaldatom-interferometer-(CAI)-akselerometer fra første prinsipper. src/inertial/quantum_imu.rs modellerer et atominterferometer av Mach–Zehnder-type med tre pulser fra første prinsipper i stedet for fra et datablad: effektiv bølgevektor k_eff = 4π/λ, interferometerfase Φ = k_eff·a·T², kvanteprojeksjonsstøy (shot noise) σ_Φ = 1/(C·√N), akselerasjonsfølsomhet per skudd, kontrastforfall C(t) = C₀·e^(−t/τ) og — poenget — CaiAccelerometer::q_va(), som utleder den hvite akselerasjons-PSD-en som det klassiske AccelModel allerede bruker, fra antall atomer, avhørstid og kontrast. Modellen dekker nå også vibrasjonskobling — det dominerende leddet i reelle enheter: overføringsfunksjonen fra akselerasjon til fase for interferometeret |H(ω)| = (4/ω²)sin²(ωT/2) (accel_transfer_function), fasevariansen for hvit PSD σ_Φ² = k_eff²·S_a·T³/3 (vibration_phase_variance_white, med en numerisk kryssjekk av båndintegralet vibration_phase_variance_band), den rang-1 projeksjonen langs strålen beam_axis_projection og CaiAccelerometer::vibration_phase_noise / vibration_limited_accel (sistnevnte reduseres til gulvet √(S_a/(3T)), uavhengig av k_eff). Elleve tester verifiserer fysikken for hånd (Rb-87 k_eff ≈ 1.61×10⁷, Φ(1 g) ≈ 1.58×10⁴ rad, σ_a ≈ 0.13 µg/skudd gulv for shot noise mot et vibrasjonsgulv på ≈ 5,9 µg, 1/T², 1/√N og skaleringslovene for T³). Ærlig omfang i docs/QUANTUM.md: dette spenner over gulvet for projeksjonsstøy og det vibrasjonsbegrensede regimet over det; laserfasestøy, systematikk fra Coriolis og lysforskyvning og valideringsscenarioene for PHARAO/CARIOQA er videre arbeid.
  • Kvante-CAI-akselerometer koblet inn i inertialscenarioet. Et akselerometer i et inertialt dødregningsscenario løses nå til en ny ImuKind — Classical (den eksisterende sensoren med koeffisienter fra datablad) eller QuantumCai når det har en valgfri blokk [cai] (CaiCfg: bølgelengde, pulsavstand, antall atomer, kontrast, syklustid og en valgfri plattform-vibration_psd). En sensor av typen quantum_cai har PSD-en q_va for hastighets-random-walk utledet fra interferometerfysikken — gulvet for shot noise pluss, når en vibrasjons-PSD er oppgitt, bidraget som er begrenset av vibrasjon, i kvadratur — i stedet for en oppgitt koeffisient, og kjøringens proveniens registrerer at støyen er utledet fra fysikk. Feltet cai er skip_serializing_if = "Option::is_none", slik at eksisterende scenarioer utelater det og serialiseres byte-identisk (scenariohashen er uendret). Fem tester dekker utledningen, kvadratursummen for vibrasjon, valget mellom Classical/QuantumCai, hash-stabil serialisering og en ende-til-ende kjøring drevet av CAI.
  • Optimalisering av konstellasjonsutforming og geometri for streets-of-coverage. src/walker.rs får optimize_walker_design, en gradientfri rutenettoptimalisator som søker i utformingsrommet {planes × sats × inclination} og returnerer den beste Walker-utformingen under et valgt DesignObjective — MinSatellitesForCoverage, MaxCoverage eller MinWorstPdop — over det allerede validerte PDOP-sveipet (en test bekrefter at den returnerer brute-force-vinneren). Pluss de analytiske lukkede formene for streets-of-coverage coverage_half_angle_rad (λ = arccos(Re/r·cos ε) − ε) og street_half_width_rad (cos c = cos λ / cos(π/s), Rider/Beste), kontrollert for hånd mot lærebokgeometri og som oppdager gapet ved underbefolkning. Den fulle Rider-løseren for minste antall satellitter for global dekning, en 3-D-globus i playground og en ekstern DOP-krysskontroll er videre arbeid.
  • Eksport av presis SP3-efemeride fra CLI. Et propagert bane-/konstellasjonsscenario kan nå skrives til en SP3-c-fil: kshana <orbit.toml> --export-sp3 out.sp3, eller export_sp3 = true i scenarioet skriver automatisk <scenario>.sp3 (api::export_sp3 / auto_export_sp3, OrbitClockScenario::to_sp3_string, valgfri epoch). En test med tur-retur (tests/sp3_export_roundtrip.rs) propagerer det reelle Celestrak-øyeblikksbildet gps-ops, eksporterer det, parser det på nytt og bekrefter at de gjenvunne ECEF-posisjonene stemmer med SGP4-referansen over 24 h til < 0,5 m (godt innenfor toleransen på 10 m for TLE-klassen). README dokumenterer rollen for interoperabilitet (RINEX → RTKLIB/gLAB, SP3 → Ginan/presise banedata).
  • Koblet Kalman-filter for klokke+posisjon (kryssblokk-kovarians). src/fusion/coupled.rs CoupledPntFilter er ett stablet filter med [pos, vel, phase, freq] (oppdateringer i Joseph-form) der pseudoavstand-målingen ρ = g·pos + c·phase + noise virkelig kobler blokkene for posisjon og klokke — i motsetning til de to uavhengige tilstandsfiltrene med to tilstander i den eldre fusjonspakken, som holder kryssblokk-kovariansen eksakt null. Validert: en delt pseudoavstand gjør P[pos,phase] ulik null; to ulike geometrier løser sammen injiserte posisjons- og klokkeavvik som en enkelt avstand ikke kan skille; en bestemmelse med bare klokke skjerper posisjonen gjennom kryss-kovariansen (gevinsten frakoblede filtre ikke kan gi); og Monte Carlo-NEES er konsistent med χ²(4). Dette er realiseringen med 1 frihetsgrad (dimensjonaliteten i fusjonspakken); utvidelsen til 3-D med 8 tilstander og koblingen inn i den kjørbare pakken følges opp som videre arbeid.
  • Overvåking av Kalman-filterets konsistens (NIS/NEES). Kovariansoppdateringen i klokkefilteret med to tilstander er nå i Joseph-stabilisert form `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, kontrollert mot tabell).
  • docs/PROVENANCE.md — én siterbar provenienstabell. Samler hver sensorparameter (klokker, inertial, tidsoverføring), fysisk/algoritmisk modell (bane, tidssystemer, referansesystemer, iono/tropo, integritet, deteksjon, jamming, Allan) og valideringsdatasett (AIAA 2006-6753, Celestrak gps-ops) med publisert kilde — datablad, artikkel, ICD eller standard — og en ærlig modenhetsmerking (flight-qualified / ground-lab / space-goal-on-ground-hardware). Lenket fra README-introen og dokumentasjonstabellen; utfyller strengene provenance per kjøring som allerede følger med i resultat-JSON.
  • Typet scenario-API. Dispatch skjer nå på en typet enum ScenarioKind i stedet for en rå strengmatch på kind (ScenarioKind::classify + uttømmende dispatch), slik at tillegg av en pakke er kompilatorkontrollert. Nye typede flater ved siden av den uendrede run_toml som returnerer streng: run_scenario(src) -> Result<RunOutput, KshanaError> med en strukturert feiltaksonomi (InvalidInput / NonConvergence / Unsupported / IoError, hver med en stabil kind_tag()); et trait Scenario og utvidelsespunktet ExternalPack (pakken jamming er koblet gjennom det som det gjennomarbeidede eksempelet); og introspeksjon via list_scenario_kinds() (navn, beskrivelse, påkrevde/valgfrie felt per type). Python- og WebAssembly-bindingene får list_kinds() og error_kind(). Dokumentert i docs/ARCHITECTURE.md.
  • Reell GPS-konstellasjon + dekning av driftsområdet. scenarios/orbit-sgp4-gps.toml leveres nå med et reelt Celestrak-øyeblikksbilde av gps-ops (2021-07-28, 30 satellitter) i stedet for syntetiske Walker-TLE-er, med strict_checksum = true slik at den bare lastes når hver TLE-sjekksum er gyldig; scripts/fetch_tles.sh dokumenterer reproduserbar oppdatering og README krediterer kilden med åpne data. En ny tests/scenario_coverage.rs kjører hver pakke over ≥5 varianter av driftsområdet og kontrollerer at utdata er endelige/avgrensede, bekrefter at flicker-FM-gulvet målbart forverrer klokkens rulling når det er aktivert (nå satt i tre leverte scenarioer), og bekrefter at fusjonsfilteret konvergerer med en realistisk akselerometerbias som ikke er null (innenfor 3× tilfellet med nullstilt bias), og lukker realismegapet "fusion only works with zeroed biases". docs/VALIDATION.md får en tabell for driftsområdet (Operating Envelope).
  • GNSS-simulering i måledomenet (typen gnss-sim). En forovermodell på pseudoavstandsnivå: for hver synlige satellitt syntetiserer den ρ = geometric range + c·δt_rx − c·δt_sv + I + T + noise + multipath og L1-Doppler, med den enkeltfrekvente ionosfæren fra Klobuchar (IS-GPS-200 §20.3.3.5.2.5) og den Saastamoinen-baserte zenittroposfæren projisert med kartleggingsfunksjonen fra Niell (1996) — eksponert som TOML-blokkene [iono] og [tropo]. Residualene mates til RAIM for øyeblikksbilder for HPL/VPL per epoke, og en JSON-array gnss_measurements[] bærer hver SVs pseudoavstand, Doppler, C/N₀ og korreksjoner for iono/tropo. En kjøring uten støy gjengir geometri + korreksjoner til sub-millimeter (CI-test). Nye src/gnss_sim.rs og scenarios/gnss-sim-raim.toml.
  • Stokastisk detektor for tidsspoofing (typen spoof). Spoof-pakken kjører nå en reell detektor i stedet for en deterministisk sammenligning av rampe mot grense: fire injeksjonsformer (linear_ramp, step_jump, meaconing, replay), en tosidig χ²₁-energitest / Neyman–Pearson på monitorstatistikken med klokkestøtte der terskelen settes ut fra et mål for budsjettet for falsk alarm target_pfa, og sannsynligheten for uteblitt deteksjon P_md rapportert både i lukket form og med Monte Carlo (mc_runs forsøk per hypotese — de to stemmer overens til noen få ×1/√N). Sikkerhetskvalitetsmålet er nå 1 − P_md ved den operativt skadelige (spesifikasjons-)størrelsen. Ny src/detection.rs (gaussiske haleverdier, NP-/energitest, Monte Carlo P_fa/P_md) og scenarios/spoof-meaconing.toml. Bakoverkompatibel: en [attack] rate_ns_per_s alene godtas fortsatt som en lineær rampe.

Endret#

  • Definisjon av kvalitetsmålet Security (typen spoof): fra den analytiske grensen for detekterbarhet 1 − min_detectable/threshold til den stokastiske detektorens 1 − P_md. Feltet security i klokkepakken forblir den raskere analytiske proxyen.

Lagt til (fortsettelse)#

  • RF-jammingmodell (typen jamming). En interferensmodell med linkbudsjett som gjør en jammers effekt og geometri om til tap av lås per satellitt: forholdet mellom jammer og signal fra frirom-tap og mottaksantennegevinst per retning, den effektive C/N₀ via standardligningen for anti-jam (prosesseringsgevinst ved despreading × spektralseparasjonsfaktoren Q; Kaplan & Hegarty §9,4) og en konfigurerbar sporingsterskel, vurdert over en Walker-konstellasjon som et kvalitetsmål availability_under_jamming. Nye src/jamming.rs og scenarios/jamming-demo.toml. Ærlig omfang (ingen multipath, terrengskygge, AGC eller adaptiv nulling) er dokumentert i docs/CAPABILITY.md / docs/VALIDATION.md.
  • Generelt N-D parametersveip over en hvilken som helst scenariotype (sweep-nd). Det forrige N-D-sveipet gjaldt bare klokkepakken. sweep-nd varierer TOML-nøkler med punktum i et scenario med [base] over det kartesiske produktet av aksene, sender hver rutenettnode på nytt gjennom den vanlige kjørestien og leser ut ett eller flere måltall fra resultatet via JSON-sti med punktum — slik at det fungerer for hver pakke (inertial, gnss-ins, integrity, spoof, …) uten å koble seg til Rust-typen for hver pakke. Rutenettnoder evalueres parallelt over OS-tråder på native mål (ingen ekstra avhengighet); wasm faller tilbake til sekvensiell. Deterministisk og radvis uavhengig av antall tråder. Nytt eksempel scenarios/sweep-nd-inertial.toml.
  • TOML-konfigurerbar deterministisk IMU-feilmodell i pakken gnss-ins. Den treaksede strapdown-feilkjeden (skalafaktor, misjustering, g-følsomhet, kvantisering, rate-ramp; IEEE Std 952-1997 §A.2, Groves 2013 §4,3) kan nå nås per sensor fra en scenariofil via en valgfri blokk [imu_*.error_model], lagt oppå de konstante biasene ved oppstart. Å utelate blokken lar hver sensor forbli en ren kilde med konstant bias, slik at eksisterende kjøringer av gnss-ins er uendret. Dette kobler den tidligere kun-bibliotek-feilmodellen inn i en kjørbar pakke og et kvalitetsmål.

0.10.0 - 2026-06-04#

Endret#

  • Validering med reelle data. Parseren for multi-GNSS RINEX-navigasjon, GLONASS RK4-propagatoren og SP3-leseren er nå prøvd mot ekte IGS/DLR-filer (en reell RINEX 3 blandet kringkastet navigasjonsfil og et IGS SP3-c banedataprodukt), ikke bare selvskrevne eksempler — med kontroller av ikke-tomme satellittsett og endelige, fysisk riktig store ECEF-posisjoner. Testdataene er kun for test (utelatt fra den publiserte craten); se tests/fixtures/igs/NOTICE.
  • RAIM på reell referansebanegeometri. Kjernene for øyeblikksbilde, solution-separation (MHSS) og beskyttelsesnivå i ARAIM er nå validert mot reell IGS-geometri for presise baner (SP3), ikke bare mot syntetiske konstellasjoner: siktlinjegeometrien bygges fra den første SP3-epoken ved en reell bakkestasjon, og testene kontrollerer meternivå-beskyttelsesnivåer som er tilgjengelige for APV-I, at en pseudoavstandsbias på 60 m utløser χ²-monitoren, at solution separation identifiserer den feilbehengte satellitten, og at ARAIMs nivåer holder seg innenfor den tildelte P_HMI. Lukker gapet med validering bare på syntetisk geometri (paritet med gLAB i mottakerdomenet over en full RINEX-bue er fortsatt et punkt på veikartet — det krever en pseudoavstandsløsning).

Lagt til#

  • Konfidensintervaller per node for N-D-parametersveipet (sweep::nd_sweep_ensemble). Hver rutenettnode i det N-dimensjonale kartesiske produktsveipet kan nå evalueres som et Monte Carlo-ensemble av seeds, og rapporterer måltallets middel, persentiler og et persentil-bootstrap-KI på 95% per node (for begge klokker) — et statistisk ærlig sveip i stedet for ett trekk per node. Gjenbruker maskineriet for ensemble/bootstrap (metric_stat); deterministisk; runs = 1 reduseres eksakt til enkelt-seed-varianten nd_sweep. (Å generalisere sveipet på tvers av alle pakker, noe som er viklet inn i refaktoreringen til typet Scenario, og parallell kjøring gjenstår.)
  • NaveGo-kryssvalidering av IMU-støyløpet (tests/navego_imu_crossval.rs). En ekstern kryssjekk mot NaveGo (R. Gonzalez' åpne INS/GNSS-verktøykasse): gjengir den syntetiske rundturen i navego_example_allan.m på den publiserte referanseprofilen for Microstrain 3DM-GX3-35 og bekrefter at vår overlappende ADEV-estimator gjenfinner NaveGos koeffisienter for hastighets- og vinkelrandomvandring (ADEV(1 s) = σ·√dt) med mindre enn 5% avvik og med den forventede −1/2-stigningen for hvit støy. (Den innspilte STIM300-loggen på 40 MB (.mat) leses ikke inn — den er sperret av binærformatet.)
  • Tett koblet (pseudorange) GNSS/INS-oppdatering. GnssInsEkf::update_tightly_coupled (og omslaget ClosedLoopInsGnss::fuse_tightly_coupled) implementerer den tidligere stubbede målingen i avstandsdomenet: innovasjonen er den predikerte avstanden fra INS-posisjonen til hver satellitt sammenlignet med den målte pseudorangen, med en siktlinje-Jacobian på posisjonsfeilen. Fordi hver satellitt er en skalarmåling, fortsetter filteret å korrigere med færre enn fire satellitter — der en løst koblet PVT-posisjonsbestemmelse ikke finnes. Fem tester dekker nulling med fire satellitter, korreksjon med to satellitter (ingen PVT mulig), observerbarhet langs siktlinjen med én satellitt og inndatavalidering. Kun pseudorange; bærebølgefase og en eksplisitt mottakerklokketilstand står fortsatt på veikartet. Den ubrukte cargo-funksjonen tight_coupling (som sperret den gamle feilstubben) er fjernet.
  • Scenariopakke for løst koblet GNSS/INS (kind = "gnss-ins", src/fusion/pack.rs). Kobler den treaksede strapdown-navigatoren og den 15-tilstands feiltilstands-EKF-en (closed_loop / gnss_ins_ekf) inn i et kjørbart scenario med et kvalitetsmål — EKF-en styrer mekaniseringen mot støyende GNSS-posisjonsbestemmelser mens dekningen er oppe, og glir så gjennom bortfallet. Dermed erstattes den gamle 1-DOF-skalarpakkens tilbakestilling som tvinger løsningen til referansen, med ekte fusjon. Resultatet rapporterer den fusjonerte serien for horisontal feil, det scorede posisjonskvalitetsmålet (tilgjengelighet / RMS i bortfall / holdover) og RMS for fri, åpen sløyfe-INS til sammenligning; et kvante-/klassisk IMU-par skiller seg bare i den sanne biasen. Startes fra CLI, Python og wasm-inngangspunktet med et scenarios/gnss-ins.toml-eksempel. Ærlig avgrensning: bare løst koblet, én deterministisk bane, og den fusjonerte feilen i bortfallet er gulvbegrenset av attitydefeilen ved overleveringen (så den påstås ikke å skalere med bias) — de robuste funnene er at fusjon slår uhjulpet dødregning for en sensor med bias, og at en sensor med lavere bias har den bedre uhjulpne glidningen.
  • Konstellasjonsutforming på den validerte SGP4-kjernen (src/walker.rs). En ny modul walker sender ut et utformet Walker-delta-mønster (i: T/P/F) som SGP4-middelelementer, slik at den syntetiske konstellasjonen propageres gjennom den samme SGP4-banen som er validert til 4,12 mm mot AIAA 2006-6753-vektorene — ikke den analytiske Kepler-generatoren. Oppå dette: pdop_sweep tabulerer dekning og median/verste PDOP over et utformingsrutenett {planes × sats × inclination}, og coverage_revisit rapporterer dekningsandelen og gjenbesøkshull (verste/gjennomsnitt) i et bakkepunkt. Validert mot de fysiske monotoniene en avveining må følge (flere satellitter ⇒ høyere dekning, lavere PDOP, kortere gjenbesøk). Separat er et ekte Celestrak-gps-ops-TLE-øyeblikksbilde (2021-07-28, 30 operative GPS-satellitter) lagt til som testfiks som bare brukes i tester, og den virkelige geometribanen TLE → SGP4 → ECEF er validert mot det (hele MEO-skallet innen 1%, ni satellitter i sikte samtidig ved PDOP 1,64), ved siden av de eksisterende virkelige datastiene for SP3 og RINEX.
  • Støytypespesifikke effektive frihetsgrader for Allan-konfidensintervallene. allan::edf_overlapping_adev implementerer de lukkede formene i NIST SP 1065 tabell 5 (Stable32-enkeltsettet) for alle fem kanoniske potenslov-støytyper — hvit/flicker-PM, hvit/flicker-FM og random-walk-FM — og erstatter det konservative antallet uten overlapping som frihetsgrader for χ². En ny enum PowerLawNoise og classify_power_law identifiserer den dominerende typen ut fra stigningen i registreringens modifiserte Allan-deviasjon (MDEV skiller hvit fra flicker-PM der ADEV ikke kan), og overlapping_adev_curve knytter nå den identifiserte støytypen, dens edf og et 95%-konfidensbånd til hvert punkt på den eksporterte ADEV-kurven (AdevPoint får noise/edf/ci_lo/ci_hi, additivt med serde-standardverdier). Validert på to måter: de fem formlene stemmer med håndberegnede verdier til 1e-12, og et Monte Carlo-ensemble med hvit FM på 4 000 registreringer bekrefter at formelen predikerer estimatorens faktiske kjikvadrat-edf innen 20% (og at den klart slår det konservative antallet). Åtte nye tester.
  • Stokastisk modell for toveis tidsoverføring. timetransfer::TwoWayLink erstatter den rene hvitstøy-sampleren med en fysisk begrunnet modell: den resiproke (fellesmodus) banesinkelsen kanselleres i estimatet (m_AB - m_BA)/2 (two_way_offset_estimate, slik at to uavhengige enveismålinger gir gjennomsnittet 1/sqrt(2)), og residualen er den ikke-resiproke differensialsinkelsen — modellert som en farget hvit-FM + random-walk-FM-prosess (den validerte ClockModel), som gir synkroniseringsfeilserien en realistisk Allan-signatur (sigma_y^2(tau) = q_rw*tau/3) i stedet for flat hvit støy. LinkCfg får q_wf_s/q_rw_s (serde-standard 0 ⇒ den gamle atferden med bare hvit støy, bit for bit), link-FoM-en rapporterer adev_tau0 (modellens Allan-deviasjon ved basissteget), og scenarioet og CLI-et timetransfer viser den frem. Gylden FoM festet på nytt. Seks håndavledede tester (fellesmodus-kansellering, toveisgevinsten sqrt(2), RWFM-loven tau/3 via linkens egen step(), ekvivalens med den gamle atferden ved q=0, determinisme og FoM-eksponering fra ende til ende).
  • Numerisk paritet med Stable32 for estimatorene i Allan-familien (NBS14). tests/allan_reference.rs validerer estimatorene overlappende ADEV, modifisert ADEV, tidsdeviasjon og overlappende Hadamard mot Stable32-referansedeviasjonene for det kanoniske NBS14-datasettet (W. J. Riley, Handbook of Frequency Stability Analysis, NIST SP 1065, ~s.107) ved tau = 1, 2 med en relativ toleranse på 1e-4 — faktisk samsvar ~1e-6. Dette fester estimatormatematikken mot den de facto referanseimplementasjonen, ikke bare mot estimatorenes egen analytiske indre konsistens. Bare de offentlige referansetallene brukes; ingen tredjepartskode.
  • Vertikalt Stanford-integritetsdiagram eksportert av scenarioet integrity. Det kjørbare scenarioet integrity eksporterer nå et vertikalt Stanford(-ESA)-diagram ved siden av HPL/VPL-tilgjengelighetskartet: ved hver beskyttet epoke trekkes en seedet, reproduserbar feilfri avstandsfeil og avbildes gjennom geometrien til en faktisk vertikal posisjonsfeil, som klassifiseres mot VPL og den vertikale varslingsgrensen (Available / System-Unavailable / Misleading / Hazardously-Misleading). Diagrammet (punkter per epoke + regionantall) ligger i resultat-JSON-en, og antallet integritetshendelser / HMI står i CLI-sammendraget, slik at Stanford-klassifisereren — tidligere bare i biblioteket — nås fra ende til ende. IntegrityScenario får et felt seed (standard 0) som styrer feilrealiseringen; selve tilgjengelighetskartet forblir rent geometribasert og uavhengig av seed.
  • ARAIM-integritetsrisikobudsjett (P_HMI) for beskyttelsesnivåene. raim::araim_raim utleder de horisontale og vertikale beskyttelsesnivåene fra et eksplisitt integritetsrisikobudsjett i stedet for en fast multiplikator K_md: for løsningen med alle satellitter i sikte og hver delløsning med én satellitt utelatt bygger den den modusvise (prior, detection threshold, σ) på hver akse, og deretter finner araim_protection_level det minste PL der summen av sannsynlighetene for farlig villedende informasjon (araim_integrity_risk, P_HMI = Σ_k p_fault,k · Q((PL − T_k)/σ_k), Blanch m.fl. Baseline ARAIM) innfrir det tildelte P_HMI. Resultatet rapporterer integritetsrisikoen nivåene faktisk oppnår, slik at en bruker eksplisitt kan veie integritet mot varslingsgrensen. Seks håndavledede tester (lukkede former for feilfri og terskelbasert enkeltmodus, summering over flere moduser/monotoni, feilfri beskyttelse fra ende til ende der et 10⁵× strammere budsjett hever PL, feildeteksjon/-identifikasjon og redundansgulvet på seks satellitter). Enkeltfeil-MHSS er ARAIM-grunnlinjen; samtidige feil i flere SV-delmengder, den konstellasjonsvide feilmodusen og validering mot gLAB-referansedatasettet er dokumenterte utvidelser.
  • To-hastighets coning/sculling-kompensasjon for strapdown-mekaniseringen. inertial::mechanization::coning_sculling_compensate trekker de høyfrekvente leddene for coning (attityde) og rotasjon+sculling (hastighet) ut av en grov oppdateringsstegs ordnede IMU-inkrementer i delintervaller, slik at en NavState::step_increments med moderat rate gjengir vibrasjonsrektifisert bevegelse som et grovt steg over de rå summene går glipp av. En valideringstest kjører et 10 Hz coning+sculling-miljø i 60 s og sammenligner finratereferanse, naiv grov integrasjon og den foldede grove integrasjonen: foldingen kutter posisjonsfeilen med ~18× (meter med naiv drift → under desimeter), noe som bekrefter at coning/sculling-leddene er bærende. Et typealias ScalarErrorBudget gir den gamle 1-DOF-AccelModel navn etter det den er, atskilt fra den treaksede navigatoren NavState.
  • Parser for RINEX-observasjonsfiler. Den nye modulen rinex_obs leser RINEX 3.0x / 4,00-observasjonsfilen — mottakerens faktiske målinger — og fullfører dermed RINEX-paret ved siden av den eksisterende parseren for navigasjonsmeldinger. parse_obs dekoder headeren (versjon/type, lister SYS / # / OBS TYPES per system med fortsettelseslinjer, omtrentlig posisjon, intervall, tidspunkt for første observasjon) og hver epokes poster per satellitt: pseudorange, bærebølgefase, Doppler og signalstyrke, nøklet på RINEX 3-observasjonskoden (C1C, L1C, …) med flaggene for tap av lås (LLI) og signalstyrke (SSI); et tomt felt bevares som fraværende, ikke som null. Ærlig omfang: dette er innlesing av standardformatet (en ekte observasjonslogg fra RTKLIB/gLAB/IGS-stasjon inn, typede målinger ut), ikke en posisjoneringsmotor — ingen pseudorange-løsning, PPP eller RTK her.
  • CCSDS OEM-skriver (Orbit Ephemeris Message). Den nye modulen oem eksporterer en propagert konstellasjon som en gyldig CCSDS 502.0-B OEM 2,0-melding — KVN-efemerideformatet som GMAT, Orekit, STK og de fleste flydynamikkverktøy leser inn. OemFile::from_propagators sampler hver satellitts treghetstilstand (TEME) — posisjon og hastighet, hentet rett fra propagatoren uten jordfast rotasjon, i motsetning til SP3-eksporten — på et tidsrutenett, og OemFile::to_oem_string serialiserer headeren CCSDS_OEM_VERS/CREATION_DATE/ ORIGINATOR pluss ett segment META_START … META_STOP per satellitt (OBJECT_NAME/OBJECT_ID/CENTER_NAME/REF_FRAME = TEME/TIME_SYSTEM = GPS/ START_TIME/STOP_TIME) etterfulgt av linjene epoch X Y Z X_DOT Y_DOT Z_DOT (km, km/s). CREATION_DATE oppgis av kalleren, aldri fra veggklokken, så utdataene er byte-identiske mellom kjøringer (reproduserbarhetskontrakten). Dette er romfartøyefemeridens motstykke til GNSS-eksporten SP3: en Kshana-bane kan nå overleveres til et flydynamikkverktøy i et standardformat.
  • Presis SP3-efemeride som propageringskilde. Sp3File::interpolator bygger en Sp3Interpolator per satellitt som fyller posisjonen mellom de tabulerte SP3-epokene med et Lagrange-polynom av 9. orden (standard IGS-praksis) og roterer den inn i det felles TEME-rammeverket, eksponert som Propagator::Sp3Precise. En presis banefil fra IGS/analysesenter kan nå drive den samme geometri-/synlighets-/integritetsrørledningen som de kringkastede og analytiske propagatorene. Validert rundtur: en Kepler-bane skrevet til SP3 og lest inn igjen gjennom interpolatoren stemmer med originalen til under en meter i nodene og < 100 m midt i intervallet. Klokkeinterpolasjon er neste steg.
  • GLONASS-kringkastet efemeride (fullfører multi-GNSS RINEX nav). Ny modul glonass: GLONASS kringkaster ikke Kepler-elementer, men en jordfast tilstandsvektor i PZ-90 (posisjon, hastighet, måne-sol-akselerasjon). parse_glonass_nav leser RINEX 3-postene R, og satellittposisjonen til et hvilket som helst tidspunkt fås ved 4. ordens Runge–Kutta-integrasjon av bevegelsesligningene i GLONASS ICD (sentral gravitasjon + J2 + Coriolis-/sentrifugalledd fra jordrotasjonen + den kringkastede akselerasjonen). Eksponert som Propagator::Glonass, slik at GLONASS-satellitter flyter gjennom konstellasjons-/synlighets-/integritetsrørledningen ved siden av Kepler-systemene; en enkelt konstellasjonsblokk rinex kan nå blande GPS, Galileo, QZSS, BeiDou og GLONASS.
  • Multi-GNSS RINEX-navigasjon (GPS, Galileo, QZSS, BeiDou). RINEX 3-navigasjonsparseren dekoder nå poster for Galileo (E), QZSS (J) og BeiDou (C, MEO/IGSO) ved siden av GPS (G) — de deler Kepler-oppsettet og brukeralgoritmen — hver evaluert med sin egen gravitasjonskonstant og jordrotasjonsrate (Galileo/BeiDou μ, BeiDou Ω̇ₑ). En fil med blandede konstellasjoner gir alle sammen, og de flyter gjennom konstellasjons-/synlighets-/integritetsrørledningen som Propagator::Rinex. Geostasjonære BeiDou-satellitter bruker en annen koordinatrotasjon og hoppes over til det finnes en referansefiks å validere mot. Postgjennomgangen bruker linjeantall per system, noe som retter en latent feil der firelinjers GLONASS/SBAS-poster ble hoppet over som om de var åtte linjer lange. GLONASS (en tilstandsvektormodell) er neste steg.
  • Leser og skriver for SP3-c/d presis efemeride. Ny modul sp3 parser IGS-/analysesenterets SP3-banefiler (parse_sp3) — det etterprosesserte ECEF-posisjons-/klokkeproduktet som PPP-motorer (Ginan, RTKLIB, gLAB) behandler som referanse — til en strukturert Sp3File (header, epokerutenett, posisjon per satellitt km→m, klokke µs og hastighet dm/s→m/s for produkter med V), med de ugyldige sentinelverdiene i SP3 bevart. Motsatt retning er også dekket: Sp3File::from_propagators bygger en SP3 fra en propagert konstellasjon (TEME→ECEF per epoke) og to_sp3_string serialiserer den, slik at Kshana-baner kan eksporteres i formatet eksterne PPP-verktøy leser inn — rundturen lese↔skrive. Epokeinterpolasjon og en SP3-propagatorkilde er neste steg.
  • RINEX-kringkastet efemeride som kjørbar konstellasjonskilde. En konstellasjon godtar nå en innebygd blokk rinex (RINEX 3 GPS-navigasjonstekst) ved siden av det eksisterende alternativet tle, slik at en ekte kringkastet fil driver et scenario fra ende til ende fra CLI, Python eller lekeplassen i nettleseren — RINEX inn, PNT-geometri ut. Nytt scenarios/orbit-rinex.toml viser GNSS-tilgjengelighet og DOP fra åtte GPS-satellitter bygget rett fra kringkastede poster. (Bare GPS LNAV; multi-GNSS og SP3 er neste steg.)
  • RINEX-kringkastet efemeride som propageringskilde. En parset RinexEphemeris kan nå konverteres til en orbit::Propagator (Propagator::Rinex): posisjonen er den kringkastede IS-GPS-200-banen rotert fra ECEF til det felles TEME-treghetsrammeverket (sv_position_teme, med GPS→UT1-tid som er korrekt for skuddsekunder), hastigheten fås ved sentral finittdifferanse, og dessuten Kepler-omløpstiden. Ekte kringkastede GPS-data kan nå drive den samme geometri-, synlighets- og integritetsrørledningen (RAIM) som de analytiske SGP4-/Kepler-propagatorene. (Ennå ikke eksponert som scenariotype for RINEX-fil — det og multi-GNSS/SP3 er neste steg.)

0.9.2 - 2026-06-03#

Lagt til#

  • Arkiv-DOI. Utgivelser deponeres nå hos Zenodo og får en siterbar DOI.

0.9.1 - 2026-06-03#

Endret#

  • Dokumentasjon. Oppdaterte README til institusjonelt nivå: en funksjonsoversikt over hele v0.9.0-stakken, en seksjon om versjonering og utgivelser, en ren header med det nye merket og en kortfattet statuslinje. Ingen endringer i motoren.

0.9.0 - 2026-06-03#

Denne utgivelsen legger til tre betydelige funksjonsområder oppå SGP4-substratet fra 0.8.0: en ekte treaksed strapdown-INS, en løst koblet GNSS/INS-feiltilstands-EKF med lukket sløyfe-tilbakekobling, ekte øyeblikks-RAIM og RAIM med løsningsseparasjon (ARAIM-stil) med HPL/VPL og et kjørbart scenario integrity, og det første steget mot interoperabilitet mellom GNSS-formater (innlesing av RINEX-3 GPS-efemerider).

Lagt til#

  • Parser for RINEX 3 GPS-navigasjonsmeldinger (src/rinex.rs). Første steg mot interoperabilitet mellom GNSS-formater: parse_nav leser en RINEX 3.x-navigasjonsfil og dekoder hver kringkastede GPS-efemeridepost (G) — den åttelinjers blokken SV/epoke + BROADCAST ORBIT — til en RinexEphemeris med Kepler-elementer og klokkekorreksjoner, med feltnavn og enheter etter IS-GPS-200. Håndterer Fortrans flyttallsformat med D-eksponent (parse_d) og kolonneoppsett med fast bredde; poster for systemer som ikke er GPS hoppes over, ikke avvises, slik at en blandet fil fortsatt gir sine GPS-efemerider. Fire tester: parsing av D-eksponent (inkludert blanke felt og feil), en full post dekodet mot kjente feltverdier med en sunnhetssjekk av GPS' store halvakse (√A² ≈ 26 560 km), overhopping av ikke-GPS og tilfellet med tom fil.
  • GPS-kringkastet efemeride → ECEF-posisjon (src/rinex.rs). RinexEphemeris::sv_position_ecef(t_tow) evaluerer satellittens jordfaste posisjon fra den parsede efemeriden via brukeralgoritmen i IS-GPS-200 §20.3.3.4.3.1: Newton-løsning av Keplers ligning for den eksentriske anomalien, andre harmoniske korreksjoner av breddeargument / radius / inklinasjon og rotasjonen til ECEF som tar hensyn til jordrotasjonen siden referanseepoken (med GPS-verdiene μ og Ω̇ₑ som spesifikasjonen krever, og en folding av ukeskifte tk). Tre tester: den geosentriske radiusen holder seg i GPS-båndet (≈ 26 560 km), den jordfaste hastigheten er ~3,9 km/s, og evaluering en hel uke unna gir den samme posisjonen.
  • GPS SV-klokkebias med den relativistiske korreksjonen (src/rinex.rs). RinexEphemeris::sv_clock_bias_s(t_tow) evaluerer det kringkastede klokkepolynomet af0 + af1·Δt + af2·Δt² rundt Toc pluss det relativistiske eksentrisitetsleddet F·e·√A·sin Ek (IS-GPS-200 §20.3.3.3.3.1). En ny EpochUtc::gps_time_of_week konverterer postens kalenderepoke til GPS-ukesekunder via aritmetikk med juliansk dag fra GPS-epoken (1980-01-06), og Kepler-løsningen deles med posisjonsevalueringen. Tester: GPS-ukesekunder for en søndag/tirsdag/lørdag (ukegrenser), og at klokkebiasen er dominert av af0 med et tilstedeværende, begrenset relativistisk ledd. L1-gruppeforsinkelsen TGD er eksponert, men med vilje ikke innregnet. Ærlig omfang: en kilde Propagator, Galileo/BeiDou/GLONASS og SP3 er fortsatt neste steg. (docs/CAPABILITY.md er oppdatert tilsvarende.)
  • Brukerkjørbar scenariotype integrity (scenarios/integrity-raim.toml). RAIM-tilgjengelighetsfunksjonen kan nå nås fra CLI/TOML som alle andre pakker: kind = "integrity" parser et IntegrityScenario (brukerbane, en eller flere GNSS-konstellasjoner, elevasjonsmaske og integritetskonfigurasjonen (sigma, P_fa, P_md, AL_H, AL_V)), kjører constellation_raim_availability og sender ut tilgjengelighetskartet for HPL/VPL per epoke som JSON pluss en selvstendig SVG — beskyttelsesnivåer over tid mot varslingsgrensene, med en grønn/rød tilgjengelighetsstripe. kshana scenarios/integrity-raim.toml skriver JSON-en, diagrammet og en HTML-rapport. Det medfølgende scenarioet (24-satellitters Walker, 1 m tofrekvens-avstandsmåling, APV-I-grenser) rapporterer ~95 % tilgjengelighet; det dokumenterer at enfrekvens-RAIM ikke innfrir den vertikale APV-I-grensen med én konstellasjon, og det er derfor vertikal veiledning bruker SBAS/tofrekvens/ARAIM. Testene dekker utsendelsen, JSON-en med tilgjengelighetskartet og SVG-en.
  • Kjørbar RAIM-tilgjengelighet over en konstellasjon (src/raim.rs). Integritetsmodulen hadde ingen kaller — constellation_raim_availability gjør den til et ekte inngangspunkt fra ende til ende: ved hver epoke på et tidsrutenett propagerer den de synlige satellittene (de samme SGP4-/Kepler-Propagator-ene motoren bruker), beregner beskyttelsesnivåene uten feil og vurderer tilgjengelighet mot de horisontale/vertikale varslingsgrensene, og returnerer en serde-serialiserbar RaimAvailabilityReport (per epoke n_visible/HPL/VPL/available pluss tilgjengelighetsandelen). En RaimConfig samler (sigma, P_fa, P_md, AL_H, AL_V), og raim_availability_epoch per epoke er eksponert for kallere som løser sin egen geometri. Tre tester: en epoke vurdert som tilgjengelig under APV-I-grenser på en geometri med ti satellitter, gjort utilgjengelig av en umulig stram grense, og None-nivåer under fem satellitter; og en kjøring fra ende til ende over en 24-satellitters Walker-konstellasjon som gir et endelig tilgjengelighetskart og serialiseres. (Seks satellitter — redundansgulvet for residual-RAIM — innfrir ærlig talt ikke APV-I selv ved 1 m avstandsmåling; APV-I-tilgjengelighet krever den tettere geometrien testen bruker.)
  • Akkumulator for Stanford(-ESA)-integritetsdiagram (src/raim.rs). Standardmåten å oppsummere en integritetsmonitor over mange epoker: den plotter faktisk posisjonsfeil (x) mot beskyttelsesnivå (y) og klassifiserer hver epoke, ut fra diagonalen y = x og varslingsgrensen, som Available (PL avgrenser feilen, innenfor AL), SystemUnavailable (PL avgrenser feilen, men overstiger AL — trygt, ubrukelig), MisleadingInformation (PL < feil ≤ AL) eller HazardouslyMisleadingInformation (PL < feil og feil > AL — den utrygge svikten). classify_stanford er den rene klassifisereren; StanfordDiagram akkumulerer (error, PL)-punkter mot en fast varslingsgrense og eksponerer regionantall, tilgjengelighet, totaler for integritetshendelser og serde-serialiserbare punkter for plotting/JSON-eksport. Fire tester: hver region (inkludert den avgrensede grensen error == PL), akkumulering av antall/tilgjengelighet og JSON-rundtur. Dette er rapporteringsflaten for RAIM-beskyttelsesnivåene; å koble den inn i konstellasjonsscenarioet og validere mot et offentlig datasett står fortsatt på veikartet.
  • RAIM med løsningsseparasjon (ARAIM-stil) (src/raim.rs). En integritetsmonitor med flere hypoteser ved siden av den eksisterende residual-/paritets-kjikvadrat-snapshot_raim. For minste kvadraters løsning med alle satellitter i sikte og hver delløsning med én satellitt utelatt danner den separasjonen Δ_k = x_k − x₀ — gaussisk med forventning null uten feil og med kovarians Cov(x_k) − Cov(x₀) (identiteten for nestede estimatorer, gyldig fordi løsningen med alle satellitter i sikte er BLUE) — og den både oppdager en feil og identifiserer den feilaktige satellitten (den hvis utelatelse gir størst normalisert separasjon). Horisontale/vertikale beskyttelsesnivåer følger standard MHSS-allokering PL = max(K_md·σ₀, max_k[K_fa·σ_ss,k + K_md·σ_k]), med K_fa = Φ⁻¹(1−P_fa/2), K_md = Φ⁻¹(1−P_md). Ny avhengighetsfri normal_cdf/normal_quantile bygget på modulens eksisterende regulariserte ufullstendige gamma (erf(x) = P(½,x²)). Fire håndavledede tester: normal-CDF / kvantil mot lærebokverdier (Φ(1,95996)=0,975, halen 1e-7 = 5,1993, symmetri); en feilfri geometri som ikke alarmerer og gir endelige, positive HPL/VPL; en 60-σ-bias på én satellitt som oppdages og identifiseres riktig (excluded_sv == 2); og redundansgulvet på seks satellitter. Lukker revisjonens P0-hull «tautologisk integritet — ingen ekte RAIM/HPL/VPL» på algoritmesiden; validering mot gLAB-datasett og Stanford-diagramakkumulatoren står fortsatt på veikartet.
  • Lukket sløyfe-integrasjon av GNSS/INS (src/fusion/closed_loop.rs). ClosedLoopInsGnss kobler feiltilstands-EKF-kjernen til den treaksede strapdown-mekaniseringen: hver IMU-sample korrigeres med de løpende bias-estimatene, mekaniseres fremover, og EKF-kovariansen tidspropageres med tilhørende navigasjonskontekst; hver GNSS-posisjons-/hastighetsbestemmelse danner INS−GNSS-innovasjonen og mater de estimerte posisjons-, hastighets-, attitydefeil- (ψ, som en kvaternionrotasjon) og akselerometer-/gyrobias-verdiene tilbake i løsningen og nullstiller feiltilstandens middelverdi. Å mate attityden tilbake (ikke bare biasene) er nødvendig for stabilitet — tilt og akselerometerbias er et koblet par, så å korrigere det ene uten det andre divergerer. INS og GNSS sammenlignes i et lokalt tangentplan NED-rammeverk med mekaniseringens egne krumningsradier (ny mechanization::radii_of_curvature; NavState::omega_ie_n/omega_en_n eksponert). Dette er den ærlige erstatningen for hybridpakkens tilbakestilling som tvinger løsningen til referansen. Tre tester: en lukket sløyfe som nuller en injisert posisjonsfeil på 8 m / −5 m til <0,1 m; en hjulpet løsning som holder seg begrenset til meternivå (<6 m) på en kjørebane mens en fritt løpende INS divergerer forbi 100 m; og milepælsbenchmarken — den fusjonerte løsningens Monte Carlo-posisjons-RMS over et GNSS-bortfall på 60 s slår en uhjulpet åpen sløyfe-dødregner med >2× (≈4× på tvers av seeds). Ærlig begrensning dokumentert i modulen: i løst koblet modus lar akselerometerbias og tilt seg bare svakt skille (begge kobles gjennom gravitasjon), så verdien som leveres er den begrensede, korrigerte tilstanden og et rent inngangspunkt til bortfallet — ikke en presis treghetskalibrering; rikere dynamikk og den tett koblede utvidelsen står fortsatt på veikartet.
  • Kjerne for løst koblet GNSS/INS-feiltilstands-EKF (src/fusion/gnss_ins_ekf.rs). Et utvidet Kalman-filter med 15 feiltilstander — δx = [δp, δv, ψ, b_a, b_g] — med strapdown-feildynamikken fra Groves 2013 §14,2 (kobling mellom spesifikk kraft og tilt, Coriolis, projeksjon av bias fra kropp til nav, Gauss–Markov-biasmodeller), en førsteordens diskret overgang Φ = I + F·dt og en løst koblet måleoppdatering av posisjon+hastighet (H = [I₃ 0 0 0 0; 0 I₃ 0 0 0]) på Joseph-form. Avhengighetsfri tett lineær algebra (Gauss–Jordan-invers, Joseph-kovariansoppdatering). En cargo-funksjon tight_coupling sperrer en dokumentert, ennå ikke implementert pseudorange-/Doppler-oppdatering. 7 tester med håndavledede forventninger: identiteten for skjev-/kryssprodukt, en verifisert 3×3-invers, kovarians som forblir symmetrisk/PSD under prediksjon (og posisjonsusikkerhet som vokser uhjulpet), en posisjonsbestemmelse som krymper posisjonskovariansen, eksakt gjenfinning av en kjent posisjonsfeil ved den analytiske Kalman-forsterkningen P/(P+R), og mindre korreksjoner under større målestøy. Dette er kjernen som skal erstatte hybridpakkens åpne sløyfe-tilbakestilling mot referansen med lukket sløyfe-tilbakekobling (pakkekobling + NaveGo-validering følger).
  • Deterministisk IMU-feilmodell for den 3-aksede strapdown-navigatoren (src/inertial/imu_errors.rs). ImuErrorModel forvrenger et sant kroppsrammepar (ω, f) til et målt par gjennom fem systematiske kategorier (IEEE Std 952-1997 §A.2; Groves 2013 §4,3, tabell 4,1): skalafaktor (feil i forsterkning per akse i ppm), skjevjustering / krysskobling (ikke-ortogonalitet utenfor diagonalen i triaden), g-følsomhet (en gyroratebias proporsjonal med spesifikk kraft), kvantisering (avrunding til LSB i utdataene) og rateramp (en lineær drift over tid — den tredje Allan-regionen), pluss en konstant oppstartsbias. Hvert ledd er null som standard, så ImuErrorModel::ideal() er en gjennomsiktig gjennomgang og eksisterende scenarioer påvirkes ikke. Hver feilkilde har en isolasjonstest (skala lineær til <0,01%, skjevjustering på tvers av aksene over VRW-gulvet, g-følsomhetsbias, LSB-rutenett, lineær ramp), og en test fra ende til ende driver en navigasjonsfeil gjennom mekaniseringen fra en forvrengt IMU. Ikke modellert: vibrasjonsrektifiseringsfeil og temperaturgradientdrift. (Den medfølgende scenariopakken inertial kjører fortsatt det gamle 1-DOF-skalarbudsjettet; denne modellen mater 3-akse-biblioteket.)
  • Coning- og sculling-kompensasjon for strapdown-integratoren. Attitydebanen får det todelte coning_increment (½ Δθ_prev × Δθ_cur); en integrasjon med grov rate (30 Hz, 5 samples/syklus) av et 5 Hz coning-miljø er verifisert til å følge finratereferansen ≥ 3× bedre med korreksjonen enn med naiv summering av inkrementer. Hastighetsbanen får sculling_increment (½ Δθ × Δv, Groves lign. 5,82) og løser kroppens hastighetsinkrement gjennom en ny inkrementbasert oppdatering NavState::step_increments med den kroppsrelative rotasjonen Δθ_rel = Δθ_b − C_n^b ζ, slik at en jordfast plattform ikke får noen falsk sculling mens en ekte vibrasjon utløser hele leddet.
  • Full treaksed strapdown-mekanisering i NED-rammeverket (src/inertial/mechanization.rs). NavState { q, v_ned, p_llh } flyttes frem av step(gyro_b, accel_f_b, dt) med standardligningene for NED i et terrestrisk rammeverk (Groves §5,4): attityde fra kropp til NED korrigert for raten fra treghet til nav ω_in = ω_ie + ω_en (jordrotasjon + transportrate); spesifikk kraft løst fra kropp til NED gjennom DCM-en; hastighet som integrerer v̇ = f_n − (2 ω_ie + ω_en) × v + g_n (Coriolis/transport + gravitasjon); og geodetisk posisjon via meridian- og tverrkrumningsradiene. Gravitasjonen er den lukkede formen WGS-84 Somigliana for normal (loddlinje-)gravitasjon med en NIMA-fri luft-høydekorreksjon — aldri en hardkodet konstant. Dette er den ekte treaksede navigatoren som avløser 1-DOF-banen med skalarfeilbudsjett. Verifisert ved fysiske invarianter: en plattform boltet til den roterende jorden ved 45°N (som registrerer jordrate + 1 g) holder seg innenfor 1 mm over 60 s; en horisontal spesifikk kraft mot nord gir v_N ≈ a·t og ½ a t² forskyvning; normal gravitasjon stemmer med de kjente overflateverdiene ved ekvator/pol/45° og fri luft-gradienten.
  • Treaksed attityderepresentasjon for strapdown-INS (src/inertial/attitude.rs). En enhetskvaternion-type Quaternion (skalar først, Hamilton-konvensjon) som bærer rotasjonen fra kropp til nav, med en DCM-visning (to_dcm/from_dcm via Shepperds metode), Hamilton-produkt, konstruktører for akse-vinkel og rotasjonsvektor (eksakt eksp-avbildning) og kvaternionkinematikk — både en førsteordens RK-rateoppdatering (q̇ = ½ q ⊗ ω) og en rotasjonsvektoroppdatering med coning-korreksjon. Det todelte coning_increment (Savage / Bryan–Lewantowski, ½ Δθ_prev × Δθ_cur) gir rotasjonsratens krysskoblingsledd som skalar dødregning utelater. Dette er attitydefundamentet for den fulle 3-akse-mekaniseringen som erstatter den gamle banen med 1-DOF-feilbudsjett. Verifisert mot lukkede rotasjoner: propagering med konstant rate stemmer med akse-vinkel-kvaternionen til 1e-6, DCM-er er ortonormale med enhetsdeterminant, og coning forsvinner for bevegelse om én akse. (src/inertial.rs er nå modulmappen src/inertial/; den offentlige stien crate::inertial er uendret.)
  • Geodetisk korrekt synlighet fra bakkestasjon (src/frames.rs). elevation, is_visible og visible_count beregner en satellitts elevasjon over en bakkestasjons horisont mot WGS-84-ellipsoidens normal (den sanne lokale vertikalen), ikke den geosentriske radialen — de to avviker med opptil den geodetiske avbøyningen på ~0,19°, nok til å flytte satellitter nær horisonten inn i eller ut av en elevasjonsmaske. Verifisert fra ende til ende (en Walker-konstellasjon propagert, rotert TEME→ECEF og telt fra et geodetisk sted) og mot den geosentriske tilnærmingen.

Endret#

  • Pålitelighet i CI. Jobben test-python-bindings bygger nå wheel-filen med PyO3/maturin-action (manylinux-container) i stedet for en rå verts-maturin build, noe som fjerner en periodisk rustup-konflikt mellom rustfmt-preview og cargo-fmt på runner-avbildet. Jobben deny installerer cargo-deny som ferdigbygd binærfil via taiki-e/install-action i stedet for den Docker-baserte cargo-deny-action, noe som fjerner en tidsavbrudd ved registerhenting fra Docker Hub. Ingen av endringene påvirker kontrollene som utføres.

0.8.0 - 2026-06-02#

Lagt til#

  • Treghetshastighet eksponeres videre nedstrøms. Propagator::velocity_eci og Propagator::state_eci (som returnerer StateEci { r_m, v_m_s }) fører den analytiske TEME-hastigheten som SGP4 allerede beregner — tidligere forkastet — videre til kallerne i m/s; Orbit::velocity_eci gir Kepler-banen en konsistent hastighet. Verifikasjonstesten mot AIAA 2006-6753 kontrollerer nå også hastigheten for hver referanserad (verste hastighetsfeil 1.85e-9 km/s over alle 666 tilstander) og fester antallet sammenlignede rader til nøyaktig 666.

  • Strengere, panikkfri TLE-parsing. Linjer må være ASCII og deles trygt (ikke lenger panikk ved byte-indeks på flerbyte-inndata); elementer områdekontrolleres (inklinasjon, eksentrisitet, middelbevegelse); sjekksummen i kolonne 69 kan håndheves via ParseOpts { strict_checksum } / parse_propagators_opts og det nye flagget strict_checksum på ConstellationCfg (ettergivende som standard).

  • Allan-deviasjonskurve i utdataene. Hver klokkekjøring rapporterer nå en adev_curve ([{tau_s, adev, n_samples}]), og lekeplassen i nettleseren tegner et log-log-diagram «Klokkestabilitet (ADEV)».

  • Validering av inndata for tidsrutenettet. TimeCfg::validate avviser et tidsrutenett som er ikke-endelig, null, negativt eller for stort (et steg større enn varigheten, eller flere enn MAX_TIME_STEPS samples) før noen allokering, slik at et ugyldig scenario gir en feil i stedet for panikk eller tømmer minnet.

  • Monte Carlo-ensembler for den inertielle pakken. runs = N på et inertielt scenario kjører N seeds og rapporterer hver målings gjennomsnitt, standardavvik, persentiler og et persentil-bootstrap-konfidensintervall på 95% (ensemble). Hver inertielle kjøring bærer nå et flagg monte_carlo, slik at et kvalitetsmål fra én realisering ikke lenger forveksles med en fordeling. (CEP/2DRMS rapporteres med vilje ikke — de krever 3-akse-modellen som står på veikartet.)

  • Veiledet lekeplassmodus. Lekeplassen i nettleseren slipper deg ikke lenger rett ned i en vegg av rå TOML: en stripe «Start her» med scenariokort du klikker på laster og kjører et ferdig eksempel, glidere eksponerer de universelle innstillingene (seed, tidsterskel) uten å røre TOML-en, en merknad «Slik leser du dette» forklarer resultatet, og hele TOML-en ligger ett klikk unna i en sammenleggbar seksjon. Hver kjøring kan deles — Kopier delingslenke koder hele scenarioet inn i URL-fragmentet (ingenting lastes opp), slik at en lenke gjengir den eksakte kjøringen ved innlasting. Kodeken er enhetstestet (web/share.test.mjs, kjørt i CI).

  • N-dimensjonale parametersveip (src/sweep.rs). nd_sweep evaluerer en måling over hele det kartesiske produktet av flere SweepAxis-områder (avveiningsstudien med flere parametere), i radvis rekkefølge, deterministisk. Additivt — det eksisterende 1D-sveip-API-et er uendret. Bootstrap-konfidensintervaller per node og generalisering utover klokkepakken står fortsatt på veikartet.

  • Ekte øyeblikks-RAIM (src/raim.rs). Ekte Receiver Autonomous Integrity Monitoring i posisjonsdomenet: den bygger siktlinjegeometrien til de synlige satellittene, danner minste kvadraters løsning og residualene, kjører en χ²-test av residualene for feildeteksjon (eksakt terskel fra en avhengighetsfri ufullstendig gamma χ²/ikke-sentral χ²) og beregner helningsbaserte horisontale og vertikale beskyttelsesnivåer (HPL/VPL) med biasen for uoppdaget feil utledet for de konfigurerte P_fa/P_md. Dette er noe annet enn — og er ennå ikke koblet inn i — integritetsmålet for filterets indre konsistens i scenariorørledningen; feilutelatelse, budsjettering av varslingsgrense/P_HMI og ARAIM står fortsatt på veikartet.

  • Pakke for frekvensstabilitet: MDEV, TDEV, HDEV + konfidensintervaller (src/allan.rs). Ved siden av den overlappende ADEV: den modifiserte Allan-deviasjonen (skiller hvit fra flicker-fasestøy), tidsdeviasjonen (TDEV = tau/sqrt(3) * MDEV) og Hadamard-deviasjonen (avviser lineær frekvensdrift eksakt og konvergerer for divergerende rødstøytyper). χ²-baserte konfidensintervaller (deviation_ci) bruker et avhengighetsfritt par av normal-/χ²-kvantiler (Acklam + Wilson-Hilferty) med en konservativ edf uten overlapping; støytypespesifikk edf og numerisk paritet med Stable32 står fortsatt på veikartet.

  • Reduksjon mellom referansesystemer (src/frames.rs). GMST-basert TEME↔ECEF-rotasjon (med samme IAU-1982-siderealtid som propagatoren), eksakt WGS-84 geodetisk↔ECEF med en iterativ invers sådd med Bowring (maskinpresisjon i alle høyder, også MEO/GEO) og en geodetisk bakkestasjonsobservatør som returnerer asimut / elevasjon / avstand i det lokale East-North-Up-rammeverket. Polbevegelse og nutasjon under buesekundet brukes ikke (bare GMST, under en kilometer på bakkesporet); en ITRF-presis CIO-kjede står på veikartet.

  • Fundament for tidsskalaer (src/timescales.rs). Et avhengighetsfritt API for juliansk dato (gregoriansk sivil ↔ JD, MJD), den fulle IERS-historikken over heltalls skuddsekunder (UTC↔TAI, 10 s i 1972 til 37 s siden 2017), den definerte TAI→TT-forskyvningen, UT1-korreksjonen via en oppgitt DUT1 og IAU-2000 jordrotasjonsvinkelen. Dette er tidssubstratet som reduksjon til jordfast rammeverk (planlagt) hviler på. Tidspunkter er julianske datoer med enkel f64 (~50 µs oppløsning nær nåværende epoke; en todelt JD står på veikartet), og æraen før 1972 med gummisekunder er ikke modellert — begge deler er dokumentert i modulen.

  • Reproduserbarhet og opphav. En deterministisk CycloneDX-SBOM-generator (scripts/gen-sbom.sh) og en SLSA-attestasjon av byggopphav på utgivelsesbinæren og SBOM-en; utgivelsesverktøykjeden er festet slik at den stemmer med CI. Determinismegarantier, forbeholdet om libm på tvers av plattformer og tilnærmingen med gylden festing er dokumentert i docs/REPRODUCIBILITY.md.

  • Egenskapsbaserte tester og fuzz-tester (tests/property.rs). Deterministiske, randomiserte tester (ingen ny avhengighet) hevder invarianter over tusenvis av inndata: TLE- og scenarioparserne gir aldri panikk på søppel, ikke-ASCII, muterte eller avkortede inndata; TimeCfg::validate gir aldri panikk på NaN/inf/negative rutenett; TLE-sjekksummen er konsistent og gjelder bare kolonne 69; geodetisk↔ECEF-rundturer og TEME→ECEF-rotasjonen bevarer normen over hele kloden og et bredt høydebånd.

Endret#

  • Gylden testing fester nå kvalitetsmålene felt for felt for de fire referansescenarioene (med en toleranse som absorberer jitter i libm på tvers av plattformer) og erstatter de tidligere kontrollene som bare var ulikheter, slik at en stille numerisk regresjon fanges umiddelbart.
  • schema_version i resultatartefakter er hevet fra 0.1 til 0.7 (den lå fast mens motoren gikk videre).
  • cargo-deny avviser nå (advarer ikke om) trukne avhengigheter.
  • Nye dokumenter: CAPABILITY.md (ærlig omfangskart), SCHEMA.md (referanse for resultatfelt), INTEGRITY.md, QUANTUM-MODELS.md, REAL_TLE_GUIDE.md. En CI-vakt feiler hvis versjonsmerket i README driver bort fra Cargo.toml.

0.7.0 - 2026-06-02#

Lagt til#

  • SGP4/SDP4-banepropagering. En full, avhengighetsfri implementasjon av standard propagator for forenklede perturbasjoner — SGP4 for nær jorden sammen med SDP4-utvidelsen for dypt rom (sekulære og periodiske perturbasjoner fra måne og sol og geopotensialresonans på 12 h / 24 h). Den er validert mot de offisielle verifikasjonsvektorene i AIAA 2006-6753 («Revisiting Spacetrack Report #3»): alle 666 referansetilstander på tvers av tilfellene nær jorden, dypt rom, resonans og feilkoder stemmer med en verste posisjonsfeil på omtrent 4 mm. Dette er modellen to-linjers elementsett er definert mot, så den representerer ekte konstellasjoner — særlig GNSS-banene på ~12 h, som er dypt rom og resonante og som den tidligere to-legemers + J2-sekulære modellen ikke kan fange.
  • En konstellasjon gitt som fulle to-linjers elementsett (linje 1 + linje 2) propageres nå med SGP4/SDP4; en konstellasjon gitt som elementer med bare linje 2 beholder den analytiske Kepler-propageringen med to legemer, uendret. De to formene kan blandes i én blokk. Nytt referansescenario orbit-sgp4-gps.toml (en GPS-lignende MEO-konstellasjon i ekte to-linjers format, propagert med SGP4) — legg inn et aktuelt Celestrak-sett «gps-ops» for å studere den levende konstellasjonen.

0.6.0 - 2026-06-02#

Lagt til#

  • Demonstrator for aktivt spoofing-angrep. En ny scenariotype spoof injiserer en voksende falsk tidsspoof og kjører hver klokkes klokkestøttede integritetsmonitor, og rapporterer om og når spoofen oppdages og om den når den operative spesifikasjonen uoppdaget — slik at sikkerhetsmålet blir en konkret demonstrasjon av angrep og forsvar. Nytt referansescenario spoof-attack.toml.
  • Tilgjengelighet med flere konstellasjoner. Et banescenario kan kombinere flere konstellasjoner (en liste [[constellations]] ved siden av den primære [constellation]) for multi-GNSS-tilgjengelighet og presisjonsfortynning — for eksempel GPS pluss Galileo. Nytt referansescenario orbit-multignss.toml.

0.5.0 - 2026-06-02#

Lagt til#

  • HTML-resultatkort. Hver kjøring lager nå også et selvstendig, merkevarebygget HTML-resultatkort — sammendraget på én linje, diagrammet (innebygd som et inert data-URI-bilde) og hele JSON-en — skrevet av CLI-et ved siden av JSON-en og SVG-en. En delbar enkeltfilartefakt for en studieleveranse eller et vedlegg.
  • Felles sensorfusjonsestimator. En ny scenariotype fusion kjører ett enkelt rekursivt Kalman-filter som navigasjonsløsning — det fusjonerer klokketilstanden [phase, frequency] og posisjonstilstanden [position, velocity], styres av GNSS (lærer frekvensavviket og hastigheten) og støttes av optisk tidsoverføring under bortfallet — i stedet for å sette sammen uavhengige prediktorer. Den rapporterer fusjonert holdover for tid/posisjon og en integritet fra felles kovarians. Nytt referansescenario fusion-pnt.toml.
  • Fyldigere IMU-støymodell. Akselerometeret modellerer nå de gjenværende Allan-varianstermene utover den konstante biasen og hastighetsrandomvandringen: biasustabilitet (et 1/f-flickergulv ved standard Allan-koeffisient for biasustabilitet, som gjenbruker klokkens flickersyntese) og akselerasjonsrandomvandring. Nye valgfrie inertielle scenariofelt bias_instability og q_aa; en ny GNSS-posisjonsbestemmelse rekalibrerer den gjenværende biasdriften.
  • Ekte konstellasjonsgeometri fra TLE-er. En konstellasjon kan oppgis som en blokk med to-linjers elementsett (standardformatet fra NORAD/Celestrak) via et felt tle, slik at tilgjengelighet og presisjonsfortynning bruker en ekte konstellasjons publiserte geometri i stedet for et syntetisk Walker-mønster. Motoren leser hver TLEs Kepler-middelelementer og propagerer dem som to legemer — ikke med SGP4 — noe som er forsvarlig for en øyeblikksstudie fra en felles epoke. Nytt referansescenario orbit-real-tle.toml.

0.4.0 - 2026-06-02#

Lagt til#

  • Parametersveip for avveiningsstudier. En ny scenariotype sweep varierer én parameter (threshold_ns, duration_s, quantum_q_wf eller classical_q_wf) over et lineært eller logaritmisk område og registrerer et valgt kvalitetsmål i hvert punkt for begge klokkene, og lager dermed sammenligningsdiagrammet «hvordan skalerer holdover med klokkestabilitet?» som en utformingsavveining trenger. Nytt referansescenario sweep-clock-stability.toml.
  • Monte Carlo-konfidensbånd. Scenarioet for klokke-holdover kan kjøre mange realiseringer (nytt valgfritt felt runs): hvert kvalitetsmål rapporteres da som et gjennomsnitt med en spredning fra 5. til 95. persentil, og diagrammet skraverer feilomhyllingen på 5–95% rundt medianen for hver klokke. En enkelt kjøring er fortsatt standard. Nytt referansescenario clock-ensemble.toml.
  • Eksentriske baner og J2-drift. Banetypen er nå en full Kepler-bane (store halvakse, eksentrisitet, inklinasjon, RAAN, perigeumsargument, middelanomali), propagert ved å løse Keplers ligning, med valgfri sekulær J2-noderegresjon og apsidepresesjon. Nye valgfrie scenariofelt eccentricity, argp_deg og j2, og et referansescenario orbit-molniya.toml (en bruker i en svært eksentrisk, kritisk inklinert bane på 12 h). Sirkulære baner beholder den opprinnelige lukkede banen bit for bit.
  • Hybridpakken (kombinert PNT) rapporterer nå Integritet og Sikkerhet, slik at alle fire pakkene dekker hele settet av operative kvalitetsmål. Integritet er innesluttingen i beskyttelsesgrensen for tidskanalen fra et Kalman-filter som styres mot referansen mens GNSS er nominell og forankres på nytt (mer løst) ved hver optiske resynkronisering; grensen inkluderer linkens målestøygulv, slik at en klokke som er langt bedre enn linken scores mot den leverte løsningens faktiske støy. Sikkerhet er den klokkestøttede spoofdeteksjonsscoren mot tidsspesifikasjonen.

Endret#

  • Utgivelsesnotater genereres nå fra den kuraterte CHANGELOG-seksjonen for taggen (scripts/changelog-extract.sh), slik at hver GitHub-utgivelse fremhever hva som er endret i stedet for å liste rå commits.

0.3.0 - 2026-06-02#

Lagt til#

  • Kvalitetsmålet Sikkerhet (tidligere ikke fylt ut): en klokkestøttet spoofdeteksjonsscore for pakkene klokke-holdover og bane. Det modellerer en integritetsmonitor som krysssjekker GNSS-avledet tid mot klokkens egen predikerte glidning over et koherent vindu; deteksjonsgulvet kombinerer den midlede målestøyen med klokkens usikkerhet under glidningen, slik at en roligere klokke oppdager mindre, langsommere tidsspoofer. Scoren rapporteres i [0, 1] relativt til tidsspesifikasjonen og fullfører de seks operative kvalitetsmålene.
  • Geometriavledet posisjonsnøyaktighet for banepakken: fra siktlinjegeometrien til de synlige satellittene danner den designmatrisen og dens kovariansfaktor Q = (HᵀH)⁻¹, og gir faktorene for presisjonsfortynning (GDOP/PDOP/HDOP/VDOP/TDOP). Posisjonsnøyaktighet er posisjons-DOP skalert med en konfigurerbar brukerekvivalent avstandsfeil (nytt valgfritt scenariofelt sigma_uere_m). Et baneresultat bærer nå et geometrisammendrag (andel samples med posisjonsbestemmelse, beste og median PDOP og posisjonssigma).
  • En lekeplass i nettleseren (web/) som kjører motoren hos klienten som WebAssembly: velg et referansescenario eller rediger TOML-en, kjør den og se sammendraget, diagrammet og hele JSON-en, uten at noe lastes opp. En arbeidsflyt pages bygger og publiserer den til GitHub Pages, og en ny WebAssembly-eksport summary ligger bak utlesningen.
  • Y-akser med etiketter på SVG-diagrammene: rutenettlinjer, numeriske ticketiketter og en aksetittel med enheter (via en felles hjelper chart), slik at størrelsesordener er lesbare.
  • Arbeidsflyt for pakkepublisering (publish) til crates.io, PyPI og npm, hver sperret på sitt registertoken og utløst av en publisert utgivelse.

0.2.0 - 2026-06-02#

Lagt til#

  • Flicker-FM-gulv (1/f) for klokkefeilmodellen, syntetisert som en sum av logaritmisk fordelte Ornstein-Uhlenbeck-prosesser og kalibrert slik at det flate Allan-deviasjonsgulvet ligger på et konfigurerbart nivå. Av som standard; slås på per klokke via det valgfrie scenariofeltet flicker_floor.
  • Gyrokanal for den inertielle modellen: gjenværende gyrobias og vinkelrandomvandring driver en attitydefeil (tilt) som kobler gravitasjon inn i en horisontal feil i spesifikk kraft, den dominerende mekanismen for feilvekst i strapdown. Av som standard; slås på per sensor via de valgfrie feltene gyro_bias og q_arw.
  • Kalman-klokkeestimator med to tilstander (fase, frekvens) med eksakt van Loan-diskretisering av prosessstøy. Glidning fra en kjent tilstand gjengir den analytiske veksten i holdover-feil (q_wf*T + q_rw*T^3/3) eksakt, og filteret gir i tillegg en løpende usikkerhetsgrense på 1 sigma.
  • Klokkekjøringen rapporterer nå kvalitetsmålet Integritet (tidligere ikke fylt ut): andelen bortfallssamples der feilen holder seg innenfor filterets beskyttelsesgrense på 3 sigma, vist i JSON-resultatet og CLI-sammendraget.
  • Geometriavledet GNSS-tilgjengelighet: propagering av sirkulære baner, en generator for Walker-delta-konstellasjoner og siktlinjesynlighet (jordokkultasjon pluss elevasjonsmaske) gir tilgjengelighetstidslinjen fra ekte banegeometri. Ny scenariotype orbit og referansescenarioet orbit-gnss-challenged.toml (et romfartøy inne i GNSS-skallet med periodisk dekning).
  • Valgfri Python-utvidelse (PyO3, abi3) som eksponerer run, run_full og version, pakket med maturin (pyproject.toml) og bygget for Linux, macOS og Windows av en arbeidsflyt wheels utløst av utgivelsestagg. Bindingen er en funksjonssperret, valgfri avhengighet: standardbygget, testene og avhengighetsrevisjonen påvirkes ikke.
  • Valgfri WebAssembly-modul (wasm-bindgen) som eksponerer run, chart_svg og version, bygget med wasm-pack under funksjonen wasm; getrandom er målsperret for å bruke nettleserens entropikilde på wasm32.
  • Felles utsendelse api::run_toml brukt av CLI-et og begge bindingene, slik at kommandolinjen og bindingene ikke kan drive fra hverandre.

Endret#

  • Scoring av holdover er nå segmentbevisst: bortfallstidslinjer deles i sammenhengende segmenter ved GNSS-gjenerverving, og den rapporterte holdoveren er den verste (korteste) glidningen på tvers av dem. Scenarioer med ett bortfall er uendret. Gjelder for scorerne for klokke, inertiell og hybrid.
  • Den inertielle modellens rapporterte kind er nå inertial (var accelerometer), noe som gjenspeiler de kombinerte kanalene for akselerometer og gyro.

0.1.0 - 2026-06-01#

Første utgivelse.

Lagt til#

  • Deterministisk simuleringsmotor for hybrid kvante-/klassisk PNT: et felles grensesnitt for feilmodeller, deklarative GNSS-tilgjengelighetsscenarioer, estimatorer for holdover / dødregning og scoring av kvalitetsmål mot standard operative PNT-kriterier. Resultater kan reproduseres fra scenario + seed + engine version (versjonert, selvbeskrivende JSON med scenariohash) og gjengis som SVG-diagrammer. CLI-et sender scenarioer videre etter kind.
  • Fire sensorpakker, hver kalibrert mot publiserte data og validert mot standardrelasjonen:
    • Klokke-holdover — hvit FM, random-walk-FM og lineær aldring; validert med overlappende Allan-deviasjon (Riley, NIST SP 1065). Brikkeskala atomklokke mot optisk strontium-gitterklokke.
    • Inertiell dødregning — gjenværende bias + hastighetsrandomvandring, dobbeltintegrert til posisjonsfeil; validert mot Groves' relasjoner for feilvekst. Kaldt-atom-akselerometer mot akselerometer av navigasjonsklasse.
    • Tidsoverføring — tidsjitter i optisk mot RF-link → synkroniseringspresisjon → enveis avstandsmåling.
    • Hybrid fusjon (avslutningsstykket) — en kombinert PNT-suite som må holde både tid og posisjon, med valgfri klokkestøtte fra optisk tidsoverføring mellom satellitter.
  • Ett sitert referansescenario per pakke under scenarios/, der hver numeriske parameter bærer en fagfellevurdert provenance.
  • Vakter for reproduserbarhet og depothygiene; CI (format, clippy, tester, vakter, MSRV) og en tagg-sperret utgivelsesrørledning som kjører alle kontrollene på nytt.
  • Dokumentasjon: README med arkitekturdiagrammer, rapport om valideringsstatus, bidragsveiledning, sikkerhetspolicy og atferdsregler; Apache-2.0-lisens; maler for saker/PR-er og Dependabot-konfigurasjon.
  • Leverandørnøytral gjennomgående; fagfellevurderte vitenskapelige og metrologiske referanser er beholdt.
  • Hygiene for Apache-2.0-lisensen: SPDX-headere i alle kilder, en NOTICE med varemerkemerknad, Developer Certificate of Origin (DCO)-signering for bidrag og håndheving av avhengighetslisenser/-varsler med cargo-deny i CI.
  • Posisjonering som åpen kjerne (README): en gratis Apache-2.0-motor pluss tilgjengelig kommersiell støtte, integrasjon og proprietære utvidelser fra Ashforde OÜ — båret av tjenester, ikke lisensavgifter.
  • CITATION.cff slik at programvaren kan siteres.