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;langi 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åksREVIEW.mdlister 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 frageolocation. Utdata: GeoJSON, JSON-sammendrag, CSV med økter og en SVG-figur, hver med lisens, kildeangivelse, metode-id, forutsetninger, begrensninger og sin evidensetikett. Bibliotekinterference_map::api::emitter_regions_from_*, Python og WebAssemblyinterference_emitter_regions. MODELLED (registerradVM-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 iexamples/emitter-region/(docs/INTERFERENCE-MAP.md).- Målte klokkelogger.
src/clock_log.rsleser en målt klokkelogg inn i én faseserie: åtte formater (RINEX clock, TimeLab, TICC, linuxptpptp4l,phc2sysogts2phc, chrony tracking og statistikk), hvert en dokumentert delmengde; alt utenfor den avvises med en feil som navngir det som ble funnet. Den brukes avtelecom-timing([series.clock_log]) og klokketypen ([clock_log], som legger til en blokkmeasuredmed SHA-256 for loggen og de overlappende ADEV, TDEV og MTIE), med det medfølgende scenarioetclock-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 somf64), 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 scenarioclock-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); blokkenfittedog 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 iexamples/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 idocs/drafts/PARTNER-OUTREACH.md(ingenting sendes).- Andre kampanjer for tersklene som ikke ble nådd for
gnss-ssvoglunar-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,MODELLEDellerPARTNER, 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 kolonneIDidocs/VERIFICATION-MATRIX.md, en fast liste itests/fixtures/evidence_ids.txt). Også på receiver-trust,jammertest score,iq acquire/sweep/track/monitor, rapporten om ruteeksponering og, inne i den signerteconfig.json, hver bevispakke (config_version1,1;kshana evidence verifyrapporterer nivået; pakker laget før 0,40 verifiseres uendret).tests/evidence_labels_doc_sync.rsfeiler 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 idocs/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 fragnss-ssvog 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 ixval/mission-thread/PREREGISTRATION.mdfø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.tomlleser LOLA DEM fra en utsjekking): en inertiell feilmodell med fem tilstander per akse, en AFS-posisjonsbestemmelse (alene eller differensiell, med korreksjonslenkens residual fralunar-differential-pnt), en terrengrelativ posisjonsbestemmelse (matcheren fraterrain-navpå 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.tomllegger til den strålemarsjerte LOLA-horisonten): posisjoneringstallet for ett sted er likt tallet formoonlight-service-volumebit 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, ixval/mission-thread-lunar/.
Evidens#
- Forhåndsregistrert i
xval/mission-thread-lunar/PREREGISTRATION.mdfø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 foryes | 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.rslukker 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,p384ogp5210,13 til 0,14 (medelliptic-curve0.14.3,ecdsa0.17.0 ogcrypto-bigint0.5.5 til 0.7.10; også den direkte avhengighetencrypto-bigint, nå 0,7) utbedrer RUSTSEC-2026-0387, tidsvariasjon icrypto-bigint0.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).
memmap20.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-avhengighetenkshanai repoet.pillow12.3.0 til 13.0.0 ogcertifi2026.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 ixval/bench/RESULTS-v2.md: A2 (agc_k_sigmaAUC 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 avdocs/KINDS.md; hver kommando idocs/COMMANDS.md; hver flate, plugin-kommando, ferdighet og Studio-side idocs/ALL-SURFACES.md; hvert funksjonsområde idocs/CAPABILITY-DOMAINS.md; innebygde Mermaid-diagrammer (systemoversikt, flater, indre sløyfe, mottakertillit, laboratorie-rundtur, Studio, test- og utgivelsesflyt, modulkart, distribusjon). Skrevet avtools/gen_kinds_index.py,tools/gen_readme_blocks.pyogtools/gen_figures_038.py; revidert avtools/readme_audit.py; vaktet avtests/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.mdhar 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 medstudy(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 ixval/lunar-infra/PREREGISTRATION.mdog 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-recoverytester 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 importleser den publiserte NPRA Jammertest-katalogen og sendeplanen som planlagt referanse (katalog-ID-er beholdt), ogkshana jammertest scoreskå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
spoofDetStateog UBX-SEC-SIG leses inn iself_reportfor hver epoke, og sammenligningenreceiver_self_reporti 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-ensbf-tools) ogreceiver-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). Scenariotypenholdover-testskå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_logleser logger fra linuxptp (ptp4l,phc2sys,ts2phc) og chrony (tracking,statistics).iq scene --format sdrxskriver ION GNSS SDR-metadata, ogiq monitor --followovervåker et SigMF-opptak mens det vokser (kun mottak).compliance-reportfår NIST IR 8323r1 Foundational PNT Profile (15 parafraserte rader, gir belegg for). En bevispakke kan registrere operatørenslab-attestationi sitt signerte manifest, aldri verifisert; maskinvaretrinnene 0 til 4 og de juridiske merknadene står iHARDWARE-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 ixval/bench/PREREGISTRATION.md: skårerterskler nådd, C1 til C3 nådd, D2 nådd; A2 NOT MET (agc_k_sigmaAUC 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. Pythonbench_score,bench_leaderboard; WebAssembly på samme måte; MCPscore_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ærBESTPOS,RANGEC/No ogRXSTATUS; mottakerens jammerflagg blir epokensself_report, satt opp mot Kshanas alarmer av sammenligningenreceiver-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 iNOTICE, ikke fra RTCM-standarden) oggnss-sdr(GNSS-SDR Monitor- og PVT-monitormeldinger som JSON-linjer, videresendt avintegrations/gnss-sdr/relay.py). - IMU-logger som en andre sensor.
[log.imu](csvellereuroc) integrerer gyroens gir-rate til den headingen monitorenheading-courseleser; innebygd på alle flater og båret gjennom bevispakker.kshana imu-fit(Pythonimu_fit, WebAssemblyimu_fit, MCPfit_imu_log, plugin/kshana-fit-imu, en JetBrains-handling) tilpasser akselerometer- og gyroparameterne i scenarioenehybridogfusionfra 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 ogublox_ubx_msgsinn, 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 tilgnss_lib_py(integrations/gnss_lib_py, MIT-avhengighet, valgfri) og et GNSS-SDR-relé. - Home Assistant MQTT-eksport for tillitstelemetri:
kshana trust-telemetry --print-mqttog--mqtt-tcp <host:port>(oppdagelsesmeldinger og et JSON-tilstandsdokument; kun publisering, ingen legitimasjon eller TLS), ogformat = "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-atmospheretar 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 ixval/optical-atmosphere/PREREGISTRATION-timeseries.mdfør den første kjøringen. - Spesifikasjon for testbetingelser og laboratorie-rundturen.
kshana.test-conditions/1er publisert somdocs/spec/TEST-CONDITIONS.mdmed et JSON-skjema, og fårrecording.kind = "receiver-log".kshana bench-exportskriver også<base>.conditions.json.kshana evidence round-tripbygger 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. Pythonevidence_round_trip, MCPcreate_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-reportfå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, signalenelunanet-afs-ioglunanet-afs-qikshana iq, SB1 BCH-koden, CRC-24Q og interleaver, ogkshana 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 å deleLICENSES/. 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 (resultatetholdover-testmålt mot ITU-T-maskene, tegnet fra resultatets egenrecord.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/benchmarkviser fragmentetkshana 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 avscripts/gate.sh), ikke på hver Apple-silicon-Mac, fordi Apples matematikkbibliotek er forskjellig mellom macOS-utgivelser; det bærbare laget kjøres overalt, ogtests/exact_pin_gate_guard.rshindrer 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.shogdocs/LOCAL-ORACLE-TESTS.mdforklarer hvordan en forskjell trieres;.github/workflows/oracle-macos.ymler 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
checkbygger 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.mder generert på nytt for det valgfrie feltettimeseriesi 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 medOpenFileDescriptor. Pluginen er kompatibel med og ren på 2024,3 (since-build, uendret) og begge 263-byggene. CI kjører nåverifyPluginog 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, designnotatdocs/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_linkbudgetfå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 ixval/optical-atmosphere/PREREGISTRATION.mdmot 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, somroc.jsonog 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-jobblabfit-iq-followup). Den tester de to hypotesene §13,6 idocs/design/LABFIT-FROM-IQ.mdlot 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 idocs/design/evidence/labfit-followup/RESULTS.md.- S1 nådd: med hvert J/S-nivå holdt, gjenvinnes
δ_effinnenfor +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.
- S1 nådd: med hvert J/S-nivå holdt, gjenvinnes
Begrenset FLL-innhenting, valgfri (DS-LOOP-05): en ny sløyfeutformingsnøkkel
[design.carrier] fll_pull_in_max_s(s), RustLoopConfig::fll_pull_in_max_s. Underfll_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) ogreacquisition_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) ogfom.availability_acquired(1).[front_end]:adc_bits(1 til 16) ogbandwidth_mhz(MHz, standard dobbelt chiprate). Gir en blokkfront_end:agc_gain_reduction_db(dB,10·log10(1 + J/N)),quantiser_loss_db(dB, trukket fra hver lenkes effektive C/N0) ogloss_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 typenjammingmed en jammer. Felt:dem_hgt: en SRTM-rute i formatet.hgt, relativt til arbeidsmappen;samples_per_side,ll_lat_degogll_lon_deg(grader): rutens størrelse og hjørne;geoid_undulation_m(m, standard 0),k_factor(standard 4/3) ogprofile_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) ogprofile_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 typenjamming. Felt:elements_enu_m(elementposisjoner i lokal øst-nord-opp, m),weighting("null-steering"eller"mvdr") ogbandwidth_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) ogjammer_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
kshanaogapi::run_tomlså vel somjamming::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".
- Hver kanal danner en forvrengningsfri stråle mot sin satellitt. Lenkens støy skaleres med
IQ-sporingsmotor mot GNSS-SDR 0.0.19 (PRO-33):
kshana iq trackog 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-l1ofogglonass-l2of(enhver FDMA-kanal somglonass-l1of-k<K>, K = −7 til 6),beidou-b1i,beidou-b1c,beidou-b2a,beidou-b3ioggalileo-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_cfarogca_cfar_cellsavgjø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 forMikke-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.shhenter 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_sdrxleser en LuGRE IQ-batch med I i den høye nibblen og mid-rise-nivåene2v + 1(SdrLayout::mid_rise), som fjerner middelverdien på −½ de rene toerkomplementheltallene har på I og Q.run_acq.py --correctedgir 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::bocskalerer 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_jumpslister 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 idocs/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 frakshana iq campaignpå 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/1som JSON, CSV og Markdown, med en enhetsblokk.Q_effkan ikke identifiseres fra C/N0-data uten en uavhengig effektmåling. Den oppgis, tilpasses aldri, og den tilpassede parameteren erdelta_eff = delta - 10 log10 Q(utformingsendring 2026-10-12). En ukjent jammertype tar den mest skadelige oppgitteQ(cw, 1). På syntetiske kampanjer fra Kshanas egne scener består terskelen (c) for dekning i tilbakeholdte datasett. Tersklene (a') og (b') fordelta_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-systempå en JPL-kjerne (CAP-31):planetary_kernel_pathtar hvert legeme SPK-en inneholder (med de440s: Merkur, Venus, Jorden, Månen) fra kjernen, etikettKERNEL, og legger til en blokkkernelbare 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_kernelsveiper 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 viaLunarForceModel::macro_model): direkte solstråling på flat plate med Månens skygge, et solsporende panel, og månens albedo og termisk IR;LunarMacroModel::lro_genericer 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 bryterKSHANA_LRO_DEGREEfor 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 idocs/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_de440avbilder 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) oglunar_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_etstemmer med SPICEpxformpå 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), ogBody::muer 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 vedmaneuver::kepler_universalpå en bue med e = 0,994; den er registrert idocs/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 medForceModel::box_wing_srp/PreciseForceModel::box_wing_srp(feltenesrp_boxwing, standardNone: kanonkulestien og alle golden-filer er uendret); med et boks-vinge-sett ercrdets 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) ogShadowModel, valgt medForceModel::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 avgtd7oggtd7d(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_atogpropagator::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_ephemeristar enhverEphemerisProvider(for eksempel en DE440KernelEphemeris) 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_jd2beholder 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_s1ogs1_air_tide_acceleration(Biancale & Bode 2006, GFZ STR06/01 tabell 1 modell N1, grad 2–6), slått på medair_tide_s1()påpropagator::ForceModelogprecise_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_accuracyogSp3Accuracy::position_sigma_mavbilder 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_fieldkobler 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 avxval/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-lasterfrom_gfc_file/from_gfc_reader(kontroller av norm og maksimal grad, tidevannssystem registrert, tidsvariable ledd avvist) ogscripts/fetch_egm2008.sh(full EGM2008, SHA-256 festet, ikke medfølgende; tester styrt avKSHANA_EGM2008_GFC).propagator::FieldEvaluatorvelger den på den valgfrieGeopotential. 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 ixval/.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.1solve_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 avpropagator::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::ForceModelfårgeopotential: Option<Geopotential>(with_geopotential,with_egm2008(nmax)). Den evaluerer etSphericalHarmonicField(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). StandardNone: ingen eksisterende utdata endres. VALIDATED mot Orekit 12,2 Holmes–Featherstone over 24 t (6 tilfeller, verst 0,036 m), med tersklene forhåndsregistrert ixval/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_jd2ogown_jd2_utc,From-omregninger mellomjd2::Jd2ogtimescales::TwoPartJd, og en valgfritwo_part_jd = truefor scenarietephemeris(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 pyerfagmst82/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 enkeltf64ikke når dem). Cowell-kraftmodellens epoke forblir enkeltf64; 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 avprecession_matrix,teme_to_gcrs_matrixog 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, ogJd2::from_utc_calendar,jd2::utc_to_taiogjd2::tai_to_utcfra 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 pyerfadtf2d/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 enklef64-versjonentimescales::tai_minus_utcer 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−τnogγnvar tidligere ubrukt. Ny registerrad "GLONASS broadcast satellite clock and broadcast-orbit propagation", VALIDATED mot RTKLIB 2.4.2-p13geph2clk/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 fixtureigs_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_navleser RINEX 4.00-4.02 navigasjonsfiler (> EPHGPS LNAV, Galileo I/NAV og F/NAV, BeiDou D1/D2, QZSS LNAV; andre poster hoppes over til neste postheader), ogparse_nav_withtar 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_geoogRinexEphemeris::sv_position_ecef_bds_geo(BDS ICD, −5 grader helning).parse_navhopper 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.shogtests/ppp_parity_glab_rtklib.rsmed 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_navmsgkoder 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; synk0101100000) og Galileo F/NAV (sidetypene 1-4; interleaver 61x8; synk101101110000), 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_filemedIonexFile,IonexHeader,IonexEpoch,IonexFileMapogIonexTimeInterp: en streng IONEX 1,0-leser med faste kolonner, med epoker talt fra det første kartets dag,9999lest 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. RTKLIBsiontecstemmer 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::HatchFilterogpvt::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), medparse_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_sogclock_nodesinterpolerer de tabulerte SP3-satellittklokkene lineært mellom de to omsluttende gyldige nodene (sentinellverdien for dårlig klokke hoppes over), ogClockRinex::from_sp3mater dem tilPreciseProducts, 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 blokkintegrity_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 somgeometry, aldrienvironment; uten en, er reserveløsningen med asimutgap og alle utdata som før. Generatoren for mannskapstrening får en hendelsenatural-degradation(en blokkert himmel, ikke interferens) og scenarietscenarios/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_tokenkontrollerer 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 pakkestimestamp.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_tierssom 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-coveragehar ingenfigure_tiersfør en ny datert prediksjon erstatter den frosne;leo-ppp,solar-system,sweepogsweep-ndhar ikke noe skalart hovedtall, oglunar-attack-surfaceskriver 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 tilassurance::uncertaintyer 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.rsleser 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 blokkmeasured(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-timingfå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 referansescenarioetscenarios/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-exportfor 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 viaxval/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.mdangir 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::kfginsog 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 ixval/kfgins/PREREGISTRATION.md.Koblet PNT-filter i fusjonspakken (0,36, WP-09, FUT-16): typen
fusiontar en valgfri tabell[coupled]som kjører ett stablet filter på pseudoavstander med en akselerometer-skjevhetstilstand (fusion::coupled::CoupledPntBiasFilter), ogfusion::coupled::CoupledPnt3der 3D-versjonen med 8 tilstander. Nytt medfølgende scenariofusion-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ådefusionoghybriduendret (festet);hybridavviser 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-railoggnss-ins-aviationpå banebiblioteket, og en valgfri tabell[tight]for typengnss-inssom 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-instar en valgfri tabell[trajectory]medprofile = "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);csvimporterer 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_pathleser en tekstflisrealdata::lola_dem(høyder over middelkulen på et rutenett av breddegrad/lengdegrad) i stedet for den polare stereografiskedem_path, både forlunar-station-coverageogmoonlight-service-volume; rapporten gjengir flisen (terrain.dem_tile, med dens SHA-256).realdata::lola_demer 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
terrainfår hver rad i geometrieksporten per satellitt formoonlight-service-volumefeltetclears_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-funksjonenfield_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.rsfeiler 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-funksjonenkind_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.rsfeiler 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()ogiq_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 nativeiq::cli(tiliq::scene::syntheticogiq::signals::by_name) slik at begge byggene deler dem; kommandolinjens utdata er uendret. Den native testen ogweb/smoke.mjssammenligner 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.pyityper de lukkede vokabularene (ScenarioKind, hvert typenavn;ErrorKind;ProvenanceClass) og ordbøkeneKindMetaogFieldUnit;scenario_kinds()ogerror_kind()returnerer dem. WebAssembly-pakken legger tilrun_typed(én kjøring som et typetRunOutput-objekt med det tolkede dokumentet somdata) ogscenario_kinds(de tolkedeKindMeta[]), og denskshana.d.tshar det samme vokabularet;error_kinder typetErrorKind | "".tests/typed_api_sync.rsholder begge listene lik motorens.Enheter for hver
sweep-nd-kolonne (FUT-28): etsweep-nd-resultat har nåkey_unitsogmetric_units, enheten for hver sveipet nøkkel og hver registrerte metrikk, lest fra den sveipede pakkens egen enhetstabell. En akse kan deklarereunitfor en nøkkel som pakken ikke gjengir; en deklarert enhet som motsier pakkens avvises, og en enhet som ingen av dem oppgir ernull, aldri gjettet.points[].coords[]ogpoints[].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-typenRunOutputfårarray(path),columns(path)ogseries(), som returnerernumpy.ndarray-objekter for en numerisk liste, de numeriske kolonnene i en liste av poster eller hver postserie i dokumentet. Hver matrise er liknumpy.asarrayav de samme verdiene fradata()(dtype og bits). NumPy importeres bare når en av dem kalles og står utenfor kjøretidskravene. Typet ikshana.pyiog kontrollert av stubtest.Kampanjeoptimerer (CAP-32): den nye, valgfrie seksjonen
[optimize]i typencampaignsø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 resultatetstrace. 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 avgen_calibration_ensembles; verdier per seed idocs/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-enBuiltinKind(api::BuiltinKind, med en krok for nivå per størrelse ogappend_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.rskontrollerer 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-maptar en valgfri[reference]: en tyngdeanomali syntetisert fra de medfølgende EGM2008-koeffisientene (eller en ICGEM-fil.gfcviagfc_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 scenarioetgps-denied-gravity-nav-egm2008kjø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 scenariogravity-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-altpnttar 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.pyhenter 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_mapflyr 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 fraOmmFile::to_omm_kvner 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 kreverELEMENT_SET_NO, avviserCOMMENTi XML-parametere definert av brukeren, skriver ikkeBTERMutenBSTAR, og leser relative OCM-epoker i TDB i SI-sekunder). Den eldre OMM-skriverensMETA_STARTavvises 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 utenMAN_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 CPythoncrc_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.0check metricsuten lint-problemer, og sendt uendret gjennom OpenTelemetry Collector contrib 0.135.0 (datastyrt: verktøy hentet med festet SHA-256, utdata sjekket inn).
- CCSDS Orbit Data Messages (
Banebestemmelse for Mars, kjøring 2 (0,36, WP-14, CAP-30):
mars_od::fit_dampedskalerer 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 idocs/revisions. Raden forblir MODELLED.Rampet 2-veis Doppler-modell for Mars og banebestemmelse (0,36, WP-14, del av CAP-30, trinn 2):
mars_odforutsier 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_kernelleser SPK-type 1 (kontrollert mot CSPICE) oggravity_sh::from_shadrleser 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_odfleser 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_budgetlø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
timetransfermed 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.- Toveisligning:
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 scenarioerentry-heating-stardust,eo-radiometryogascent-losses, ogdocs/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 scenarioeraocs-slewogaocs-slew-mekf, ogdocs/AOCS.md.Planlegging av bakkekontakt og DVB-S2 ACM (0,36, WP-14, CAP-22/23): to nye scenariotyper.
acm-linkgir, 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-schedulegjø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 scenarioeracm-linkogcontact-schedule(illustrerende inndata) ogdocs/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-pvtmed forhåndsinnstillingenstarlink-sopmot 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_kernelfinner 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): typenlunar-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 tillunar-differential-pntved 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.mdfryser, ved commit c05dac1d, resultatene fralunar-station-coverageunder 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.rsvokter den;docs/VALIDATION.mdfå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-coverageog fraværende som standard, slik at alle eksisterende dokumenter, den frosne prediksjonen medregnet, er uendret:[receiver](flerveisfeila + 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) ogmoonlight-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-enLDEM_75S_240Mved sørpolen, resamplet med blokkmiddel 5 x 5 til 1200 m (data/lunar-dem/, med sin NOTICE, SHA-256 ogscripts/make_lola_south_polar_crop.py), og scenarioetscenarios/lunar-station-coverage-terrain.tomlsom 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(årsakerfew-satellites,high-pdop,high-hdop, og den informativesky-blocked) ellerunknownder 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 kjernenorbit::dop, eller tas fra NMEA GSA. Hver epoke har også en etikett,good,fairellerpoor, 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 monitorgeometrysom 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,environmentellerinconsistency, slik at en dårlig himmel ikke leses som et angrep.loss-of-lockergeometrynår satellittene som gikk tapt alle var under 15 grader ved sin siste rapport; et fradrag for dårlig geometri erinconsistencynå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 epokensignal_lossog geometrifradraget erenvironment. 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_points15), rampens slutt (full_ratio1,5) og gulvet (floor, som standard scorensdegraded_min) står i[geometry], det samme gjør etikettens gode nivåer (HDOP 2, PDOP 3, 6 satellitter, representativt); taket som gjelder ermin(cap_points, 100 - floor), så en tabell[score]som heverdegraded_min(også en på 0,35) senker taket i stedet for å bli avvist, og et gulv underdegraded_minavvises. 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,classpå hvert fradrag,geometry_model,geometry_summary), live JSON-linjene (skjema 1,3), Python- og WebAssembly-funksjonenereceiver_trust,assess_vessel_logogreceiver_trust_replay, MCP-verktøyeneassess_*, bevispakker (epochs.json,config.json, et geometrifelt på sammendragssiden) ogtrust-telemetry(Prometheuskshana_trust_geometry*og en etikettclasspåkshana_trust_reason_active, OTLPkshana.geometry.*, egne CEF-feltcs6(geometristatus og klasser),cfp3(HDOP) ogcfp4(PDOP), kontrollert mot begge CEF-referanseparserne, og LEEFgeoStatus,geoHdop,geoClass). Geometrietiketten eksporteres også, lagt til etter alle tidligere serier og felt og bare for inndata som har den: Prometheuskshana_trust_geometry_label{label}ogkshana_trust_geometry_vdop, OTLPkshana.geometry.labelogkshana.geometry.vdop, LEEFgeoLabel,geoPdop,geoVdop,geoUsed, og CEF et tredje feltcs6(etiketten) ogcn1(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 forblirdegradedmens det varer: Prometheuskshana_trust_geometry_signal_loss, OTLPkshana.geometry.signal_loss, LEEFgeoSignalLoss=1; i CEF vises det som klassenenvironmentics6.orbit::dop_cofactor: kovariansfaktoren(HᵀH)⁻¹bakorbit::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 ermax(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]ignss-sim,jamming,leo-pvt(hver modus, polarsveipet medregnet),leo-passog opplæringsfilene fornmea-scenario, og iorbitogintegritygjennom 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 ingenepocher oppgitt; enuseri bane avviser en skyline). Resultater fårskyline { source, open_fraction, provenance }ogmasked_by_skylineper 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-skylineog kampanjenleo-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_sourceogsky_statementsier om himmelen er representativ eller den himmelen elementsettene gir ved den epoken, ikke en måling;tle_skippedlister 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_profileogskyplot_svg.orbit::dop_coveksponerer kovariansen bakorbit::dop, som nå er dens reduksjon (de validerte skalarene er uendret). Flater:kshana skyogkshana skyline, Python- og WASM-funksjoner med de samme navnene, og MCP-verktøyetsky_geometry(40 verktøy), og notatbokennotebooks/geometry.ipynb(med speilet.md; kjørt avtests/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 numpylinalg.invoglinalg.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_reflectorsogextra_beaconspålunar-llr-datumlegger til en blokkstation_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 fralunar-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.tomlog-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 itests/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 itests/lunar_station_published_oracle.rs. Én registerrad, merket MODELLED med funnet.Månens referansestasjon: dataklarhet for klokkefiler.
realdata::clk::rinex_clock_seriesoppgir nå tidssystemet for sine epoker. Det er verdienTIME 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_coupledogfusion::gnss_ins_ekfkaller ikke lenger UKF-navigatoren med 17 tilstander, den tette koblingen med full INS og den eksplisitte klokketilstanden fremtidig arbeid; de peker tilhybrid_ukf,tightly_coupled17ogcarrier_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_ionexleser 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 returnerteNonepå 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-e1oggalileo-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.mdog 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) oggalileo-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 unormalisertP_nmmed cosinus-fasetilbakeslag; de ble brukt som fullt normalisert, med tilbakeslaget som IERS sinus-føring. De går nå inn delt påN_nmmedε = 90° − ψ; den nyetides::s2_air_wavesgjengir 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 ixval/s2-air-tide-fix/).Bare dokumentasjon:
propagator::solve_kepler_checked,orbit::solve_keplerogephem::solve_keplerer dokumentert som eldre løsere, numerisk uendret, med henvisning tilkepler::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 iorbit::Propagator, leserensrc/ionex.rsmot et ekte produkt, og utelukkelse av flere satellitter iraim). Den manglendedocs/design/evidence/cn0-m2m4/RESULTS.mder 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.txtogC8_E1C.txt(ICD vedlegg C.7/C.8) er fjernet fra repoet og pakkene. ICD-ens vilkår (sitert iLICENSING.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_tablereturnerer nå enResultog leser brukerens egen kopi fraKSHANA_GALILEO_E1B/KSHANA_GALILEO_E1C, eller, i en kildeutsjekk, fradata/galileo-os-sis-icd/, der det nyescripts/fetch_galileo_e1_codes.shtrekker dem ut av ICD-ens PDF (kontrollert med hash).galileo::E1B_TABLE_TEXT/E1C_TABLE_TEXTer 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 itests/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 samplernerand_distrfor normal-, gamma- og eksponentialfordeling, beregner nå gjennom det rene Rust-biblioteketlibm(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 idocs/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 foreuropa-surface-pntmed 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 forlunar-joint-od-clock3,541350 -> 3,536885 m med VLBI og 2183,558 -> 2184,021 m uten;paper/crossover/inertial.json, åtte verdier avvibration_psdmed 3 enheter i siste desimal (erratum i den tekniske rapporten); det utgitte dokumentetcislunar-observabilityi 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 idocs/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 foriq_campaign, de eldre referansehashene forgnss-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_seriesreturnererRinexClockSeries(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.rsholder begge eksempelsesjonenes utdata ogtests/geometry_corpus_identity.rshvert 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.weightser uendret); skjemaet for live JSON-linjer går fra 1,2 til 1,3 (geometrylagt til,classi hvert fradrag); utdragssammendraget fårgeometry; telemetrien får geometriserier, felt og etikettenclassbare for inndata som har dem, slik at en strøm eller et resultat fra 0,35 gjengis byte for byte som før.geometryer det 17. monitornavnet; det står sist imonitors_runnå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/NOTICEoppga 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 ixval/jammer-q/RESULTS.md):jamming-demo: C/N0 +3,01 dB;jamming-harbour-approach-skyline:min_tracking6 → 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-loopogimpairment-eval,jamming_kind_cross_checki spektrumtypene, den MODELLED referansekurven til IQ-kampanjen og standard-Q i labfit, og interop-sceneeksport.
- Uendret: CW- og smalbåndsjammere (Q = 1), en ukjent jammertype (Q = 1, den mest skadelige verdien), og
JetBrains-plugin: ingen utdatert plattform-API eller API som er planlagt fjernet. De fem valgdialogene bruker en liten
DialogWrappermed en rullegardin i stedet for den utdaterteMessages.showChooseDialog; filvelgere for én fil bruker konstruktørenFileChooserDescriptori stedet for den utdaterteFileChooserDescriptorFactory.createSingleFileDescriptor(); animasjonen åpnes medBrowserUtil.browse(Path)i stedet forbrowse(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);verifyPluginkontrollerer 2024,3 som standard og enhver liste oppgitt iKSHANA_VERIFY_IDES.gnss_sim::run_gnss_simogjamming::run_jammingreturnererResult: en ugyldig seksjon[skyline]er en feil når den kalles direkte, slik den allerede var gjennomapi::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. Enfalse-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.rsendres 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.
- I referansekampanjen i
lunar-frame-campaign: et fyr uten observasjon rapporteres nå (funnet av MR-05). Rapporten får
unobserved_beaconsogwarningbare 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 avlunar_odog LRO-tilpasningen): DE421-forskyvningen fra middel-Jord til hovedakse imoon_080317.tfble 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 SPICEpxform('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å iinline_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_partsmed 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-blockedogopen_fractionfra skylinen der inndataene gir en (asimutgapet som reserve), en hendelse med naturlig degradering (fjord eller terminal) inmea-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 leserunknowni 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-lockeller fradrag for C/N0; totalt signaltap er bare synlig gjennom geometrimonitorenssignal_loss(klassifisertenvironment). 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::osnmaogkshana 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$PKSOSfor mottakertillitsmonitoren. Utdata har en veiledende merknad om at statusen ikke er en tjeneste for navigasjonsintegritet.docs/OSNMA.mdoppgir 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)#
kshana-mcp --http <addr>, streambar HTTP, selvhostet. Loopback som standard; en adresse som ikke er loopback trenger--allow-remoteog et bearer-token iKSHANA_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).
En passasje som navngir tredjeparts AI-klienter er utelatt her; den står i CHANGELOG.md på GitHub.
Lagt til (flater)#
osnma_verifyi Python og WebAssembly. Verifikatoren bakkshana osnma verifypå bytes i minnet, som returnerer JSON-en--jsonskriver ut (veiledende merknad i feltetadvisory; 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.mdogdocs/OSNMA.mdsier det.trust_telemetryi WebAssembly, Python og MCP, med en plugin-kommando og en JetBrains-handling. Gjengir en tillitsstrøm eller et resultat frareceiver-trustsom Prometheus-tekst, CEF- eller LEEF-syslog-linjer eller en OTLP-JSON-nyttelast, med koderernekshana trust-telemetrybruker (kshana::surface::trust_telemetry); ingen socket og ingen klokke. Plugin:/kshana-trust-telemetryog ferdighetentrust-telemetry. JetBrains: Render Trust Telemetry. Funksjonenewasmogpythonog 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 --helplister nåreceiver-trust evidence,evidence,trust-telemetryognmea-scenario; notatbokencompliance-and-test-bench(compliance-kartlegging og testbenk-eksport); og hver gjenværende JetBrains-celle «CLI only» idocs/SURFACES.mder 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 evidenceogkshana 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 frakshana evidence keygeneller din egen fil; nøkler lagres aldri i en pakke og*.evidence-keyer git-ignorert).verifykontrollerer hver hash, kjeden og signaturen og navngir nøyaktig hva som feiler; med--pubkeyfester 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 -verifydekker 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 forwasm32. Pakkene oppgir at de er en teknisk journal, ikke en juridisk vurdering. De nye avhengighetene er treeted25519-dalek(BSD-3-Clause og Apache-2.0/MIT, minimale funksjoner) og en direktezeroize(allerede i det treet) for å slette nøkkelmateriale. Sedocs/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 frareceiver-trustog 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 funksjonenotlpsom 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 tellerkshana_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 ideploy/grafana/. Metrikknavn, etiketter og CEF/LEEF-feltkartleggingen står idocs/TRUST-TELEMETRY.md. Strømformatet er isolert isrc/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-trusttar 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--gatesender den strømmen videre uendret så lenge posisjonsbestemmelsen er pålitelig og merker posisjonsbestemmelsen som ugyldig (GGA-kvalitet 0, RMC- og GLL-statusV, GNS- og VTG-modusN) 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-mapogkshana 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 hjelperfetch-land --allow-networklaster 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:flate2med 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 somnull, og en dag der bakgrunnen ikke kan estimeres holder tilbake sine kall. Utdatafiler heter<source>-<dataset>-<date>.geojsonog overskrives aldri; inndata strømmes linje for linje; ruteeksponeringen håndterer antimeridianen. Testene bruker bare syntetiske data. Sedocs/INTERFERENCE-MAP.mdog lisensgjennomgangen idocs/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 iscenarios/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 ireceiver-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. Sedocs/NMEA-TRAINING.md.
Maritime integrasjoner (0.35.0, arbeidsstrøm B)#
- Signal K-plugin (
integrations/signalk/, ikke publisert til npm): kjører eller kobler tilkshana receiver-trust live(serverens egen NMEA-inngang, egendefinerte inndataargumenter, en TCP-mating med JSON-linjer, eller setningene$PKSHTfra en portstrøm), publiserer tillitsscoren, båndet, årsakene, alarmene og portens tilstand undernavigation.gnss.kshana.*(inkludert posisjonen rapportert av mottakeren som kontekst, aldrinavigation.position), og sender et Signal K-varsel (warnved degradert,alarmved 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$PKSHTi 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$PKSHTfra 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 iintegrations/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 medsystemd-analyze verifyavcheck-units.sh), et containeralternativ, kobling til Signal K. - Signal K-pluginen godtar live JSON-skjemaet 1,2 (en
positionog deretter en nøkkeladvisorylagt 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.shfeiler 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, usikreinputArgsavvises, og varselet ligger pånotifications.navigation.gnss.kshana.trust; releet begrenser en holdt delvis linje; parserne for$PKSHTavviser 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/ogkshana 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 radevidenced,partly-evidenced,not-evidencedellerout-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 typengnss-ins,jammingellergnss-simfor en GNSS-simulator i laboratoriet: en CSV med brukerbevegelse med dokumenterte rammer og en metadata-sidefil, NMEA 0183GGA/RMC, tekst med veipunkter, og hendelsene som CSV og som blokkerreceiver-trust[[events]](src/interop/testbench.rs). Bare bevegelse og hendelser: ingen signal skrives. Hver fil leses tilbake itests/interop_testbench.rsog sammenlignes innenfor sin oppgitte toleranse.docs/TEST-BENCH.mdgir metoden for å spille av eksporten gjennom en simulator og score mottakerens logg medkshana 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_textogassess_textstar tekster, ikke stier. - Testbenk-eksport.
--epochområdekontrolleres (UtcEpoch::parse_iso); veipunktfilen kontrollerer hvert intervall og kommandoen sier hvorfor når en er utelatt; dokumentasjonen oppgir at retningen forgnss-inser kroppens giring og ikke kursen, plassholderfeltene iGGA, og scenarioets egen høydeendring.bench-exportogcompliance-reportstår i bruksteksten. fusion::pack::truth_trajectoryeksponerer den sanne tilstandshistorikken til kjøreprofilen forgnss-ins(den samme steppingen som typens egen referanse bruker), ogUtcEpochfå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 ogcryptography) 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 meldingenopentelemetry-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.mdfikk det normative pakkeformatet og verifiseringsprosedyren clean-room-verifikatoren ble skrevet fra;VerifyReportfikksignature_valid. Referanser og fiksturer:scripts/gen_ed25519_rfc8032_ref.py,scripts/gen_evidence_pack_ref.pymedscripts/evidence_verify_cleanroom.py,scripts/gen_telemetry_formats_ref.py; testerevidence_crypto_reference,evidence_pack_referenceogtelemetry_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.
pycef1,11 og Logstash CEF-kodeken (logstash-codec-cef6.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, noepycefikke kan. Terskelen ble registrert før noen av parserne ble kjørt (tests/cef_reference.rs); fiksturer itests/fixtures/cef/, referanseskriptscripts/gen_cef_ref.pyogscripts/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 heltallsfeltenecn1ogcn2, som passet for ingen av verdiene; CEF er nytt i denne utgivelsen, så ingenting som ble levert endres.
Endret#
- MCP:
assess_receiver_loggodtar loggen somtextellerbase64; verktøyinndata er begrenset til 4 MiB. - Jamming-diagrammet henter også fargene sine fra paletten.
src/jamming.rsvar 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-jammingog andre scenarioer av typenjamming) leser nåsrc/palette.rs, og tillatelseslisten itests/palette_sync.rser tom. Bare farger og skrift: diagrammenejamming-demoogmaritime-strait-jamminger lik sine tidligere registrerte gjengivelser når farge,font-familyog versjonsbunnteksten er normalisert. Ingen plottet verdi flyttet seg. De registrerte Studio-kopiene underweb/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_floorhadde referanseklokken flicker FM, men filteret med to tilstander som gir integritetsgrensen hadde det ikke, så 3-sigma-dekningen i det leverte scenarioetclock-ensemblevar 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 rapportererconsistent = false). Endring i utdata, bare for klokker med enflicker_floorsom ikke er null:integritypåclock-ensemblegår fra 0,40866 / 0,33026 til 0,99970 / 1,0 (klassisk / kvante) og NIS/NEES forfilter_healthinkluderer nå flickeren; tidsfeilen,holdover_sogtiming_p95_nser 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.integrityklassisk 0,7734 til 1,0 og kvante 0,9796 til 1,0, og NIS/NEES forfilter_healthog deres bånd endres. Dens kvantefilter_health.consistentsnur fratruetilfalse: 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_dbhzmed typensQ) 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. Medrun.epochssatt beholdes også hver celles strømkshana.track-epoch/1og låshendelser, navngitt etter cellenøkkel og hashet inn i cellen.cell_keyogreport::digester 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 skriverscorecard.csv/.json, en selvstendigreport.htmlog enDIGEST. 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 = trueimporterer annotasjonenekshana:test_eventi et SigMF-opptak som hendelser;- Python får
iq_test_conditions,iq_campaignogiq_campaign_report; kshana-mcpfåriq_campaign, som er inkrementell og kan gjenopptas under samplingsbudsjettet per kall med hver fil begrenset til arbeidsmappen, ogiq_campaign_status.
Tester:
tests/iq_campaign.rskjø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
reacquirepå er hver kanal tilbake innen 2 s etter et opphold på 2 s; utfallet medreacquireav 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/1TOML (docs/design/LOOP-DESIGN-TOML.md; parseriq::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
extendshverandre. 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_trackdesign/design_name.
M2M4 C/N0 (
EpochOutput.cn0_m2m4_dbhz, kolonnencn0_m2m4_dbhzi track-epoch ettercn0_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 somEpochOutput.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/1forblir; CSV/JSONL/binær uten taps er bit-identisk). Med taps: CSV/JSONL-kolonner, og en binær post på184 + 16 × tapsbytes der headeren harextra_taps_chips, slik at en gammel leser avviser filen i stedet for å tolke den feil.--extra-taps(CLI),extra_taps(Python) ogextra_taps_chips(MCPiq_track). Designene i én kjøring må være enige om taps.Parallelle kanaler (
iq track/iq sweep --threads <N|auto>; RustTrackSession::with_threads). Hver delmengde av kanaler kjører på inntil N tråder (std::thread::scope;wasm32forblir 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), Pythoniq_acq_surfaceog MCPiq_acquiresurface_outskriver hele korrelasjonseffektoverflaten Doppler × kodefase som søket beregner (cellene eracquiresine, 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).acquireselv 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 trackfår--epochs,--eventsog--summary(kshana.track-summary/1), ogiq sweepfår--epochsog--events. MCPiq_trackfårepochs_out/events_outog bygger svaret sitt fra sammendraget med begrenset minne.- Heapen til en kjøring vokser ikke lenger med opptakets lengde:
tests/iq_track_memory.rsmå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 ennreacq_window_s(standard 30 s). Mislykkede søk forsøkes på nytt hverreacq_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_soverreacq_interval_s) er av som standard, ogmax_reacq_attemptser 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.
--summaryfinal_state(og tabellens kolonne) er tilstanden etter siste overgang, slik at en kanal som er utfaset etter sin siste sløyfeoppdatering, vises somRETIRED.- 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 overfll_off_pli(0,8) ifll_gate_dwell_s(0,1 s), og går tilbake underfll_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. Brukfll_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, dermax_reacq_attemptser 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 trackhar en avsluttende kolonnefinal_state; - CSV-en fra
iq sweephar en avsluttende kolonnedesign_hash, og JSON-en hardesign_hashogwarnings; - sveipets
mean_cn0_dbhzer nå gjennomsnittet over hver oppdatering som har et NWPR-estimat (oppsummering med begrenset minne), ikke lenger over andre halvdel av kjøringen.
- tabellen fra
- 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 medreacquire=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), advareriq track/iq sweep(utdata,--summary, sveip-JSON), MCP-svaret fraiq_trackog Python-resultatet fraiq_trackom at jitter og bias i kodesløyfen ikke er representative. Grunnårsaken er dokumentert med terskler fastsatt på forhånd idocs/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/pythonog MCP IQ-rundturen.
- Terskler (
C/N0-profiler i syntetiske scener (0.34.0).
iq::channel::cn0_profileplanlegger 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. Referansefilenscn0_dbhzfølger profilen.- Flater:
kshana iq scene … --cn0-profile <toml>ogkshana.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.
- Flater:
Deteksjonsmonitorer på IQ-banen (0.34.0 «Lab replay»). Ny modul
iq::monitor, kommandokshana iq monitorog bindingkshana.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_Pog 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 sweepstrømmer gjennom den nye sesjonen (se Lagt til).--csvbeholder sine 0,32-kolonner, men strømmes nå, slik at rader fra flere kanaler flettes i tidsrekkefølge i stedet for å grupperes per kanal.--jsonbeholder sin 0,32-form og holder fortsatt hver epoke i minnet: bruk--epochsfor lange opptak.iq sweepmåler jitter over oppdateringene i andre halvdel av kjøringens varighet (tidligere andre halvdel av antall oppdateringer), og CSV/JSON får en kolonnedesign_hash.- Sporingstabellen får en kolonne
final_state. - Bruksteksten hevder ikke lenger at
iq tracktar frontend-flaggene; bareiq acquirebruker dem. - Pythons
iq_trackhar nåacq_noncoherentogdoppler_maxsom standard satt tilNone(utformingens verdier, 1 og 5000 Hz i den innebygde utformingen). Epokene får tidlig/sen-korrelatorene,carrier_phase_cycles,bit_edge,bitogstate, og resultatet fårdesignogevents.
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 opptil1 / (3 · N · T_code)Doppler-feil ved overlevering, men standard tokvadrants FLL fanger bare inn1 / (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 til0.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 eksplisittdoppler_step_hzeller--doppler-stepbrukes som skrevet, ogiq acquire(ingen sporingsoverlevering) beholder lærebokstrinnet. Epokeheaderen og--summaryregistrerer 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 · Tpå 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økkelcarrier.bn_t_max(standard 0,1) begrenser støybåndbreddene til PLL og FLL tilbn_t_max / Tnå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 = 0slå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.svggenerert på nytt: den innsjekkede figuren var utdatert mot sitt eget scenario (en dataendring, ikke en ny tegning). Diagrammet ble tegnet 2026-06-02 frascenarios/clock-ensemble.toml; to dager senere satte 67fed19e gulvene for flicker-FM i det scenarioet (kvanteflicker_floor = 1e-16, CSACflicker_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::scenegenererer 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 typenspectrumet SigMF-øyeblikksbilde av sin analytiske modell med de konfigurerte jammerne i (støylignende jammere bin for bin, toner og chirps som bølgeformer), ogspoof_capturesummerer 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::acqogiq::track). Ingenting i Kshana sender eller styrer radiomaskinvare. Statuslinjen i README,docs/POSITIONING.md,docs/SPECTRUM.mdog 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.mdhar målingene.
Lagt til#
GNSS IQ-laget på MCP-serveren (fase B.1).
kshana-mcpfår seks verktøy som styrer lagetkshana iqfra 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) ogiq_frontend(båndpass, notch, blanking, ekskisjon, AGC, kvantiserer). IQ-sampler krysser aldri protokollen: hvert verktøy tar filbaner innenfor én arbeidsmappe satt avKSHANA_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 mindreoverwriteer 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_codeogiq::cli::signal_nameser 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.jsondeklarerer de to miljøvariablene. Rundturstester imcp/kshana-mcp/tests/iq_round_trip.rsgenererer 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 avscripts/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::acqfinner 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 trackoverleverer 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, derT_codeer 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-trinn2 / (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 trackogkshana iq sweep(--acq-coherent), Pythonkshana.iq_track(acq_coherent=Noneer nå auto; stub oppdatert) og MCP-verktøyetiq_track. Brukere som stolte på den gamle standarden, kan oppgiacq_coherent=1(--acq-coherent 1). Standarden for--coherentikshana iq acquireforblir 1. Nye offentligeiq::acq::auto_coherent_periodsogiq::acq::AUTO_COHERENT_S; regresjonstesttests/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 (#0c0b08bakgrunn,#e0bd84gull) og et varmt papirtema for rapporter. De henter nå hver farge og skrift fra én modul,src/palette.rs, som speilerweb/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.rsholder modulen tilweb/theme.cssi begge temaene, kontrollerer atdocs/assets/palette.jsonogdocs/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 isrc/utenfor paletten.tests/published_figures_still_reproduce.rsfå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.pyleser 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, fraweb/capabilities.json, resultatet fraclock-holdoverogtests/fixtures/sgp4_comparison.md.tools/gen_readme_assets.pyleser den samme paletten, noe som retter opp avviket i lyst tema fra nettstedet. Verdiene isgp4-regime-barser kolonnen for verste tilfelle forkshana↔refi den testdatafilen (7.31e-9, 8.05e-9, 8.18e-9 og 4.12e-6 km), uendret fra Matplotlib-figuren, ogtests/figures_doc_sync.rsfeiler nå hvis den innsjekkede figuren og testdatafilen er uenige.
docs/assets/figures/domain-coverage-mapoppdatert 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 fraweb/capabilities.jsonviser 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 typenejamming,lunar-jammingog interop (tonen i det medfølgende eksempeletspectrum: 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. Settq_overridefor å beholde den gamle verdien 1,5.Heltallsutdata fra
kshana iq scenebruker heltallsområdet. Med støy med enhetseffekt og en skriveskala på 1 ble scenene ici8/ci16omtrent {-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 azog grenen stigende/synkende i stedet for selve azimuten, fordiasinforsterker é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 trackogkshana iq sweepbruker frontend-flaggene. Bruksteksten oppga--bandpass/--notch/--blank/--excise/--agc/--bitspåtrack, mentrackogsweepbygde aldri kjeden: flaggene ble stille ignorert, og et flagg uten verdi, som--notch, svelget flagget etter seg. Begge kommandoene tolker dem nå slikiq acquiregjø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 somiq frontendskriver for de samme flaggene.IQ-scenedata plasseres per signal.
kshana iq scene --data(ogNavData::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 nyeSpreadingCode::data_modulation()(DataModulation, satt av hver konstruktør iiq::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, ogNavData::Lnavpå alt unntatt L1 C/A. Egendefinerte koder beholder den tidligere timingen på 20 ms som standard. En programmatiskScenesom ba omNavData::Lnavpå en annen kode enn L1 C/A, ellerNavData::Seededpå 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::acquireog sporingskanalene mikset hver kode ned fraif_hzalene. 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 å leggecarrier − centerinn i sidefilensif_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 frekvenskanalenk, og satellitt-ID-en av typenu32bryter rundt for en negativ kanal. Referansesidefilen skriverk = -7somsat_id4294967289 (k + 2^32). Les den tilbake somkmed eni32-konvertering.
[0.32.0] - 2026-10-05#
Lagt til#
- GNSS IQ-laget på CLI og Python (0.32.0 fase A). Den eksisterende modulen
iqkan nå brukes uten å skrive Rust. Fem nye kommandoer underkshana iqkommer inn i datahåndteringsgruppen:scenegenererer en lang IQ-scene med flere satellitter til en fil med en sidefil for referansen;acquirekjører FFT-fangst av én eller flere PRN-er over et opptak og rapporterer hver deteksjon (PRN, Doppler, kodefase, statistikk, terskel);trackfanger 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;sweepspiller av ett opptak over flere sløyfeutforminger og rapporterer resulterende jitter- og låsemålinger per utforming; oglabfittilpasser 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 moduliq::cli; scenens egen referansefil er den uavhengige referansen itests/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
iqog Python (0.32.0 fase A.2). Bygger på fase A og gjør resten av lagetiqtilgjengelig uten å skrive Rust:- Utbredelseskanal på
iq scene(og Python-funksjoneniq_scene): en førsteordens ionosfære (--iono-stec/--iono-vteceller--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-metamed en opptaking og annotasjoner per satellitt;acquire/trackleser 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,--bits1/2/3/8/14) kjører trinnene iiq::frontend(båndpass-FIR, adaptivt notch, pulsblanking, ekskisjon i frekvensdomenet, AGC, kvantiserer); speilet i Python somiq_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 somiq_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 itests/iq_cli.rs.
- Utbredelseskanal på
[0.31.0] - 2026-10-04#
Lagt til#
- GNSS IQ-laget: simulering på signalnivå og programvaremottakerbehandling. En ny modul
iqtar Kshana fra en frontend for én satellitt og korte blokker på L1 C/A til et fullt lag på signalnivå, tilgjengelig fra kommandogruppenkshana 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øyetassess_receiver_logpå 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
pxformpå 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.1signal.welchinnenfor 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
lstsqpå 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_fdepå 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 sigmaraim::araim_raimograim::araim_dual_raimIKKE 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 atraim::solution_separation_raimikke 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_raimligger 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 forgnss-simflyttes 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 idocs/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 itests/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.mdliu22 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-loopjitter_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-pntpå 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 idocs/SOLAR-SYSTEM.mdog festet imcp/kshana-mcp/tests/round_trip.rsfølger med;mars-orbit-pnter 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-positioningtoa_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.jsonsendt 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_srifogcislunar_srif::srif_cross_validation_sqrt, på nyelinalg_sr::weighted_lstsqogcovariance_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::fitdelegerer 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.LunisolarSourcelar en geometribane velge den analytiske serien (standarden) eller en kjerne.- Valgfri kjerne-Måne for
lunar-llr-datumoglunar-vlbi-fim: en nøkkelplanetary_kernel_pathleser det geosentriske månesenteret fra kjernen; ellers endres ingenting, og rapporten får en blokkmoon_ephemerissom 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_utcstemmer 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_ephemerissier 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-fimoglunar-vlbi-fimmed 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,6autocorr_noise_idpå 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]ogsgp4::gcrs_to_itrs_matrix[_eop];Sgp4::new_atogSgp4::propagate_attar todelte epoker. Nyejd2::Jd2::from_utc_calendar(SOFA-konvensjonendtf2dfor skuddsekunddager),jd2::utc_to_tai,tai_to_utc,utc_to_ut1(gjennom TAI, som SOFAutcut1),tai_to_ttog en todeltjd2::earth_rotation_angle. - Polarmodusen i
leo-pvtpropagerer med SGP4 ved 2026-01-01T00:00:00 UTC på IAU-kjeden (leo_fusion::polar::latitude_sweep_attar en hvilken som helst epoke); SGP4 Walker-generatoren roterer til det jordfaste systemet gjennom IAU-kjeden. - Typen
passeskjø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 brytererefractionoglight_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 geometriskepasses::predict_passeser uendret. tests/no_private_models.rshindrer 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/taiutcpå 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,pnm06aogee06ainnenfor 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; typenpasseshø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.tomltotal tilgang 1675 s -> 1659 s (fem pass som før; beste maksimale elevasjon 73,25 grader -> 70,08 grader), og hver utdata frapassesflytter seg med den nye banen (den utskrevne linjen idocs/examples/multi-tool-pipeline.mdog oppføringenpassesidocs/CAPABILITY.mdsier nå det); medfølgendepolar-arctic-leo-coverageGNSS-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 ileo-pvtog referansebanenleo_navmsg(modellene deres ligger ileo_link::geometryogleo_fusion::geom), og jordutforminger iconstellation-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 somxval/lunar-afs/fetch_lsis.shfyller 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_extensionsogsigmf::annotation_extension_fields: et opptak kan bære felt for navnerom-utvidelser deklarert icore: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.sher 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_jammingogattack_surfacevar 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 ixval/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_seriesmed 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, medto_mid_risefor 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::GainPattern2Dog, iearth_gnss_lunar, kroppsreferansesystemet for yaw-styring, sendeazimut og off-nadir-vinkler, ogtransmit_side_dbfor 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_sdrfyller 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 somSdrLayout::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_raimbruker 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.mdsom oppgir kilde, lisens, hentedato og SHA-256. - Runde 2:
araim_reference::add_v42_protection_levelsog_ecef(ADD v4.2-feildeteksjon, etter Stanford MAAST for ARAIM 2, BSD-3-merknad i kilden);raim::snapshot_raim_fde;cw_dynamics::second_order_correctionogpropagate_second_order; INS-feilmodellen med ni tilstanderinertial::coast::ErrorDynamics; partielle deriverte forlunar_vlbi::KernelGeometryog inndata forlunar-vlbipå kjernebanen;naif_kernel, en leser for SPK type 2 og binære PCK-kjerner;lunar_llr_geometry::llr_bcrs_one_way_mmed ITRF2020-stasjoner; Jacchia 1971-tetthet;solar_system::link_onover en hvilken som helst efemeridetilbyder;launch::site_rotation_speed_at;eo_payload::j2_nodal_periodogground_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, ensitemap.xmlmed datoen hver side sist ble endret,llms.txtogllms-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_TOKENvirker 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.mdlister 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 gjenbrukernavsignal::simpson. De to inngangspunktene til LEO-passeringstypen deler ett oppsettstrinn.leo_link::geometryimporterer vektorhjelperne ileo_fusion::geomi stedet for å kopiere dem. Den avanserte rapporten importerer API-rapportens HTML-escape i stedet for å kopiere den. Hver av de 139 scenariofilene iscenarios/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.rsogsrc/leo_fusion/pvt_units.rs.PVT_UNITSbeholder sin offentlige sti. Bare disse to tabellfilene kommer inn under unntakene fra påvisning av kopiert kode for deklarative kataloger isonar-project.properties, somtests/sonar_cpd_exclusions_are_justified.rskontrollerer.
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 isrc/. Det publiserte tallet var 95,63 % (37 697 av 39 419 linjer), målt påb1d350dfør 0.28.0; det ble avrundet til ~96 %. Det nye tallet avrundes til ~95 %, så hver flate somtests/coverage_figure_doc_sync.rsfester 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 iweb/fonts/FONTS.json).web/tools/fetch_third_party.pyhar lært å lagre et utvalg fra Google Fontstext=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.htmlvirker fortsatt. Research har sin egen lenke i toppfeltet, mellom Evidence og Developers, og i bunnteksten. Dokumentasjonen viser ikke lenger veikartet (ROADMAP.mdblir 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
- 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 (determinismto ganger,advanced_reportoganimationé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:determinismtar 143 s på 14 kjerner mot 612 s medKSHANA_CORPUS_THREADS=1(den gamle serielle gjennomgangen).
- Fuzzeren
- 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 avtools/readme_shots.pyog registrert idocs/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-mcpden 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.rsogsrc/sgp4.rs(0.323_273_64→0.323_273_640): SonarQube Cloud leste en siste gruppe på_64eller_32som et manglende suffiksf64ellerf32(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::numatbygdeRx(−(ε̄+Δε))·Rz(Δψ)·Rx(ε̄)der SOFAsiauNumatbyggerRx(−(ε̄+Δε))·Rz(−Δψ)·Rx(ε̄), sånutation_matrix,nutation_matrix_2000a,teme_to_gcrsoggcrs_to_temeroterte 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 ERFAsnumattil 1e-14.tests/frame_reference_vectors.rs::teme_to_gcrs_matches_vallado_gcrfognutation::tests::nutation_matrix_matches_erfa_numatfeiler begge med det gamle fortegnet. Konsistenstesten for CIO (Celestial Intermediate Origin) isrc/cio.rshadde 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: kolonnenegcrs_r_moggcrs_v_m_sfor typenephemeris(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), ogPropagator::position_in_frame/state_gcrsfor 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ørsteorbit-sgp4-gps-satellitten stemmer med en ERFA-reduksjon av samme TLE (propagert av Python-pakkensgp4) 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 forleo-navmsgflytter seg med det, og det samme gjør trinnetnavmsgileo-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 idocs/LEO-NAVMSG.mdfor scenarioet som koder og dekoder var0x110315og er0x19105F, og SISRE for den dekodede meldingen er 0,129 cm. På kshana.dev viste Missions-kortet forleo-navmsg-fit-interval-tradeen 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-jammingder 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-detectfor 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.mdoppga 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ølgendeleo-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.mdbåndavveining: den første ordens ionosfæriske forsinkelsen forgeneric-ser 3,24 m (var trykt 3,25 m) og forgeneric-c-wide0,77 m (var 0,78 m).docs/LEO-NAVMSG.mdkoding 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.mdLEO 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.csver seks, ikke fire (leo-navmsgogtelecom-timingmanglet;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 foroem-interopidocs/examples/multi-tool-pipeline.mder 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 iorbit-gnss-challengeder 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 eksempelscenarios/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 ogspectral_separation_coeff_offset.- Rapporten skriver ut C/N0 som den representative Q-tabellen for typen
jammingville 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.Bodyfår Merkur, Venus, Jupiter, Saturn, Uranus, Neptun, Pluto og de sju månene, et navneoppslag og en fysisk post;AnalyticSolarSystemgir et hvilket som helst legeme i forhold til et annet gjennom den eksisterende grensenEphemerisProvider.- 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 forbody-pnt. - Funn: den lunare serien til Montenbruck & Gill i
src/ephem.rser 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 typensolar-systemla 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 forkshana 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.tomllenker typenspectrummed 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 itests/campaign_composition_reference.rs.constellation-designløser nå sitt sentrallegeme gjennomBody::by_name, så en konstellasjon kan legges rundt en hvilken som helst planet, Pluto eller stor måne med konstantene som typensolar-systembruker.
Kampanjer
- Kampanjer: mange scenarioer satt sammen til én kjøring. En ny type
campaign(src/campaign.rs, dokumentert idocs/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 avcarry,handoffogend_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-roadogcampaign-monte-carlo-clock-holdover.tests/campaign_composition_reference.rsfester 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 enmanifest.jsonsom 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ølgerprefers-color-scheme, og underprefers-reduced-motionviser både SVG-en og spilleren det ferdige bildet i stedet for å bevege seg.--animate-fpsog--animate-durationsetter avspillingen;kshana::api::animate_tomlogkshana::animation::animate_resulter bibliotekets inngangspunkter, ogresult.jsonfår en blokkanimationbare når--animatekjø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 (resultatetsunits-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 avsweepellersweep-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) fororbiteller stien for målt opptak forslot-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 setterKSHANA_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-nameallerede 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.rsrapporterer hvert medfølgende scenario (ingen tom seksjon, ingen plassholdertekst, etiketter lik matrisen, scenariodigesten lik filens, byte-identisk ved ny kjøring) ogtests/advanced_report_cli.rskjører den registrerte kommandoen på nytt i en ny katalog og krever en byte-identiskresult.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.jsonbærer den samme blokkencompanions. 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 igx: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 typenspectrumsom et SigMF-par (Signal Metadata Format) gjennom den eksisterendesrc/sigmf.rs.--export allskriver hvert format som gjelder og skriver ut hvorfor de andre ikke gjør det;--export listrapporterer uten å kjøre. Bevegelige objekter skrives i Geocentric Celestial Reference System (CZMLINERTIAL, STKICRF) og jordfast WGS 84 (World Geodetic System 1984) lengdegrad, breddegrad og høyde (KML, GeoJSON); faste steder i CZML erFIXED. Typenjamminglegger til to jammer-fotavtrykk fra sine egne lenkeligninger.--import-route <file.geojson>skriver en GeoJSON-LineStringinn i sporinndataene tilterrain-nav,terrain-slam,gravity-mapogcombined-altpnt. Eksporter er byte-deterministiske og bærer ikke noe tidsstempel.tests/interop_formats.rsvaliderer 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 typenspectrumer flyttet inn i én delt funksjon og resultatdokumentet er byte-identisk, ogPassesScenariofårpropagator()ogepoch_calendar()som brukes av dens egen kjøring. Antallet typer, scenariofiler og verifikasjonsmatriserader er uendret. Et bane- eller integritetsscenario utenepochdateres av satellittenes egne data:t = 0er 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 erSgp4::epoch_jd_utc,Sp3Interpolator::jd_ut1ogPropagator::own_jd_utclagt 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-signalog en typespectrumsom 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 underdata/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 idocs/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; enwideband-jammer (barrage) kommer til som en femte bølgeform ved siden av de fire. Rapporten legger tilbands[].tracked_power_dbw,bands[].designogpanels, og én postnot_modelled. Vanlige bånd gir de samme tallene som før. Eksempel:scenarios/multi-band-jamming-waterfall.toml.navsignalfå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::labelskriver 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.
Navigasjon i lav jordbane: lenke
- 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 forconstellation-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.rsså 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.
- 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
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). Sedocs/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) ogleo-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.rssammen med scenarioene sine så den kan holdes tilbake).
Navigasjon i lav jordbane: fusjon
- Fusjonert MEO + LEO-posisjonering, -navigasjon og -tidssynkronisering:
leo-pvt,leo-pppogntn-positioning. Tre nye scenariotyper isrc/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 isrc/celeste_iod.rsså de kan holdes tilbake).leo-pvthar 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) ogceleste-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-passkan navngi et design av typenleo-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 paretiono_freebruker den også). Et bånd uten design gir samme utdata som før. leo-pnt-chainkjører signal -> passering -> navigasjonsmelding -> fusjonert felles posisjonsbestemmelse ileo-pvt-> valgfrileo-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 leddod_sisre_mfor banebestemmelse i kvadratsum), og designets bærebølge og chiprate; PPP-tilfellene (presis punktposisjonering) tar SISRE. Hver overlevering er listet med verdi og enhet, ogtests/leo_pnt_chain.rskontrollerer at hver er lik utdataene oppstrøms og at endringer oppstrøms flytter tallene nedstrøms.LeoNavmsgScenario::broadcast_sisreer det nye inngangspunktet for meldinger.- Scenarioer:
leo-pnt-end-to-end(en generisk konstellasjon på 1080 km og det representative signaletgeneric-l),xona-pulsar-end-to-end(det offentlige X5-signalet), begge medfølgende, og den valgfrieceleste-iod-end-to-endsom 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, sombuild.rsbare kompilerer inn når den finnes (konfigurasjonsflaggetkshana_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.rskontrollerer 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-pvtfårt_sog tilfellene ileo-pppfårt_min, så begge animeres;leo-passogleo-pnt-chaineksporterer CZML-, KML-, GeoJSON- og STK-efemerider, og de andre LEO-typene oppgir hvorfor et format ikke gjelder.
- Bånd i
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.mdsom oversikt over hver LEO-type og hvert LEO-scenario. Hvert scenario kjører uten noen Celeste-data og er medfølgende.leo-passfå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 ileo_link::spoof. Seksjonen er fraværende, utdata uendret.- Hvert båndpar i
leo-passrapporterer 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 ileo-pass; ingen eksisterende tall endres. - Tidsmodusen i
leo-pvttartrace = 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.mdendres 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) ogleo-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 erleo-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 idocs/LEO-PNT.md. - Tre MODELLED matriserader: spoofingovervåkeren for Doppler og passeringsgeometri, spoofingovervåkeren mellom bånd, og ionosfæresondering.
tests/leo_resilience_verticals.rskontrollerer 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-passflytter tildocs/LEO-PASS.md;docs/LEO-PNT.mder 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 forkshana exampleog 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_scenariosendte 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_scenariosogget_example_scenarioleverer de medfølgende referansescenarioene (tabellenkshana example), hvert med sin type og den første setningen i sin egen overskrift, byte for byte filen underscenarios/. Et scenario som finnes i depotet men ikke er medfølgende, avvises med grunnen. Hver type unntattlunar-llr-datum(hvis datautsnitt bare følger med depotet) har minst ett eksempel.report_scenarioreturnerer kjøringens rapport som JSON (JavaScript Object Notation) eller som utskriftsvennlig HTML-side (HyperText Markup Language) (docs/REPORTS.md).animate_scenarioreturnerer 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_interopogimport_routeleverer interoperabilitetseksportene og GeoJSON-ruteimporten (docs/INTEROP.md): CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, STK-efemeriden (Systems Tool Kit).eog 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-scenariossom er av som standard og som eksponerer referansescenariotabellen somkshana::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 underweb/, 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.mdog 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 avtools/capture_studio_shots.mjs. READMEene for crates.io, PyPI, npm og MCP-serveren følger samme design. Langt referansemateriale er brettet sammen eller flyttet tildocs/.
Endret#
<scenario>.report.htmler nå den avanserte kjøringsrapporten som er beskrevet under Added, og CLI-linjenwrote …navngir også<scenario>.report.json. Resultatkortet på én side som den erstattet er uendret somRunOutput::html_report(), som Python- og WebAssembly-bindingene fortsatt returnerer.OracleKind::modelled_reason()eksponerer setningen somdocs/MODELLED-RATIONALE.mdskriver 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.jsonogreport.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::Modulationfår en variantMboc, som er en brytende endring for en kaller som matcher den uttømmende. Kolonnenegcrs_r_moggcrs_v_m_sfor typenephemerisendres (se «Revisjoner av publiserte tall»). En kjøring gjengis fortsatt av motorversjonen som laget den.
Rettet#
export_table_csvpå MCP-serveren navnga fire typer som de eneste med en CSV-tabell (kommaseparerte verdier); seks publiserer en. Verktøyet returnerte alltid tabellen fortelecom-timingog forleo-navmsg(dens analyseencode-decodepå en meldingsmodellkepler16ellerkepler-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.tomlkodet en ramme med syklisk redundanssjekk0x110315i release-bygget på aarch64 macOS,0x898BD8i et debug-bygg av samme kilde på samme maskin, og0x6A82D9i WebAssembly-bygget (WASM);leo-navmsg-celeste-iod.tomlga0x6EDB2Dnative mot0xC6E4F0i 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_elementstar den oskulerende inklinasjonen fra enacosog perigeumsargumentet fra enatan2, 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
sinfor 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_distrkaller vertensexpoglni 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-enlibmi ren Rust (allerede i avhengighetstreet, nå navngitt iCargo.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, fordif64::powihar uspesifisert presisjon, og sannhetsklokken trekker sine normalavvik fraportable_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_portableinternt 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_platformfester 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_libraryleser typens kilder fra disk og feiler på et iboende transcendentalt kall, på en sampler frarand_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 ileo-navmsg. Dette flytter tall, registrert her som en revisjon. Typenleo-navmsger ny i denne utgivelsen, så ingenting publisert i en tidligere utgivelse flytter seg, men hvert tall forleo-navmsggjør det, native og i WASM-bygget, og trinnetnavmsgileo-pnt-chainmed det: banetallene fordi tilpasningen nå starter fra de portable elementene, klokketallene fordi sannhetsklokken er en annen realisasjon av den samme prosessen.docs/LEO-NAVMSG.mder generert på nytt fra de nye resultatene; dens publiserte kontrollverdi for scenarioet som koder og dekoder var0x110315og er0x19105F(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.- Mellom plattformer. Referansebanen var bit-identisk på begge; tilpasningens startpunkt var det ikke.
Seedet resampling trakk andre indekser på et 32-bits mål.
Rng::gen_rangeoverusizetar 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 ieval_stats(bootstrap_ci,bootstrap_auc_ci), shufflen før hver treningsrunde iimpairment_ml, og permutasjonstesten iimpairment_study. De trekker nå gjennomportable_math::uniform_index, som alltid samples somu64: 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 forquantum-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. Sedocs/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; arbeidsflytenrealdata-clockkjø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,idogfrom_ider lagt til.baseline_clock_classiquantum-tradegodtar 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 seksjonenspoofingi typenslot-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 tiltpl::timing_protection_level_nsfor 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) ogdocs/DEPLOYMENT-TARGETS.md(hvor Kshana kjører; ingen flykjerne medno_stdtilbys).
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.tgzsom GitHub-forkortelsenowner/repo, så npm-jobben i v0.27.3 prøvde å klonegithub.com/npm-dist/kshana-0.27.3.tgzog 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-inser 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.tomlviser 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-navskriver det ut.Hver sensor i
gnss-inskan sette sin egen filterprior ([imu_quantum.filter_prior]eller[imu_classical.filter_prior], medsigma_accel_biasogsigma_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 avcargo install kshanahar den kjørbare filen og ingen katalogscenarios/, 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 frascenarios/(src/bundled_scenarios.rs; tabellen ligger i CLI-binærfilen, så Python-hjulet og WebAssembly-modulen vokser ikke).kshana examplelister dem;kshana example clock-holdover > clock-holdover.tomlskriver ett. De to andre filene finnes bare i depotet:lunar-llr-datumleser arkiverte data fra lunar laser ranging som bare følger med depotet, ogquantum-pnt-demonstrator.suiteer 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.rsholder 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 eksempelquantum.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 frasrc/verification.rsgjennomsrc/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 forhybridogfusionhar ingen eierrad i matrisen, så de er listet underuntieredi 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-timingsvarer 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, ogdocs/TELECOM-TIMING.mdlister 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.tomler 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.tomlviser 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.mjser vert for WebAssembly-motoren ogweb/engine.mjsvideresender 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-observabilityhar 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
unitssom 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 blokkenunitsigjen 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 literalexpect_summaryflytter seg ikke.realtime-frame-eoprapporterer hvilken referanse hver rad for jordorientering ble vurdert mot, og hvor ofte reserveløsningen slo inn.table3_joint_eop[].{ut1, polar_motion,combined}fårtruth_sourceogtruth_fallback_rows. Gulvetfinalvurderes mot Bulletin B final og kan bare bruke epoker som publiserer en; hver raddNvurderes mottruth_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-volumegir en keplersk grunnlinje i samme størrelse.ephemeris_comparison.keplerian_matchedkjø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 som360k/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.jsogså 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.rssikrer nå invarianten i begge halvdeler: måletrunpå et kort må være bundlet underscenarios/og tilbudt av katalogen. Mutasjonstestet mot begge feiltypene.moonlight-service-volumeskriver ut geometrien per satellitt som<scenario>.table.csvnå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.shlistet hver pakke i oppløsningen med standardfunksjoner, dev-dependencies inkludert. Det førtesgp4ogchrono, crates som bare brukes i tester og ikke kompileres inn i noe artefakt, inn i materiallisten, og utelot kjeden bak--features pythonsom 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,pythonogwasm(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 standardformenexpression.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, ogmoonlight-service-volumebare nårexport_site_lat_deg+export_site_lon_deger satt). WebAssembly-modulen fårtable_csv, som returnerer den samme teksten ellerundefined. MCP-rundturstesten og Python-bindingstestene fester nå den returnerte CSV-en byte for byte mottests/golden/realtime-frame-eop.csv, og fester atRunOutput.write_csvreturnerer 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_alli WebAssembly-modulen: én motorkjøring for alle utdata.run,chart_svg,summaryogtable_csvkjører hver scenarioet fra bunnen av, så playground betalte for fire fulle kjøringer per klikk, omtrent 12 s i stedet for 3 s forcislunar-arc-recoveryi en nettleser.run_allreturnerer{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-insendres. 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 forscenarios/gnss-ins.tomlendres slik:gnss-ins.tomlfø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, iclosed_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 forgnss-inser 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 medTypeError: fetch failed, fordi pakkensinit()henter WebAssembly-binæren og Nodesfetchikke kan lese en lokal fil. Nå:README.crates.mdogREADME.pypi.mdinneholder det scenarioet inline, slikREADME.npm.mdallerede gjorde. Rust-blokken er et helt program med sin egenmain, 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.rskompilerer den fortsatt byte for byte, og avviser nå også en skjult linje i blokken.README.npm.mdskiller nettleseren fra Node.js og gir en Node-oppskrift som leser binæren fra disk og sender den tilinitSync. Doc-sync-testen godtarinitSyncsom lasteren wasm-bindgen genererer.- Alle tre bygger inn scenarioet med proveniensstrengene uforkortet, så scenariohashen er
5ba83a232b94på 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 pakkenwasm-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.tomlsetterdefault-run = "kshana". Uten det avviste cargo med «could not determine which binary to run», som hvercargo 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 enlinjesok:ved suksess var allerede på main.tests/cli_first_run.rsdekker 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 somscenario_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.mdogREADME.pypi.mdsier nå dette og peker tilscenario_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.mdoppga 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 attests/araim_dual_real_data.rspropagerte hver satellitt fra sin egen TLE-epoke (parse_propagatorsdropper 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 tilaraim_dual_constellation_availability, så den eneste forskjellen er tidsjusteringen.docs/CAPABILITY.mdogdocs/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.mdog 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.--validatesier 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.shavviser en ikke-numeriskREPEATellerTEST_THREADS. Under bash 3,2 fikkREPEAT=noden 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.tomlgikk til 1,85 forrige utgivelse; README-merket, installasjons- og feilsøkingsteksten,codemeta.jsonog MCP-crate-ens egen begrunnelse sa fortsatt 1,75.RunOutput.__repr__i Python-bindingen rapporterer byte, ikke «chars». Den skrev utlen()av UTF-8-strenger, som er et antall byte: 710 «chars» for en tabell på 708 tegn.README dokumenterer ikke lenger
--study --study-namesammen.--study-nameer 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.htmlignoreres nå som de fire andre motorutdataene.En seed-sveip i playground feiler ikke lenger ved hver kjøring. Sveipet steppet heltallsinnstillingen
seedlineært (1, 10,9, 20,8, …), og motoren, som leste den somu64, 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 ingenengine_versionellerscenario_hash, så nedlastingene deres het barekshana-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 kshanabygger 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 undersrc/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 barekshana. I en klone finnes generatorene fortsatt automatisk, såcargo run --bin <name>og utgivelsesjobben som kjørervalidation_reporter uendret. Målt medcargo 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 --pathpå den pakkede crate-en installerte én kjørbar fil,kshana.Utdata en tidssynkroniseringsingeniør kan lese: ikke mer
p95 0.0ns, ikke mersecurity 0.000uten 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.0nsmens 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 som0.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 som0.000. securityer en analytisk grense for spoof-detekterbarhet som bare betyr noe mot et konfigurert angrep. Typeneclock,orbit,hybridogfusionkonfigurerer ingen, så sammendraget deres skriver nå utsecurity n/a (no attack)i stedet for et tall som0.000som leses som en mislykket deteksjon. Verdien blir værende ifom.security, merketapplicable: falsemed årsaken ifigure_tiers, og rapporttabellene viser «not applicable». Typenspoofskårer fortsatt deteksjon.- To sammendragsfestepunkter i
tests/registry_golden.rsflyttet seg av akkurat disse to grunnene og ingen andre:golden_clock(kvante-p95 og beggesecurity-verdiene) oggolden_orbit(beggesecurity-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, ogtests/tutorials.rskontrollerer 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.rsfester koblingen fra Rust-siden.
- Enlinjessammendraget skrev ut den optiske klokkens 95-persentil (p95) for tidssynkroniseringsfeil som
Den offentlige beskrivelsen åpner nå med tidssynkronisering og holdover, det best validerte området. README-åpningen og
docs/POSITIONING.mdpresenterer 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 typentelecom-timingogdocs/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.mdfå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.mdsluttet å 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 motsrc/verification.rsrettet 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 uavhengigeoem-parseren; raden for verifikasjon og validering navngir nå vaktene som kontrollerer at hver siterte test finnes.Ordlisten forklarer hva en resultatfil sier.
docs/GLOSSARY.mdfå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 frasrc/verification.rsogapi::list_scenario_kinds(), så ordlyden må endres ved kilden.Linjedekning har et målt tall som er førende.
docs/COVERAGE.mdregistrerer 95,63 % (37 697 av 39 419 linjer) fra CI-jobbencoveragepåb1d350d, ogtests/coverage_figure_doc_sync.rsfester 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.rskontrollerer hverimport { … } 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.rsfeiler hvissrc/lib.rsmister#![forbid(unsafe_code)]eller SECURITY.md slutter å oppgi det.tests/no_overclaims.rsskanner nå ogsåweb/README.mdog de tre README-filene for registrene, og hver standard på nettstedet må oppgi sinproofeksplisitt.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 medKSHANA_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.stubtesti bindings-jobben), og det var slikcsv/write_csvble 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_fieldsgår fra 21 til 22:ephemeriskrever nåtle|orbit+epoch(en barkind = "ephemeris"pleide å bestå--validateog deretter feile kjøringen), ogquantum-tradelegger tilcandidate_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);--validateforstår begge.lunar-joint-od-clock,pvtogearth-gnss-lunarpubliserer 9 ekte valgfrie felt de hadde utelatt.docs/SCENARIOS.mdsier nå atkinder obligatorisk for hver type unntattclock.tests/required_fields_are_true.rskontrollerer 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.shfeiler nå med mindre den nyeste oppføringen<change-notes>iplugin.xmlnavngir 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.mdsa «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.ymlogjetbrains-plugin.ymlstarter ikke lenger på tag-pushen;release.ymlkaller dem fra jobber som harneeds: 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, ogverifykom 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 nyescripts/check-release-verdict.sh, som krever en grønnverifyfor 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.pypoller crates.io (kshanaogkshana-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-darwinog så videre), ved siden av Linux-binærenkshana, hvis navn er uendret. EnSHA256SUMS-fil dekker hver ressurs, ogverify-releasekontrollerer 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 tilmainmens sidene navngav den siste utgivelsen.pages.ymlbygger 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.ymler borte; den kallerwheels.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.ymlogpages.ymlhadde bedt om@stable, og loggen for v0.27.2 viser at rustup installerte 1.98.1 og deretter kompilerte med 1.93.0 bare fordirust-toolchain.tomlhar 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.shfeiler 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.
- Publisering venter på dommen.
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) ogjetbrains-plugin.yml(Marketplace) løper i kappløp medpublish.ymli stedet for å vente på den, så en feilkuttet tag ble bare gatet i en søsterarbeidsflyt. Begge kjører nåscripts/check-version-sync.shfør bygging.Fire advisories Dependabot reiste dagen varslene ble slått på, er rettet. MCP-serveren går fra
rmcp1,7 til 2,2: tre advisories motrmcp< 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 irmcp2 trenger Rust 1,88, så barekshana-mcperklærer nårust-version = "1.88"; biblioteketkshanablir 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.rsvar 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.rslø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 ektemod testsog å 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.rsog 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 egnechart.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 avscenario-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 iprevious_versiongikk 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 deklarativeFieldUnit-registrene som gjentas på tvers avensemble,hybrid,fusion,inertialogreport, og i verifikasjonstabellen med 168 rader, og den er navngitt her som arbeid og ikke utelatt fra målingen.scripts/gate.shhadde ingen lås for én enkelt skriver, og hver kjøring skrev den samme loggen. Det handler ikke om ryddighet: kvitteringensintegration_binaries,tests_passedogtests_ignoredleses 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, medtarget/gate-run.logoppdatert fra den ferdige kjøringen på vei ut. Begge retninger er testet: en levende pid avvises, en død ryddes bort.src/verification.rshevdet 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 tilverification::gen, der modulen erartifacts, er rettet i søstervaktens egen dokumentasjon.
Endret#
mainble 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åmainhar 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 diffmellom 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 9733177docs(changelog): disclose the authorship rewrite and the two dangling crate sha1s 5d16ea8fix(docs): the engine-flow diagram said 6 figures of merit; the engine scores 7 148d31dfix(test): two more cross-platform pins, and two wrong assumptions of my own a3a2667feat(web): surface the lunar cluster on the site — seven capability cards 1e8bec6docs(lunar): document 42 public fields and ratchet the ceiling down to 985 7bba514chore(release): v0.27.0 3154548test(docs): guard the distribution diagram, the last unguarded one 7864142chore(release): v0.27.1 Taggene v0.27.0 og v0.27.1 ble bevisst IKKE flyttet. De peker fortsatt på
7bba514og7864142, 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.jsonregistrerer 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 tilmain, og det er derfor denne utgivelsen finnes: v0.27.2 girmainen 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.rshar eninclude_str!på toppnivå avtests/fixtures/llr_geometry/de440_moon_pa.csv, og manifestet utelater/tests/fixturesfra 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 isrc/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. Enpackage-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-campaignerstattet 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_msom scenarioparameter pålunar-integrityogmoonlight-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_deglegger til enper_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 utenforantenna.rsbrukte det; en boresight-forsterkning sammen med en tommelfingerregel fra forsterkning til stråleåpning gjorde jobben i stedet. En valgfriexport_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 enantenna_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 gradregelen70·λ/Dden 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_COEFFoglunar_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 medx = 1.61634, som gjør den eksakte halveffektbredden1.02899·λ/Dog registrerer ærlig at den konvensjonelle koeffisienten1.02setterpattern_gain_dbitil −2,955 dB, ikke −3,010 dB.En reproduserbarhetstabell i langt format for
lunar-time-budget. Scenarioets tabellverdiutdata, gridet av midlingstider, de sju kurvenex(τ)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.csvmed é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 hverxmed 7, så byte-ene ikke forgrener seg mellom bygg av samme kilde. Rent additivt: rapport-JSON-en er byte-identisk.Rapporten for
hybrid-optical-rfbeskriver nå seg selv. Enlink_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. Enunits-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 barvariance, 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 somashfordeOU <contact@ashforde.org>, 34 somChakshu Baweja <contact@ashforde.org>og 94 som allerede var kanoniske. Den enedependabot[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.0løses fortsatt til treet92284e9420605568f1bfabb78cd95d383b40f3e2, 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.0vardce2dbf7700788cf6de46260c14673c0e5347360og er nåd4921f3025569e00e425e1747d0acfc261e96e18. To artefakter registrerte det gamle navnet ved publisering og kan ikke rettes, fordi en publisert registerversjon er uforanderlig av design:kshana0.26.0 på crates.io:.cargo_vcs_info.jsonregistrererdce2dbf…kshana-mcp0.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-eopbrukte som standard en EOP-fil uten prediksjonsrader (G12). Scenarioet bygde inn et utdrag avfinals2000Amed fem rader og bare endelige verdier som frakoblet standard, så en bar kjøring rapportertepredicted_rows.n = 0og 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 rapportererpredicted_rows.n = 12og 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 lattpredicted_rows.nstå på 0. Dette flytter publiserte tall, etter regel R4 og med grunnleggerens tillatelse: ti av de 22 cellene i den utgittep4_frame_eop.csvog 24 av de 42 utfylte cellene itests/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 idocs/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 begrensetn_satstil 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 forn_sats > 12.Den samme utdaterte begrensningen i
lunar-differential-pnt.lunar_dpntbegrensetn_satstil 12 med den samme konsekvensen, og denne nådde en publisert tabell:dpnt_nsats_sweep.csvhar en radn = 16som er byte-identisk med radenn = 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 forn = 16blir 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 forn_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å (
//!ilib.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 fraapi::list_scenario_kinds()(den eneste sannhetskilden) avgen_validation_artifactsog vokttet avtests/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.txtpå 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 (speilersrc/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-surfacei 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.shkompilerer biblioteket medmissing_docs, teller advarslene og feiler bare hvis antallet stiger over et festet tak (986). En hard#![warn(missing_docs)]under-D warningsville 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_kindsannonserte «~17 built-in scenario kinds» mensapi::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
allantoolsfor 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_vectorspå 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.
- IEEE-1139-konvertering fra potenslov til Allan-deviasjon mot lukkede former fra
- 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 regelen0.589·(σ₁+σ₂)), krysskontrollert mot rayleigh/maxwell-kvantiler frascipy.statsog 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 enPositioningFom. - 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 motallantoolsedf_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 undertests/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 motscipy.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 ifinals2000A; 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 isrc/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 viarun_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::SweepAxisog evaluert gjennomreceived_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-Dcapture_map.
Endret#
- Deteksjon i et spredt overvåkingsnettverk (
monitor_network) setter nå sammen den fysiske AGC-statistikkenspoof_monitorsog det selenografiske synlighetsrutenettetlunar_servicefor å 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 idetection. FelteneSurfaceMonitor/SpoofEventendret 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; feltetauth_latencyer 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 enExternalPack::register_intomed 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
integrateogintegrate_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.
- 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.
En passasje som navngir tredjeparts AI-klienter er utelatt her; den står i CHANGELOG.md på GitHub.
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-informasjonsmatrisenM = HᵀWHfra 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 enbest_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_observabilityisrc/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 avelfo_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.urlutledet 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). Manifestetrepositoryer nå det kanoniske med små bokstaver,ashfordeOU, så den generertepackage.jsonstemmer med proveniensemnet og npm-utgivelsen publiseres.
Endret#
- Wheel-bygget fester
codegen-units = 1slik 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_tradegjengir 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 undertests/fixtures/optical_clock_adev/); generering av GPS L1 C/A-spredningskode (G1/G2-LFSR-en isrc/sdr.rsgjengir 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.rsleser 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 avtests/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.xmlog metadata for Open Graph / JSON-LD på kshana.dev; en generert figurvalidation-breakdownutledet 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.shi 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:
unwrapi kode som ikke er test er fjernet eller begrunnet;clippy::unwrap_useder 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+clippygrø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 medTradeEvidencepluss 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.
- Pålitelig kvantetidsoverføring (
- 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.
- ADEV / HDEV på en ekte 5071A-cesiumklokke, validert mot desimalpunktreferanser fra Stable32 (
- 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--validateog 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) viacargo 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), medcargo run --release --example resilience_report -- paper-artifacts/resilience-study.json. Krysstabell idocs/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, viacargo 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.jsonogresilience-study.jsonspores nå underpaper-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.cffogREADME; 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 nyeLICENSING.md(hva hver lisens dekker og når den gjelder).LICENSEinneholder nå AGPL-3.0-teksten; SPDX-headere i alle kilder er oppdatert tilAGPL-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.0og tidligere, som publisert); frav0.19.0og utover er det AGPL-3.0 / kommersiell.
Sikkerhet#
- Hevet
pyo30,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, ogpyo3er en valgfri avhengighet (funksjonenpython), så den reelle eksponeringen var null, men hevingen gir en ren skanning for revisorer lenger ned. Migrertesrc/python.rstil pyo3 0,29-API-et (Bound-returtype forscenario_kinds; eksplisittskip_from_py_objectpå pyclassRunOutput). 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>.tomlog bærer en eksplisitt MODELLED-merking i resultat-JSON og enlinjessammendraget (en test per type itests/dominance_demonstrators.rspåstår at merkingen er til stede og at utdataene aldri inneholder strengenVALIDATED):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 (leserenparse_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-walkq_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-eneq_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 (innstillingeneq_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 medUkf::update_stats(returnerer NIS per oppdatering) ogTightlyCoupled17::{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-motorenparticle_filter, i stedet for det grove-til-fine batchsøketterrain-navbruker 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 undersrc/impairment_eval.rs,src/quantum_trade.rs,src/navsignal.rs,src/inertial/quantum_imu.rs, med verifikasjonsskiver for FutureNAV isrc/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 ihybrid-ukf.Prosjektstyring.
GOVERNANCE.mddokumenterer beslutningsmodellen og grensen mellom åpent og lukket; raden for fellesskap/styring i funksjonskartet gårnone → partialfor å 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 biasb_k = Σ_i |s_i|·b_nomper 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. Sedocs/ARAIM_REFERENCE.mdfor den gjenopprettede formelenb_kog den ærlige implementasjonsmerknaden.Konsistens for kjikvadrat i spoof-monitoren.
parity_raim_testbruker nå den delte stien for invers kjikvadrat iraim::chi2_quantile, og en andre, avvikende kjikvadratimplementasjon er fjernet slik at RAIM og paritetsmonitoren for spoofing er enige om terskelene sine.gravity-map-navkoblet til CLI-dispatcheren. Scenarioet var tidligere bare nåbart gjennom API-et; det dispatches nå som enkind=som alle andre scenarioer.Nøyaktig dokumentasjon/antall. Antall scenariotyper i README er nå festet til
api::list_scenario_kinds().len()av enscenario_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 utskiftbarEphemerisProvider-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; scenarioflatenmars-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 lisensportencargo denyog MSRV-1.75-jobben er urørt. - Byrånøyaktige bakkespor fra reell IERS-jordorientering. Scenarioet
ephemeristar et valgfritt felteop_finals2000a— den innebygde brødteksten i en reell IERSfinals2000A-fil — og reduserer bakkesporet gjennom UT1−UTC og polbevegelse per epoke, interpolert fra den (den sammeEopSeriessomprecise_odbruker), og overstyrer de nominelle skalarenedut1_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 flaggkshana --eop <finals2000A>legger en reell fil inn i scenarioet fra CLI. Lukker asymmetrien der bareprecise_odbrukte 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_hzvalideres. 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 forstep_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 IERSfinals2000A-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
hifitimetil < 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 ≈ 0ved GMST-kallstedet (en rotasjonsfeil på ≤ ~13″, godt innenfor SGP4s egen modellfeil) og oppdaterteCAPABILITY.md.
0.15.1 - 2026-06-09#
Lagt til#
- JetBrains-pluginen Kshana — PNT simulator er nå publisert og akseptert på JetBrains Marketplace. README,
kshana.devog distribusjonsdokumentene lenker direkte til den.
Rettet#
- Publisering til MCP-registeret lykkes nå:
server.jsondescriptionvar over registerets grense på 100 tegn (HTTP 422). Forkortet den og justerte servernavnet (og eierskapsetiketten på container-imaget) til det kanoniske navnerommetio.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ørrestrengenestyle.css/app.jsmed 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-enrmcper 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 rundtkshana::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-mcptil crates.io (cargo install kshana-mcp) viapublish.yml.kshana-mcpsom et OCI-image for flere arkitekturer påghcr.io(docker run ghcr.io/ashfordeou/kshana-mcp) via en nymcp-publish.yml.kshana-mcptil 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 ikshana(kshana::cio::gcrs_to_itrs_matrix, GCRS→ITRS) mot ANISE (den rene Rust-reimplementasjonen av NAIF/SPICE) som roterer GCRF→ITRF93 fra JPLsearth_latest_high_prec.bpc, med de samme IERSfinals2000A-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 fordianise+hifitimeer MPL-2.0 / edition-2024 og aldri må komme inn i den publiserte avhengighetsgrafen tilkshana, densCargo.lock, lisensportencargo denyeller MSRV-bygget; ANISE er festet meddefault-features = false. Inkluderer en binærfilframe-xval(henter ~5 MB BPC, skriver ut en tabell, skriverreport.{json,md}), en testport som hopper over seg selv når kernel/nettverk mangler, og en valgfri CI-jobb som bare kjøres vedworkflow_dispatch(blokkerer aldrimain). Dokumentert idocs/VALIDATION.md(CIO-raden) ogROADMAP.md.
Rettet#
- Mobilvennlig playground. Rettet horisontal overflyt i playgroundens
.panelpå telefoner (et CSS-grid-element som er standardmin-width: autoble gjengitt ~100 px bredere enn visningsvinduet) viamin-width: 0og 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_levelavviser 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 gyldigSome— 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 ilunar_look_angleholdes strengt i[0, 360). (5)SphericalHarmonicField::from_gfcavviser 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 generererkshana-validation-summary.htmlog 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 medauditwheel showi wheel-bygget. - Veiledninger og undervisning:
docs/tutorials/(tre gjennomarbeidede veiledninger, annoterte scenarioer per fagområde, øvelser på nivå 1/2/3) medtests/tutorials.rssom 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, plussFUNDING.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 scenariotypeneterrain-navogcombined-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_leveldanner den vektede geometrimatrisen fra hver satellitts elevasjon/asimut og feilbudsjettet UDRE/GIVE/airborne/tropo, inverterer normalmatrisen (deltorbit::invert4) og projiserer variansene til HPL/VPL via K-faktorene i DO-229E (PA 6.0/5.33, NPA 6,18).iono_free_l1l5legger til den ionosfærefrie GPS L1/L5-pseudoavstanden (IS-GPS-705,γ₁₅ = 1.79327), validert til å kansellere motorens uavhengige førsteordens ionosfæreforsinkelse.do316_compliance_mapsporer DO-316/DO-229E-kravene til de implementerende funksjonene. Validert mot lukkede formdefinisjoner av K-faktorene, numpy-referansegeometrieninv(GᵀG)og identiteten for kovarians via to ruter; krysskontrollen av overensstemmelse med publiserte PL-verdier fra RTKLIB/gLAB er dokumentert som under gjennomgang idocs/COMPLIANCE.md. - Full tesseral sfærisk-harmonisk tyngdekraft — EGM2008-feltet til grad/orden 70. En ny
gravity_sh::SphericalHarmonicFieldevaluerer geopotensialet og akselerasjonen fra det i det jordfaste systemet ut fra fullt normaliserteC̄_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 iegm2008_data.rsog gjengitt bit-for-bit avtools/gen_egm2008.pyfra den innsjekkedetools/egm2008_to70.gfc; enhver ICGEM-modell i formatet.gfclastes viafrom_gfc. Validert mot tre uavhengige referanser: kollaps til punktmasse (kunC̄00=−μr/|r|³), et felt med bare sonale ledd som gjengir den eksisterendeforces::zonal_acceltil ~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 flaggForceModel::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
Propagatorsom forener de analytiske og numeriske banepropagatorene. Den numeriske Cowell-propagatoren med kraftmodell er nå en førsteklasses likemann til SGP4: en ny typeNumericalPropagator(starttilstand +ForceModel+Tolerance+ valg av enten step-doubling eller Dormand–PrinceIntegrator) ogSgp4implementerer beggepropagator::Propagator, hvisstate_at(t_seconds) -> StateVectorreturnerer den inertielle TEME-tilstanden i SI-enheter (m, m/s), slik at de to kan byttes mot hverandre bak enBox<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 enPropagatorErrorviser 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.rsStanford + 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 iapi::run_toml(tidligere bare på holdover- og Allan-diagrammene), slik at ethvert lagret eller nedlastet bilde — fra playground, CLI-ens eksport av.chart.svgeller HTML-resultatkortet — identifiserer versjonen, scenariofingeravtrykket og kilden. Hashen er merketscenariofor tydelighet og kommer fra resultatetsscenario_hashder 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» ogdocs/PROVENANCE.md.
Rettet#
raim::chi2_quantileog RAIM Stanford-støysamplerne er nå panikkfrie ved inndata utenfor område / ikke-endelige (et funn fra fuzzing som avhenger av rekkefølgen tilread_dir, fra de nye ARAIM-scenarioene).chi2_quantilevokter nåp/ksomnormal_quantile(returnerer en grenseverdi i stedet for å panikke viaassert!), og tilgjengelighetens Stanford-støyNormalklemmer 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-matrixkjø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 itests/golden/av den nyetests/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.mddokumenterer oppdelingen. - Kodedekningsport i CI. En ny jobb
coveragekjørercargo-tarpaulinmed 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 referansetabellentcppver.out. Den innsjekkede sammenligningstabellen (tests/fixtures/sgp4_comparison.md, regenerert viaKSHANA_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. (Standardfunksjonenfrom_elementsi 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 etorbit-scenario kan nå publiseres som en CCSDS 502.0-B-2 OMM-katalog — én OMM KVN-melding per TLE-definerte satellitt — viakshana <orbit.toml> --export-omm out.omm, ellerexport_omm = truei 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 nyetle::parse_tle_identity; navnelinjen blirOBJECT_NAME(ellersOBJECT <id>).CREATION_DATEer 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 øyeblikksbildetgps-opsmed 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 iweb/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 iweb/app.js; deltalogikken er enhetstestet iweb/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 iweb/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 offisielleigrf14coeffs.txtavtools/gen_igrf.pytilsrc/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). Utoverrun/run_fullmed streng inn/streng ut eksponerer modulen nå en typet klasseRunOutput(.json,.svg,.summaryog en tilgangsmetode.data()som returnerer resultatet parset til en innebygd Python-dict — ingen JSON-reparsing, kan pakkes inn i NumPy), plussrun_typed,scenario_kinds()(parset liste med metadata-dicts) ogvalidate_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 idocs/PYTHON_API.md. De eksisterende funksjonene er uendret. - Førsteklasses utdata-systemer for propagatorer (
src/orbit.rs: enumenFrame+position_in_frame+state_gcrs). EnhverPropagator(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-rotasjonengcrs_to_itrs— og den fulle GCRS-tilstanden (posisjon + hastighet) viastate_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-koordinateneX, Yavlest fra IAU 2006/2000A bias-presesjon-nutasjon-matrisen (gjenbruker den validerte FW-presesjonen + 2000A-nutasjonen med justeringeneraNut06aP03), 66-leddsserien for CIO-lokalisatorens(eraS06, maskingenerert fra ERFA-referansen avtools/gen_s06.pytilsrc/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 publiserteeraXys06a(X=0.5791308482835292617e-3, Y=0.4020580099454020310e-4, s=-0.1220032294164579896e-7 ved JD_TT 2453736,5), samt testvektorene foreraC2ixysogeraEra00. 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-referansennut00aavtools/gen_nut00a.pytilsrc/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 testvektoreneraNut00a(Δψ = −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_2000aeksponerer 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-rapportLunarReportog 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 tilaraim_dual_constellation_availability(den avanserte ARAIM-motoren — feil i enkeltsatellitter og i hele konstellasjoner — kjørt over et tidsrutenett) ogvisible_positions_labeled, og kobler den inn i kjørerenIntegrityScenariovia et flaggaraim_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 isrc/lunar.rs. - IERS-polbevegelse og reduksjonen TEME→ITRF (
src/frames.rs). Legger tilpolar_motion_matrix(SOFAiauPom00:W = Rx(−y_p)·Ry(−x_p)·Rz(s′)med TIO-lokalisatorens′),pef_to_itrf/itrf_to_pefogteme_to_itrf— GMST-basert TEME→PEF-rotasjon etterfulgt av polbevegelse — som fullfører en ITRF-presis jordfast posisjon oppå den rene GMST-versjonenteme_to_ecef(polbevegelse er en effekt på titalls meter ved banens radius).x_p/y_per 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 akselerasjonsbiasen2·Ω×vviacoriolis_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 tilcai_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.mdoppdatert. Æ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) ogsouth_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 eksplisittIntegritySupportMessage(σ_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 enkeltfeilaraim_raimog konstellasjonsomfattende feilaraim_dual_raim), en frittstående rendererstanford_svgav Stanford-integritetsdiagrammet (de fire sonene, grensenPL = error, hjelpelinjene for varslingsgrense, én fargekodet markør per epoke) ogdocs/ARAIM_REFERENCE.mdsom 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 å koblearaim_dual_raiminn 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-nutasjonsmatriseniauNumat, og Vallado-kjeden AIAA-2006-6980 TEME→TOD (jevndøgnsligningen) → TOD→MOD (nutasjon) → MOD→GCRS (bias-presesjon) eksponert somteme_to_gcrs(r, v, jd_tt)/gcrs_to_teme. Serien, argumentene og enhetskonstantene er transkribert fra IAU SOFA / ERFA-referansennut00bog validert bit-for-bit mot den publiserte testvektoreneraNut00b(Δψ, Δε 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 (seROADMAP.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β = γ = 1fra 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 formen3μ²/(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 vinkelradiera = asin(R☉/d☉),b = asin(Rₑ/|r|)og tilsynelatende sentravstandc, ogνer én minus andelen av solskiven som skjules av jordskiven (arealet av linseoverlappet mellom sirklene) — full sol forc ≥ a+b, total umbra forc ≤ b−a, ringformet forc ≤ a−bog en kontinuerlig penumbra imellom.srp_accelbruker den nå, slik at SRP-kraften avtar jevnt gjennom eklipsen i stedet for å slå av/på. Legger til den nominelle IAU-verdienforces::SOLAR_RADIUS. Validert selvstendig:ν = 1i full sol ogν = 0dypt i umbra (eksakt), en jevn monoton penumbra (νstiger 0 → ~½ vedc = 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, er0 < ν < 1for kjeglen). Den enklerecylindrical_shadower 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 stegregulatoren0.9·(1/err)^(1/5), så den er et direkte alternativ;propagator::propagate_doprieksponerer den på kraftmodellen for baner. Validert selvstendig: det innebygde feilestimatet er O(h⁵) (å halvere steget kutter det ~32×); DP5(4) integrerery' = ytileog 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); ogpropagate_dopriklarer 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 luftmotstandena = −½ · ρ(h) · (C_D·A/m) · |v_rel| · v_relmot den medroterende atmosfærenv_rel = v − ωₑ ẑ × r(forces::EARTH_ROTATION_RATE = 7.2921151467e-5). Fordi luftmotstand avhenger av hastighet, fårForceModelen nyaccel_rv(t, r, v), og høyresiden til integratoren sender nå hastighet (f(t,[r;v]) = [v; a(t,r,v)]); den rene posisjonsavhengigeaccel_ater 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 forC_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-modellena = ν · P☉ · cᵣ · (A/m) · (AU/d)² · d̂med en eklipsefaktor med sylinderskygge (forces::cylindrical_shadow, ν ∈ {0 1}): strålingstrykketP☉ = Φ☉/cfra 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 fraephemén gang ved den framskrevne epokenepoch_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 fraephemved den framskrevne epokenepoch_jd_tt + t/86400(gjenbrukerprecession::julian_centuries_ttfor 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 medthird_body_accelevaluert ved efemeridens posisjon for det øyeblikket ved bådet = 0ogt = 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 legemeuavhengigeforces::third_body_accelnå 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 modulenephemmed 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 unormaliserteJ2..J6), koblet inn i propagatoren somForceModel::with_zonals_j2_j6(). Akselerasjonen er den eksakte analytiske gradienten av det forstyrrende sonale potensialetR(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-validertej2_acceltil 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 leddeneJ3mot de partallsJ2/J4..J6viser sin karakteristiske nord–sør-(anti)symmetri underz → −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) somf(t,[r;v]) = [v; a(r)], med en bryterForceModel. 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 formenj2_secular_ratestil førsteordens teori (innenfor 2 %, residualen O(J2²)). Legger også tilsolve_kepler_checked, en Newton-løser for Keplers ligning som returnererErri stedet for et stille feil svar når den ikke konvergerer innenfor et avgrenset iterasjonsbudsjett (tilfellete = 0.999næ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 scenarioscenarios/gps-denied-gravity-nav.toml. Radendocs/CAPABILITY.mdforblir æ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-0koblet klokke+posisjon-Kalman,OC-2jamming J/S→C/N₀→tap av lås,OC-7Mach–Zehnder CAI-fysikk,OC-8ARAIM 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.rslegger 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-funksjoneneP̄₁₁=√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 avmapmatch+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 avkind=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.rslegger 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.rsbæ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 rotasjonenC ≈ 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 utlededeq_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 nyROADMAP.mdpå 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.rsfårwalker_design_sweep, som kjører et rutenettplanes × 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_frontflagger de ikke-dominerte utformingene (færre satellitter, mer dekning, lavere PDOP, kortere revisit), ogWalkerDesignReport::to_jsonserialiserer cellene og Pareto-fronten — inkludert revisit-tidsfeltene — som JSON. Ny validering fester generatoren til Walker-formeleni:T/P/F: satellitter i samme spor i nabobaner vises å avbildes på hverandre av en eksakt rotasjonR_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 avstanden2π/Si middel. Bygger på det innsjekkede øyeblikksbildet av reelle Celestrakgps-opsfra 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.rsbygger de operative overføringsmetodene på de eksisterende lukkede formene for Sagnac/common-view og Allan-stabilitetsverktøyene.twstft_sagnacgir 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 uavhengigetwstft_sagnac_bipm);run_twstftgir ut en døgnserieT_A − T_Bog dens TDEV.gnss_common_view_seriestar enkeltdifferanser mellom to syntetiske bakkestasjoner slik at satellittklokken kanselleres.iono_free_combination+ppp_receiver_clocker 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_parameterog den lognormalelognormal_fadingmed enhetsmiddel modellerer turbulensindusert scintillasjon i en optisk fri-rom-lenke.fit_power_law_psder en full IEEE-1139 minste-kvadraters tilpasning avh_αmed fem koeffisienter til Allan-variansekurven (alle fem kanoniske støyprosesser samtidig) med den dominerende prosessen rapportert per τ-tiår.ensemble_timescaledanner 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.rsfårparse_ionex, som leser filformatet IONEX (headerens rutenettdefinisjon + blokkerSTART/END OF TEC MAP) inn i en sekvens avIonexMap, normaliserer filens breddegradsrekkefølge fra nord til sør til etTecGridmed positivt steg og skalerer verdier med10^EXPONENT.interpolate_tec_in_timeblander to påfølgende kart til en spørreepoke, ogobliquity_factor/slant_tecavbilder vertikal TEC på en skrå stråle via enkeltlags tynnskall-faktorenM(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.rsfårmin_satellites_streets_of_coverage, en idealisert løser for minste antall satellitter med streets-of-coverage — fra den eksisterende halvvinkelen for dekningλog gatens halvbreddecdimensjonerer den den nær-polare konstellasjonen for kontinuerlig enkeltdekning globalt somp = ⌈π/(2c)⌉baner (f.eks. trenger et plan med 4 satellitter i GPS-høyde 2 baner, 8 satellitter), og rapportererNonenår satellittene er for spredt til å danne en kontinuerlig gate.compare_constellationser verktøyet for sammenligning av flere konstellasjoner: det skårer hver navngitte Walker-utforming på samme stasjon/vindu viapdop_sweepog 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.rsfår det tredje og siste deteksjonslaget og fusjonstrinnet:parity_raim_testtilpasser 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_layerskombinerer 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.rskvantifiserer verdien av å ta med kryss-kovariansen posisjon↔klokke: en trofast inline-grunnlinje uten kobling (validert bit-for-bit mot den eksisterendeCoupledPntFilter) 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.rsgjenvinner 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.rskobler 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) ogrange_rate/Doppler (ρ̇ = (p − sᵢ)·(v − ṡᵢ)/|p − sᵢ| + d) — i stedet for en ferdigdannet posisjonsbestemmelse, slik atTightlyCoupled(medpropagate/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.rsleverer 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) ogmap_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 samplerFn(lat, lon) -> value, så det kan settes sammen med det bilineære rutenettet isrc/ionex.rseller en closure. To tester forankrer det — sannsynligheten topper seg (=1) ved perfekt match og faller tile^(−½)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.rsanvender ARAIM-motoren MHSS på jordsiden på en navigasjonstjeneste i LunaNet-stil på månen med månens parametere (σ_URE ≈ 30 mmot GPS 0,6 m,P_sat ≈ 1e-4): lunare konstanter, en selenosentrisk øst/nord/opp-basis og hjelper for himmelgeometri, oglunar_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.rslegger tilJd2, en juliansk dato delt i en heltalligdayog en brøkdelfraci[0,1)(konvensjonen i SOFA/hifitime), mednew/from_parts/add_seconds/diff_seconds/total. Differanser mellom nære epoker forblir eksakte til gulvet forf64der en JD med énf64taper ~50 µs nær J2000. Fire tester forankrer den: tur-retur, normalisering av brøkdelen, eksakt gjenfinning av mikrosekunder (med feilen for énf64demonstrert ved siden av) og additiv/reversibel sekundaritmetikk. - Skriver for CCSDS OMM (Orbit Mean-Elements Message). En ny
src/omm.rsutfyller efemeriskriverenoemmed meldingen med middelelementer:OmmFile::from_tleavbilder SGP4/TLE-middelelementer til OMM-enheter (middelbevegelse i rev/day, vinkler i grader, plussBSTAR), ogto_omm_kvnserialiserer 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.rslegger 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), systematiskresample, degenerasjonsmonitoreneffective_sample_sizeog 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 iionexville tjent et tyngde-/terrengkart like godt). - TEC-ionosfærekart i IONEX-stil. En ny
src/ionex.rslegger til et alternativ med målt ionosfære til den kringkastede Klobuchar-modellen: enTecGrid(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 mved L1 med skaleringen1/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.rslegger til de to deterministiske effektene en reell klokkesammenligning må ta hensyn til, som supplerer den stokastiske toveismodellen itimetransfer:sagnac_correction(Δt = (ω_E/c²)·(x₁y₂ − x₂y₁), forsinkelsen fra den roterende Jorden — titalls ns for kontinentale grunnlinjer) ogcommon_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.rslegger til akselerasjonsmodellen en numerisk propagator integrerer:two_body_accel(−μ·r/|r|³), oblatenhetsperturbasjonenj2_accel(den lukkede ECI-formen) oggravity_accelsom summerer dem — bruk den sammen medsrc/integrator.rssomf(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.rslegger til en avhengighetsfri Base64-kodek etter RFC 4648 (standardalfabetet+/med padding og et URL-sikkert alfabet-_uten padding) og omslageneencode_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-bindingerencode_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.rslegger til estimeringskjernen som en batch-banebestemmelse (eller enhver parametertilpasning) hviler på:gauss_newtonlineariserer en brukerlevert modellh(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 tilpasninga·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.rslegger til to uavhengige spoofdetektorer i mottakerens frontend som utfyller den klokkestøttede tidsspoofmonitoren ispoof: en AGC-effektmonitor (combine_power_dbminkoherent effektsum +AgcMonitor) som flagger den overskytende mottatte effekten en spoofsender legger til utover en konfigurerbar dB-margin, og en signalkvalitetsmonitor (bpsk_autocorrtrekantet 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, aggregatet10·log10(N), den trekantedeR(τ)=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.rslegger 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 systemy' = f(t, y)og en adaptiv driver (integrate) som kontrollerer lokal feil med step-doubling (Richardson-ekstrapolasjon) med standard stegregulator0.9·(tol/err)^(1/5)og logikk for å akseptere/avvise. Seks tester forankrer den på eksakte løsninger: den eksponensielley' = y → etil< 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 enNumericalPropagatorer videre arbeid. - Unscented (sigmapunkt) Kalman-filter. En ny
src/fusion/ukf.rslegger til det skalerte unscented Kalman-filteret (Julier & Uhlmann; Wan & van der Merwe) som en generell estimator medntilstander 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 oppdateringP⁺ = 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_raimutvider 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 priorP_const(en nyDualFaultPriors { p_sat, p_const }). Hver hypotese legger et ledd til den samme MHSS-integritetssummen, slik at VPL/HPL er de minste grensene der den totaleP_HMIholder seg innenfor budsjettet over feilfri + enkelt-SV + feil per konstellasjon (Bonferroni-delingen av falsk alarm er over alleN + Chypoteser). MedP_const = 0er resultatet bit-for-bitaraim_raim; en bruker med én konstellasjon returnererNonemot 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.rsimplementerer 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-konstruksjoneniauFw2m(precession_matrix, med hjelpernegcrs_to_mod/mod_to_gcrs). Dette er den første delen for inertielt referansesystem oppå den eksisterende GMST-baserte reduksjonenframes. Å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 ogdet = +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.rsmodellerer et atominterferometer av Mach–Zehnder-type med tre pulser fra første prinsipper i stedet for fra et datablad: effektiv bølgevektork_eff = 4π/λ, interferometerfaseΦ = k_eff·a·T², kvanteprojeksjonsstøy (shot noise)σ_Φ = 1/(C·√N), akselerasjonsfølsomhet per skudd, kontrastforfallC(t) = C₀·e^(−t/τ)og — poenget —CaiAccelerometer::q_va(), som utleder den hvite akselerasjons-PSD-en som det klassiskeAccelModelallerede 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åndintegraletvibration_phase_variance_band), den rang-1 projeksjonen langs strålenbeam_axis_projectionogCaiAccelerometer::vibration_phase_noise/vibration_limited_accel(sistnevnte reduseres til gulvet√(S_a/(3T)), uavhengig avk_eff). Elleve tester verifiserer fysikken for hånd (Rb-87k_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/√Nog skaleringslovene forT³). Ærlig omfang idocs/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) ellerQuantumCainår det har en valgfri blokk[cai](CaiCfg: bølgelengde, pulsavstand, antall atomer, kontrast, syklustid og en valgfri plattform-vibration_psd). En sensor av typenquantum_caihar PSD-enq_vafor 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. Feltetcaierskip_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 mellomClassical/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.rsfåroptimize_walker_design, en gradientfri rutenettoptimalisator som søker i utformingsrommet{planes × sats × inclination}og returnerer den beste Walker-utformingen under et valgtDesignObjective—MinSatellitesForCoverage,MaxCoverageellerMinWorstPdop— over det allerede validerte PDOP-sveipet (en test bekrefter at den returnerer brute-force-vinneren). Pluss de analytiske lukkede formene for streets-of-coveragecoverage_half_angle_rad(λ = arccos(Re/r·cos ε) − ε) ogstreet_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, ellerexport_sp3 = truei scenarioet skriver automatisk<scenario>.sp3(api::export_sp3/auto_export_sp3,OrbitClockScenario::to_sp3_string, valgfriepoch). En test med tur-retur (tests/sp3_export_roundtrip.rs) propagerer det reelle Celestrak-øyeblikksbildetgps-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.rsCoupledPntFilterer ett stablet filter med[pos, vel, phase, freq](oppdateringer i Joseph-form) der pseudoavstand-målingenρ = g·pos + c·phase + noisevirkelig 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ørP[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 atR=1e-26 / Q≈1e-30). A newsrc/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).
- KRKᵀ
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, Celestrakgps-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 strengeneprovenanceper kjøring som allerede følger med i resultat-JSON.- Typet scenario-API. Dispatch skjer nå på en typet enum
ScenarioKindi 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 uendrederun_tomlsom returnerer streng:run_scenario(src) -> Result<RunOutput, KshanaError>med en strukturert feiltaksonomi (InvalidInput/NonConvergence/Unsupported/IoError, hver med en stabilkind_tag()); et traitScenarioog utvidelsespunktetExternalPack(pakkenjamminger koblet gjennom det som det gjennomarbeidede eksempelet); og introspeksjon vialist_scenario_kinds()(navn, beskrivelse, påkrevde/valgfrie felt per type). Python- og WebAssembly-bindingene fårlist_kinds()ogerror_kind(). Dokumentert idocs/ARCHITECTURE.md. - Reell GPS-konstellasjon + dekning av driftsområdet.
scenarios/orbit-sgp4-gps.tomlleveres nå med et reelt Celestrak-øyeblikksbilde avgps-ops(2021-07-28, 30 satellitter) i stedet for syntetiske Walker-TLE-er, medstrict_checksum = trueslik at den bare lastes når hver TLE-sjekksum er gyldig;scripts/fetch_tles.shdokumenterer reproduserbar oppdatering og README krediterer kilden med åpne data. En nytests/scenario_coverage.rskjø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.mdfå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 + multipathog 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-arraygnss_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). Nyesrc/gnss_sim.rsogscenarios/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 alarmtarget_pfa, og sannsynligheten for uteblitt deteksjonP_mdrapportert både i lukket form og med Monte Carlo (mc_runsforsøk per hypotese — de to stemmer overens til noen få ×1/√N). Sikkerhetskvalitetsmålet er nå1 − P_mdved den operativt skadelige (spesifikasjons-)størrelsen. Nysrc/detection.rs(gaussiske haleverdier, NP-/energitest, Monte Carlo P_fa/P_md) ogscenarios/spoof-meaconing.toml. Bakoverkompatibel: en[attack] rate_ns_per_salene godtas fortsatt som en lineær rampe.
Endret#
- Definisjon av kvalitetsmålet Security (typen
spoof): fra den analytiske grensen for detekterbarhet1 − min_detectable/thresholdtil den stokastiske detektorens1 − P_md. Feltetsecurityi 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 × spektralseparasjonsfaktorenQ; Kaplan & Hegarty §9,4) og en konfigurerbar sporingsterskel, vurdert over en Walker-konstellasjon som et kvalitetsmålavailability_under_jamming. Nyesrc/jamming.rsogscenarios/jamming-demo.toml. Ærlig omfang (ingen multipath, terrengskygge, AGC eller adaptiv nulling) er dokumentert idocs/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-ndvarierer 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 eksempelscenarios/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 avgnss-inser 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 = 1reduseres eksakt til enkelt-seed-variantennd_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 inavego_example_allan.mpå 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 omslagetClosedLoopInsGnss::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-funksjonentight_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 etscenarios/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 modulwalkersender 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_sweeptabulerer dekning og median/verste PDOP over et utformingsrutenett{planes × sats × inclination}, ogcoverage_revisitrapporterer 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_adevimplementerer 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 enumPowerLawNoiseogclassify_power_lawidentifiserer den dominerende typen ut fra stigningen i registreringens modifiserte Allan-deviasjon (MDEV skiller hvit fra flicker-PM der ADEV ikke kan), ogoverlapping_adev_curveknytter nå den identifiserte støytypen, dens edf og et 95%-konfidensbånd til hvert punkt på den eksporterte ADEV-kurven (AdevPointfårnoise/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::TwoWayLinkerstatter 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 gjennomsnittet1/sqrt(2)), og residualen er den ikke-resiproke differensialsinkelsen — modellert som en farget hvit-FM + random-walk-FM-prosess (den validerteClockModel), som gir synkroniseringsfeilserien en realistisk Allan-signatur (sigma_y^2(tau) = q_rw*tau/3) i stedet for flat hvit støy.LinkCfgfårq_wf_s/q_rw_s(serde-standard 0 ⇒ den gamle atferden med bare hvit støy, bit for bit), link-FoM-en rapportereradev_tau0(modellens Allan-deviasjon ved basissteget), og scenarioet og CLI-ettimetransferviser den frem. Gylden FoM festet på nytt. Seks håndavledede tester (fellesmodus-kansellering, toveisgevinsten sqrt(2), RWFM-loventau/3via linkens egenstep(), ekvivalens med den gamle atferden vedq=0, determinisme og FoM-eksponering fra ende til ende). - Numerisk paritet med Stable32 for estimatorene i Allan-familien (NBS14).
tests/allan_reference.rsvaliderer 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 scenarioetintegrityeksporterer 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.IntegrityScenariofår et feltseed(standard 0) som styrer feilrealiseringen; selve tilgjengelighetskartet forblir rent geometribasert og uavhengig av seed. - ARAIM-integritetsrisikobudsjett (P_HMI) for beskyttelsesnivåene.
raim::araim_raimutleder de horisontale og vertikale beskyttelsesnivåene fra et eksplisitt integritetsrisikobudsjett i stedet for en fast multiplikatorK_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 finneraraim_protection_leveldet 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 tildelteP_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_compensatetrekker de høyfrekvente leddene for coning (attityde) og rotasjon+sculling (hastighet) ut av en grov oppdateringsstegs ordnede IMU-inkrementer i delintervaller, slik at enNavState::step_incrementsmed 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 typealiasScalarErrorBudgetgir den gamle 1-DOF-AccelModelnavn etter det den er, atskilt fra den treaksede navigatorenNavState. - Parser for RINEX-observasjonsfiler. Den nye modulen
rinex_obsleser 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_obsdekoder headeren (versjon/type, listerSYS / # / OBS TYPESper 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
oemeksporterer 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_propagatorssampler hver satellitts treghetstilstand (TEME) — posisjon og hastighet, hentet rett fra propagatoren uten jordfast rotasjon, i motsetning til SP3-eksporten — på et tidsrutenett, ogOemFile::to_oem_stringserialiserer headerenCCSDS_OEM_VERS/CREATION_DATE/ORIGINATORpluss ett segmentMETA_START … META_STOPper satellitt (OBJECT_NAME/OBJECT_ID/CENTER_NAME/REF_FRAME = TEME/TIME_SYSTEM = GPS/START_TIME/STOP_TIME) etterfulgt av linjeneepoch X Y Z X_DOT Y_DOT Z_DOT(km, km/s).CREATION_DATEoppgis 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::interpolatorbygger enSp3Interpolatorper 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 somPropagator::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_navleser RINEX 3-posteneR, 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 somPropagator::Glonass, slik at GLONASS-satellitter flyter gjennom konstellasjons-/synlighets-/integritetsrørledningen ved siden av Kepler-systemene; en enkelt konstellasjonsblokkrinexkan 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 somPropagator::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
sp3parser IGS-/analysesenterets SP3-banefiler (parse_sp3) — det etterprosesserte ECEF-posisjons-/klokkeproduktet som PPP-motorer (Ginan, RTKLIB, gLAB) behandler som referanse — til en strukturertSp3File(header, epokerutenett, posisjon per satellitt km→m, klokke µs og hastighet dm/s→m/s for produkter medV), med de ugyldige sentinelverdiene i SP3 bevart. Motsatt retning er også dekket:Sp3File::from_propagatorsbygger en SP3 fra en propagert konstellasjon (TEME→ECEF per epoke) ogto_sp3_stringserialiserer 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 alternativettle, 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. Nyttscenarios/orbit-rinex.tomlviser 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
RinexEphemeriskan nå konverteres til enorbit::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_navleser en RINEX 3.x-navigasjonsfil og dekoder hver kringkastede GPS-efemeridepost (G) — den åttelinjers blokken SV/epoke +BROADCAST ORBIT— til enRinexEphemerismed Kepler-elementer og klokkekorreksjoner, med feltnavn og enheter etter IS-GPS-200. Håndterer Fortrans flyttallsformat medD-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 avD-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 ukeskiftetk). 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 klokkepolynometaf0 + af1·Δt + af2·Δt²rundtTocpluss det relativistiske eksentrisitetsleddetF·e·√A·sin Ek(IS-GPS-200 §20.3.3.3.3.1). En nyEpochUtc::gps_time_of_weekkonverterer 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-gruppeforsinkelsenTGDer eksponert, men med vilje ikke innregnet. Ærlig omfang: en kildePropagator, Galileo/BeiDou/GLONASS og SP3 er fortsatt neste steg. (docs/CAPABILITY.mder 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 etIntegrityScenario(brukerbane, en eller flere GNSS-konstellasjoner, elevasjonsmaske og integritetskonfigurasjonen(sigma, P_fa, P_md, AL_H, AL_V)), kjørerconstellation_raim_availabilityog 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.tomlskriver 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_availabilitygjø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 enserde-serialiserbarRaimAvailabilityReport(per epoken_visible/HPL/VPL/availablepluss tilgjengelighetsandelen). EnRaimConfigsamler(sigma, P_fa, P_md, AL_H, AL_V), ograim_availability_epochper 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, ogNone-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 diagonaleny = xog varslingsgrensen, somAvailable(PL avgrenser feilen, innenfor AL),SystemUnavailable(PL avgrenser feilen, men overstiger AL — trygt, ubrukelig),MisleadingInformation(PL < feil ≤ AL) ellerHazardouslyMisleadingInformation(PL < feil og feil > AL — den utrygge svikten).classify_stanforder den rene klassifisereren;StanfordDiagramakkumulerer(error, PL)-punkter mot en fast varslingsgrense og eksponerer regionantall, tilgjengelighet, totaler for integritetshendelser ogserde-serialiserbare punkter for plotting/JSON-eksport. Fire tester: hver region (inkludert den avgrensede grensenerror == 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 kovariansCov(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-allokeringPL = max(K_md·σ₀, max_k[K_fa·σ_ss,k + K_md·σ_k]), medK_fa = Φ⁻¹(1−P_fa/2),K_md = Φ⁻¹(1−P_md). Ny avhengighetsfrinormal_cdf/normal_quantilebygget 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).ClosedLoopInsGnsskobler 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 (nymechanization::radii_of_curvature;NavState::omega_ie_n/omega_en_neksponert). 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·dtog 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-funksjontight_couplingsperrer 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-forsterkningenP/(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).ImuErrorModelforvrenger 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 scenariopakkeninertialkjø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årsculling_increment(½ Δθ × Δv, Groves lign. 5,82) og løser kroppens hastighetsinkrement gjennom en ny inkrementbasert oppdateringNavState::step_incrementsmed 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 avstep(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 integrererv̇ = 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 girv_N ≈ a·tog½ 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-typeQuaternion(skalar først, Hamilton-konvensjon) som bærer rotasjonen fra kropp til nav, med en DCM-visning (to_dcm/from_dcmvia 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 todelteconing_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.rser nå modulmappensrc/inertial/; den offentlige stiencrate::inertialer uendret.) - Geodetisk korrekt synlighet fra bakkestasjon (
src/frames.rs).elevation,is_visibleogvisible_countberegner 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-bindingsbygger nå wheel-filen medPyO3/maturin-action(manylinux-container) i stedet for en rå verts-maturin build, noe som fjerner en periodisk rustup-konflikt mellomrustfmt-previewogcargo-fmtpå runner-avbildet. Jobbendenyinstallerercargo-denysom ferdigbygd binærfil viataiki-e/install-actioni stedet for den Docker-basertecargo-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_eciogPropagator::state_eci(som returnererStateEci { 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_ecigir 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_optsog det nye flaggetstrict_checksumpå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::validateavviser et tidsrutenett som er ikke-endelig, null, negativt eller for stort (et steg større enn varigheten, eller flere ennMAX_TIME_STEPSsamples) 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 = Npå 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 flaggmonte_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_sweepevaluerer en måling over hele det kartesiske produktet av flereSweepAxis-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 enkelf64(~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 omlibmpå tvers av plattformer og tilnærmingen med gylden festing er dokumentert idocs/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::validategir 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
libmpå tvers av plattformer) og erstatter de tidligere kontrollene som bare var ulikheter, slik at en stille numerisk regresjon fanges umiddelbart. schema_versioni resultatartefakter er hevet fra0.1til0.7(den lå fast mens motoren gikk videre).cargo-denyavviser 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 fraCargo.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
spoofinjiserer 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 referansescenariospoof-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 referansescenarioorbit-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
fusionkjø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 referansescenariofusion-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_instabilityogq_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 referansescenarioorbit-real-tle.toml.
0.4.0 - 2026-06-02#
Lagt til#
- Parametersveip for avveiningsstudier. En ny scenariotype
sweepvarierer én parameter (threshold_ns,duration_s,quantum_q_wfellerclassical_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 referansescenariosweep-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 referansescenarioclock-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_degogj2, og et referansescenarioorbit-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 scenariofeltsigma_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 arbeidsflytpagesbygger og publiserer den til GitHub Pages, og en ny WebAssembly-eksportsummaryligger 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_biasogq_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
orbitog referansescenarioetorbit-gnss-challenged.toml(et romfartøy inne i GNSS-skallet med periodisk dekning). - Valgfri Python-utvidelse (PyO3, abi3) som eksponerer
run,run_fullogversion, pakket med maturin (pyproject.toml) og bygget for Linux, macOS og Windows av en arbeidsflytwheelsutlø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_svgogversion, bygget med wasm-pack under funksjonenwasm;getrandomer målsperret for å bruke nettleserens entropikilde påwasm32. - Felles utsendelse
api::run_tomlbrukt 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
kinder nåinertial(varaccelerometer), 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 etterkind. - 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 fagfellevurdertprovenance. - 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
NOTICEmed varemerkemerknad, Developer Certificate of Origin (DCO)-signering for bidrag og håndheving av avhengighetslisenser/-varsler medcargo-denyi 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.cffslik at programvaren kan siteres.