Ændringslog
Alle væsentlige ændringer i Kshana dokumenteres her.
Formatet bygger på Keep a Changelog, og dette projekt følger Semantic Versioning. Så længe projektet er før 1.0, kan det offentlige skema for scenarier og resultater stadig ændre sig; brydende ændringer fremhæves udtrykkeligt.
Ikke udgivet#
[0.40.0] - 2026-10-29#
0,40 tilføjer missionstråden i Artemis-klassen og dens månesegment, en evidensetiket på hvert tal og hver tabel, en kørsel skriver, indlæsning og tilpasning af målte ure, en kontrol af datapartneres indsendelser, et estimeret senderområde ud fra ADS-B- eller AIS-rapporter, gen-kampagnen for benchmark 0,40 samt kommandolinjen, rapporterne og Studio på sytten sprog ved siden af engelsk (maskindokumenter forbliver engelske). Verifikationsmatricen vokser fra 388 til 401 rækker: 176 VALIDATED (uændret), 221 MODELLED (var 208) og 4 PARTNER. Ingen række blev opgraderet til VALIDATED. Scenarietyperne vokser fra 87 til 92. Hver tærskel, en præregistreret sammenligning missede, er opgivet nedenfor og forbliver fastholdt; ingen blev lempet. Den vejledende erklæring er uændret: Kshana er vejledende software, ikke typegodkendt navigationsudstyr og ikke en certificering; operatøren er fortsat ansvarlig.
Kendte begrænsninger#
- Kørsler på andre sprog end engelsk tager omkring dobbelt så lang tid, fordi scenariet køres to gange (én gang på engelsk til maskinfilerne, én gang på det valgte sprog til personen).
- Nogle sætninger i Studio er sat sammen af fragmenter og kan mangle artikler på sprog med grammatisk køn.
- Oversættelserne er maskinoversættelser, som ingen modersmålstalende har gennemgået; engelsk er referencen.
Tilføjet#
- Sytten sprog ved siden af engelsk til motorens tekst til mennesker og til webstedet 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, lokalitetsvariablerne;langpå kald til biblioteket, Python, WebAssembly og MCP). Meddelelser og fejl på kommandolinjen, kørselsoversigter, diagramtekst,report.html, beskrivelser af typer og de vejledende erklæringer er oversat; maskindokumenter (JSON, CSV, fejlkoder, verifikationsmatricen) forbliver engelske, og en kørsel på et andet sprog end engelsk udfører scenariet én gang på engelsk til maskinfilerne og én gang på det valgte sprog til personen (docs/i18n.md). Oversættelserne er maskinoversættelser, ikke gennemgået af modersmålstalende; engelsk er referencen; hvert sprogsREVIEW.mdangiver, hvad en gennemgang bør kontrollere først, og webstedets sider bærer en meddelelse om det. Dommeord, evidensniveauer og den vejledende afgrænsning ("ikke typegodkendt", "ikke en certificering", "operatøren er fortsat ansvarlig") bevares på alle sprog. kshana interference-map locate: et estimeret senderområde ud fra ADS-B- eller AIS-rapporter. En posterior over, hvor en kilde til forringede positionsrapporter kan være (radiosigtlinje på en 4/3-jordradius, senderantennens højde og effekt marginaliseret, berørte fly trækker og uberørte fly med sigtlinje skubber imod), skrevet som områder ved 50, 90 og 95%, et tyngdepunkt med dets usikkerhedsellipse (aldrig et bart punkt), sessioner i tid (start, slut, varighed, berørt areal, forskellige fly over offentliggørelsesminimum), en døgnprofil og timer pr. dag, med valgfri fusion af en TDOA-positionsbestemmelse frageolocation. Output: GeoJSON, JSON-oversigt, sessions-CSV og en SVG-figur, hver med licens, kildeangivelse, metode-id, antagelser, begrænsninger og sin evidensetiket. Bibliotekinterference_map::api::emitter_regions_from_*, Python og WebAssemblyinterference_emitter_regions. MODELLED (registerrækkeVM-bc70cb57; matricen er nu på 401 rækker, 176 VALIDATED, 221 MODELLED, 4 PARTNER); kalibreret kun på syntetiske data, med sammenligningen mod senderpladserne i Jammertest 2025 præregistreret og kørt én gang: ADS-B og AIS begge NOT ASSESSABLE (for få planlagte sessioner i de åbne data), så rækken forbliver MODELLED (docs/emitter-region/RESULTS.md). Neutral formulering, kun aggregeret; offentliggørelse af senderområder i det offentlige observatorium forbliver slået fra. Et syntetisk eksempel findes iexamples/emitter-region/(docs/INTERFERENCE-MAP.md).- Målte urlogs.
src/clock_log.rslæser en målt urlog til én faseserie: otte formater (RINEX clock, TimeLab, TICC, linuxptpptp4l,phc2sysogts2phc, chrony tracking og statistik), hvert en dokumenteret delmængde; alt uden for den afvises med en fejl, der nævner, hvad der blev fundet. Den bruges aftelecom-timing([series.clock_log]) og typen ur ([clock_log], som tilføjer en blokmeasuredmed logens SHA-256 og de overlappende ADEV, TDEV og MTIE), med det medfølgende scenarieclock-measured-log(docs/CLOCK-LOG-FORMATS.md). Sammenlignet med allantools på virkelige offentlige data mod præregistrerede tærskler: den første kørsel missede B1 (5 af 11 tilfælde, alle TICC-tidsstempler holdt somf64), B2, B3 (7 af 24 tilfælde) og B4 (headerens version blev ikke kontrolleret); efter rettelserne er B1, B3 og B4 nået, og B2 er nået bortset fra ét MTIE-par, som er fastholdt og ikke er en fejl i motoren (allantools 2024,6 fjerner middelfrekvensen, før den integrerer; mod dens MTIE i fasetilstand stemmer motoren overens inden for 1e-10). Rækken forbliver MODELLED (tests/fixtures/clock_log_real/RESULTS.md). - En holdover drevet af en tilpasset målt serie: urtypens
[clock_fit]tilpasser støjen i en målt serie og driver holdoveren ud fra den (src/clock_fit.rs, medfølgende scenarieclock-fitted-log). Præregistreret sammenligning: F1(b), F3 og F4 nået; F1(a) (genfinding af den registrerede random-walk-FM) NOT MET på C3-optagelserne (ikke identificerbar pr. konstruktion) og på to af tre C4-optagelser (random-walk-FM opslugt af flicker-FM og drift); F2 (støjidentifikation mod allantools) nået på elleve af tolv optagelser og D3 og NOT MET på D2 som registreret (nået på sammenlignelig basis). Alle misser er fastholdt (tests/clock_fit_known_noise.rs); blokkenfittedog den holdover, den driver, forbliver MODELLED (tests/fixtures/clock_fit/RESULTS.md). - Gen-kampagnen for benchmark 0,40, præregistreret med ejerens frigivelse før enhver kørsel: A3 (EXPLORATORY, den mappeklyngede bootstrap-AUC for
agc_k_sigma, 2,5 %-kvantil 0,8502 mod 0,80), D3 (EXPLORATORY, tre af fem detektorer overstiger et optimismegab 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ørte og forbliver NOT MET; intet her lukker dem (xval/bench/RESULTS-0.40.md, Bench). kshana partner check <submission.toml>: kontrollerer format og metadata for en indsendelse fra en datapartner (kshana.partner-submission/1: enhed, datafil og SHA-256, hvordan den blev optaget, de MODELLED-rækker, den tilbydes mod, licens, erklæringer) og læser dataene med motorens egne læsere af urlog eller IMU. Den scorer intet og validerer intet. Et syntetisk eksempel findes iexamples/partner-submission/.docs/PARTNER-DATA.md: hvilke MODELLED-registerrækker målte data kunne opgradere, de accepterede formater, hvordan en indsendelse kontrolleres, scores mod en præregistreret tærskel og krediteres, og hvad PARTNER og VALIDATED hver især betyder; et udkast til en henvendelse til partnere til ejeren idocs/drafts/PARTNER-OUTREACH.md(intet sendes).- Anden kampagne for de tærskler,
gnss-ssvoglunar-infrastructureikke nåede, kørt som præregistreret (xval/gnss-ssv/PREREGISTRATION-v2.md,xval/lunar-infra/PREREGISTRATION-v2.md; frigivet før enhver kørsel). Hver oprindelig miss forbliver NOT MET og fastholdt.gnss-ssv: kontrollen gengiver kørsel 1 celle for celle; fem ablationer med én aflæsning bringer 2 af de 78 missede celler inden for tolerancen (EXPLORATORY, ingen tærskel); den nye tærskel S7b (en sendeform med roll-off og gulv, tilpasset Classic IIR-paneler) er NOT MET på IIR-M-panelerne ved 3,83 til 3,95 dB mod 3 dB; kampagnen med tilbageholdt offentliggjort modtagelse blev ikke kørt (ingen kilde fastlåst) (xval/gnss-ssv/RESULTS-v2.md).lunar-infrastructure: de nye tærskler C3a, C3b (en detektionsgrænse på omkring 3e-9 m/s2), Q3a, Q3b (en nøjagtig normalfordeling fjerner forskellen på 1.7e-6) og G3'' er nået som deres egne tærskler, og G3' med illustrative priorer er nået og betegnet EXPLORATORY (xval/lunar-infra/RESULTS-v2.md). Alt forbliver MODELLED. Nye offentlige elementer:kshana::lambda::{erfc_accurate, normal_cdf_accurate, bootstrap_success_rate_accurate}. - En evidensetiket på hvert tal og hver tabel, en kørsel skriver. Resultat-JSON har en nøgle
evidence, diagram-SVG et metadataelement og en linje under diagrammet, og CSV-tabellen# evidence:kommentarlinjer: niveauet (VALIDATED,MODELLEDellerPARTNER, det svageste af rækkerne) og id'erne på de verifikationsmatrixrækker, kørslen hviler på. Rækker og statusser læses fra matricen og er ikke skrevet ind; id'erne er stabile (VM-og otte hex-cifre, en ny kolonneIDidocs/VERIFICATION-MATRIX.md, en fastfrosset liste itests/fixtures/evidence_ids.txt). Også på receiver-trust,jammertest score,iq acquire/sweep/track/monitor, rapporten om rute-eksponering og, inde i den signeredeconfig.json, hver bevispakke (config_version1,1;kshana evidence verifyrapporterer niveauet; pakker lavet før 0,40 verificeres uændret).tests/evidence_labels_doc_sync.rsfejler, hvis et tal ikke har en etiket, en etiket er uenig med matricen, eller en ny filskriver hverken er mærket eller opført med en begrundelse. Output, der ikke bærer nogen, er opført idocs/SURFACES.md. De tre demodiagrammer i README blev gengivet igen med etiketten (fjernes den, vender de gamle bytes tilbage;docs/revisions/STUDIO15-evidence-label-0.40.md). Ingen påstand er ændret. - Scenarietypen
mission-thread(scenarios/mission-thread-artemis-class.toml,docs/MISSION-THREAD.md): fejlbudgettet for navigation og tidssynkronisering for en kæde af faser fra opsendelse til indflyvning, hvert tal MODELLED og hvert input angivet. Otte fasetyper:launch-ascent,leo-rendezvous(relativ Clohessy-Wiltshire-kovarians over sensorstrækninger, dockingvindue),tli-and-cruise(Cowell-propagering med en tilstandsovergangsmatrix med endelig differens, brændingsfejl,gnss-ssvog opdateringer fra jordsporing, Månen fra et valgfrit udsnit af DE440-kernen),entry(sigma for flyvebanevinklen, korridorsandsynlighed, maksimal deceleration ved korridorkanterne, landingsfodaftryk) og de fire månetyper. Overdragelsesregler (carry,inflate,reacquire), konverteringer af referencesystem og tidsskala som egne budgetrækker, et valgfrit overlay af jordnetværk, der sætter hver fases sporingsandel, marginen mod angivne krav og det svageste led. Eksemplet følger rækkefølgen i et offentligt NASA-slidedeck om operationskoncept med ILLUSTRATIVE tal: et Artemis-eksempel i hele forløbet over 11 faser, jord- og månesegmenter. Den cislunare propagering blev sammenlignet med den offentlige bane for Artemis I over en bue på 72 timer mod en tærskel fastsat ixval/mission-thread/PREREGISTRATION.mdfør kørslen: NOT MET (45,3 km og 0,25 m/s mod 5 km og 0,05 m/s). Diagnosen placerer missen i fem små impulsive hændelser i referencen; mellem dem gengiver kraftmodellen timetilstandene med en median på 0,4 m. Rækken forbliver MODELLED (xval/mission-thread/RESULTS.md). - Månesegmentet i missionstråden i Artemis-klassen: fire scenarietyper, hver også en fasetype i grænsefladen
mission-thread(src/mission_thread/lunar/), alle MODELLED.lunar-orbit-rendezvous: relativ navigation til docking i en cirkulær polar bane på 100 km eller en elliptisk polar bane på 100 km gange 3000 km (scenarios/lunar-orbit-rendezvous.toml,...-elfo.toml). Et batch-Gauss-Newton-estimat over buen fusionerer en absolut positionsbestemmelse pr. køretøj fra et illustrativt relæsæt i LCNS-klassen, en vedvarende fejl i signal i rummet (fælles for begge køretøjer og uafhængig) og en krydslinkafstand under cratens månekraftmodel. Det rapporterer den relative position og hastighed i målets lokale akser, tilgængeligheden af positionsbestemmelser, den gennemsnitlige normaliserede estimeringsfejl i anden mod dens forventede værdi, omkostningen ved at ignorere tyngdeharmonikkerne, de afsluttende relative sensormodeller ved siden af tallet med kun signaler og den 6x6-kovarians, der gives videre.lunar-descent: budgettet for landingsspredning på et sted ved sydpolen (scenarios/lunar-descent.toml;lunar-descent-lola.tomllæser LOLA-DEM fra et checkout): en inertiel fejlmodel med fem tilstande pr. akse, en AFS-positionsbestemmelse (selvstændig eller differentiel, med residualet fra korrektionslinket ilunar-differential-pnt), en terrænrelativ positionsbestemmelse (matcherenterrain-navpå sit syntetiske relief eller Cramer-Rao-grænsen for matchning af LOLA-DEM) og månetid gennem køretøjets ur (lunar-time-offset). Den rapporterer 3-sigma-landingsellipsen, hver kombination af støtte og en Monte Carlo-kalibrering af ellipsen.lunar-surface: tilgængelighed af positionering og tidssynkronisering efter sted og årstid (scenarios/lunar-surface.toml;lunar-surface-terrain.tomltilføjer den stråleforfulgte LOLA-horisont): tallet for positionering ved ét sted er lig medmoonlight-service-volumes til sidste bit; sigtbarheden af Jorden og Solen fra de analytiske efemerider er det, der flytter sig med årstiden.lunar-ascent: opstigningen til rendezvous-banen og position-hastighedskovariansen ført tilbage til banen (scenarios/lunar-ascent.toml), med spredningen ved motorafbrydelse rapporteret ved siden af.docs/MISSION-THREAD-LUNAR.md; præregistreringen, dens ændringer og hvert resultat, misser medregnet, ixval/mission-thread-lunar/.
Evidens#
- Præregistreret i
xval/mission-thread-lunar/PREREGISTRATION.mdfør enhver kørsel, med seks daterede ændringer (hver foretaget, før dataene blev hentet, undtagen ændring 6, som retter en regnefejl i et tilstandsantal efter hentningen og før noget A2-resultat; hver ændring er oplyst i filen). Ingen tærskel blev lempet. - A1 (propagatoren mod den rekonstruerede LRO-bane fra JPL Horizons, 24 timer): MET, en maksimal 3D-forskel på 33 m mod en tærskel på 500 m og en radial RMS-forskel på 2,4 m mod 60 m.
- A2 (samme propagator mod CAPSTONE NRHO over ét omløb på 6,5 dage): NOT MET, en forskel i slutposition på 136,8 km mod en tærskel på 25 km og en forskel i den oskulerende periapsisradius på 28,4 km mod 10 km. Rækken forbliver MODELLED, og missen er fastholdt af
tests/mission_thread_lunar_oracles.rs. - B1 (rendezvous-estimatets konsistens med sin egen model) er MET på det fjerde estimatordesign, gennemsnitlig NEES 5,85 til 5,93 mod et bånd på [5,2, 6,8]; de tre tidligere designs, et udvidet Kalman-filter i tre varianter, missede den. En femte ændring, foretaget efter det udleverede scenarie på 2 timer viste sig at sende 4 af 50 forsøg i et lokalt minimum (gennemsnitlig NEES 1e9), kører Gauss-Newton-tilpasningen på en voksende bue med trinhalvering; B1 er upåvirket af den, og de udleverede scenarier giver 6,51 og 6,33. Historikken findes i
xval/mission-thread-lunar/RESULTS.md. - Intet her er VALIDATED: rækkerne med uafhængig reference afprøver den delte propagator, ikke et navigationsfilter, et signal eller et budget.
[0.39.0] - 2026-10-22#
Ingen nye funktioner: én rettelse af kommandolinjen, opdateringer af afhængigheder i værktøjerne til krydsvalidering og dokumentation. Motorens resultater er uændrede fra 0.38.0.
Rettet#
- Kommandolinjen afslutter stille med status 141, når dens standard output lukkes (
kshana kinds | head), i stedet for at gå i panik med "failed printing to stdout: Broken pipe". 141 er 128 plus SIGPIPE, den status en shell rapporterer foryes | head. Kun en lukket pipe håndteres: en fuld disk eller enhver anden skrivefejl rapporterer sig stadig selv, og et levende feed, der skriver til en lukket socket, får stadig sin skrivefejl.tests/cli_closed_pipe.rslukker læseren, før programmet starter, så den første skrivning fejler i hver kørsel.
Sikkerhed#
Én afhængighedsopdatering i det leverede bibliotek (den første post), resten i værktøjerne til krydsvalidering (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 afhængighedcrypto-bigint, nu 0,7) udbedrer RUSTSEC-2026-0387, tidsvariation icrypto-bigint0.5.5. Kshana bruger disse crates kun til at verificere offentlige signaturer (Galileo OSNMA-rodnøglen og RFC 3161-tidsstempeltokens) og signerer kun i tests med engangsnøgler, så den praktiske eksponering var nul; opgraderingen fjerner advarslen uden en ignorer-post. Bibliotekets og MCP's låsefiler flytter sig begge; intet verifikationsresultat ændres (OSNMA- og tidsstempelvektortestene består uændret).- Den mindst understøttede Rust-version er nu 1,88 (kræves af rettelsen for RUSTSEC-2026-0387).
memmap20.9.10 til 0.9.11 (RUSTSEC-2026-0186) i ANISE-krydskontrollens låse (xval/anise-lunar-od,xval/anise-mars-od); låsene synkroniserer også igen den lokale stiafhængighedkshana.pillow12.3.0 til 13.0.0 ogcertifi2026.7.22 til 2026.10.19 i miljøfastlåsningerne for de uafhængige referencer (xval/oracles/requirements.lock,requirements.frozen.txt): de rettede udgivelser for otte pillow-sikkerhedsadvarsler og én certifi-sikkerhedsadvarsel.
Dokumentation#
docs/BENCH.md, README og denne fil opregner hver kshana-bench-tærskel, der er NOT MET, som registreret ixval/bench/RESULTS-v2.md: A2 (agc_k_sigmaAUC 0,766 mod mindst 0,80 på testopdelingen), D1 (største afstand 0,0301) og opgave (b) R1 (videreført, ikke kørt igen). Ingen tærskel er lempet.- Gennemgang af README's fuldstændighed: en indholdsfortegnelse; scenarietyperne ordnet under familier, hver med en side under
docs/kinds/by-kind/(motorens beskrivelse og felter, input og resultater fra en eksempelkørsel, registerrækkerne og de uafhængige referencer, de begrænsninger, som kørslens rapport angiver, og det diagram, som motoren skriver), et kontaktark pr. familie, alt indekseret afdocs/KINDS.md; hver kommando idocs/COMMANDS.md; hver flade, plugin-kommando, skill og Studio-side idocs/ALL-SURFACES.md; hvert funktionsområde idocs/CAPABILITY-DOMAINS.md; indlejrede Mermaid-diagrammer (systemoversigt, flader, indre sløjfe, receiver trust, laboratoriets rundtur, Studio, test- og udgivelsesforløb, modulkort, distribution). Skrevet aftools/gen_kinds_index.py,tools/gen_readme_blocks.pyogtools/gen_figures_038.py; revideret aftools/readme_audit.py; bevogtet aftests/readme_completeness_doc_sync.rs, som også fastlåser hver posts beskrivelse og felter til motoren. tools/render-diagram-chromium.sh: gengiver et Mermaid-diagram til SVG og PNG på Linux og opdaterer gengivelsesregistret.- README: figurerne for rumbrugere og Månen brugte stier relative til
docs/, så de blev ikke indlæst fra README; ét link pegede på../../docs/JAMMERTEST.md. - Fjernede to forældede, håndkopierede diagramfiler (
docs/assets/clock-ensemble-band.svg,sweep-clock-stability.svg), som ingen side brugte, og som ikke længere stemte med motoren;docs/KINDS.mdindeholder de aktuelle diagrammer.
[0.38.0] - 2026-10-19#
Tilføjet#
- GNSS ud over konstellationen (
gnss-ssv). En ny scenarietype for rumfartøjer over, omkring og forbi GNSS-banerne (docs/SSV.md): tilgængelighed af ét og fire signaler, varighed af udfald, C/N0, DOP og hovedlobe mod sidelobe-links for GPS, GLONASS, Galileo, BDS, QZSS og NavIC på en skal eller langs LEO-, MEO-, GEO-, HEO- og månetransferbaner; sendemønstre fra hæfte, parametriske eller leveret af brugeren; en model for ionosfære, plasmasfære og atmosfære med grænsestråle; en modtagerudformning til svage signaler; et GNSS-udvidet Kalman-filter ombord til HEO og månetransfer; og relativ navigation i formation. Sammenlignet med ICG's Space Service Volume-hæfte under en præregistrering committet før kørslen: konstanterne for minimum udstrålet effekt og månetærsklen stemmer, de øvrige tærskler er ikke nået under den præregistrerede læsning (næsten alle på grund af hæftets inkonsistente GLONASS-strålevinkel), og den parametriske sidelobe-stedfortræder gengiver ikke de målte GPS-panelmønstre. Alt forbliver MODELLED (xval/gnss-ssv/RESULTS.md). - Månens bane og overflade som navigations- og geodætisk infrastruktur (
lunar-infrastructure). En ny scenarietype med fem studier valgt medstudy(docs/LUNAR-INFRASTRUCTURE.md): konsistens af en banebestemmelse ombord med Jord-GNSS i en næsten retlinet halobane mod en uafhængig bestemmelse fra jorden af afstand og afstandshastighed; fælles dobbeltdifferentieret bærebølgefase fra overfladestation og orbiter med LAMBDA-heltalsfiksering; Fisher-information for det syv-parameters månedatum med og uden afstande mellem orbiter og overflade; forskelle mellem teknikker for GNSS, VLBI og laserafstandsmåling mod den lokale tilknytning; og følsomhed over for h2, k2, l2 og den fysiske libration. MODELLED, med ILLUSTRATIVE inputdata: numerikken kontrolleres mod uafhængige numpy- og scipy-programmer, og intet sammenlignes med en måling af en månestørrelse. Tærsklerne blev fastsat ixval/lunar-infra/PREREGISTRATION.mdog to offentliggjorte ændringer. Tre er NOT MET, og hver er fastlåst af en test, der hævder afvigelsen: C3 (en indlagt kraftfejl detekteres ikke med den præregistrerede rate), Q3 (den bootstrappede succesrate afviger fra den uafhængige numpy-reference med 1.7e-6 mod en tærskel på 1e-9, fra LAMBDA's tilnærmelse af normalfordelingens CDF) og sporhalvdelen af G3 (tilføjelse af en afstandsfamilie sænker ikke altid pseudoinversens spor). Resten er nået (xval/lunar-infra/RESULTS.md). - En sjette artikel i forskningstabellen. "Cislunar navigation is an observability problem: arc-length thresholds, Gramian conditioning, and the Doppler lever" (arXiv:2610,23871, eess.SP) viser, at præcisionsfortynding er udefineret for cislunar tracking kun med afstand, og bruger i stedet observabilitets-Gramianen på fire plane fjerne retrograde baner: kun afstand har rang 2 af 4 i et øjebliksbillede og kræver en bue på omkring 2,09 t, afstandshastighed (Doppler) giver rang 4 øjeblikkeligt, og samtidig estimering af en station med satellittilstande og ure forbliver rangdeficient med én uden en ekstern interferometrisk observabel. Dens tal genskabes af typen
cislunar-observability(kshana scenarios/cislunar-observability.toml);cislunar-arc-recoverytester tærsklen med en uafhængig estimator. README's forskningskort, README'erne for crates, npm og PyPI og generatoren bærer den. - Den neutrale dommer, gjort målbar.
kshana jammertest importlæser det offentliggjorte NPRA Jammertest-katalog og den offentliggjorte transmissionsplan som planlagt reference (katalog-id'er bevaret), ogkshana jammertest scorescorer en modtagerlog mod den pr. test (detektionslatenstid, oversete alarmer, falske alarmer, tid til genopretning), eventuelt som en signeret bevispakke (docs/JAMMERTEST.md). Scoringstærsklerne blev præregistreret før enhver scoret kørsel (xval/jammertest-score/). På JammerTest-datasættet for 2024 (hentet, aldrig medleveret) slog den præregistrerede regel om minimumsdata fejl både i den første kørsel og i revisionen af datahåndteringen, så ingen tærskel kan vurderes, og intet påstås; begge kørsler er registreret og fastlåst. MODELLED: planen er datasættets loggede vinduer, ikke optagne tidspunkter for udsendelse. NMEA-sættet fra SimulaMet for 2025 er ikke tilpasset (ingen licens angivet på dets side). - Modtagerens egne flag ved siden af Kshanas. UBX-NAV-STATUS
spoofDetStateog UBX-SEC-SIG læses ind iself_reportved hver epoke, og sammenligningenreceiver_self_reporti resultatet stiller dem over for Kshanas monitorer (begge, kun modtageren, kun Kshana, ingen af dem); den udløser ingen alarm og ændrer ingen score. En Septentrio SBF-læser (PVTGeodetic, MeasEpoch, RFStatus, skrivebeskyttet, på den MIT-licenserede cratesbf-tools) ogreceiver-trust live --serial(et serielt eller USB NMEA-feed, skrivebeskyttet; det skriver aldrig til en modtager) kommer til. - Tidssynkronisering og hardwaresikkerhed (
docs/TIMING-HIL.md,docs/HARDWARE-SAFETY.md). Scenarietypenholdover-testscorer en holdover-test af et tidssynkroniseringssystem (GNSS fjernet af operatøren, holdover, genopretning) ud fra en målt tidsfejlsoptegnelse, målt mod ITU-T-masker fra offentlige tabeller.clock_loglæser logs fra linuxptp (ptp4l,phc2sys,ts2phc) og chrony (tracking,statistics).iq scene --format sdrxskriver ION GNSS SDR-metadata, ogiq monitor --followovervåger en SigMF-optagelse, mens den vokser (kun modtagelse).compliance-reportfår NIST IR 8323r1 Foundational PNT Profile (15 parafraserede rækker, leverer belæg for). En bevispakke kan registrere operatørenslab-attestationi sit signerede manifest, aldrig verificeret; hardwaretrinene 0 til 4 og de juridiske noter findes iHARDWARE-SAFETY.md(afventer juridisk gennemgang). Der findes ingen sendesti af nogen art. - kshana-bench v1 (
kshana bench,bench/SPEC.md,docs/BENCH.md): faste opgaver, opdelinger og målinger til GNSS-interferensdetektion på modtagerlogs (JammerTest 2024) og IQ, forudsigelse af holdover for tidssynkronisering (IGS-ure) og optimismegabet uden for fordelingen; opdelingsmanifester med fastlåste hashes og hentescripts (ingen data medleveret), et tilbageholdt datasæt forseglet ved commit og afsløring, et skema for resultatfiler og en statisk leaderboard-side. Baselines under tærskler præregistreret ixval/bench/PREREGISTRATION.md: scorertærskler nået, C1 til C3 nået, D2 nået; A2 NOT MET (agc_k_sigmaAUC 0,766 mod mindst 0,80 på testopdelingen), D1 NOT MET (største afstand 0,0301) og opgave (b) R1 NOT MET (videreført, ikke kørt igen), hver fastlåst (xval/bench/RESULTS-v2.md). Hver score er MODELLED. Pythonbench_score,bench_leaderboard; WebAssembly det samme; MCPscore_benchmark,render_leaderboard. - Interferensobservatorium (
kshana interference-map daily,sensitivity,docs/observatory/METHOD.md): en reproducerbar daglig GeoJSON, PNG og hændelsesrapport i JSON med tre tilstande (forringet, ikke forringet, ikke observeret), en mindsteforsinkelse på 24 t, celler på 0,5 grader eller grovere, ingen årsag tillagt og OpenSky-data afvist; et følsomhedsstudie af de præregistrerede parametre; et 30-dages baltisk bagkatalog fra adsb.lol. - Maskin- og sensorinput til
receiver-trust(docs/MACHINE-INPUTS.md). Nye[log] format-værdier, alle skrivebeskyttede, MODELLED, med selvskrevne fixtures og ingen data medleveret:rtklib-pos(RTKLIB.pos-løsningsfiler),novatel(OEM7 ASCII og binærBESTPOS,RANGEC/No ogRXSTATUS; modtagerens jammerflag bliver epokensself_report, stillet over for Kshanas alarmer af sammenligningenreceiver-self-report),rtcm3(MSM4 og MSM7 C/N0 for GPS, GLONASS, Galileo, SBAS, QZSS, BeiDou og NavIC; opbygning fra de BSD-licenserede pyrtcm-tabeller, hvis meddelelse står iNOTICE, ikke fra RTCM-standarden) oggnss-sdr(GNSS-SDR Monitor- og PVT-monitor-meddelelser som JSON-linjer, videresendt afintegrations/gnss-sdr/relay.py). - IMU-logs som en anden sensor.
[log.imu](csvellereuroc) integrerer gyroets yaw-rate til den heading, som monitorenheading-courselæser; inline på alle flader og båret med gennem bevispakker.kshana imu-fit(Pythonimu_fit, WebAssemblyimu_fit, MCPfit_imu_log, plugin/kshana-fit-imu, en JetBrains-handling) tilpasser accelerometerets og gyroets parametre for scenariernehybridogfusionud fra en stationær log ved Allan-deviation og udskriver en[accel_classical]-tabel med logens SHA-256 i dens proveniens. - Integrationer: en ROS 2-pakke (
integrations/ros2/kshana_trust: NavSatFix ogublox_ubx_msgsind, tillidsemner ud; dens ROS-frie bro er testet mod den rigtige motor, selve noden er ikke kørt på en levende ROS-graf), engnss_lib_py-bro (integrations/gnss_lib_py, MIT-afhængighed, valgfri) og et GNSS-SDR-relæ. - Home Assistant MQTT-eksport til tillidstelemetri:
kshana trust-telemetry --print-mqttog--mqtt-tcp <host:port>(discovery-meddelelser og et JSON-tilstandsdokument; kun udgivelse, ingen legitimationsoplysninger eller TLS), ogformat = "mqtt"som tekst i Python, WebAssembly og MCP. - Syv MODELLED registerrækker for ovenstående. Intet her er VALIDATED: ingen optagelse fra en rigtig modtager, basestation, IMU, GNSS-SDR-kørsel, ROS-graf eller MQTT-broker blev læst.
- Optisk linkmargin over tid. Typen
optical-atmospheretager en tabel[timeseries]til-valg (duration_h,step_s,seed) og skriver så også pr. sted én seedet realisation af den angivne stedmodel gennem tiden: skyepisoder, en flydende vandsøjle pr. episode, én gamma-gamma-scintillationsprøve pr. trin og ud fra dem linkmarginen, sky- og scintillationsfades og flaget for link oppe, med den realiserede tilgængelighed, skyandel, antal udfald og længste udfald. MODELLED (ét træk fra modellen, ikke klimaet; ingen ekstern uafhængig reference). Uden tabellen er resultatet dokumentet for 0,37. De to medfølgende optiske scenarier bærer tabellen (336 t, 600 s, seed 37). Tærskler præregistreret ixval/optical-atmosphere/PREREGISTRATION-timeseries.mdfør den første kørsel. - Specifikation af testbetingelser og laboratoriets rundtur.
kshana.test-conditions/1offentliggøres somdocs/spec/TEST-CONDITIONS.mdmed et JSON Schema og fårrecording.kind = "receiver-log".kshana bench-exportskriver også<base>.conditions.json.kshana evidence round-tripbygger en signeret pakke, der forbinder scenariets hash, de angivne betingelsers hash, modtagerlogens hash og scoren mod de angivne hændelser, og afviser betingelser, der ikke stemmer med scoringshændelserne. Gennemarbejdet eksempel med gps-sdr-sim, der kun skriver en fil; afspilning er operatørens ansvar og automatiseres aldrig. Pythonevidence_round_trip, MCPcreate_round_trip_pack, plugin/kshana-evidence-pack. - Standardpakker (
kshana standards-pack,standards/): testprofilerne i DHS' Resilient PNT-rammeværk for niveauerne 1 til 4, IMO MSC.1/Circ.1575's nøjagtighedsniveauer og integritetsvurdering samt ICAO Doc 9849 Appendix F overvågning, vurdering og afhjælpning, hver et sæt scenarier scoret mod tærskler fastsat før kørslen, med de compliance-report-rækker, som de leverer belæg for. Afvigelser er registreret og fastlåst: DHS L4-T1 og de fire IMO-nøjagtighedstest. Doc 9849 selv blev ikke læst (betalt); ICAO-pakken følger ICAO's egen præsentation af RFI Mitigation Plan.compliance-reportfår et afsnit om standardpakker. Alle MODELLED. - LunaNet Augmented Forward Signal (
docs/LUNANET-AFS.md): AFS-I Gold- og AFS-Q Weil-koder for PRN 1 til 210, signalernelunanet-afs-ioglunanet-afs-qikshana iq, SB1 BCH-koden, CRC-24Q og interleaver samtkshana lunanet-afs-check(spec,symbols,generate), fastlåst til LNIS V5 Applicable Document 1 Volume A (LSIS-AFS V1.0, 29 januar 2025). Koder VALIDATED mod dokumentets trykte tabeller (som det markerer TBC); én trykt tertiærkolonne (PRN 147) er sandsynligvis en trykfejl, og afvigelsen er fastlåst. LDPC-kodning af underrammerne 2 til 4 er ikke implementeret. - Kursusnotebooks (
notebooks/course/): jamming, spoofing, holdover, integritet, OSNMA og interferenskort, hver med øvelser. - EU-US WG-C ARAIM Milestone 3 studie af maksimal URA (
xval/araim-m3/,src/bin/gen_araim_m3_study.rs), der erstatter den tilbagetrukne "Table A-3"-plan; MODELLED under angivne afvigelser. - Udkast til ejerens godkendelse under
docs/drafts/: JOSS-artikel, ændring af TSC-charteret, proces for registret over uafhængige referencer og et forslag om opdeling afLICENSES/. Intet der er vedtaget. - Studio-visninger for funktionerne i 0,38 (kshana.dev/studio/). Bro-afspilning (to syntetiske kørsler på ét ur: spor, tillidsscore, de satellitter, som loggen hører, og dommen, med modtagerens egne flag ved siden af Kshanas alarmer); Optisk PNT (de to scenarier
optical-atmosphere, med en til-valgt seedet realisation af[timeseries], MODELLED); Holdover-test (resultatet afholdover-testmålt mod ITU-T-masker, tegnet ud fra resultatets egetrecord.series); en viser for interferensobservatoriet, der åbner de filer, du selv har produceret, og ikke leverer nogen; på siden Værktøjer en Jammertest-scorer, en IMU-tilpasning og MQTT som telemetriformat; og i Tillid en vælger af logformat (RTKLIB.pos, NovAtel OEM7, RTCM 3, GNSS-SDR, Septentrio SBF) med en valgfri IMU-fil. Hver visning læser filer i browseren og uploader intet; hvert tal bevarer den mærkat, som registret har for det, og hver bærer den vejledende erklæring. Webstedssiden/benchmarkviser fragmentetkshana bench leaderboard.
Rettet#
- Issue #36: byte-nøjagtige pin-lag. Byte-nøjagtige pin-lag kører kun på en vært, der er erklæret som baseline (
KSHANA_EXACT_PINS=1, sat afscripts/gate.sh), ikke på hver Apple-silicon-Mac, fordi Apples matematikbibliotek er forskelligt mellem macOS-udgivelser; det portable lag kører overalt, ogtests/exact_pin_gate_guard.rsforhindrer, at et byte-nøjagtigt lag igen bliver gated alene på platform. Sammenligningerne med de uafhængige referencer består selv på macOS. Ingen literal blev taget om, og ingen tolerance blev ændret.scripts/oracle-triage.shogdocs/LOCAL-ORACLE-TESTS.mdbeskriver, hvordan man triagerer en forskel;.github/workflows/oracle-macos.ymler en manuel og ugentlig diagnostik, ikke en gate. - CodeQL: et ikke-forankret mønster i Studios trust-open-hjælper matcher nu hele headeren (
web/studio/lib/trust-open.mjs). - CI: runnerens disk. Jobbet
checkbygger dev- og testprofilerne uden fejlfindingsinformation, så linkning ikke længere fylder disken. - Kildekontroller. Hver kildefil, der indeholder testfixtures med pins, erklærer sit pin-omfang, og de tests, der skriver midlertidige filer, bruger en unik sti pr. kald, så parallelle kørsler ikke kan støde sammen.
docs/SCENARIOS.mder genskabt for det valgfrie felttimeseriesi optical-atmosphere.- JetBrains-plugin: ingen brug af forældet platform-API eller API planlagt til fjernelse. IntelliJ Plugin Verifier (
verifyPlugin) mod IntelliJ IDEA build 263 (2026,3: 263.6800.24 og 263.7031.23) fandt ét forældet kald,FileEditorManager.openFile, i Insert Example; den åbner nu den nye fil medOpenFileDescriptor. Pluginnet er kompatibelt med og rent på 2024,3 (since-build, uændret) og begge 263-builds. CI kører nuverifyPluginog slår fejl ved kompatibilitetsproblemer og ved enhver brug af API planlagt til fjernelse.
[0.37.0] - 2026-10-17#
Tilføjet#
- Optisk PNT gennem atmosfæren (scenarietypen
optical-atmosphere,docs/OPTICAL-ATMOSPHERE.md, designnotatdocs/design/optical-atmosphere-0.37.md). For et optisk link og et sæt jordstationer rapporteres det bølgelængde- og elevationsafhængige tab i klar luft, turbulenstilstanden efter Hufnagel-Valley (Rytov-varians, scintillationsindeks, gamma-gamma-fades, aperturmiddelværdi), tilgængeligheden mod linkmarginen ud fra et angivet skyklima, den margin, der skal til for måltilgængeligheder, og det loft, ingen margin kan løfte, fordelingen af udfaldsvarighed, tids- og afstandsfejlen pr. udfald gennem urets holdover-model, afstandskorreleret stedsdiversitet og hvad-hvis-gevinster ved en ændring af bølgelængden, en større apertur, adaptiv-optik-reduktion af scintillation og ekstra margin.optical_linkbudgetfår et atmosfærebevidst budget; uden et er dets output bit-identisk med 0,36 (tærskel A5). To medfølgende scenarier bærer ILLUSTRATIVE skyklimaer. MODELLED: tre registerrækker. Numerikken når tærsklerne A1 til A6, præregistreret ixval/optical-atmosphere/PREREGISTRATION.md, mod et uafhængigt mpmath-program; det kontrollerer implementeringen af de angivne formler, ikke atmosfæren, og ingen målt tilgængelighedsoptegnelse er sammenlignet, så ingen række er VALIDATED. Tærskel A4 blev først overskredet med 3e-9, fordi den normale CDF, der blev brugt, var en tilnærmelse på 1.5e-7; CDF'en blev udskiftet, og tærsklen blev stående, som den var registreret. Native og WebAssembly-builds returnerer byte-identiske dokumenter for begge medfølgende scenarier (A7, kørt på integrationscommit 0.37.0).
[0.36.0] - 2026-10-16#
Tilføjet#
Detektions-ROC for IQ-monitorerne (PRO-32,
docs/design/DETECTION-ROC.md). En kampagne med monitorer gemmer hver teststatistiks maksimum over vinduer med angivne hændelser (positive) og flisebelagte vinduer uden for hændelserne (negative,roc_window_s). Rapporten samler dem pr. alarmtype i en ROC med dens AUC og driftspunktet ved den konfigurerede tærskel, somroc.jsonog et rapportafsnit. På syntetiske kampagner er tilfældighedskontrollen nået. Tærsklen for C/N0 AUC (0,95) er ikke nået (0,79), fordi de negative vinduer lige efter en hændelse arver CUSUM's henfald fra detektionen; dette er registreret. MODELLED.IQ-monitorer i laboratoriets afspilningskampagne (PRO-31,
docs/design/MONITORS-IN-CAMPAIGN.md). En valgfri tabel[monitors]i en kampagnefil kører IQ-monitorerne i runnerens enkelte gennemløb: effekt og spektral efter hver front-end-kæde og C/N0, SQM og lås pr. trackede kanal. Deres alarmer scores mod de angivne hændelser: detekteret eller misset, tid til detektion og falske alarmer pr. time eksponering. Hver tests tal for falsk alarm i lukket form er angivet, herunder et nyt tosidet gaussisk tal for SQM-testene (2Q(k)). Uden tabellen ændres intet. På syntetiske kampagner er tærsklerne for falsk alarm for effekt og SQM og for falsk alarm for C/N0 nået; 18 af 18 dæmpninger detekteres, men grænsen for tid til detektion, som pr. konstruktion ligger under én detektorsample, er ikke nået og er registreret. MODELLED; registerrække "IQ monitors scored in lab-replay campaigns".Laboratorietilpasning ud fra IQ-kampagner, opfølgning (
tests/iq_labfit_followup.rs, CI-joblabfit-iq-followup). Den tester de to hypoteser, som §13,6 idocs/design/LABFIT-FROM-IQ.mdlod stå åbne, mod tærskler præregistreret ved 1e532f84. Den tilføjer to syntetiske kampagner: S, med et trinvist J/S (seed 2026_1014), og R, en ny rampe (seed 2026_1015). Resultaterne står idocs/design/evidence/labfit-followup/RESULTS.md.- S1 nået: med hvert J/S-niveau holdt konstant genfindes
δ_effinden for +0,185 dB. Rampekampagnernes fejl på −1,1 dB er estimatorens forsinkelse. - S2 ikke nået, fastlåst af en test, der hævder afvigelsen: (d) som skrevet på den trinvise kampagne holder for trackingsløjfemodellen (0,45 dB), men ikke for den empiriske (6,42 dB).
- R1 nået: på den nye rampekampagne ligger (d) med de tilpassede dwell-tider for tab plus hver hændelses rampehastighed inden for 1 dB for begge modeller.
- Afvigelserne for (a′) og (d) gentages på R.
- En kampagne kan nu angive sit J/S som en
step-profil i testharnessen. - Ingen dom i §13 ændres, og registerrækken forbliver MODELLED.
- S1 nået: med hvert J/S-niveau holdt konstant genfindes
Begrænset FLL-indfangning, til-valg (DS-LOOP-05): en ny nøgle for sløjfeudformningen
[design.carrier] fll_pull_in_max_s(s), RustLoopConfig::fll_pull_in_max_s. Underfll_assist = "pull-in"gennemtvinger den FLL-til-PLL-overdragelsen efter så lang tid, uanset PLI. Ikke sat som standard, og så uden for udformningens hash; standardudformningen og dens hash er uændrede.- Kontrolleret mod tærskler præregistreret ved 58789af0, på indlagt reference. Kontrollen er nået: standarden overdrager aldrig i 9 af 10 seeds ved 33 dB-Hz.
- Ikke nået: med en begrænsning på 1,0 s fastholder 16 af 20 kørsler låsen ved 33 dB-Hz og 8 af 20 ved 31 dB-Hz; de øvrige veksler mellem tvungne overdragelser og FLL'ens tilbagevenden. Fasejitteren er 1,8× PLL alene ved 33 dB-Hz.
- Indfangningsgulvet på ca. 35 dB-Hz forbliver standardens dokumenterede grænse.
- MODELLED; registerrække "Begrænset FLL-indfangning under standardudformningens gulv for FLL-til-PLL-overdragelse (til-valg)".
Akkvisitionshysterese og front-end-kvantisereren i jamming-typen (CAP-06c): to valgfrie sektioner for et
jamming-scenarie.[acquisition]:acquisition_threshold_dbhz(dB-Hz, ved eller over trackingtærsklen) ogreacquisition_delay_s(s, standard 0). En satellit akkvireres ved eller over akkvisitionstærsklen, når den har været uakkvireret i forsinkelsen. Den fastholdes, så længe den er ved eller over trackingtærsklen. Output:epochs[].sats[].acquired(sand/falsk),epochs[].acquired(antal) ogfom.availability_acquired(1).[front_end]:adc_bits(1 til 16) ogbandwidth_mhz(MHz, standard det dobbelte af chipraten). Giver en blokfront_end:agc_gain_reduction_db(dB,10·log10(1 + J/N)),quantiser_loss_db(dB, trukket fra hvert links effektive C/N0) ogloss_model. Tabet er det for gaussisk input og er markeret som ugyldigt for CW-, smalbåndede og svejpede jammere.- Uden sektionerne er hvert output byte-identisk.
- Kontrolleret mod tærskler præregistreret ved 70c72fcc. Kvantiseringstabet ligger inden for 0,0007 dB af en uafhængig Monte Carlo, og AGC-aflæsningen inden for 0,012 dB af IQ-lagets AGC-sløjfe.
- De registrerede hysteresekørsler var uinformative (hvert link gik tabt), så den tærskel er NOT MET. Et supplerende kørselssæt registreret ved 37793290 når den: hvert flag er lig med en uafhængig genberegning, og 732 af 1824 links viser hysteresen.
- Fund: med en CW-jammer taber en 1-bit-ADC omkring 5 dB mere end det gaussiske tal.
- MODELLED; registerrække "Akkvisitionshysterese og front-end-kvantisereren i jamming-typen mod uafhængige genberegninger".
Terrænskygge af jammeren i jamming-typen (CAP-06b): en valgfri sektion
[terrain]i etjamming-scenarie med en jammer. Felter:dem_hgt: en SRTM.hgt-tile, relativ til arbejdsmappen;samples_per_side,ll_lat_degogll_lon_deg(deg): tilens størrelse og hjørne;geoid_undulation_m(m, standard 0),k_factor(standard 4/3) ogprofile_step_m(m, standard 30).
Motoren sampler storcirkelterrænprofilen mellem jammer og modtager og finder den dominerende knivægge. Jammerens modtagne effekt, og dermed hvert J/S, sænkes med det enkelte knivægtab fra ITU-R P.526-15 §4,1.
- Resultatet får en blok
jammer_terrain:nu_max(1),diffraction_loss_db(dB),obstacle_distance_m(m),obstacle_terrain_m(m),path_length_m(m) ogprofile_points(antal). - Uden sektionen er hvert output byte-identisk.
- Kontrolleret mod tærskler og ti placeringer præregistreret ved 92cd2bfd, på den committede rigtige SRTM-tile af Death Valley, mod en uafhængig numpy-genberegning. Alle nået: værste forskel 1.6e-10 på
νog på tabet (tærskel 1e-9), tabet monotont i jammerhøjden, og tabet når J/S nøjagtigt. - MODELLED; registerrække "Terrænskygge af jammeren i jamming-typen mod en uafhængig numpy-genberegning på en rigtig SRTM-tile".
CRPA-antenneforstærkninger i jamming-typen (CAP-06a): en valgfri sektion
[crpa]i etjamming-scenarie. Felter:elements_enu_m(elementpositioner i lokal øst-nord-op, m),weighting("null-steering"eller"mvdr") ogbandwidth_mhz(MVDR-støjbåndbredde, MHz, standard det dobbelte af chipraten).- Hver kanal danner en forvrængningsfri stråle mod sin satellit. Linkets støj skaleres med
‖w‖²og jammeren med|wᴴa_j|²før den eksisterende anti-jam-C/N0-ligning. - Hvert link får en blok
crpa:array_noise_gain_db(dB) ogjammer_gain_db(dB). - Uden sektionen er hvert output byte-identisk.
- En ugyldig sektion (en tom elementliste, en ukendt vægtning, en ikke-positiv båndbredde) er en fejl, gennem
kshanaogapi::run_tomlsåvel somjamming::run_jamming. - Kontrolleret mod tærskler præregistreret ved 08d83b4d. Nået: additivitet (efter en rettelse: det første build tilføjede de nye enheder til enhedstabellen i hver jamming-kørsel); ét element er intet array; støjforstærkning og effektiv C/N0 mod en uafhængig numpy-genberegning inden for 1e-9 dB; MVDR går mod nulpunktet ved høj JNR.
- Ikke nået: MVDR's jammerforstærkning på 194 af 456 links på 0,36 portabel matematik (202 på værtens matematik;
docs/revisions/STUDIO15-batch4-rebaseline.md) (værst 1.7e-6 dB). Residualerne fra −100 til −188 dB ligger under float64's opløsning ved den tærskel, og numpy er uenig med sig selv i samme størrelsesorden. - MODELLED; registerrække "CRPA-antenneforstærkninger i jamming-typen mod en uafhængig numpy-genberegning".
- Hver kanal danner en forvrængningsfri stråle mod sin satellit. Linkets støj skaleres med
IQ-trackingmotor mod GNSS-SDR 0.0.19 (PRO-33):
kshana iq trackog GNSS-SDR tracker de samme uafhængige numpy-optagelser af GPS L1 C/A ved 30 til 45 dB-Hz.- Tærskler præregistreret ved 48edd4a5. Den registrerede kalibrering slog fejl på en forkert GNSS-SDR-overdragelse (F3), så Amendment 1 (1e4288c4) tilføjer en FLL kun til indfangning i begge modtagere, committet før nogen testoptagelse.
- Nået: bærebølge- og kodejitter og Doppler stemmer inden for 5 % ved hver C/N0.
- Ikke nået: motorens NWPR C/N0 aflæser 2,3–7,1 dB under GNSS-SDR's SNV (F4, en kendt grænse for estimatoren; M2M4 er inden for 0,06 dB af referencen); låseindikatorerne adskiller sig pr. definition (F5); én uenighed om et slip ved 30 dB-Hz (F6).
- MODELLED; registerrække "IQ-trackingmotor mod GNSS-SDR 0.0.19 på uafhængige optagelser".
To VALIDATED rækker for koder i IQ-laget (DS-GIQ-06b, PRO-39).
- BeiDou B1I. Alle 63 primære B1I-koder stemmer chip for chip med GNSS-SDR v0.0.19s uafhængige generator (tærskel præregistreret ved 911106d1). Kun det programs output er committet: de B1I PRN-koder, som den offentlige ICD definerer, som et præfiks og en hash.
- GPS L1C. Alle 126 L1CP/L1CD-koder og 63 L1CO-overlays stemmer med de kontrolkolonner, IS-GPS-800J trykker, og den beregnede Legendre-sekvens stemmer med dens Table 6.2-1 (tærskler præregistreret ved fe372e26).
- Rækker: "BeiDou B1I's primære afstandskoder mod en uafhængig generator" og "GPS L1C's afstands- og overlaykoder mod de trykte kontrolkolonner i IS-GPS-800J".
GLONASS-, BeiDou- og Galileo E6-bånd i spektrummodellen (CAP-12, signaler): nye båndnavne
glonass-l1ofogglonass-l2of(enhver FDMA-kanal somglonass-l1of-k<K>, K = −7 til 6),beidou-b1i,beidou-b1c,beidou-b2a,beidou-b3ioggalileo-e6. Hver bærer sin ICD-bærebølge, modulation og mindste modtagne effekt. De er til-valg ved navn: standardbåndsættet og alle eksisterende outputs er uændrede.- Kontrolleret mod tærskler præregistreret ved 5806f28b: ICD-værdierne, nulpunkterne, B1C-sammensætningen og C/N0-stien er nået.
- To tærskler blev ikke nået. Enhedsareal-tærsklen var uopnåelig, som den var skrevet (F1). IQ-lagets B1I- og B1C-bølgeformer stemmer kun med modellen som middelværdi over båndet på grund af deres koders ujævne linjespektre (F2).
- MODELLED; registerrække "Spektrummodel: GLONASS-, BeiDou- og Galileo E6-bånd (til-valg)".
Cell-averaging CFAR-tilvalg i IQ-akkvisition (PRO-37):
iq::acq::ca_cfarogca_cfar_cellsafgør på et akkvisitionsgitter ved at sammenligne hver celle med middelværdien af referenceceller i dens Doppler-række. Tærsklen stammer fra den lukkede form for CA-CFAR's sandsynlighed for falsk alarm forMikke-koherente blokke (ca_cfar_pfa,ca_cfar_alpha), så beslutningen ikke afhænger af normaliseringen af sampleeffekt. Det er til-valg; standarddetektoren og alle eksisterende outputs er uændrede.- Kontrolleret mod tærskler præregistreret ved 3724aefa: den lukkede form mod Monte Carlo (18 af 18 tilfælde), og en designrate på 1 % målt til 0,97–1,01 % på gaussisk og 2-bit-kvantiseret støj.
- Én tærskel blev ikke nået: på et støjfrit 2-bit-signal overskrider 1,28 % af cellerne uden for toppen tærsklen, ved kodens korrelationssidelobes (fund F1).
- MODELLED; registerrække "Cell-averaging CFAR-tilvalg i IQ-akkvisition".
Scintillationsmodel mod måledata (PRO-34): IQ-kanalens Cornell-scintillationsmodel blev sammenlignet med målt GPS L1-intensitet og -fase ved 50 Hz fra en ækvatorial scintillationsnat (Zenodo-post 16941224, INGV, Malindi, CC BY 4,0), under tærskler præregistreret ved b6ccb499. Nået: intensitetsfordelingen og fasescintillationen knyttet til S4. Ikke nået: modellen fader 2,4 gange så ofte under −10 dB og 3,5 gange så længe (fund F1). Den registrerede behandling læser modellens indpakkede fase (fund F2); faseresultatet holder, når den er udpakket.
scripts/fetch_scint_malindi.shhenter dataene. Rækken forbliver MODELLED: "IQ-kanal for ionosfærisk scintillation (Cornell-modellen) mod målt GPS L1-scintillation ved 50 Hz".Rettet LuGRE-samplelæser (MR-09):
realdata::lugre::parse_iqs_sdrxlæser en LuGRE IQ-batch med I i den høje nibble og mid-rise-niveauerne2v + 1(SdrLayout::mid_rise), som fjerner det middel på −½, som de rene to-komplement-heltal bærer på I og Q.run_acq.py --correctedgiver GNSS-SDR den samme læsning. Den generiske ION-læser og alle eksisterende outputs er uændrede: 149 scenarieresultater og et studie er byte-identiske før og efter, og de fastlåste LuGRE-fund læses som registreret (xval/lugre-reader/RESULTS.md). Ingen registerrække ændres.BOC(1.1)-tracking, til-valg (CAP-07 (a)):
LoopConfig::bocomskalerer DLL-diskriminatorerne til hovedtoppen af sinus-BOC(1.1) og tilføjer en bump-jump-monitor (meget tidlige og meget sene korrelatorer ved ±0,5 chip, op/ned-tællere,N = 8), der flytter kode-NCO'en væk fra en sidetop;Channel::bump_jumpsopregner springene. Slået fra som standard, og alle eksisterende outputs er uændrede. Kontrolleret mod tærskler præregistreret ved 6b68f6cc på et syntetisk BeiDou B1C-signal: en start på en sidetop, der uden tilvalget bliver stående 0,55 chip ved siden af, trækkes med det over på hovedtoppen af ét spring ved 0,08 s, og intet falsk spring blev set væk fra hovedtoppen. Én tærskel blev ikke nået: enhedstestgridet for skaleringen rækker uden for diskriminatorernes lineære område (fund F1 idocs/design/evidence/boc-bump-jump/RESULTS.md). MODELLED; registerrække "BOC(1.1)-tracking: DLL-skalering og opløsning af bump-jump-multiplicitet (til-valg)".Laboratorietilpasning ud fra IQ-kampagner (B7.1,
docs/design/LABFIT-FROM-IQ.md).[input] campaign = "<out-dir>"i et labfit-scenarie tilpasser en outputmappe frakshana iq campaignpå CLI'en (kshana iq labfit), i Python (kshana.iq_labfit) og i MCP's labfit-værktøj (kun mapper inden for dets arbejdsmappe). Den tilpasser én enhed pr. signal, sløjfeudformning, front-end-kæde og jammertype:- C/N0-modellen mod angivet J/S, med censurering;
- trackingtærsklen, direkte og i lukket form;
- tracking-sløjfemodellen og de empiriske lås-modeller, koblet gennem C/N0-modellen, med deres dwell-tider;
- en seedet klynge-bootstrap over optagelser, 90 % prædiktionsintervaller og tilbageholdte datasæt med udeladelse af én optagelse ad gangen;
- en præregistreret tabel
[validation], hashet, med PASS/FAIL pr. tærskel.
Rapporten er
kshana.labfit-iq/1som JSON, CSV og Markdown, med en enhedsblok.Q_effkan ikke identificeres ud fra C/N0-data uden en uafhængig effektmåling. Den angives, tilpasses aldrig, og den tilpassede parameter erdelta_eff = delta - 10 log10 Q(designændring 2026-10-12). En ukendt jammertype får det mest skadelige angivneQ(cw, 1). På syntetiske kampagner fra Kshanas egne scener består tærsklen for dækning i det tilbageholdte datasæt (c). Tærsklerne fordelta_eff(a') og (b') (0 af 50 kampagner dækket) og tærsklen (d) for tærsklen i lukket form er ikke nået: de er registreret med deres værdier. MODELLED; registerrække "Kalibrering af den åbne modtagers C/N0- og låsemodeller til IQ-kampagneresultater, med angiven prædiktionsfejl". Stien labfit for modtagerlogs og dens outputs er uændrede.solar-systempå en JPL-kerne (CAP-31):planetary_kernel_pathtager hvert legeme, som SPK'en indeholder (med de440s: Merkur, Venus, Jorden, Månen), fra kernen, mærkatKERNEL, og tilføjer kun en blokkernel, når den er sat. Ny række, VALIDATED mod SPICE (præregistreret f8e946ea; værst 3.3e-5 m, 1.0e-11 m/s). Standardrapporten er uændret.Porkchop på DE440-efemeriden (CAP-20b):
maneuver::porkchop_kernelgennemløber C3 og ankomst-V∞ på heliocentriske tilstande fra en DE440 SPK. Ny række, VALIDATED mod SPICE-tilstande- pykep 3.0.1 (præregistreret 2d857fb1; Jorden til Mars 2026-2028, 304 celler, værst 2.6e-14, samme celle med mindste C3).
LRO ikke-gravitationel makromodel: NOT MET (DS-LRO-10, præregistreret e82047e2).
lunar_od::LunarMacroModel(til-valg viaLunarForceModel::macro_model): direkte solstråling på flade plader med Månens skygge, et solfølgende array og månens albedo og termiske IR;LunarMacroModel::lro_genericer en mærket generisk LRO-tilnærmelse ud fra offentliggjorte kendsgerninger (ingen buspaneler: pladetabellen kunne ikke skaffes). På LRO-buen på 4 t efterlader den den reduceret-dynamiske RMS på 6,668 m og den dynamiske på 11,94 m, med en usandsynlig strålingsfaktor (omkring +21 / −22), så alle tre tærskler er overskredet. Fundet er fastlåst af en test, og intet standardoutput ændres (docs/design/evidence/ds-lro-10-macro-model/RESULTS.md). Det til-valgte månekanonkugle-SRP bruger nu Månens koniske skygge i stedet for Jordens (forces::conical_shadow_body).Månens OD: valgfri k2-fast tidevand og selenocentrisk relativitet (DS-LRO-11), slået fra som standard (
LunarForceModel::lunar_tide,::relativity); en kontaktKSHANA_LRO_DEGREEtil ANISE-krydsvalideringen (DS-LRO-04); en fixture med en LRO-bue på 24 t og en kun informerende tilpasning over en lang bue (DS-LRO-09). Informationskørsler er registreret idocs/design/evidence/ds-lro-09-11-longer-arc/RESULTS.md; intet offentliggjort tal ændres.CR3BP 9:2 NRHO mod CAPSTONE (CAP-29d): ny MODELLED række, der måler motorens cirkulære begrænsede NRHO mod CAPSTONEs fløjne bane (JPL Horizons, marts 2023; præregistreret 4e868170): periode 1,07 %, apolun 0,05 %, perilun 4,1 % fra CAPSTONEs middelværdier, inden for de registrerede tærskler på 3 / 5 / 20 %. En måling, ikke en validering.
CR3BP roterende tilstande til Måne-centreret ICRF (RM-34, FUT-06):
cr3bp::to_moon_centred_icrf/from_moon_centred_icrf/to_moon_centred_icrf_de440afbilder en dimensionsløs roterende Jord-Måne-tilstand på den øjeblikkelige DE440 Jord-Måne-linje, inklusive referencesystemets rate uden for planet. Ny række, VALIDATED mod et SPICE-referencesystem med to vektorer (præregistreret 2313eb1b, ændret før nogen kørsel d5ef79b3; 72 tilfælde, værst 1.8e-7 m og 1.2e-9 m/s).CR3BP-familiemedlemmer mod JPL Three-Body Periodic Orbits API: NOT MET (RM-35, præregistreret a9074f65).
cr3bp_family(halo-, NRHO- og DRO-korrektion, monodromi-stabilitetsindeks, pseudo-buelængde-fortsættelse) stemmer med 54 af 58 API-medlemmer på hver tærskel (tilstand, periode og Jacobi inden for 1e-10 overalt). Ét L1 halo-stabilitetsindeks (9.5e-2) og tre små DRO-lukninger (1.5e-8 til 3.3e-8 mod 1e-8) overskrider tærsklen, så modulet er#[doc(hidden)], og ingen række påstår det. Resultater:docs/design/evidence/cr3bp-families/RESULTS.md.Til-valgt DE440-månerotation og -miljø (FUT-05, DS-LRO-08; standarder uændrede):
lunar_frame::try_icrf_to_moon_pa_de440,lunar::try_mci_to_mcmf_de440/try_mcmf_to_mci_de440(forankret i epoke, DE440 hovedakser) oglunar_od::De440LunarEnvironment(indlejret DE440 PA-orientering plus den geocentriske Sol og Måne fra en DE440 SPK leveret af brugeren). Mod ANISE (præregistreret ea537710): orientering inden for 3.5e-7 rad og LRO-tilpasninger inden for 1 mm, men efemeridedelen overskred sin tærskel (Sol 30,7 m, Måne 1,1 m, en tidsforskydning på ca. 1 ms på ANISE-siden), så det er ikke en valideret række. Resultater:docs/design/evidence/fut05-de440-lunar-env/RESULTS.md.Datum for månens referencesystemkampagne, tilstandsskaleret NumPy-tærskel: NOT MET (præregistreret b887eb05; forbliver MODELLED). Trin 0 udelukker pseudoinversens fallback som årsag til gabet på 0,30 for estimerede stationer; NumPy stemmer inden for tærsklen på seks af otte scenarier, men stations_estimated overskrider den (6.8e-6 mod 5.9e-7), og på den nye dato 2026-12-01 gør et uobserveret sydpolsbeacon-informationen rangdeficient, hvilket den uændrede uafhængige reference ikke kan evaluere. Resultater:
docs/design/evidence/mr05-lunar-datum-cond/RESULTS.md.Datum for månens referencesystem fra en rigtig observationskampagne (analytisk Måne) VALIDATED på friske EDC-normalpunkter fra 2025 (præregistreret 31f5283, før nogen blev hentet): den uændrede SPICE- og NumPy-reference stemmer på bogføring, rang og nul kobling og inden for 1.11e-3 på sigmaer (tærskel 1e-2), 8.95e-4 på tilstanden og 1.79e-3 på tværs/langs-forholdene (tærskel 2e-2). Kun en Library-kontrol af kovariansberegningen; tærsklerne skelner ikke mellem månemodeller. Resultater:
docs/design/evidence/mr06-llr-analytic-fresh/RESULTS.md.IAU-legemsorientering og GM for de fjorten tilføjede legemer i solsystemet udskilt fra rækken "Fysiske konstanter for hvert legeme i solsystemet" til en VALIDATED række (præregistreret 154bc54):
Body::iau_rotation_etstemmer med SPICEpxformpå pck00011 inden for 1e-9 rad på 574 matricer ved de oprindelige epoker og på 574 ved 41 friske epoker, der aldrig er sammenlignet før (værst Phobos 1.38e-10 rad), ogBody::muer lig med gm_de440 for alle fjorten legemer. Resten af den oprindelige række (J2, middelradius, rapporten) forbliver MODELLED. Resultater:docs/design/evidence/mr08-body-orientation/RESULTS.md.Lambert med flere omløb (
maneuver::lambert_multirev): hver løsning med op til tre omløb, begge grene. Ny registerrække, VALIDATED mod pykep 3.0.1 (præregistreret a75de851; 382 tilfælde, 1058 løsninger, værste hastighedsforskel 1.6e-13 mod 1e-8). Den interne Kepler-landingsvagt fandt én begrænsning imaneuver::kepler_universalpå en bue med e = 0,994; den er registreret idocs/design/evidence/lambert-multirev/RESULTS.md.Solstrålingstryk med box-wing og ECOM2 (DS-PA-14), til-valg.
srp_boxwing: en box-wing-model med flade plader med Galileo FOC/IOV-tabellerne fra GSC's satellitmetadata, i nominel GNSS-yawstyring, med strålingsfaktor og partielle afledede pr. panel, og den empiriske ECOM2-model med dens partielle afledede. Vælges medForceModel::box_wing_srp/PreciseForceModel::box_wing_srp(feltersrp_boxwing, standardNone: kanonkuglestien og alle golden-filer er uændrede); med et box-wing-sæt ercrdets strålingsfaktor. Sammenlignet med Orekit 12,2 under en præregistrering (xval/srp-boxwing-orekit/): hver tærskel nået, omkring 1e-15 relativt; VALIDATED som en modelevaluering, Galileo-SRP-forudsigelsen forbliver MODELLED.SRP-skygge for en oblat Jord og solens randformørkelse (FUT-09, RM-11). Nyt modul
srp_shadow:oblate_conical_shadow(WGS-84-skyggende ellipsoide),limb_darkened_shadow(Eddingtons lov) ogShadowModel, valgt medForceModel::srp_shadow(standard: den eksisterende sfæriske koniske skygge, uændret);forces::srp_accel_with_lit_fraction. Den oblate skygge stemmer med Orekit 12,2s belysningsforhold inden for 7.4e-9 over 2400 geometrier (VALIDATED,xval/srp-oblate-shadow-orekit/); randformørkelsen har ingen ekstern uafhængig reference (MODELLED).NRLMSISE-00-termosfære (FUT-08, RM-10, DS-PA-13).
nrlmsise00: en portering afgtd7oggtd7d(kontakter, tilstande med daglig Ap og 3-timers ap-array) fra den offentligt tilgængelige C-version af NRL's Fortran. Den er bit-identisk med den C-portering og inden for 1.9e-6 relativt af pymsis 0.13.0 (NRL Fortran, enkelt præcision) på et gitter med 720 punkter, og den gengiver de 17 offentliggjorte testtilfælde (VALIDATED;xval/nrlmsise00-pymsis/). Dette validerer porteringen, ikke modellens nøjagtighed mod målt densitet.Til-valgt NRLMSISE-00-trin for dragdensitet.
forces::DensityModel::{Exponential, Nrlmsise00 { f107a, f107, ap }},forces::drag_accel_with_density,density_atogpropagator::ForceModel::drag_density. Den statiske eksponentielle model forbliver standard, bit for bit. Rumvejret er konstant pr. model. VALIDATED på banebasis mod Orekit 12,2s eget NRLMSISE-00-drag over 24 t (værst 0,03 m mod op til 142 km dragforskydning;xval/drag-tier-orekit/).Til-valgt DE440 Sol og Måne i Cowell-propagatoren (RM-33, FUT-10).
propagator::ForceModel::with_ephemeristager enhverEphemerisProvider(f.eks. en DE440KernelEphemeris) til tredjelegeme- og SRP-leddene; den afviser en udbyder, der ikke kan betjene epoken, tæller fallbacks til den analytiske række og er slået fra som standard.EphemerisProvider::relative_position_jd2bevarer todelt præcision. Mod Orekit 12,2 på dens egen DE440-læser stemmer baner på 24 t med 0,017 m; den præregistrerede tærskel for Sol/Måne-position blev overskredet (6,4 m / 0,24 m; SPICE viser det samme gab), så MODELLED (xval/propagator-de440-orekit/).Til-valgt atmosfærisk S1-tidevand (DS-PA-03).
tides::atmospheric_tide_s1ogs1_air_tide_acceleration(Biancale & Bode 2006, GFZ STR06/01 Table 1 model N1, grad 2–6), aktiveret medair_tide_s1()påpropagator::ForceModelogprecise_od::PreciseForceModel; slået fra som standard. MODELLED (koefficienter kontrolleret igen mod den offentliggjorte tabel; ingen ekstern uafhængig reference for kraftens virkning).Batch-banebestemmelse med afstandshastighed og azimut/elevation med elevationsmaske (RM-36, FUT-13).
orbit_determination::determine_orbit_batch_tracking,simulate_tracking,predict_tracking,propagate_with_stm(variationel STM med analytiske partielle afledede for topartikel + J2),is_visible,measurement_with_partials;batch_ls::gauss_newton_analytic. Stien kun med afstand er uændret. Sammenlignet med Orekit 12,2 batch least squares over 8 præregistrerede scenarier: hver tærskel nået undtagen den støjfri tilstandssammenfald (≤ 1 cm), overskredet på 2 af 4 scenarier ved 1,46 og 1,74 cm med kshana inden for 1e-8 m af referencen; registreret, MODELLED.SP3-nøjagtighedsvægtning (DS-PA-06).
sp3::parse_sp3_accuracyogSp3Accuracy::position_sigma_mafbilder nøjagtighedskoderne i headeren og pr. post til observationssigmaer; en SP3-vægtet Galileo-tilpasningsvariant (Tier-2 3D RMS 0,035 m mod 0,070 m uvægtet) er tilføjet ved siden af de uændrede registrerede kørsler. MODELLED.Swarm-A-dispatchjob for hele buen (DS-PA-08) i
.github/workflows/agency-od-validation.yml.Planetarisk tyngdekraft fra PDS SHADR-tabeller (CAP-30, del af CAP-31).
SphericalHarmonicField::from_shadr(src/gravity_pds.rs) læser Mars GMM-3 (d/o 120) og GRAIL GL0660B (d/o 660);Body::with_gravity_fieldtilknytter ethvert indlæst felt (standarder uændrede). Beskæringer til grad 20 medfølger (NASA PDS, public domain;tests/fixtures/planetary_gravity/NOTICE.md); de fulde filer hentes afxval/planetary-gravity-pyshtools/fetch_data.sh. VALIDATED mod pyshtools 4.14.1 (inden for 4e-15 af den samlede tyngdekraft ved d/o 120 over hele kuglen, 5e-14 ved d/o 660 for |lat| ≤ 60°); koblingen til legemets referencesystem forbliver MODELLED (hvert felts eget referencesystem er ikke det IAU-system, der anvendes).Tyngdekraft af høj grad til grad 2190 (RM-14, FUT-07).
SphericalHarmonicField::acceleration_hf/potential_hf(Holmes–Featherstone modificeret fremadrettet kolonne, ingen underflow, ingen polsingularitet),prepare_high_degree, en streamende ICGEM-indlæserfrom_gfc_file/from_gfc_reader(kontrol af norm og maksimal grad, tidevandssystem registreret, tidsvarierende led afvist) ogscripts/fetch_egm2008.sh(fuld EGM2008, SHA-256 fastlåst, ikke medleveret; tests gated påKSHANA_EGM2008_GFC).propagator::FieldEvaluatorvælger den på det til-valgteGeopotential. Stemmer med Orekit 12,2 til 7.3e-17 m/s² gennem grad 2190, og en bane på 24 t 200×200 stemmer til 0,13 m. MODELLED: pyshtools overskred den præregistrerede tærskel nær polen (sporet til pyshtools), og banens kontrol af følsomhed for grad 70 blev overskredet (0,73 m < 1 m); begge er registreret ixval/.DOP853-integrator (FUT-11).
integrator::integrate_dop853,integrate_dop853_checked,integrate_dop853_dense(tæt output af 7. orden),dop853_step,dop853_initial_step, med en trinvagt, der lukker ved fejl;propagator::Integrator::Dop853,propagate_dop853,propagate_dop853_checked. Standarddriveren er uændret. VALIDATED mod SciPy 1.18.1solve_ivp(method="DOP853"): enkelte trin inden for 5.6e-15, samme trinsekvenser, sluttilstande inden for 1.6e-12 (xval/dop853-scipy/).Robust Kepler-løser (FUT-12). Nyt modul
kepler:solve_kepler_markley(Markley 1995-starter, residual uden udslettelse) for alle 0 ≤ e < 1, pakket ind afpropagator::solve_kepler_robust. VALIDATED mod mpmath-rødder med 50 cifre til 0,9 ε·|E| op til e = 0,999999 (xval/kepler-mpmath/).Til-valgt tesseral tyngdekraft fra Jorden 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 et jordfast referencesystem, nået ved jordrotationsvinklen (EarthFixedFrame::Era) eller CIO GCRS-til-ITRS-kæden (EarthFixedFrame::Cio). StandardNone: intet eksisterende output ændres. VALIDATED mod Orekit 12,2 Holmes–Featherstone over 24 t (6 tilfælde, værst 0,036 m), med tærsklerne præregistreret ixval/cowell-tesseral-orekit/PREREGISTRATION.md.Todelte julianske datoer gennem jordrotation 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-konverteringer mellemjd2::Jd2ogtimescales::TwoPartJdog et til-valgttwo_part_jd = truefor scenarietephemeris(ECEF, jordspor og stationsvisning; slået fra som standard og uændret, og nøglen udelades af scenariets hash, når den er slået fra). Ny registerrække, VALIDATED mod pyerfagmst82/c2t06a(præregistreret b10475ee; 40 datoer: GMST bit-identisk, matrix inden for 2.7e-14, rotation over trin på 1 µs inden for 1.1e-14 rad, hvor stien med enkeltf64overskrider dem). Epoken for Cowell-kraftmodellen forbliver enkeltf64; grunden står i dens dokumentation.EOP-forudsigelse ud over tabellen (
EopSeries::with_ls_ar_prediction,EopSeries::last_mjd): en til-valgt udvidelse af en IERS-serie for jordens orientering med LS+AR-prædiktoren udstedt ved dens sidste række, så referencesystemets argumenter for en senere epoke følger prognosen i stedet for at klemmes til den sidste række. Svar inden for tabellen er bit-identiske (testet); serien klemmer stadig, medmindre dette kaldes. Prognosens nøjagtighed forbliver det eksisterende LS+AR-fund mod Bulletin A (MODELLED).Forskydninger dX, dY af den himmelske pol på CIO-kæden (
cio::gcrs_to_cirs_matrix_with_offsets) og direkte ERFA-vektorkontroller afprecession_matrix,teme_to_gcrs_matrixog den nye funktion. Ny registerrække, VALIDATED mod pyerfa (præregistreret 979c1e39; 40 epoker 1950–2100: præcession og CIO bit-identiske, TEME→GCRS inden for 1.1e-10 rad, den forudsagte virkning af to-leddet-rækken for jævndøgnsligningen). Eksisterende funktioner er uændrede.UTC før 1972 på den todelte tidssti (
timescales::tai_minus_utc_on_date, ogJd2::from_utc_calendar,jd2::utc_to_taiogjd2::tai_to_utcfra 1960-01-01): æraen med glidende rate ("rubber-second"), med SOFA's driftstabel, brøkdelstrin ved dagens slutning og skaleringen af dagsbrøken fra UTC til SI. Ny registerrække, VALIDATED mod pyerfadtf2d/utctai/taiutc(præregistreret 23c40661; 117 tidspunkter 1960–1971, værst 2.9e-11 s mod en tærskel på 1 µs). Hvert resultat fra 1972 og frem er bit-identisk (kontrolsum fastlåst før ændringen). Før 1960 er TAI − UTC 0, som i SOFA. Stientimescales::tai_minus_utcmed enkeltf64er uændret.GLONASS-udsendt satellitur (
GlonassEphemeris::sv_clock_bias_s):−τn + γn·(t − tb)fra RINEX-posten, ved en tid aflæst på satellituret (to fastkomma-iterationer, RTKLIB-konventionen). De indlæste−τnogγnvar tidligere ubrugte. Ny registerrække "GLONASS-udsendt satellitur og propagering af udsendt bane", VALIDATED mod RTKLIB 2.4.2-p13geph2clk/geph2pos(præregistreret e099c42a; 292 tilfælde på en rigtig udsendt fil fra 2013: urforskel 0 s, værste position 1,1 mm mod en tærskel på 1 cm). Biblioteksfunktion; intet scenarieoutput ændres. Ingen transformation fra PZ-90.11 til ITRF anvendes, og modulet siger det.PPP-tidsløsning mod IGS-stationsuret (0,36, FUT-19): modtagerens ur i det flydende PPP-filter på WTZR stemmer med IGS' endelige kombinerede ur for stationen til 0,075 ns (standardafvigelse) med en konstant forskydning på −0,66 ns over de konvergerede to timer. Tærsklerne blev præregistreret i
xval/ppp-time/. VALIDATED (ny registerrække). Ny fixtureigs_2025055_WTZR_05m_0006.clk, stationsurposterne fra den endelige IGS-urfil, der allerede bruges til satellitterne.PPP-paritet med gLAB (0,36, WP-07, RM-31): gLAB 6.0.0 blev kørt på de samme WTZR-input som et separat værktøj (Apache-2.0-kerne; downloadets kontrolsum kontrolleret mod den offentliggjorte liste), med kommandolinjen fra en proceduremæssig ændring committet før kørslen. På dens første registrerede kørsel stemmer Kshanas flydende PPP og gLABs inden for 0,05 m på 240 af 240 epoker og til 5,0 mm på den sidste. SPP-tærsklen blev overskredet (median 1,187 m mod 0,50 m) og er registreret som et fund: gLABs og RTKLIBs egne SPP-løsninger afviger fra hinanden med 0,852 m. Den registrerede regel lader derfor begge værktøjers ben stå som ikke nået som helhed, mens PPP-paritet holder.
Læsning af RINEX 4-navigation (0,36, WP-07, PRO-41):
rinex::parse_navlæser RINEX 4.00-4.02-navigationsfiler (> EPHGPS LNAV, Galileo I/NAV og F/NAV, BeiDou D1/D2, QZSS LNAV; andre poster springes over til næste postheader), ogparse_nav_withtager indstillinger. VALIDATED mod samme dags IGS RINEX 3-sammenflettede fil: hvert afkodet felt identisk og 0 m i position. Læsning af RINEX 2/3 er uændret.BeiDou GEO-udsendte positioner (til-valg):
NavParseOptions::include_beidou_geoogRinexEphemeris::sv_position_ecef_bds_geo(BDS ICD, −5 deg hældning).parse_navspringer stadig GEO'er over. MODELLED: den præregistrerede sammenligning med en præcis bane er data-gated og endnu ikke kørt.RINEX 4-observationsfiler: en rigtig RINEX 4,00 MGEX-observationsfil læses i tests (MODELLED, formatkontrol).
RTK med LAMBDA på rigtig RINEX (0,36, WP-07 ★):
rtk_real::run_rtk, dobbeltdifferencer over kort baseline af tofrekvent GPS-kode og -fase med et flydende Kalman-filter og LAMBDA-heltalsfiksering (ratiotest). VALIDATED på IGS-stationerne WTZR og WTZZ (1,4 m fra hinanden) mod deres ITRF2020-baseline under præregistrerede tærskler: fikseret ved hver epoke efter de første ti minutter, baselinefejl median 4,5 mm og 95. percentil 5,5 mm.RTKLIB-paritet for PPP med rigtige data (RM-31):
xval/ppp-parity/run.shogtests/ppp_parity_glab_rtklib.rsmed præregistrerede tærskler. RTKLIB v2.4.2-p13 PPP på de samme WTZR-input stemmer med Kshana inden for 5 cm ved hver epoke i de sidste to timer (9,7 mm til sidst) ved den tredje registrering; de første to kørsler, registreret som fund, havde det faste tidevand slået fra og modtagerantennen på RTKLIBs basis-slot. Tærsklen for enkeltpunktsparitet blev overskredet (1,09 m median mod 0,5 m). gLAB-benet er ikke kørt (data-gated).Navigationsmeddelelsesenkodere ud over LNAV (0,36, WP-07, PRO-40):
gnss_navmsgenkoder GPS CNAV (meddelelsestyper 10, 11, 30; CRC-24Q; kontinuerlig rate-1/2 K=7-kodning), Galileo I/NAV (ordtyper 1-5 i lige/ulige nominelle sider; 30x8-interleaver; sync0101100000) og Galileo F/NAV (sidetyper 1-4; 61x8-interleaver; sync101101110000), med testdekodere. MODELLED: rundture og ICD-kendte svar; en præregistreret kontrol af, at udsendte Galileo-efemerider ligger på enkoderens LSB-gitter, holdt (værst 3.6e-3 LSB), men overskred sin tærskel for antal satellitter (15 af 20), registreret. Enkoderne er biblioteksfunktioner; sceneforbindelse er ikke en del af denne ændring.IONEX-fillæser (0,36, WP-07):
ionex::parse_ionex_filemedIonexFile,IonexHeader,IonexEpoch,IonexFileMapogIonexTimeInterp: en streng IONEX 1,0-læser med faste kolonner, med epoker talt fra det første korts dag,9999læst som manglende, RMS-kort og formatets nærmeste, på hinanden følgende og roterede korts tidsinterpolationer; skrå TEC ved headerens skalhøjde. Kontrolleret på et committet syntetisk kort og, data-gated (hentet ved testtidspunktet med en fastlåst SHA-256, ikke medleveret), på et udsnit af en rigtig CODE GIM: hver knude nøjagtig; interpolationen stemmer med en formelreference til 4e-13 TECU. RTKLIBsiontecstemmer til 3.6e-13 TECU ved 6885 punkter (præregistreret B6). VALIDATED på data-gated belæg (ejerens beslutning, 2026-10-13): testen slår fejl på ethvert andet kort end det SHA-fastlåste.Hatch-bærebølgeudglatning (0,36, WP-07):
hatch::HatchFilterogpvt::assemble_epoch_precise_smoothed, den divergensfrie (ionosfærefrie) form i den præcise enkeltpunktssamling. MODELLED med et registreret fund: på IGS-stationen WTZR sænker den medianen af enkeltpunktsfejlen fra 1,55 m til 1,12 m og 95. percentil fra 3,47 m til 3,21 m, under den præregistrerede reduktion på 40 % (den resterende fejl er biaslignende, ikke støj).Flydende PPP på rigtig RINEX (0,36, WP-07):
ppp_real::run_ppp, et statisk flydende filter til præcis punktpositionering på rigtig tofrekvent GPS-kode og -fase med endelige IGS-produkter (antenneforskydninger og -variationer, fast jordtidevand, phase wind-up, Shapiro-forsinkelse, estimeret våd forsinkelse, detektion af cycle slips), medparse_antex_receiver. VALIDATED på den tilbageholdte IGS-station WTZR mod dens ITRF2020-koordinat under præregistrerede tærskler: efter 6 t er fejlen 1,5 mm horisontalt og 2,9 cm vertikalt, og hver epoke i de sidste to timer ligger inden for 10 cm.Interpolation af præcise SP3-ure (0,36, WP-07):
Sp3File::clock_sogclock_nodesinterpolerer de tabulerede SP3-satelliture lineært mellem de to indrammende gyldige knuder (sentinel for dårligt ur springes over), ogClockRinex::from_sp3fodrer dem tilPreciseProducts, så den præcise kæde kan køre af en SP3 alene. VALIDATED mod IGS' endelige ure på 30 s fra 2025-02-24 under præregistrerede tærskler: 32 GPS-satellitter, midtpunkts-RMS 0,121 ns (tærskel 0,15 ns), 95. percentil 0,265 ns (tærskel 0,30 ns).RAIM ved siden af tallene for urets holdover (CAP-05b): en til-valgt sektion
[integrity]på ur-typen rapporterer en separat blokintegrity_fom(øjebliksbillede af RAIM på en forudindstillet himmel fra et angivet sted: dom pr. epoke og beskyttelsesniveauer, tilgængelighed; utilgængelig, mens GNSS er nægtet, aldrig ekstrapoleret). Holdover-tallene er uændrede; uden sektionen er outputtet byte-identisk. MODELLED.Tærskler for receiver-trust kalibreret på JammerTest 2024 (CAP-13): en præregistreret kalibrering af monitorerne for fald i C/N0, AGC og jammingindikator på det offentlige JammerTest 2024-datasæt (hentet ved kørsel, aldrig medleveret;
examples/jammertest_trust_calibration.rs), kun leveret som den til-valgte[monitors] profile = "jammertest-2024-calibrated"(1,5 dB, 3,5 sigma, 29). Tilbageholdt: tærsklerne for AGC, jammingindikator og unionen består; tærsklen for falsk alarm i C/N0 slår fejl (0,023 mod 0,02), så rækken er MODELLED (xval/jammertest-trust/RESULTS.md). Standarder og outputs uden profilen er uændrede.ARAIM-fejlhypoteser for flere satellitter (CAP-05a): ADD v4.2-delmængderegelen generaliseret ud over par (
add_v42_subset_plan,add_v42_protection_levels_to_order; orden 2 er nøjagtig den eksisterende MAAST-kontrollerede sti) og en til-valgt avanceret RAIM over disse hypoteser (araim_subset_raim), som rapporterer delmængden med største adskillelse, når en fejl detekteres. A priori-fordelinger, der kræver dybere delmængder, afvises, aldrig afkortet. MODELLED.Horisontlinje i receiver trust (FUT-01): en receiver-trust-session kan angive en
[skyline]; satellitter bag den går tabt for himlen (sky-blocked,behind_skyline,open_fraction), og deres tab klassificeres somgeometry, aldrigenvironment; uden en er fallback til azimutgab og alle outputs som før. Generatoren til besætningstræning får ennatural-degradation-hændelse (en blokeret himmel, ikke interferens) og scenarietscenarios/training/fjord-natural-degradation.toml. Monte Carlo for UERE x DOP får designnotatets to maskerede horisontgeometrier, præregistreret alene: alle 26 kontroller består.Verifikation af RFC 3161-tidsstempler (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 signeringscertifikatet, signatørens timeStamping-anvendelse og dets kæde til et betroet anker på tokens genTime, offline;kshana evidence verify --tsa-ca <anchors.pem>anvender det på en pakkestimestamp.tsr(til-valg; uden det er rapporten uændret). VALIDATED, snævert: alle 27 selvgenererede tilfælde stemmer med OpenSSL 3.0.13 på dommen og genTime, under en sammenligning præregistreret, før verifikatoren blev skrevet. Tilbagekaldelse kontrolleres ikke.Verifikationsniveauer pr. tal for hver type (RM-04): hver scenarietypes resultat ender nu med en blok
figure_tiers, der navngiver dens hovedtal, den række i verifikationsmatrixen, der ejer hvert enkelt, og det niveau, der aflæses fra rækken (tal, som ingen række ejer, opføres som uden niveau). Blokken tilføjes efter kørslen og fjernes igen til det forrige dokument byte for byte (api::without_figure_tiers).lunar-station-coveragehar ingenfigure_tiers, før en ny dateret forudsigelse erstatter dens frosne;leo-ppp,solar-system,sweepogsweep-ndhar intet skalart hovedtal, oglunar-attack-surfaceskriver kompakt JSON. Kampagnemedlemmer beholder deres dokumenter uden niveau.Kvante-forudindstilling
quantum-cai-coast(CAP-08c): et medfølgende inertialscenarie, hvor et koldatom-interferometer-accelerometer, specificeret ud fra interferometerets fysik ([accel_quantum.cai]med et angivet vibrationsniveau for platformen), glider frem mod et kvartsaccelerometer af navigationskvalitet gennem et GNSS-udfald på 110 minutter. MODELLED.Greenhalls eksakte ækvivalente frihedsgrader (CAP-03):
allan::edf_greenhall, den fulde algoritme af Greenhall og Riley (2003) (differensordener 1 til 3, støjeksponenter +2 til -4, overlappende og ikke-overlappende, modificeret og umodificeret, med tabellerne for stort J), med ADEV-, MDEV- og HDEV-indpakninger. VALIDATED i en præregistreret sammenligning med allantools 2024,6: 4.876 gitterpunkter inden for 6.0e-13 relativt; allantools svigter i yderligere 32 punkter, som er noteret uden en værdi fra en uafhængig reference. Konfidensintervallerne iassurance::uncertaintyer uændrede bit for bit.Fejlled for koldatom-interferometer (RM-26/27/28): Raman-laserfasestøj (med forsinkelsesleddet fra retroreflektionen), bølgefrontens krumningsbias for en termisk sky (ren defokusering, med en detektionsradius) og opløsning af fringe-multiplicitet (klassisk understøttet og to afhøringstider), som biblioteksfunktioner i
src/inertial/cai_error_terms.rs, hver lukket form kontrolleret mod kvadratur eller Monte Carlo. MODELLED; kan endnu ikke nås fra en scenarietype (docs/QUANTUM-MODELS.md).Formater for urlog (RM-03):
src/clock_log.rslæser RINEX-urfiler, ASCII-fase- eller frekvenslogge i TimeLab-stil og TAPR TICC-tællerlogge ind i én normaliseret faserække (tau0 angivet eller fundet, huller talt, en hulpolitik). Valgfrit: en tidssynkroniseringsrække for telekommunikation kan nævne en log ([series.clock_log]), og tabellen[clock_log]i et urscenarie tilføjer en blokmeasured(ADEV, TDEV, MTIE). Uden tabellen er begge typer byte-identiske (docs/CLOCK-LOG-FORMATS.md). En præregistreret sammenligning på tre syntetiske logge opfyldte sine tærskler for fase og forbindelser; estimatorerne stemmer med allantools inden for 2.5e-14, hvor den kan beregne dem, og den beregner ikke MTIE-punktet for hele optagelsen (noteret). MODELLED.Wander-masker for frekvenssynkronisering (RM-01): typen
telecom-timingfår syv MTIE- og TDEV-masker for wander-generering ved konstant temperatur, ITU-T G.811 PRC, G.812 type I til III, G.8262 EEC-valgmulighederne 1 og 2 og G.8262.1 eEEC, med de potenslovsstykker, som tabellerne angiver, og referencescenarietscenarios/telecom-synce-eec.toml(en frit løbende OCXO mod EEC-maskerne: den svigter ved 1.000 s, hvor en sløjfe må gøre arbejdet). Hver række blev læst igen mod teksten på itu.int; G.812 (06/2004) er afløst af en forhåndsudgivet udgave 08/2026, som ikke kunne læses. MODELLED (en transskription); eksisterende masker og output er uændrede.Vejledning om filter-prior for typen
gnss-ins(0,36, WP-09, fund fra RM-21): pakkens standard-filter-prior passer til en IMU af taktisk kvalitet. Med en IMU af navigationskvalitet kan standardværdien gøre den fusionerede glidning dårligere end fri INS: 52 m mod 11 m på en flyprofil med 70 m/s. Sæt[imu_*.filter_prior]til at passe til sensorens kvalitet, som de nye pakker til søfart, jernbane og luftfart gør. Intet medfølgende scenarie parrer en IMU af navigationskvalitet med standard-prior: alle, der bruger standardværdien, har resterende accelerometerbiaser på mindst 0,015 m/s². Kun dokumentation; ingen ændringer i output.Testbænk-eksport kontrolleret med en simulators egne læsere (0,36, WP-09, CAP-16): bevægelsesfilerne fra
kshana bench-exportfor 8 medfølgende scenarier blev læst tilbage af gps-sdr-sims læsere for NMEA, bredde/længde/højde og jordfast bevægelse (MIT, commit 28ca29a6, brugt som et separat værktøj viaxval/testbench-gpssdrsim/; ingen signalfunktion kaldes). De returnerer den eksporterede bane til 1,2 mm, 0,15 mm og præcist. FUND: simulatorens jordfaste læser kan ikke tage CSV-filen i fuld bredde, fordi dens linjebuffer på 100 tegn deler hver række.docs/TEST-BENCH.mdangiver nu de kolonneafskæringer, der skal bruges, og simulatorens loft på 300 s. VALIDATED (ny registerrække); eksportens bytes er uændrede.GNSS/INS på KF-GINS-datasættet (0,36, WP-09, FUT-17):
fusion::kfginsindlæsere og kører samt målemodellen for lever-arm i den lukkede EKF-sløjfe. På KF-GINS-demodatasættet (hentet ved testtidspunktet, ikke medleveret) er Kshanas horisontale RMS i forhold til referencebanen 1,09 cm mod KF-GINS' egne 1,11 cm, og alle præregistrerede tærskler holdt. VALIDATED på data-gated evidens (ejerens beslutning, 2026-10-13): datasættet hentes med SHA-256-fastlåsninger, og fremgangsmåden til at gengive resultatet står ixval/kfgins/PREREGISTRATION.md.Koblet PNT-filter i fusionspakken (0,36, WP-09, FUT-16): typen
fusiontager en valgfri tabel[coupled], som kører ét stakket filter på pseudoafstande med en accelerometerbias-tilstand (fusion::coupled::CoupledPntBiasFilter), ogfusion::coupled::CoupledPnt3der den 3D-version med 8 tilstande. Nyt medfølgende scenariefusion-pnt-coupled: med biasede accelerometre holder den koblede tilstand kvantesuitens position til 18,7 m (95. percentil) med fuld integritet, hvor de afkoblede filtre når 430 m. Uden tabellen er bådefusionoghybriduændrede (fastlåst);hybridafviser tabellen. MODELLED.GNSS/INS-pakker til søfart, jernbane og luftfart (0,36, WP-09, RM-21): medfølgende scenarier
gnss-ins-maritime,gnss-ins-railoggnss-ins-aviationpå banebiblioteket og en valgfri tabel[tight]for typengnss-ins, der fusionerer pseudoafstande fra en SGP4-Walker-konstellation (alle satellitter ved nominel drift, de højeste få ved forringet drift). I jernbanepakken holder tæt kobling løsningen af navigationskvalitet på 5,3 m gennem en afgravning og en tunnel, mod 12,9 m ved løs kobling. Uden[tight]er pakken uændret (fastlåst). MODELLED.Tæt kobling med bærebølgefase (0,36, WP-09, RM-25 / FUT-17):
fusion::carrier_tc, en fejltilstands-EKF med et eksplicit modtagerur med to tilstande og flydende bærebølge-multiplicitet, drevet af en SGP4-Walker-konstellation med Klobuchar- og Saastamoinen-korrektioner i målesløjfen, slipdetektion med tidsdifferentieret bærebølge og geninitialisering af multiplicitet samt en kørsel kun med kode på de samme målinger til sammenligning. MODELLED: på en kørsel i form af et 8-tal er bærebølgeløsningen 2,5 cm mod 47 cm kun med kode, og NIS/NEES er konsistente over seeds.Banebibliotek for GNSS/INS (0,36, WP-09, RM-24): typen
gnss-instager en valgfri tabel[trajectory]medprofile = "straight" | "figure8" | "stop_go" | "aircraft" | "uas" | "csv". Profilerne styrer Euler-rater og acceleration langs sporet ud fra referencetilstanden og udleder den sande IMU ud fra stiv-legeme-kinematik (koordinerede sving, stigninger, Coriolis);csvimporterer en referencebane (t, lat, lon, alt, vn, ve, vd, roll, pitch, yaw) og løser den IMU, der gengiver den. Uden tabellen flyver pakken sin historiske kørsel, bit for bit (fastlåst). MODELLED.DEM-fliser med bredde/længde til den månehorisont:
[terrain] dem_tile_pathlæser en tekstfliserealdata::lola_dem(højder over middelkuglen på et gitter af bredde og længde) i stedet for den polarstereografiskedem_path, både forlunar-station-coverageogmoonlight-service-volume; rapporten gentager flisen (terrain.dem_tile, med dens SHA-256).realdata::lola_demer nu koblet ind i horisontens strålemarch. En flise, der er gensamplet fra det medleverede udsnit, giver stationen udsnittets horisont med en afvigelse på 0,22 grader. MODELLED.Terræn ved eksportstedet for servicevolumen: med en sektion
terrainbærer hver række i geometrieksporten pr. satellit formoonlight-service-volumefeltetclears_terrain(satellitten er fri af den flade maske og af eksportstedets horisont i dens azimut), rapporten bærer stedets horisont (export_site_terrain), og runtime-CSV'en får kolonnen. Uden terræn er eksporten uændret. MODELLED.Overskriftsfelter fra motoren (0,36, STUDIO-06):
kshana::api::HEADLINE_FIELDS,field_importance_json()og WebAssembly-funktionenfield_importance()angiver for tolv typer, hvilke felter i et scenarie der besvarer dets spørgsmål, de bedste først, som stier med punktum (jammers[].eirp_dbw). Studio læser dem før sin egen rangering. Kun visningsmetadata: motoren læser dem aldrig, ingen scenariefil behøver dem, intet resultat afhænger af dem.tests/field_importance.rssvigter, hvis en type ikke kan afsendes, eller en sti ikke findes i nogen af typens medfølgende scenarier (den fangede to stier, som Studios fladgjorte id'er havde stavet uden array-parenteserne).Tabel fra type til modul fra motoren (0,36, STUDIO-05):
kshana::api::KIND_MODULES,kind_modules_json()og WebAssembly-funktionenkind_modules()giver for hver scenarietype, hvis rækker i verifikationsmatrixen nævner et andet modul end typens eget, modulnavnene. Studios funktionskort brugte sin egen håndskrevne kopi;tests/kind_modules.rssvigter, hvis en type i tabellen ikke kan afsendes, eller et modul ikke står i nogen række i matrixen. Intet output er ændret.Kort IQ-kørsel i browserbuildet (0,36):
iq_signals()ogiq_run_short(fs_hz, duration_s, signal, ids, dopplers_hz, cn0_dbhz, seed)i WebAssembly-modulet bygger en syntetisk scene, opnår hver satellit og sporer de opnåede, alt i hukommelsen, begrænset til 0,25 s, 1.000.000 sampel og 8 satellitter. Scenebyggeren og opslaget af signaler efter navn er flyttet ud afiq::cli, der kun findes native (tiliq::scene::syntheticogiq::signals::by_name), så begge builds deler dem; kommandolinjens output er uændret. Den native test ogweb/smoke.mjssammenligner den samme forespørgsel med én gylden reference (tests/fixtures/iq_short_golden.json), byte for byte: siden ændringen til portabel matematik (STUDIO-15, nedenfor) giver browserbuildet og det native build de samme bits.Typede API'er til Python og TypeScript (CAP-34):
kshana.pyityper de lukkede ordforråd (ScenarioKind, hvert typenavn;ErrorKind;ProvenanceClass) og ordbøgerneKindMetaogFieldUnit;scenario_kinds()ogerror_kind()returnerer dem. WebAssembly-pakken tilføjerrun_typed(én kørsel som et typetRunOutput-objekt med det fortolkede dokument somdata) ogscenario_kinds(den fortolkedeKindMeta[]), og denskshana.d.tsbærer det samme ordforråd;error_kinder typetErrorKind | "".tests/typed_api_sync.rsholder begge lister lig motorens.Enheder for hver kolonne i
sweep-nd(FUT-28): et resultat afsweep-ndbærer nukey_unitsogmetric_units, enheden for hver gennemløbet nøgle og hver registreret metrik, læst fra den gennemløbne pakkes egen enhedstabel. En akse kan angiveunitfor en nøgle, som pakken ikke gentager; en angivet enhed, der modsiger pakkens, afvises, og en enhed, som ingen af dem angiver, ernull, aldrig gættet.points[].coords[]ogpoints[].metrics[]er beskrevet, så alle 76 typer nu er fuldt dækket af kontrollen af feltenheder (loft for ikke-dækkede typer 1 -> 0).NumPy-arrays fra
RunOutput(FUT-26): Python-typenRunOutputfårarray(path),columns(path)ogseries(), som returnerernumpy.ndarrayfor en numerisk liste, de numeriske kolonner i en liste af poster eller hver postrække i dokumentet. Hvert array er lignumpy.asarrayaf de samme værdier fradata()(dtype og bits). NumPy importeres kun, når en af dem kaldes, og er ikke et krav til runtime. Typet ikshana.pyiog kontrolleret med stubtest.Kampagneoptimering (CAP-32): typen
campaignfår en ny, valgfri sektion[optimize], som inden for angivne grænser søger i én til tre scenarienøgler efter den bedste værdi af én metrik: minimér, maksimér eller ram et mål. Den søger udtømmende på et gitter eller med en deterministisk afgrænset Nelder–Mead-simpleks. Hver evaluering er en rigtig kørsel af den nævnte type og står i resultatetstrace. Eksempel:scenarios/campaign-optimize-link-budget.toml. Tærsklerne blev præregistreret (docs/design/evidence/cap32-optimize/):- tærsklen for Rosenbrock-funktionen er opfyldt (f* = 1.7e-20);
- tærsklen for en 1D-målløsning i lukket form er opfyldt (6e-15 relativt);
- gitteret er bit-lig med en uafhængig brute force;
- simpleksen klarer sig mindst lige så godt som et gitter på 41 × 41 med 177 kørsler.
Tærsklen for 1D i runde 1 er noteret som NOT MET, fordi den præregistrerede boks udelukkede løsningen. MODELLED; registerrække "Bounded optimisation of one metric over campaign parameters". Additivt: kampagner uden sektionen er uændrede.
Kalibreringsensembler (CAP-10): tre kontroller med ét seed hver, kørt igen over 200 uafhængige seeds mod præregistrerede tærskler, i
docs/CALIBRATION-ENSEMBLES.md(genereret afgen_calibration_ensembles; værdier pr. seed idocs/data/calibration-ensembles.csv).- Kampagnens Monte Carlo-bootstrapinterval på 95 % dækker det sande gennemsnit i 192 af 200 ensembler, og dens chi-i-anden-kontrol består i 196.
- Percentiltolerancen med ét seed består kun i 183 af 200: NOT MET, som forudsagt. Det er en tærskel på omkring 2 sigma, noteret og ikke lempet.
- ADEV-kalibreringerne for hvid FM består for hvert seed, med deres værste fejl langt inden for tolerancen.
MODELLED.
Indbyggede typer gennem trait'en
Scenario(FUT-27, i gang): trait'enBuiltinKind(api::BuiltinKind, med en tier-hook pr. figur ogappend_figure_tiers) og de første typer, der er flyttet over på den (inertial,spoof,passes,link-budget,jamming). Outputtet er uændret: en manifest for hele kataloget med SHA-256 af hvert output er identisk før og efter (tests/scenario_output_manifest.rs).Kontrol af, at legepladsen ikke henter noget (RM-07):
tests/playground_no_fetch.rskontrollerer tre ting:- hvert scenarie i Studios bibliotek er i browserbundlen;
- bundlen er byte-identisk med
scenarios/; - hvert browserscenarie kører fra en tom arbejdsmappe.
Alt-PNT-kort: ægte tyngdefelt, Monte Carlo af kortfejl, SRTM i fuld opløsning (0,36, WP-10). Typen
gravity-maptager en valgfri[reference]: en tyngdeanomali syntetiseret ud fra de medfølgende EGM2008-koefficienter (eller en ICGEM-fil.gfcviagfc_path, kun i native builds). Den syntese stemmer med ICGEM Calculation Service til omkring 1e-8 mGal over 794 knudepunkter i to regioner, mod præregistrerede tærskler på 0,005 mGal RMS og 0,02 mGal maks. (VALIDATED; registerrække "Gravity-anomaly synthesis from a spherical-harmonic model"). Det nye medfølgende scenariegps-denied-gravity-nav-egm2008kører benchmarken på 60 minutter på det ægte felt af grad 70. Præregistreret udfald: den matchede fejl er 3106 m, så tærsklen på < 500 m er NOT MET, som forudsagt (grad 70 er for glat), og den tidoblede nedsættelse af driften er MET (MODELLED). En valgfri[map_error_mc]kører benchmarken igen over seedede, gaussisk korrelerede kortfejl og rapporterer fordelingen af den matchede fejl (medfølgende scenariegravity-map-error-mc). Eksplorativ og ikke præregistreret: med en kortfejl på 2 mGal, korreleret over 0,2 grader (den størrelse, som matcherens egen sigma-budgettering regner med), holder 1 af 20 realiseringer sig inden for 500 m (median 2,9 km, p95 14,7 km), mod 144 m med et perfekt kort. Den syntetiske benchmarks positionsbestemmelse under 500 m forudsætter, at kortet er nøjagtigt. Uden nogen af mulighederne er dokumentet byte-identisk med tidligere udgivelser.combined-altpnttager en valgfri[magnetic_grid](csv_path,column), som læser den magnetiske kanal fra en CSV i EMAG2v3-format. EMAG2 er ikke medleveret, fordi dets vilkår ikke er eksplicitte:tools/fetch_emag2_tile.pyhenter det med en fastlåst SHA-256 og beskærer en boks. Der hævdes intet navigationsresultat på det ægte EMAG2-gitter. Fælles kortestimering (terræn-SLAM, RM-18):altpnt::sequential::run_sequential_trn_on_mapflyver den sekventielle terrænnavigator over et lagret kort, der afviger fra referencen, enten ved at stole på det eller ved at estimere en korrektion af kortet pr. celle med et Rao-Blackwelliseret filter i stil med FastSLAM. Præregistreret mod SITAN med kendt kort på en korreleret kortfejl på 15 m over 20 seeds: en gevinst på 1,5 % i gennemsnit, bedre i 10 af 20, så begge tærskler for forbedring er NOT MET (10 % og 12 af 20), uden skade på et perfekt kort (MET). Et enkelt gennemløb uden genbesøg lader ikke kortet læres (xval/terrain-slam-rbpf/, MODELLED). Dokumenter forterrain-slamer byte-identiske. Testene med ægte SRTM kører nu i CI på to indsendte udsnit i fuld opløsning; alle præregistrerede tærskler er opfyldt, med det nærmeste knudepunkt lig GDAL 3.8.4 i 8 af 8 punkter (xval/srtm-ungate/).Interoperabilitet, WP-08 (0,36; hvert punkt præregistreret og indsendt alene før kørslen mod dets uafhængige reference, hvert en ny registerrække med VALIDATED undtagen punktet om telemetri, som udvider en eksisterende række):
- 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 læst i KVN og NDM/XML samt en OMM i fuld præcision fra et SGP4-elementsæt (OmmMessage::from_omm_file); outputtet fraOmmFile::to_omm_kvner uændret. Mod Orekit 13.1.8 begge veje: 27 af 30 Kshana-meddelelser kan fortolkes i Orekit, og Kshana læser enhver meddelelse skrevet af Orekit, værdier inden for 1e-14 relativt og epoker inden for 1e-9 s; fire fund fastlåst (Orekit kræverELEMENT_SET_NO, afviserCOMMENTi brugerdefinerede XML-parametre, vil ikke skriveBTERMudenBSTARog læser relative OCM-epoker under TDB i SI-sekunder). Den ældre OMM-skriversMETA_STARTafvises af Orekit (noteret). Række "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 mod Orekit 13.1.8, alle tærskler opfyldt; Orekits APM-skriver afviser et manøvre udenMAN_DELTA_MASS(fastlåst). Række "CCSDS Attitude Data Messages (AEM, APM)". - SPICE SPK-eksport (
src/spk_writer.rs): skriver og læser til SPK-typerne 9 og 13 samt eksport fra OEM til SPK; mod CSPICE N0067 er kernerne byte-identiske med SPICE's og evalueres bit-identisk. Række "SPICE SPK export (types 9 and 13)". - SPICE SPK-typerne 3 og 21 (
src/spk_writer.rs): segmenter af type 3 (Chebyshev) og type 21 (udvidede differenslinjer) skrevet ud fra givne poster og evalueret, som SPICE gør; mod CSPICE N0067 er kernerne byte-identiske med SPICE's, og hver evaluering stemmer bit for bit begge veje. Række "SPICE SPK types 3 and 21 (Chebyshev, extended difference lines)". - Udvidelser af Space Packet (
src/space_packet.rs): sekundær header med tidskoderne CUC/CDS, pakkefejlkontrol, segmentering og strømkontroller, mod ccsdspy 2.0.1, spacepackets-rs 0.18.0, spacepackets-py 0.32.0 og CPythoncrc_hqx, nul afvigelser. Række "CCSDS Space Packet secondary header, packet error control and segmentation". - Telemetriskema 1,3 gennem rigtige forbrugere: Prometheus-eksponeringen og OTLP/HTTP-JSON for en syntetisk strøm i skema 1.3, herunder geometriserien og etiketten
class, læst nøjagtigt af prometheus_client og OTLP-proto, accepteret af promtool 3.5.0check metricsuden lint-problemer og sendt uændret gennem OpenTelemetry Collector contrib 0.135.0 (data-gated: værktøjer hentet med fastlåst SHA-256, output indsendt).
- CCSDS Orbit Data Messages (
Banebestemmelse for Mars, kørsel 2 (0,36, WP-14, CAP-30):
mars_od::fit_dampedskalerer normalmatricen med dens diagonal og dæmper trinnet (Levenberg-Marquardt), efter at den registrerede Gauss-Newton-tilpasning svigtede på en matrix, hvis rå diagonal spænder over otte størrelsesordener. Registreret særskilt (xval/mro-od/PREREGISTRATION-RUN2.md, samme bue, tærskler og redigering). På de bedømte MRO-passager ligger banen inden for 0,36 km RMS (0,53 km maksimum) fra MRO's navigationsrekonstruktion, tærskler opfyldt. Doppleren efter tilpasningen er 48,6 mHz mod tærsklen på 30 mHz, ikke opfyldt (fund fastlåst). Et tillæg kun til bedømmelsen, R2-A1, er oplyst idocs/revisions. Rækken forbliver MODELLED.Model for rampet 2-vejs-Doppler for Mars og banebestemmelse (0,36, WP-14, del af CAP-30, trin 2):
mars_odforudsiger DSN's rampede 2-vejs-Doppler i X-bånd ud fra ODF-ramptabeller (lystid, Shapiro, troposfære, stationstid, DSN-stationer via CIO-kæden og IERS EOP) og tilpasser en Mars-orbiter (GMM-3, tredjelegemer, SRP, luftmodstand).naif_kernellæser SPK-type 1 (kontrolleret mod CSPICE), oggravity_sh::from_shadrlæser PDS SHADR-felter. Præregistreret mod MRO's navigationsrekonstruktion på rigtige MRO-passager (data-gated,scripts/fetch_mro_od.sh, månedlig CI): den forudsagte Doppler stemmer med observationerne til 12,5 mHz (tærskel 30 mHz, opfyldt); den registrerede banetilpasning svigtede på den bedømte bue og gav ingen bane (fund fastlåst). Rækken forbliver MODELLED.Læser til DSN Orbit Data File (0,36, WP-14, del af CAP-30):
odf::parse_odflæser TRK-2-18-ODF'er. På en rigtig ODF fra Mars Reconnaissance Orbiter (NASA PDS, medleveret) stemmer læseren med PDS-etikettens antal poster, gruppepositioner, stationer og tider, og alle dens datatyper er kendt. Etikettens tabel over filslutning er én række kortere end filen, en modstrid i etiketten, noteret som et fund. MODELLED. Banebestemmelse på disse data er endnu ikke udført.TWSTFT-budget og stabilitet af tidsoverførsel: typen
time-transfer-budget(0,36, WP-14, FUT-19).- Tovejsligning:
twstft_budgetløser den for T_A − T_B med stationsudstyrets forsinkelser, asymmetrien i ionosfæren mellem op- og nedlink i Ku-bånd, forskellen i transponderforsinkelse og Sagnac-leddene, og genfinder fremadmodellen til 1e-15 s. - Usikkerhedsbudget: kombineret kvadratisk, med linkens TDEV som type A-led.
- Linkstøj: tovejsrækken får et gulv af flicker-fasestøj, en dagsvarierende ikke-gensidighed og en konstant rest af gensidighed. Pakken
timetransfermed hvid jitter er uændret. - Rigtig række: stabiliteten af leverede BIPM Circular T-,
MJD,ns-CSV- eller IGS-stationsurrækker.
MODELLED. Nyt medfølgende scenarie
time-transfer-budget. PPP-tidsløsningen er særskilt VALIDATED mod IGS-stationsuret på grenen med rigtige GNSS-data.- Tovejsligning:
Opvarmning ved indtrængen, EO-radiometri og tab under opstigning (0,36, WP-14, CAP-28): tre nye typer.
entry-heating: en indtrængen som punktmasse med 3 frihedsgrader over en roterende Jord eller Mars med Sutton-Graves-opvarmning i stagnationspunktet.eo-radiometry: billeddannerens SNR, MTF ved Nyquist, relativ kantrespons og GIQE 4 NIIRS.ascent-losses: en opstigning i flere trin med tyngdekraftssving og tab fra tyngdekraft, luftmodstand, styring og modtryk, kontrolleret med den eksakte identitet ideelt dv minus tab.
Indtrængningens maksimale deceleration blev kontrolleret mod det offentliggjorte nominelle Stardust-forløb med en præregistreret tærskel: 35,44 g mod 33,4 g (+6,1 %, tærskel 10 %). Den række er VALIDATED. Opvarmning, radiometri og opstigning er MODELLED. Nyt er også:
reentry::us76_pressure, medfølgende scenarierentry-heating-stardust,eo-radiometryogascent-lossessamtdocs/ENTRY-EO-ASCENT.md.Attitudestyring med reaktionshjul: typen
aocs(0,36, WP-14, CAP-21). Et inertialt peg-slew af et stift hub med tre eller flere afbalancerede reaktionshjul under MRP-feedback, med minimumsnorm-momenter til hjulene begrænset til hver motors grænse (aocs). Den kan også lukke sløjfen på et multiplikativt EKF ud fra et simuleret gyro og en stjernekamera (aocs_mekf). Sløjfen med sand tilstand blev sammenlignet med Basilisk 2.9.1 på tre tilfælde, præregistreret før koden fandtes (tre ortogonale hjul, en firehjuls pyramide, et mættende tilfælde). Hver MRP-komponent, kropsrate, hjulhastighed og motormoment stemte ved hver sampling, værst 2.4e-14 i sigma og 2.9e-11 rad/s i hjulhastighed. Denne række er VALIDATED; MEKF er MODELLED (NEES-konsistens). Nye medfølgende scenarieraocs-slewogaocs-slew-mekfsamtdocs/AOCS.md.Planlægning af jordkontakter og DVB-S2 ACM (0,36, WP-14, CAP-22/23): to nye scenarietyper.
acm-linkangiver for én satellit over én station hver passages Es/N0 og den DVB-S2 MODCOD, der vælges undervejs (tærskler fra ETSI EN 302 307-1 tabel 13 plus en margin). Den angiver også den datamængde, ACM flytter i forhold til baseline med konstant kodning.contact-schedulegør det samme for flere satellitter over flere stationer og bygger en konfliktfri kontaktplan (antennens omstillingstid, én station pr. satellit, prioritetsvægtet levering begrænset af hver bagstand). Den rapporterer en grådig plan med marginalværdi, en først-til-mølle-baseline og det eksakte optimum for små mængder, med den grådige plans optimalitetsgab. Adgangsvinduerne kommer fra den VALIDATED forudsigelse af tilsyneladende passager. Nye medfølgende scenarieracm-linkogcontact-schedule(illustrative inputdata) ogdocs/CONTACT-SCHEDULING.md. MODELLED (to nye registerrækker).Starlink-Doppler-positionsbestemmelse mod et offentliggjort eksperiment (0,36, WP-14, del af CAP-11, MODELLED). Det er en præregistreret proxy-sammenligning af Doppler-tilstanden i
leo-pvtmed forudindstillingenstarlink-sopmod percentilerne for datasæt 3 i "Unveiling Starlink for PNT" (NAVIGATION 72(1), 2025, doi:10.33012/navi.685). Modellen brugte 3 satellitter (en maske på 47 grader valgt efter en fast regel), ingen højdestøtte og en Doppler-sigma på 30 Hz, over 200 seeds. Dens 3D-fejl i 90. percentil er 92,2 m ved 20 s og 870 m ved 8 s, mod de offentliggjorte 2 m og 10 m, så begge tærskler på en faktor to er NOT MET. Modellen er pessimistisk, ikke optimistisk som forudsagt: tre faste satellitter giver langt mindre geometrisk diversitet end eksperimentets 63 satellitter over 10 minutter med kanalskift hvert 15 s. Begge misser er kontrolleret ved assertion (tests/starlink_doppler_published_proxy.rs).Optimering af impulsive overførsler på DE440 (0,36, WP-14, CAP-20c/d):
maneuver::optimise_transfer_kernelfinder afgangs- og ankomstdatoerne for en ballistisk to-impuls-overførsel med én omdrejning, der minimerer C3 ved afgang eller V-infinity ved ankomst inden for type I eller type II. Den søger i et gitter på 2 dage og forfiner derefter med 2D Nelder-Mead, på heliocentriske tilstande fra DE440-kernen; den bygger påporkchop_kernel. Sammenligningen blev præregistreret (bf0439e8) mod en uafhængig optimering med SPICE + pykep 3.0.1 + SciPy 1.18.1 på mulighederne for Jord til Mars i 2026: alle fire optimeringer stemmer til 8.7e-13 relativt, med datoer inden for 1e-5 dag (VALIDATED, ny registerrække). Som sekundær offentliggjort reference matches NASA/TM-2010-216764 (håndbogen for Jord til Mars 2026-2045) for minimum C3 af type II (9,182 mod 9,144) og minimum V-infinity ved ankomst af type II (2,564 mod 2,565). Dens minimum C3 af type I matches ikke: 10,535 mod 11,11 (-5.18 %), hvor bibliotekets uafhængige reference er enig med Kshana. Den miss er noteret og kontrolleret ved assertion.Studie af en månereferencestation (0,36, foranlediget af offentliggjort materiale om en planlagt referencestation ved månens sydpol; kilder i
docs/LUNAR-REFERENCE-STATION.md): typenlunar-station-coverage, et Monte Carlo-gennemløb af den lunare differentielle PNT-model over et sydpolart brugergitter og et døgn af epoker, som giver pr. punkt og over regionen percentilerne for korrigeret og ukorrigeret fejl, tilgængelighed med årsager, dækning mod en angivet tærskel, beskyttelsesniveauer, dækningsradius pr. azimut og korrektionslinkens budget. Den reduceres præcist tillunar-differential-pntved ét punkt, én epoke og ét forsøg; dens aritmetik blev regnet om af numpy med en præregistreret tærskel (positioner og percentiler opfyldt; stationskorrektionerne missede deres på grund af afrunding i dobbelt præcision, noteret). MODELLED; registerrække "Lunar reference-station coverage and accuracy map". Ikke tilknyttet eller støttet af noget agentur; ingen udtalelse om ydeevnen af noget rigtigt system.Præregistreret forudsigelse: dækning af en månereferencestation (ikke en validering; MODELLED).
docs/predictions/lunar-reference-station.mdfryser ved commit c05dac1d resultaterne fralunar-station-coverageunder de offentligt angivne antagelser, med SHA-256-hashes af inputdata og resultater og en bedømmelsesprotokol fastlagt nu (faktor 2 for nøjagtigheder og beskyttelsesniveauer, 10 procentpoint for tilgængelighed og dækning; en ændret antagelse får en ny dateret forudsigelse, aldrig en redigering; en miss offentliggøres lige så tydeligt som et hit). Hvert tal domineres af det ikke offentliggjorte elementsæt for konstellationen på fire satellitter, som er ILLUSTRATIVE, og siger det.tests/prediction_frozen.rsvogter den;docs/VALIDATION.mdfår en sektion "Pre-registered predictions". Ingen registerrække.Udvidelser af månereferencestationen (0,36; stationsstudiets begrænsninger 2 og 3 samt kildernes løsningsstil), hver valgfri på
lunar-station-coverageog fraværende som standard, så ethvert eksisterende dokument, også den frosne forudsigelse, er uændret:[receiver](multipatha + b exp(-el / el0)hos brugeren og stationen, stationens eventuelt Gauss-Markov over epoker, DLL-kodestøj ud fra C/N0, biaser mellem kanaler; værdier ILLUSTRATIVE på Månen);orbit_err_growth_m_per_s(lineær vækst af den udsendte banefejl over korrektionens latenstid, ILLUSTRATIVE);[solution](højdebegrænsning, et minimum på tre satellitter med den, et vindue for statisk bruger over epoker). To tillæg til sammenligningen med offentliggjorte påstande, hver præregistreret alene før sin kørsel, står ved siden af den uredigerede registrerede kørsel: K5 med vækst svigter ved enhver rate; med kildernes løsningsstil svigter K1 til K5, og K6 består (1 af 6), idet R300's korrigerede 3D-fejl i p95 falder fra 280,6 m til 2,11 m. MODELLED; tre registerrækker.Horisontmasker for månens terræn (0,36; første begrænsning i studiet af månereferencestationen): en valgfri sektion
[terrain]pålunar-station-coverage(stationen og hvert brugerpunkt) ogmoonlight-service-volume(hvert gitterpunkt) giver hvert sted en azimutafhængig horisont i skyline-tabelformatet fra 0,36, ud fra en angiven profil mærket med sin kilde (station_horizon,user_horizon) og/eller en strålemarch over en polar DEM (dem_path) langs storcirkler på månekuglen med eksakt krumning. Den medleverer et udsnit på 0,98 MB af den offentligt tilgængelige LRO LOLA-sydpol-DEMLDEM_75S_240M, gensamplet som middelværdi af blokke på 5 x 5 til 1200 m (data/lunar-dem/, med dens NOTICE, SHA-256 ogscripts/make_lola_south_polar_crop.py), og scenarietscenarios/lunar-station-coverage-terrain.toml, som kun findes i repositoriet. Kontrolleret mod horisonter i lukket form (bar kugle, krater i et plateau, rasteriseret kegle); MODELLED, registerrække "Lunar terrain horizon masks from a stated profile or a polar DEM". Uden sektionen er ethvert dokument, også enhedsblokken, byte-identisk.Geometribevidst tillid (designnote for 0,36 om geometri, sektion 4). Hver epoke i
receiver-trust, statisk eller for fartøj, batch eller live, bærer sin satellitgeometri:good,degraded(årsagerfew-satellites,high-pdop,high-hdopog den informativesky-blocked) ellerunknown, hvor loggen ikke angiver nogen satellitgeometri, med HDOP, PDOP, VDOP og de anvendte satellitter. Den udledes af de elevationer og azimutter, som modtageren rapporterer (NMEA GSV, UBX NAV-SAT), gennem den eksisterende kerneorbit::dop, eller tages fra NMEA GSA. Hver epoke bærer også en etiket,good,fairellerpoor, altid rapporteret og aldrig scoret, og en note med HDOP, PDOP, VDOP, antal satellitter og signaltab i ord. Et fartøjs score får en monitorgeometry, der ikke trækker noget fra, medmindre geometrien er dårlig (HDOP over 4, PDOP over 6 eller færre end 5 anvendte satellitter), og derefter rampes op til et loft på 15 point; geometri alene når højst det forringede bånd, aldrig det utroværdige (ingen alarm). Hvert fradrag får en klasse,geometry,environmentellerinconsistency, så en dårlig himmel ikke læses som et angreb.loss-of-lockergeometry, når de satellitter, der gik tabt, alle var under 15 grader ved deres seneste rapport; et fradrag for dårlig geometri erinconsistency, når den HDOP, modtageren angiver, afviger fra dens angivne himmel med mere end max(1,0, 25 % af den udledte HDOP), så en forfalsket dårlig himmel ikke kan købe etiketten. En ny tabel[geometry]angiver hver tærskel med dens proveniens (HDOP 4, PDOP 6, mindst 5 anvendte, sigma_UERE 1,5 m, en HDOP-tolerance på max(1,0, 25 % af den udledte HDOP), hvor de 25 % er et repræsentativt valg for modtagere med ure pr. konstellation eller delmængdeløsninger, 15 grader; tallene fra IEC 61108-1 og GPS SPS som citeret, der skal kontrolleres mod standardernes tekst). Totalt signaltab mærkes ikke som himmel: når satellitter i sigte ikke spores, og DOP for de satellitter, der er i sigte, er god (og de usporede ikke er samlet i den ene halvdel af horisonten), bærer epokensignal_loss, og geometrifradraget erenvironment. En angivet HDOP eller PDOP på 99 eller derover, GGA-kvalitet 0 og GSA-tilstand 1 læses som ingen positionsbestemmelse, ikke som DOP. Loftet (cap_points15), rampens slutning (full_ratio1,5) og gulvet (floor, som standard scorensdegraded_min) står i[geometry], ligesom etikettens gode niveauer (HDOP 2, PDOP 3, 6 satellitter, repræsentative); det gældende loft ermin(cap_points, 100 - floor), så en tabel[score], der hæverdegraded_min(også en på 0,35), sænker loftet i stedet for at blive afvist, og et gulv underdegraded_minafvises. MODELLED; Vejledende software, ikke typegodkendt navigationsudstyr (IEC 61108, IEC 61162): operatøren er fortsat ansvarlig for fartøjets navigation.Geometrien når alle flader: resultat-JSON (
epochs[].geometry,classpå hvert fradrag,geometry_model,geometry_summary), de levende JSON-linjer (skema 1,3), Python og WebAssemblyreceiver_trust,assess_vessel_logogreceiver_trust_replay, MCP-værktøjerneassess_*, bevispakker (epochs.json,config.json, et geometrispor på oversigtssiden) ogtrust-telemetry(Prometheuskshana_trust_geometry*og en etiketclasspåkshana_trust_reason_active, OTLPkshana.geometry.*, CEF-brugerfeltercs6(geometristatus og klasser),cfp3(HDOP) ogcfp4(PDOP), kontrolleret mod begge CEF-referenceparsere, og LEEFgeoStatus,geoHdop,geoClass). Geometrietiketten eksporteres også, tilføjet efter alle tidligere rækker og felter og kun for inputdata, der bærer 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(anvendte satellitter); VDOP er ikke i CEF (flydende-komma-brugerfelterne er optaget). Begge CEF-referenceparsere læser etiketttilfældene tilbage, som de blev skrevet (ændring 5: 176 linjer, 172 fortolket af pycef, 176 af Logstash). En angivet HDOP, som den angivne himmel ikke forklarer, markeres på hver epoke og tælles (geometry_summary.hdop_mismatch, en linje på bevisets oversigtsside), og scores kun, når geometrien er dårlig. Signaltab eksporteres for sig, da geometristatus forbliverdegraded, mens 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)⁻¹bagorbit::dop, udskilt fra den med den samme aritmetik.Registerrække "Position error from geometry: RMS error = sigma_UERE x DOP" (MODELLED, intern konsistens): et seedet Monte Carlo af motorens mindste-kvadraters positionsbestemmelse på de 8 DOP-geometrier, der er matchet med gnss_lib_py, mod kovariansfaktoren i den validerede DOP-kerne, med tolerancer præregistreret før den første kørsel og to negative kontroller, der svigter som krævet; ved siden af en tidligere kontrol på fire håndvalgte himle med chi-i-anden-konfidensintervaller, rapporteret som kørt før præregistreringen.
Azimutafhængige skyline-masker (
src/skyline.rs,docs/SKYLINE.md, punkt 1 i designnoten): et elevationsafskær, der afhænger af azimut, det punktvise maksimum af tabeller (hver interpoleret for sig, omviklet ved 360°), en gadekløft i lukket form (med valgfri åbne ender), skarpkantede sektorer og en terrænprofil med Jordens krumning; det effektive afskær ermax(mask_deg, skyline). Fire REPRESENTATIVE forudindstillinger med angivet proveniens (city-street,harbour-approach,fjord,container-terminal), som kan tilsidesættes felt for felt. En valgfri sektion[skyline]ignss-sim,jamming,leo-pvt(hver tilstand, også det polare gennemløb),leo-passog træningsfilernenmea-scenario, og iorbitogintegritygennem en ny bruger på et jordsted,user_site = { lat_deg, lon_deg, height_m }(geodætiske sigtevinkler på den roterende Jord, med den geodætiske opretning for den horisontale og vertikale opdeling i ARAIM; hver sampling er ét absolut tidspunkt,epoch + t, som elementsæt, udsendte efemerider og SP3-filer fremføres til fra deres egne epoker, dateret fra den nyeste satellitepoke, når ingenepocher angivet; en kredsendeuserafviser en skyline). Resultater fårskyline { source, open_fraction, provenance }ogmasked_by_skylinepr. sampling. Uden sektionen er ethvert scenarie byte-identisk med 0.35.0, kontrolleret mod digests fra udgivelsens commit. Seks medfølgende eksempler:orbit-urban-canyon-skyline,integrity-harbour-approach,gnss-sim-container-terminal-skyline,jamming-harbour-approach-skyline,leo-pvt-fjord-skylineog kampagnenleo-vertical-autonomous-vehicle-skyline(kløften for det autonome køretøj som et fladt afskær og som en gade; den eksisterende kampagne er uændret). MODELLED.Funktioner for himmelgeometri (
src/geometry.rs, punkt 2 i designnoten):sky_geometry(synlige og maskerede satellitter fra et sted, et tidspunkt og konstellationsforudindstillinger, two-line-elementsæt (tle, højst 4 MiB, propageret af motorens SGP4 til et UTC-epoch) eller givne satellitter;sky_sourceogsky_statementangiver, om himlen er repræsentativ eller den himmel, elementsættene giver på den epoke, ikke en måling;tle_skippedopregner hver ubrugt linje med dens årsag; grænser for input på 2000 satellitter over horisonten, kontrolleret før en systemtabel bygges, og 16 modtagerure; de fem DOP'er; ENU-kofaktoren og -kovariansen med ét ur pr. system eller ét fælles; den horisontale fejlellipse ved én sigma og ved en angiven konfidens),sky_monte_carlo(seedede mindste-kvadraters fejl, højst 5000),skyline_presets,skyline_profileogskyplot_svg.orbit::dop_coveksponerer kovariansen bagorbit::dop, som nu er dens reduktion (de validerede skalarer er uændrede). Flader:kshana skyogkshana skyline, Python- og WASM-funktioner med de samme navne og MCP-værktøjetsky_geometry(40 værktøjer) samt notebookennotebooks/geometry.ipynb(med dens spejl.md; kørt aftests/python/test_notebooks.py). Hvert resultat bærer etiketten MODELLED, erklæringen om fejlmodellen og den vejledende erklæring.Register: fem rækker om skyline og himmelgeometri. VALIDATED, hver i en sammenligning præregistreret før dens uafhængige reference blev kørt: Azimuth-dependent skyline mask: visible set, azimuth and elevation, and DOP under the mask mod Orekit 12,2 (
TopocentricFrame,ElevationMask) og gnss_lib_py 1.0.4 (get_dop), værste forskelle i sigtevinkel og maske 1.1e-12° mod 1e-9°, identiske synlige mængder, DOP 3.3e-13 relativt (xval/orekit-skyline/); Horizontal error ellipse and per-system cofactor from the geometry covariance mod numpylinalg.invoglinalg.eigh(standard P2), 270 tilfælde, akser 5.1e-13 relativt (xval/numpy-ellipse/). MODELLED: reduktionerne for kløft, sektor og terræn; forudindstillingerne; sammensætningen af himmelgeometri (forudindstillet himmel, Monte Carlo-sky).Med rækkerne om geometritillid, skyline og månereferencestation har registret 274 rækker: 134 validerede, 136 modellerede, 4 partner.
Månereferencestation: stationens tidslaboratorium (MODELLED). En valgfri blok
[time_lab]pålunar-time-budget(src/lunar_time_lab.rs). Den modellerer et stationsur (som standard klassen miniRAFS, enhver navngiven klasse eller et enhedskort tilpasset angivne stabilitetspunkter) styret til LTC, derefter frit løbende eller styret igen hvert N. sekund. Den udsender kurven for tidsfejl x(t), tiden til 1, 10 og 100 ns (bisektion ved siden af den lukkede form) og det dominerende led pr. horisont, alt med enheder. Resten efter styringen er ILLUSTRATIVE. LTC-raten er ikke udledt igen og beholder sin egen VALIDATED række. Nanosekundmålet i det offentlige ICG WG-B-materiale om lunar PNT (juni 2024) citeres som en kildeudtalelse, ikke en påstand. Rækkefølgen optisk < PHM < RAFS < miniRAFS gælder fra 1 s til 7e5 s, og testen fastlåser krydsningen mellem PHM- og RAFS-kurverne nær 7.5e5 s. Den krydsning er en egenskab ved urmodeller med én støjtype (ren flicker-FM mod ren hvid FM), ikke et fysisk resultat. Uden blokken er rapporten, dens tabel og dens oversigt uændrede. Eksempel:scenarios/lunar-station-time-lab.toml. Tilføjer én registerrække, mærket MODELLED.Månereferencestation: stationsgeodæsi (MODELLED). Valgfrie inputdata
extra_reflectorsogextra_beaconspålunar-llr-datumtilføjer en blokstation_geodesy. Datuminformationen i fem arrays fra det arkiverede udsnit af laserafstandsmåling kombineres med det, som en tilføjet retroreflektor og et tilføjet VLBI-beacon på angivne steder ville bidrage med. Reflektoren afstandsmåles på de arkiverede epoker, den kan se, med deres arkiverede vægte. Beaconet bruger netværket og skemaet fralunar-frame-campaign, med stationerne fastholdt. Blokken giver hver Helmert-1-sigma før og efter og deres forhold. Det er Cramér-Rao-grænser for et reduceret parametersæt, på et ILLUSTRATIVE skema og sted. Manglende eller tomme inputdata lader rapporten være byte-identisk. Eksempler:scenarios/lunar-station-geodesy-baseline.tomlog-with-station.toml. Tilføjer én registerrække, mærket MODELLED.Månereferencestation: sammenligning med offentliggjorte påstande (MODELLED). Hver numerisk påstand i fem offentlige kilder er opregnet med sin nøjagtige ordlyd, side og angivne antagelser og klassificeret som sammenlignelig, delvis sammenlignelig eller ikke sammenlignelig (
tests/fixtures/lunar_station_published/CLAIMS.md; kilder med URL, hentedato, SHA-256 og licens itests/fixtures/lunar_station/SOURCES.md). De delvis sammenlignelige påstande blev bedømt med seks ensidede tærskler, præregistreret før kørslen (PREREGISTRATION.md, revision 2, 05bf9a19): 1 af 6 påstande inden for den præregistrerede tærskel (præregistreret 05bf9a19). Dækningen er 0,00 mod >= 0,95 på begge sydpolare cirkler, og den korrigerede p95 er 280,6 m mod <= 1,5 m. Årsagen er satellitternes banelementer, som ingen kilde offentliggør: på de ILLUSTRATIVE elementer i træet er fire satellitter i fælles sigte i 8 % af epokerne, ved næsten singulær geometri. Kørslen gengiver ikke påstandene på de elementer og er ikke belæg for, at påstandene er forkerte. Fastlåst itests/lunar_station_published_oracle.rs. Én registerrække, mærket MODELLED med fundet.Månereferencestation: dataparathed for urfiler.
realdata::clk::rinex_clock_seriesangiver nu tidssystemet for sine epoker. Det er værdienTIME SYSTEM ID, eller, når den ikke er angivet, standarden for headerens satellitsystem. Resultatet angiver også, om systemet var angivet. Funktionen afviser et ukendt tidssystem (for eksempel en lunar tidsskala), en fil med blandede systemer uden angivelse og filer, der er uenige, i stedet for at læse dem som GPS-tid. Den leveres med en syntetisk fixture for stationsur. Intet format for korrektionsfiler er defineret, fordi der ikke findes noget offentligt.
Ændret#
Moduldokumentationen for
fusion::ukf,fusion::tightly_coupledogfusion::gnss_ins_ekfkalder ikke længere navigatoren med UKF med 17 tilstande, den fulde INS-tætkobling og den eksplicitte urtilstand for fremtidigt arbejde; de peger påhybrid_ukf,tightly_coupled17ogcarrier_tc.RINEX 4 afvises ikke længere (0,36, WP-07): en RINEX 4-navigationsfil blev før afvist med vilje; den læses nu (se Tilføjet). For observationsfiler af version 4 og senere matches headeretiketter kun i kolonne 61-80, så de nye fritekstposter ikke kan passere for etiketter.
ionex::parse_ionexlæser rigtige IONEX-filer (0,36, WP-07): en fuld post med 16 værdier fylder kolonne 61-80, som læseren tog for en etiket, så den returneredeNonefor hver rigtig IONEX-fil. Den læser nu en post, hvis etiketfelt er numerisk, som værdier. Intet leveret output brugte den.Modtagne effekter for Galileo E1 og E5a efter OS SIS ICD Issue 2,1 (revision, 2026-10-14). Spektrumbåndene
galileo-e1oggalileo-e5aog de GNSS-ofre med LEO-signaler, der henter deres effekt fra dem, bruger nu de mindste modtagne effekter i tabel 12 i Galileo OS SIS ICD Issue 2,1: −157,25 dBW (var −157,0) og −155,25 dBW (var −155,0).- Ni scenarieresultater flytter sig: spektrumeksemplerne, spektrumkampagnen, tre LEO-resiliensvertikaler og tre LEO-signaldesign. Effektiv C/N0 flytter sig −0,25 dB og J/S +0,25 dB på disse bånd.
- Hver flyttet værdi (1766, gammel → ny) er opregnet i
docs/revisions/CAP12-galileo-icd21-power-changes.mdog dens CSV, med de dokumenttabeller, der flyttede sig. Ingen registerrække ændrer status. - Anden del, samme dag: LEO-signalofrene
galileo-e5b(−155,0 → −155,25 dBW, tabel 12 E5b) oggalileo-e5-altboc(−152,0 → −152,24 dBW). ICD'en har ingen række for fuldt E5-bånd, så AltBOC-værdien er effektsummen af totalerne for E5a og E5b i tabel 12, bygget, som den gamle værdi blev. Tre resultater for LEO-signaldesign flytter sig (64 værdier: disse modtagne effekter og forringelsen af C/N0 fra LEO til GNSS på de to ofre), opregnet i samme revision (§5) og CSV. Intet andet flytter sig.
Rettelse af S2-atmosfæretiden (
tides::atmospheric_tide). Rays (2001) harmoniske for S2-lufttryk er koefficienter for ikke-normaliseretP_nmmed cosinus-faseforsinkelser; de blev brugt som fuldt normaliserede med forsinkelsen som IERS' sinus-forspring. De indgår nu divideret medN_nmmedε = 90° − ψ; den nyetides::s2_air_wavesgengiver model A2 i GFZ STR06/01 tabel 5 for alle 21 bølger (værst 0,0005 cm, 0,05°; VALIDATED). Kun output med tidevand slået til flytter sig: Galileo CI-tilpasningen 0,132 → 0,133 m, Swarm-A-komponenter med 1–2 mm (præregistreret ixval/s2-air-tide-fix/).Kun dokumentation:
propagator::solve_kepler_checked,orbit::solve_keplerogephem::solve_keplerer dokumenteret som ældre løsere, numerisk uændrede, med henvisning tilkepler::solve_kepler_markley.Status for D9 runde 3 (
utck_bound). BIPM Circular T 465 udkom 2026-10-12. Den præregistrerede prospektive bedømmelse er stadig ikke kørt: nummer 465 rummer omkring 285 testværdier, og stopreglen kræver 1000, altså omkring numrene 465–468. Kørslen kræver også de arkiverede filer pr. laboratorium fra 2026-09-30, fordi BIPM siden har omskrevet 87 af 113. Registerrækken og testens header siger det; testen, dens tærskler og dens opdeling er uændrede.Gennemgang af dokumentationens sandhed (0,36). Køreplan, funktionsrækker, statuslinjer i designdokumenter og modulkommentarer bragt på linje med koden; ingen ændringer i output. Punkter, der allerede er bygget, men stadig stod som åbne, er nu markeret som færdige: kontrollerne af ITU-T-masker, scenariet for holdover på 24 t og indlæsning af urlog (tidssynkronisering for telekommunikation), quickstarts for det første minut, Lense–Thirring og krydskontrollen af Orekit-propagatoren, GCRS-kæden med ITRF-præcision, gyldne hashes og hashes på tværs af platforme, proveniens, ARAIM med flere fejl (ADD v4.2), FDE med én satellit, CRPA-biblioteket, grænsen for CAI-fringe-multiplicitet, dimensionering af streets-of-coverage og 3D-banevisningen, stiv-legeme-attitudedynamik, OMM-skriveren og læseren af NAIF-kerner, DE440-libration for Månen, sætningen om kørslens betydning på legepladsen,
PositioningFom, navigatoren med tæt kobling og 17 tilstande og typen for tyngdekort. Rækkerne angiver også præcist, hvad der stadig er åbent (for eksempel JD i to dele iorbit::Propagator, læserensrc/ionex.rsmod et rigtigt produkt og udelukkelse af flere satellitter iraim). Den manglendedocs/design/evidence/cn0-m2m4/RESULTS.mder skrevet ud fra en ny kørsel af dens tests (M1–M4 består), og udkastet til IQ-validering rettet mod partnere har aktuelle antal fra registret.Hukommelseskoderne for Galileo E1 medleveres ikke længere.
data/galileo-os-sis-icd/C7_E1B.txtogC8_E1C.txt(ICD Annex C.7/C.8) er fjernet fra repositoriet og pakkerne. ICD'ens vilkår (citeret iLICENSING.md) lader en bruger gemme koderne med kilden angivet og bruge dem i et produkt, men tillader kun videredistribution til ikke-kommercielle formål, og Kshana tilbydes også under en kommerciel licens.galileo::e1b_table/e1c_tablereturnerer nu etResultog læser brugerens egen kopi fraKSHANA_GALILEO_E1B/KSHANA_GALILEO_E1Celler, i et kildecheckout, fradata/galileo-os-sis-icd/, hvor det nyescripts/fetch_galileo_e1_codes.shudtrækker dem fra ICD'ens PDF (hashkontrolleret).galileo::E1B_TABLE_TEXT/E1C_TABLE_TEXTer fjernet. Uden tabellerne returnerer Galileo E1-signalerne (galileo-e1b,galileo-e1c) en fejl, der siger, hvordan de skal leveres, og E1-testene springes over med en besked. Med tabellerne på plads er hvert E1-output uændret. Intet scenarie, ingen gylden reference og intet spektrumoutput bruger kodetabellerne. Testfixtures for E5a Annex C.3/C.4 (LFSR-referencen itests/iq_signals.rs) håndteres på samme måde: hentet af det samme script, git-ignoreret, og testen springes over uden dem.Portabel matematik overalt (0,36, STUDIO-15): hver transcendent
f64i biblioteket og samplernerand_distrfor normal-, gamma- og eksponentialfordeling beregnes nu gennem det rene Rust-biblioteklibm(portable_math::PortableFloat,portable_distr), så et native build og WebAssembly-buildet returnerer byte-identisk resultat-JSON for alle 141 medfølgende scenarier og for den korte IQ-kørsel. Prisen er, at de sidste bits i resultater beregnet med værtens matematikbibliotek flyttede sig: 98 af de 141 medfølgende scenarier ændrede sig, 43 gjorde ikke; 5 ændrede sig med mere end 1e-3 i deres største felt og resten med mindre. Hver flyttet værdi er opregnet gammel -> ny idocs/revisions/STUDIO15-portable-math-rebaseline.md(med en CSV over alle 136.127 flyttede tal); ingen tærskel eller tolerance er ændret. Offentliggjorte tal, der ændrede sig:europa-surface-pnttilgængelighed med Jordens afstand 0,719 -> 0,713 og RMS-fejl 86,147 -> 86,499 m (en epoke på tilgængelighedens kant afgøres nu på samme måde overalt; den gav 0,725 / 85,800 m på macOS arm64);lunar-joint-od-clockstationsfejl 3,541350 -> 3,536885 m med VLBI og 2183,558 -> 2184,021 m uden;paper/crossover/inertial.json, otte værdier afvibration_psdmed 3 enheder på sidste decimal (erratum i den tekniske rapport); det udgivne dokumentcislunar-observabilityi størrelser ved afrundingsgulvet (otte værdier ud over seks betydende cifre, op til 6.8e-5 relativt; ingen rang eller tærskel flyttede sig). De fastlåste hashes for vagterne for byte-identitet (skyline_scenarios,geometry_corpus_identity,geometry_trust_no_change) er rebaseret til en navngiven baseline "0,36 portable", med værdierne fra 0.35.0 bevaret som historisk optegnelse; den frosne forudsigelse for månereferencestationen er urørt, og dens portable genkørsel er gemt ved siden af (docs/predictions/*.portable-0.36.json).tests/lunar_joint_od_numpy_oracle.rs(den validerede række for lunar fælles OD): fixtures eksporteret igen og numpy-sammenligningen kørt igen med numpy 2.4.6, den registrerede version, med script og tærskel uændrede; alle seks netværk består (docs/revisions/STUDIO15-lunar-joint-od-oracle-rerecord.md). Arbejdet i batch 2-3, der blev flettet efter STUDIO-15, er også på portabel matematik (457 kaldesteder i 62 filer); hvad det flyttede, står idocs/revisions/STUDIO15-batch4-rebaseline.md: 12 medfølgende scenarier (største relative ændring 5.2e-8, intet trykt tal flytter sig), 28 skyline-vagtrækker genautoriseret, M2M4-digesten foriq_campaign, de ældre sandhedshashes forgnss-ins, datumsigmaen for det uobserverede beacon (632,3769 -> 632,3772 m) og to registrerede fund (lukninger af CR3BP DRO; CRPA A3, 194 af 456 links). Greenhalls eksakte edf bevarer sin validerede tærskel med en double-double-logaritme i sin kerne (docs/revisions/STUDIO15-greenhall-edf-portable.md), og gps-sdr-sim-testbænkens uafhængige reference blev kørt igen på de flyttede NMEA-eksporter, og alle tærskler holdt (docs/revisions/STUDIO15-testbench-gpssdrsim-rerun.md).README: rækken for månesuiten angiver evidensniveauet for hver del (der stod, at alle var MODELLED).
realdata::clk::rinex_clock_seriesreturnererRinexClockSeries(række, gridding-log, tidssystem, om det var angivet, posttype) i stedet for en tuple(PhaseSeries, GriddingLog). Den falder nu tilbage fra satellitposter (AS) til modtager-/stationsposter (AR) med det ønskede navn.Ingen score ændres, medmindre geometrien er dårlig; etiketten rapporteres altid. Med god eller rimelig geometri (også en åben himmel kun med GPS og 8 satellitter) eller ukendt geometri (monitoren kører ikke) er hver score som i 0,35:
tests/geometry_trust_no_change.rsholder begge eksempelsessioners output ogtests/geometry_corpus_identity.rshvert indsendt NMEA-korpus for fartøjer (også som åben himmel kun med GPS) og scenarierne til besætningstræning til bytes fra 0.35.0, når de tilføjede nøgler er fjernet; i de to træningsscenarier, hvor jamming gør geometrien dårlig, afviger de dårlige epoker alene ved geometrifradraget. En log med dårlig geometri mister op til 15 point, som den ikke mistede i 0,35. Ellers er de tilsigtede ændringer alle tilføjelser: nøglerne ovenfor i resultat-JSON og bevispakker (score_model.weightser uændret); skemaet for levende JSON-linjer går fra 1,2 til 1,3 (geometrytilføjet,classi hvert fradrag); uddragets oversigt fårgeometry; telemetri får geometrirækker, felter og etikettenclasskun for inputdata, der bærer dem, så en strøm eller et resultat fra 0,35 gengives byte for byte som før.geometryer det 17. monitornavn; det står sidst imonitors_run, når det traf en afgørelse (et fartøj, hvis log giver geometrien; en liste fra 0,35 beholder sin rækkefølge, og oversigtens antal monitorer stiger med én) og har ingen post i[score.weights](at sætte én afvises: dens fradrag fastsættes i[geometry]).tests/fixtures/dop/NOTICEkaldte licensen for gnss_lib_py Apache-2.0; udgivelsen 1.0.4 er MIT.NMEA-læseren læser nu GSA (en kort GSA ignoreres, tælles ikke som sprunget over) og beholder GSV-elevationer og -azimutter, også for satellitter opført uden signal; UBX-læseren beholder elevation og azimut fra NAV-SAT. C/N0 læses nøjagtigt som før.
Resultatændring: bredbåndede og fejende jammere bruger nu Q = 2. Anti-jam-ligningen bruger lærebogens spread-spectrum-justering Q for disse jammere, hvor den brugte 1. Q = 2 er hvid støj over hovedloben med signaleffekten i båndet normaliseret; det er fastlåst i testene til den lukkede form fra
navsignal.- Uændret: CW- og smalbåndsjammere (Q = 1), en ikke genkendt jammertype (Q = 1, den mest skadelige værdi) og
q_override. - Virkning: hvor en bredbåndet eller fejende jammer virker, stiger effektiv C/N0 med op til 3,0103 dB, udledte J/S-tærskler stiger med 3,0103 dB, og radierne for afvisning i frit rum skrumper med 0,7071.
- Ændrede medfølgende scenarier: 12 af 144 ændrer sig, alle som præregistreret (
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: tabte satellitter 26 → 0, median for afstand ved tab af lås 27,4 → 19,4 km;tracking-loop: afvisningsradius for sløjfedynamik 75,2 → 53,2 km;- og de kampagner og krydskontroller af spektrum, der indeholder disse.
- Berørte forbrugere: typerne
jamming,lunar-jamming,tracking-loopogimpairment-eval, spektrumtypernesjamming_kind_cross_check, IQ-kampagnens MODELLED referencekurve og standard-Q i labfit samt eksport af interop-scener.
- Uændret: CW- og smalbåndsjammere (Q = 1), en ikke genkendt jammertype (Q = 1, den mest skadelige værdi) og
JetBrains-plugin: ingen forældet platforms-API eller API, der er planlagt til fjernelse. De fem valgdialoger bruger en lille
DialogWrappermed en rullemenu i stedet for den forældedeMessages.showChooseDialog; filvælgere til én fil bruger konstruktørenFileChooserDescriptori stedet for den forældedeFileChooserDescriptorFactory.createSingleFileDescriptor(); animationen åbnes medBrowserUtil.browse(Path)i stedet forbrowse(File), som platformen 2026,3 planlægger at fjerne. Since-build forbliver 243. IntelliJ Plugin Verifier rapporterer Compatible uden brug af noget forældet eller til fjernelse planlagt mod 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 som standard 2024,3 og enhver liste angivet iKSHANA_VERIFY_IDES.gnss_sim::run_gnss_simogjamming::run_jammingreturnererResult: en ugyldig sektion[skyline]er en fejl, når den kaldes direkte, som den allerede var gennemapi::run_toml, i stedet for en tavs tilbagevenden til den flade maske. Brydende for Rust-kaldere af disse to funktioner.
Rettet#
Kampagnens bedømmelse: en rigtig falsk lås i trackeren blev aldrig talt (
iq::campaign). Trackerens kontrol af falsk lås flytter en kanal fra LOCKED til LOST, idet den udløses. Bedømmelsen markerede i stedet kanalens næste opdatering, som da var uden lås og derfor aldrig blev talt. En hændelsefalse-lockrapporteret fra LOCKED er nu én episode på sit tidspunkt, i kørslen og i hver angiven hændelse, der indeholder den. En, der findes under pull-in, eller gentaget af en kanal, der allerede er LOST, er ikke en ny episode. En ny test driver en rigtig falsk lås: en legitim GPS L1 C/A-bærebølge, der springer 1/(2T), mens den er låst (tests/iq_campaign_false_lock.rs).- I referencekampagnen i
tests/iq_campaign.rsændrer kun PRN 11 af ramp/agc-3bit sig (episoder med falsk lås 0 → 1, 426 og 437 pr. låst time). - Dens cellers DIGEST'er er fastlåst igen.
- Den præregistrerede fastlåsning af bedømte resultater forbliver aktiv og gengiver stadig nøjagtigt: i dens hash er kun de seks felter, ændret af denne rettelse efter registreringen, afbildet tilbage til deres værdier før rettelsen. De rettede værdier er fastlåst for sig.
- Ingen tærskel blev ændret, og ingen VALIDATED række, intet tal i figurer eller på nettet flyttede sig.
- I referencekampagnen i
lunar-frame-campaign: et beacon uden observation rapporteres nu (fundet af MR-05). Rapporten får
unobserved_beaconsogwarningkun, når et beacon ikke har nogen observation, og så kommer de observerede beacons' sigmaer fra deres egen information i stedet for alle at være null. Datum er uændret, og intet standard-, medfølgende eller offentliggjort output flytter sig (docs/revisions/BEACON-unobserved-cell-changes.md).Lunar hovedakseramme (
lunar_frame::icrf_to_moon_pa, brugt aflunar_odog LRO-tilpasningen): forskydningen fra DE421 mellem middel-Jord og hovedakse imoon_080317.tfblev anvendt i den forkerte retning og med den forkerte Euler-rækkefølge, så den analytiske PA-ramme lå omkring 208″ fra PA i stedet for på den. Den er nu transskriberet, som SPICE's Frames Required Reading definerer den, og stemmer med SPICEpxform('MOON_ME','MOON_PA')til 2.6e-16 rad; den analytiske PA-ramme ligger 6″ til 8″ fra DE440 PA (præregistreret e1ead19b, registreret igen be33382e, efter at den første foreslåede ændring missede tærsklen på 1e-12;docs/design/evidence/fut05b-me-pa-offset-sign/). Offentliggjorte tal, der flytter sig: LRO-tilpasningen (tests/agency_lro.rs) rå overlap 53,8 → 39,9 m, dynamisk 12,6 → 12,05 m, reduceret-dynamisk 6,65 → 6,67 m (tærskler uændrede). Den analytiske stak stemmer nu med ANISE-krydsvalideringen af DE-kvalitet (12,0 / 6,67 m) på begge niveauer; det tidligere gab på det dynamiske niveau var denne fejl.MCP-serveren afviser
[terrain] dem_hgt(opfølgning på CAP-06b). Jamming-typens sti til terrænflise står nu iinline_only::FILE_SOURCE_KEYS. En inline-flade afviser et scenarie, der nævner en, med en besked, der hverken bærer stien eller en fejl fra operativsystemet. Testen af filkildevagten markerer nu også felter, der ender på_hgt.Jd2::from_partsmed en brøkdel i dagsdelen tabte brøkdelen i konverteringerne til UTC, TAI, UT1 og Jordens rotation (én times dagsdel drejede Jorden 15° forkert); dagsdelen normaliseres nu til et heltal. Ingen kalder i motoren blev berørt: hver sender et helt døgn, og hvert leveret output er bit-identisk.
Planlagt#
- Geometrien ud fra en angivet skyline (punkt 1 i 0,36, nu i motoren som
src/skyline.rs):sky-blockedogopen_fractionfra skylinen, hvor inputdata giver en (azimutgabet som reserve), en hændelse med naturlig forringelse (fjord eller terminal) inmea-scenarioog designnotens to maskerede geometrier i rækken sigma_UERE x DOP, præregistreret som et tillæg. - Geometri for RINEX-logge med navigation (fra motorens egen positionsbestemmelse) og Android-logge (fra rækkerne
Status); begge læser i dagunknown. Geometri i$PKSHT(version 1 uændret i 0,36) og integrationerne med Signal K og OpenCPN. - Et eksisterende hul, ikke indført i 0,36: når hver satellits SNR-felt er tomt, udløses intet fradrag for
loss-of-lockeller C/N0; totalt signaltab er kun synligt gennem geometrimonitorenssignal_loss(klassificeretenvironment). Et fradrag for det er planlagt. - En strøm i skema 1,3 i de eksterne telemetri-referencer (Prometheus' tekstformatparser og OTLP-collectoren), som i dag kun dækker strømme i 1,2.
- En tosidet hindring (en kløft eller en smal fjord) læses som signaltab i stedet for en blokeret himmel, indtil skylinen er integreret.
[0.35.0] - 2026-10-12#
En passage, der nævner AI-klienter fra tredjeparter, er udeladt her; den står i CHANGELOG.md på GitHub.
Verifikator for Galileo OSNMA#
- Nyt modul
kshana::osnmaogkshana osnma verify <input>: en åben verifikator i ren Rust på modtagersiden for Galileo OSNMA. Den læser I/NAV-sider og rapporterer pr. satellit og epoke, om navigationsdata er autentificeret, med en årsag til hver fejl eller forsinkelse: fortolkning af HKROOT og MACK, genopbygning af DSM-KROOT og DSM-PKR, Merkle-verifikation af den offentlige nøgle, verifikation af TESLA-nøglekæden, verifikation af MACSEQ og tag for ADKD 0, 4 og 12 inklusive krydsautentifikation og et resultat i form af$PKSOStil modtagertillidsmonitoren. Outputtet bærer en vejledende erklæring om, at statussen ikke er en integritetstjeneste for navigation.docs/OSNMA.mdangiver, hvad der verificeres og ikke verificeres, tidskravet, og at Kshana ikke giver nogen rettigheder under EU's IPR'er for OSNMA-ICD'en (brugere støtter sig på ICD'ens Annex E-tilladelse). Implementeret mod SIS ICD Issue 1,1 og Receiver Guidelines Issue 1,3. Sider CRC-kontrolleres, og en bytestrøm af u-blox UBX-RXM-SFRBX kan læses direkte (--format ubx). Standardtests bruger syntetiske data og offentliggjorte known-answer-tests for primitiver; en valgfri test læser en lokalt hentet kopi af de officielle vektorer. Efter uafhængig gennemgang tager verifikatoren kun sin tid fra verificerede TESLA-nøgler (en forfalsket subframe langt ude i fremtiden kan ikke længere slette en fejl), lader en autentifikation udløbe og følge den IODnav, der er i brug, respekterer verificerede alarmmeddelelser (hvis Merkle-blad nu indeholder det tilfældige NPK-felt) og NMA-status "don't use", holder dummy-tags ude af satellitstatussen, holder kæder efter CID med tilbagekaldelse og fornyelse, kontrollerer padding-hashen for KROOT og begrænser UBX-rammelængder og TESLA-verifikationsarbejde. En satellit læses kun som autentificeret, så længe de nyeste efemerider og urdata, den sender, bit for bit er de data, der blev autentificeret (ikke blot under samme IODnav), en status eller tilbagekaldelse fra den uautentificerede NMA-header tæller kun, når to satellitter er enige, eller en verificeret KROOT bærer den, en afspillet ældre KROOT kan ikke erstatte en kæde, og en nøglestrøm, der er gået i stå, rapporteres.
Tilføjet (MCP-serverkanaler)#
kshana-mcp --http <addr>, streambar HTTP, selvhostet. Loopback som standard; en adresse uden loopback kræver--allow-remoteog et bearer-token iKSHANA_MCP_HTTP_TOKEN; intet værktøj læser eller skriver en sti (IQ-filværktøjerne er slået fra); grænser for størrelse, tid og samtidighed på forespørgsler; ingen CORS-header; kontrol af Host og Origin. Kshana hoster intet endpoint (docs/deploy/mcp-http.md, med skabeloner til Docker, Fly.io og Cloud Run).
En passage, der nævner AI-klienter fra tredjeparter, er udeladt her; den står i CHANGELOG.md på GitHub.
Tilføjet (flader)#
osnma_verifypå Python og WebAssembly. Verifikatoren bagkshana osnma verifypå bytes i hukommelsen, som returnerer den JSON,--jsonudskriver (vejledende erklæring i feltetadvisory; kun autentifikationsstatus, ikke en integritetstjeneste for navigation). De samme afvisninger som på kommandolinjen. Ikke på MCP: inputtet er en lang rå modtagerstrøm, der egner sig bedre til CLI og Python.docs/SURFACES.mdogdocs/OSNMA.mdsiger det.trust_telemetrypå WebAssembly, Python og MCP, med en plugin-kommando og en JetBrains-handling. Gengiver en tillidsstrøm eller et resultat frareceiver-trustsom Prometheus-tekst, CEF- eller LEEF-syslog-linjer eller en OTLP-JSON-nyttelast, med de encodere,kshana trust-telemetrybruger (kshana::surface::trust_telemetry); ingen socket og intet ur. Plugin:/kshana-trust-telemetryog skill'entrust-telemetry. JetBrains: Render Trust Telemetry. Funktionernewasmogpythonog MCP-serveren aktiverer nu ogsåotlp, som ikke tilføjer nogen crate.Paritetsgennemgang. JetBrains-handlingerne Validate Scenario, List Scenario Kinds og Assess Receiver Stream;
kshana --helpopregner nureceiver-trust evidence,evidence,trust-telemetryognmea-scenario; notebookencompliance-and-test-bench(compliance-kortlægning og testbænk-eksport); og hver tilbageværende JetBrains-celle med "CLI only" idocs/SURFACES.mder nu en eksplicit N/A med sin årsag.
En passage, der nævner AI-klienter fra tredjeparter, er udeladt her; den står i CHANGELOG.md på GitHub.
Tilføjet (bevispakker)#
kshana receiver-trust evidenceogkshana evidence verify: signerede, verificerbare bevispakker for en GNSS-tillidshændelse. En pakke samler det rå logudsnit og hele logens SHA-256, konfigurationen med hver tærskel, resultater og årsager pr. epoke, motorens version, en hash-kædet manifest og en selvstændig HTML-oversigt, signeret med Ed25519 (en nøgle frakshana evidence keygeneller din egen fil; nøgler gemmes aldrig i en pakke, og*.evidence-keyer git-ignoreret).verifykontrollerer hver hash, kæden og signaturen og navngiver præcist, hvad der svigter; med--pubkeyfastlåser den underskriveren. Et RFC 3161-token kan vedhæftes og læses og bindes til manifestet (autoritetens egen signatur kontrolleres ikke af dette build;openssl ts -verifydækker den). Logudsnittet er vinduets nøjagtige bytes, hvor læseren rapporterer kildespænd (NMEA, UBX, RINEX 3, Android), ellers hele loggen, og manifestet siger hvilket. Oprettelse og verifikation er rene offentlige funktioner (kshana::evidence), der bygges tilwasm32. Pakkerne angiver, at de er en teknisk optegnelse, ikke en juridisk udtalelse. De nye afhængigheder er træeted25519-dalek(BSD-3-Clause og Apache-2.0/MIT, minimale funktioner) og en direktezeroize(allerede i det træ) til at slette nøglemateriale. Sedocs/EVIDENCE-PACKS.md.
Tilføjet (tillidstelemetri)#
kshana trust-telemetry: GNSS-tillid som kilde til sikkerhedstelemetri. Læser tillidsstrømmen pr. epoke (JSON-linjer: score 0-100, bånd, årsager) eller et batchresultat frareceiver-trustog fodrer et Prometheus-endpoint/metrics(localhost som standard), syslog-hændelser i CEF eller LEEF i en RFC 5424-kuvert (UDP eller TCP) og, bag funktionenotlp, der som standard er slået fra, eksport af OTLP/HTTP-JSON. Levering kører på arbejdstråde med tidsgrænser for forbindelse og skrivning, begrænset backoff ved genforbindelse og en tællerkshana_trust_syslog_send_failures_total, så en død eller gået i stå collector ikke kan standse den levende vurdering eller fryse/metrics; årsagsetiketter er begrænset til 64 rækker. Ingen nye afhængigheder. Et eksempel på et Grafana-dashboard findes ideploy/grafana/. Metriknavne, etiketter og CEF/LEEF-feltmapningen står idocs/TRUST-TELEMETRY.md. Strømformatet er isoleret isrc/telemetry/sample.rs.
Tilføjet#
- Tillid til søfart: en levende tillidsscore fra 0 til 100 for et skibs i bevægelse positionsbestemmelse, ud fra den NMEA 0183, som modtageren allerede udsender, med en valgfri port.
kshana receiver-trusttager en tabel[platform](kind = "static"eller"vessel", fartøjets maksimale fart, acceleration og drejningsrate, antennehøjde over vandlinjen og en valgfri kursføler; hver standard dokumenteret med sin årsag). For et fartøj erstattes monitoren for statiske positionsspring, som måler afstand fra kalibreringsmiddelværdien og er forkert på et skib i fart, af kausale monitorer for platforme i bevægelse: kinematisk konsistens af positionen med den rapporterede fart og kurs og med fartøjets grænser, gyrokurs mod kurs over grunden, logfart mod fart over grunden, antennehøjde mod den angivne højde over vandlinjen, C/N0-spredning, der falder sammen og stiger samtidig mod kalibreringens baseline, og tidskonsistens (også mod denne computers ur i live-tilstand). Den læser også en rapporteret autentifikationsstatus, samlet eller pr. satellit (kun en rapporteret status: ingen OSNMA-kryptografi). Hver tærskel angives i en tabel[maritime]før kørslen. Hver epoke får derefter en score fra 0 til 100 ved en deterministisk, præregistreret afbildning (ingen læring, intet tilpasset til hændelser; vægte, båndkanter og beviset ligger i en tabel[score]), afbildet på de eksisterende tillidstilstande, med de monitorer, der trak fra, og deres point. Statiske scenarier er uændrede og hashes som før.kshana receiver-trust live <session.toml>læser stdin, en fil, der får tilføjet, TCP eller UDP og skriver én JSON-linje pr. epoke og en proprietær sætning$PKSHT; med--gatesender den strømmen videre uændret, mens positionsbestemmelsen er troværdig, og markerer positionsbestemmelsen som ugyldig (GGA-kvalitet 0, RMC- og GLL-statusV, GNS- og VTG-tilstandN), mens den ikke er det. Porten er slået fra, medmindre der bedes om den;--listen tcp:<port>serverer den portstyrede strøm til et vilkårligt antal TCP-klienter (loopback som standard, en langsom klient droppes i stedet for at blokere de andre). Dette er vejledende software, ikke typegodkendt navigationsudstyr (IEC 61108, IEC 61162); operatøren er fortsat ansvarlig.examples/maritime-trust/er en syntetisk log fra Tallinn til Helsinki, skrevet kun som tekst, med et position-drag-off et stykke henne, hvor modtageren bliver ved med at rapportere en gyldig positionsbestemmelse; dens forventede output er fastlåst af en test. Vejledning:docs/MARITIME-TRUST.md. Kontrollerne kan ikke se en spoofer, hvis positionsbestemmelse er konsistent med alt på bussen; vejledningen siger det.
Interferenskort#
kshana interference-mapogkshana route-exposure: et offentligt billede af, hvor fly og skibe rapporterede forringede navigationsdata, og hvor meget af en rute det berører. Inputdata er lokale CSV-filer lavet af ADS-B-data (adsb.lol, ODbL 1,0) og AIS-data (NOAA MarineCadastre, Kystverket under NLOD 2,0) med åben licens; hver outputfil er én kilde og ét UTC-døgn af GeoJSON, der bærer metoden, dens tærskler, datalicensen, kildeangivelsen og kildens dækningsbias. ADS-B-metoden aggregerer NIC og NACp på et fast gitter og kalder en celle forringet ud fra andelen af forskellige fly, med værn for udstyr, der aldrig rapporterer nøjagtighed, lav højde og årsager med stort område. AIS-metoden kører fem detektorer: positioner på land (mod en brugerleveret kystlinje), cirkulære spor, urealistiske spring, urealistiske hastigheder og mange fartøjer på samme position. Tærsklerne er præregistrerede konstanter i en navngiven metodeversion. Kun aggregater: identifikatorer hashes i hukommelsen og skrives aldrig, og celler med færre end 5 forskellige fly eller fartøjer offentliggøres ikke. En forringet celle er ikke et fund af interferens. Standardkommandoerne bruger intet netværk; en valgfri hjælperfetch-land --allow-networkhenter polygoner for land fra Natural Earth fra en adresse fastlåst til en commit og beholder filen kun, hvis dens SHA-256 passer. ADS-B-inputtet er en CSV eller direkte readsb-historikfilerne fra adsb.lol (ny afhængighed:flate2med sin rene Rust-backend, til gzip). Begge metoder er version 2: et kald om forringet eller anomalt kræver mindst 5 fly eller fartøjer (offentliggørelsesminimum), hvert antal pr. celle under 5 tilbageholdes somnull, og et døgn, hvis baggrund ikke kan estimeres, tilbageholder sine kald. Outputfiler hedder<source>-<dataset>-<date>.geojsonog overskrives aldrig; input streames linje for linje; ruteeksponering håndterer antimeridianen. Tests bruger kun syntetiske data. Sedocs/INTERFERENCE-MAP.mdog licensgennemgangen idocs/data/INTERFERENCE-DATA-SOURCES.md.
Tilføjet (træningsstrømme)#
kshana nmea-scenario: syntetisk NMEA 0183 for broen til besætningstræning i at genkende jamming og spoofing af GNSS. Ud fra en scenarie-TOML skriver den en fil eller streamer over TCP eller UDP (unicast eller broadcast; i realtid, accelereret eller så hurtigt som muligt) det fulde bro-sæt GGA, RMC, VTG, GSV, GSA, GNS, ZDA, HDT og VBW for et fartøjsspor med grænser for drejningsrate, acceleration og strøm, med satellitgeometri fra motorens egne nominelle konstellationer. Scriptede hændelser på en tidslinje: jamming, position drag-off (en gyldig positionsbestemmelse, der vandrer væk), tids-spoofing og en forsinkelse ved afspilning, hver med ramper for indsættelse og genopretning. En instruktørlog (JSON og tekst) registrerer, hvad der blev injiceret hvornår, med det sande spor mod det rapporterede. Et bibliotek iscenarios/training/(jamming på åbent hav, drag-off ved kysten, tids-spoofing ved indsejling til havn, kombineret) bærer noter til træneren. Outputtet har gyldig kontrolsum og er deterministisk pr. seed; testene fastlåser et gyldent uddrag pr. scenarie og læser hver sætning med NMEA-læserenreceiver-trust. Kun tekst: intet output af RF, IQ eller bølgeform; strømmene er til træning og test og må aldrig sendes ind i et fartøjs levende navigationssystemer. Sedocs/NMEA-TRAINING.md.
Maritime integrationer (0.35.0, arbejdsstrøm B)#
- Signal K-plugin (
integrations/signalk/, ikke udgivet på npm): kører eller forbinder tilkshana receiver-trust live(serverens egen NMEA-input, brugerdefinerede inputargumenter, et JSON-linjer-TCP-feed eller$PKSHT-sætningerne i en portstyret strøm), udgiver tillidsscore, bånd, årsager, alarmer og portens tilstand undernavigation.gnss.kshana.*(herunder den position, modtageren selv rapporterer, som kontekst, aldrignavigation.position) og rejser en Signal K-notifikation (warnved forringet,alarmved utroværdig, med tærskler for hold, ryd og forældelse, alle i konfigurationsskemaet). Ingen npm-afhængigheder. Testet på optaget syntetisk output. - OpenCPN: NMEA i port-tilstand serveres direkte af
kshana receiver-trust live --gate --listen tcp:10110(anbefalet); et afhængighedsfrit TCP-relæ (integrations/opencpn/nmea-tcp-relay.mjs) er det valgfrie alternativ. Under alle omstændigheder ser OpenCPN en ugyldig positionsbestemmelse, når tilliden bryder sammen, og$PKSHTi sit NMEA-fejlsøgningsvindue; testene afspiller den syntetiske portstyrede strøm gennem en rigtig TCP-socket og kontrollerer, hvad en forbruger modtager. Et native plugin med scorepanel (integrations/opencpn/plugin/, plugin-API 1,18, CMake) læser$PKSHTfra OpenCPNs egen NMEA-strøm og alarmerer på det utroværdige bånd; det bygger, dets logik er enhedstestet, og det blev kørt inde i OpenCPN 5.8.4 under en virtuel skærm (evidens og et script til at gengive det iintegrations/opencpn/evidence/); det er ikke pakket til plugin-manageren. - Referencebuild (
deploy/reference-build/): generisk styklisteforslag, opsætning af OS, systemd-units til den vejledende monitor og den valgfrie port (kontrolleret medsystemd-analyze verifyafcheck-units.sh), en containermulighed, Signal K-forbindelse. - Signal K-pluginet accepterer det levende JSON-skema 1,2 (en nøgle
position, derefter en nøgleadvisorytilføjet; ukendte tilføjede nøgler ignoreres), kontrolleret på rigtigt output i 1,2 og mod en rigtig signalk-server. - Rettelser efter gennemgang: systemd-units genstarter altid og kører i sandbox (ingen shell, intet netværk, hvor der ikke er brug for det), et logrotate-uddrag,
check-units.shsvigter ved ethvert fund; containeren kører porten ud fra miljøvariabler med en sundhedskontrol og baseimages fastlåst med digest; Signal K-scoremetadata, den forældede notifikation erstattes, når data genoptages, fejl fra børneprocesser beholdes, og kill-signaler eskalerer, usikreinputArgsafvises, og notifikationen ligger vednotifications.navigation.gnss.kshana.trust; relæet begrænser en tilbageholdt delvis linje; parserne for$PKSHTafviser scorer uden for 0 til 100; en kontrol af links i dokumentationen; en CI-workflow (marine-integrations.yml), der kører det hele, også den rigtige binær fra ende til anden. docs/MARINE-INTEGRATIONS.md. Vejledende software, ikke typegodkendt udstyr; operatøren forbliver ansvarlig. Kun software: intet sendes, og der hævdes intet tal for detektion eller falsk alarm.
Tilføjet: compliance-kortlægning og testbænk-eksport#
docs/compliance/ogkshana compliance-report. En kortlægning fra Kshanas output til fem rammeværker og standarder for resiliens (US DHS Resilient PNT Conformance Framework v2.0, IMO-vejledning for skibe, EASA-vejledning for luftfart, NIS2 artikel 21, EN 16803, en betalt standard, der er citeret efter del og de få paragrafnumre, der er synlige i katalogteksten), én tabel pr. rammeværk: referencen, hvad den kræver i vores omskrivning, de output, der leverer belæg for den, og hullet. Kildeversioner, URL'er og hvad der blev og ikke blev læst er noteret.kshana compliance-report <result.json>...udfylder kortlægningen ud fra de angivne kørsler og markerer hver rækkeevidenced,partly-evidenced,not-evidencedellerout-of-scope, som Markdown og JSON, med hullet bevaret på hver række. Formuleringen er "leverer belæg for"; intet bliver vurderet eller godkendt. Testene bruger syntetiske kørsler og svigter, når en indsendt tabel afviger fra koden.kshana bench-export <scenario.toml>. Skriver bevægelse og hændelser for køretøjet i et scenarie af typengnss-ins,jammingellergnss-simtil en GNSS-simulator i laboratoriet: en CSV med brugerbevægelse med dokumenterede referencesystemer og en metadata-sidecar, NMEA 0183GGA/RMC, waypoint-tekst og hændelserne som CSV og somreceiver-trust-blokke[[events]](src/interop/testbench.rs). Kun bevægelse og hændelser: intet signal skrives. Hver fil læses tilbage itests/interop_testbench.rsog sammenlignes inden for sin angivne tolerance.docs/TEST-BENCH.mdgiver metoden til at afspille eksporten gennem en simulator og bedømme modtagerens log medkshana receiver-trust.- Hvad der tæller som evidens. Et resultat tæller kun for en funktion, når det bærer de felter, dets type skriver; en typeetiket alene tæller ikke. Ukendte typer, et resultat der er uenigt med sit søskendescenarie, ikke-hex-hashes og misdannede antal for modtagertillid opregnes som ikke brugt, med årsagen. Rapporten escaper Markdown-celler og kan ikke gå i panik på en hash med ikke-ASCII.
compliance::run_from_textogassess_textstager tekster, ikke stier. - Testbænk-eksport.
--epocher områdekontrolleret (UtcEpoch::parse_iso); waypoint-filen kontrollerer hvert interval, og kommandoen siger hvorfor, når et udelades; dokumentationen angiver, atgnss-ins-kursen er kroppens yaw og ikke kursen, pladsholderfelterne iGGAog scenariets egen højdeændring.bench-exportogcompliance-reportstår i brugsteksten. fusion::pack::truth_trajectoryeksponerer den sande tilstandshistorik for kørselsprofilen ignss-ins(det samme trin, som typens egen reference bruger), ogUtcEpochfår NMEA-felter for dato og tid.
Validering af interferenskortet#
- Interferenskortets afkodningssemantik og geometri er kontrolleret mod uafhængige implementeringer på syntetiske inputdata. Betydningen af NIC- og NACp-koder mod pyModeS' afkodning af syntetiske ADS-B-rammer, AIS' værdier for ikke tilgængelig mod pyais' afkodning af syntetiske AIVDM-sætninger, tildeling af gitterceller mod shapely, rutelængde pr. celletilstand mod shapely og GeographicLib og maskering af indland mod shapely og pyproj, hver til en tolerance fastlagt før den første sammenligning (
tests/fixtures/interference_map_ref/PREREGISTRATION.md). Det validerer, hvordan koder og feltværdier læses, og geometrien, ikke at en markeret celle er interferens. Læseren af landpolygoner lukker nu en ring, der ikke gentager sit første hjørne, og som den før læste uden sin sidste kant. Dokumentationen angiver tærsklerne for lav nøjagtighed i NACp og NIC som den grænse, hver kode står for (NACp 6 er en EPU-grænse på 556 m, NIC 5 en indeslutningsgrænse på 1 NM).
Tilføjet (validering af telemetriformaterne og bevispakkerne)#
- Eksterne kontroller af bevispakkernes kryptografi, pakkeverifikatoren og telemetriens trådformater. Testvektorerne for Ed25519 i RFC 8032 afsnit 7,1 (1, 2, 3 og 1024) og eksemplerne for FIPS 180-4 SHA-256 køres gennem pakkens egne funktioner til signering, verifikation og hashing, til nøjagtig lighed. En verifikator skrevet i Python alene ud fra det normative afsnit i
docs/EVIDENCE-PACKS.md(hashlib ogcryptography) er enig med Rust-verifikatoren på 71 intakte og manipulerede pakker: dom, mængde af fejl, signaturdom og begge kædehoveder. Vores Prometheus-eksponering læses af den officielle Python-klients parser og vores OTLP-JSON af den officielle meddelelseopentelemetry-proto, strengt, og begge er enige med den tilstand, de blev lavet ud fra. CEF og LEEF har ingen uafhængig åben validator og forbliver modellerede.docs/EVIDENCE-PACKS.mdfik det normative pakkeformat og den verifikationsprocedure, som clean-room-verifikatoren blev skrevet ud fra;VerifyReportfiksignature_valid. Uafhængige referencer og fixtures:scripts/gen_ed25519_rfc8032_ref.py,scripts/gen_evidence_pack_ref.pymedscripts/evidence_verify_cleanroom.py,scripts/gen_telemetry_formats_ref.py; testsevidence_crypto_reference,evidence_pack_referenceogtelemetry_formats_reference. CI behøver ikke Python.
Tilføjet (validering af CEF-hændelserne)#
- Telemetriens CEF-hændelser læses tilbage korrekt af to uafhængige open source-parsere.
pycef1,11 og Logstash' CEF-codec (logstash-codec-cef6.2.7 i Logstash 8.15.3) fortolker 157 CEF-linjer (hvert båndskift og hver epoke i den indsendte telemetristrøm, plus fjendtlig tekst med=, omvendte skråstreger, pipes, linjeskift, tabulatorer og tekst med flere bytes) og gendanner hvert headerfelt, alvorlighedsgraden, den nøjagtige mængde af extension-nøgler og hver værdi nøjagtigt. Logstash-codec'en læser også fire linjer, hvis headertekst kræver escaping, hvilketpycefikke kan. Tærsklen blev registreret, før nogen af parserne blev kørt (tests/cef_reference.rs); fixtures itests/fixtures/cef/, scripts til uafhængige referencerscripts/gen_cef_ref.pyogscripts/gen_cef_logstash_ref.py; CI behøver hverken Python eller Logstash. LEEF har ingen vedligeholdt åben parser og forbliver modelleret. CEF-hændelserne bærer nu tillidsscoren og epokeforskydningen i CEF-ordbogens flydende-komma-brugerfelter (cfp1,cfp2) i stedet for heltalsfelternecn1ogcn2, som passede til ingen af værdierne; CEF er nyt i denne udgivelse, så intet af det, der blev leveret, ændrer sig.
Ændret#
- MCP:
assess_receiver_logaccepterer loggen somtextellerbase64; værktøjets input er begrænset til 4 MiB. - Jamming-diagrammet henter også sine farver fra paletten.
src/jamming.rsvar det ene modul, som revisionen af Observatory-paletten lod blive på sine egne farver, mens arbejdet med jammer-Q landede; dets*.chart.svg(scenariernejamming,maritime-strait-jammingog andre af typenjamming) læser nusrc/palette.rs, og tilladelseslisten itests/palette_sync.rser tom. Kun farver og skrifttype: diagrammernejamming-demoogmaritime-strait-jamminger lig deres tidligere optagne gengivelser, når farve,font-familyog versionsfoden er normaliseret. Ingen plottet værdi flyttede sig. De optagne Studio-kopier underweb/studio/recorded/blev optaget igen ved genportingerne af 0.33.0 og 0.34.0 (kun versionsstempel): de bærer stadig jamming-diagrammets gamle maling og tager palettens maling ved næste genporting.
Rettet#
- Urensemblets 3-sigma-grænse dækker nu flicker-gulvet, og filtrets sundhedskontrol ser det. Med et
flicker_floorbar sandhedsuret flicker-FM, men tilstandsfilteret med to tilstande, der leverer integritetsgrænsen, gjorde det ikke, så det leverede scenarieclock-ensemblehavde 3-sigma-dækning på 0,41 (klassisk) og 0,33 (kvante), og NIS/NEES-kontrollen, som trak sin egen sandhed fra filtrets model, rapporterede identiske værdier med og uden gulvet. Grænsen er nu variansen for de to tilstande plus den eksakte varians af flicker-fasen akkumuleret siden den seneste synkronisering, beregnet fra den samme bank, som sandhedsuret bruger; NIS/NEES-kontrollen trækker sin sandhed fra den udvidede model med den bank og kører det matchede udvidede filter (og filteret med to tilstande mod flicker-sandhed rapportererconsistent = false). Ændring af output, kun for ure med enflicker_floorforskellig fra nul:integritypåclock-ensemblegår fra 0,40866 / 0,33026 til 0,99970 / 1,0 (klassisk / kvante), ogfilter_healthNIS/NEES indeholder nu flicker; tidsfejlen,holdover_sogtiming_p95_nser uændrede, og scenarier uden gulv er byte-identiske.scenarios/orbit-gnss-challenged.toml(orbit-type, seed 7, gulve 1e-16 / 2e-11) flytter sig også:fom.integrityklassisk 0,7734 til 1,0 og kvante 0,9796 til 1,0, og NIS/NEES ifilter_healthog deres bånd ændrer sig. Dens kvante-filter_health.consistentskifter fratruetilfalse: en samplinghændelse i ensemblet af flicker med 16 seeds gange 60 trin (NIS 0,8815 mod et bånd på [0,9125, 1,0914]), ikke en defekt. Båndet er et bånd på 95 %, så omkring 5 % af seeds markerer et matchet filter per konstruktion (40 nye seeds af dette scenarie: kvante 1 og klassisk 2 markeret); ved 64 gange 200 ligger det samme seed inden for båndet for begge ure (NIS 0,990 og 1,001). Kendt opfølgning: fusionstypen har det samme hul (klassisk integritet 0,80 med et gulv); hybridtypen forbliver over 0,99.
[0.34.1] - 2026-10-10#
Sikkerhed#
- Input til MCP-serveren er hærdet. MCP-serverens scenarieværktøjer accepterer nu kun inline-indhold og afviser felter med filkilde; inputstørrelsen er begrænset. Vejledende: GHSA-8wpf-hqg5-6xjr.
[0.34.0] - 2026-10-09#
Lab-afspilning: en sporingsmotor, detektionsmonitorer og en kampagnekører til GNSS IQ-optagelser, med de sløjfedesign, C/N0-estimatorer og scorer, der hører til. Evidensklasse: alt nedenfor er MODELLED eller kontrolleret for intern konsistens mod lukkede former og seedet simulering; intet af det tilføjer en VALIDATED række, og verifikationsregistret er uændret (251 rækker: 124 validerede, 123 modellerede, 4 partner). Det er et softwarelag til analyse: intet her syntetiserer en bølgeform fra en jammer eller spoofer, og intet sendes.
Tilføjet#
Lab-afspilning: testbetingelser, kampagnekører og bedømmelse (0.34.0).
kshana iq campaign <campaign.toml>afspiller optagelser × front-end-kæder × sløjfedesign (kshana.loop-design/1) og bedømmer hver celle mod en testbetingelsesfil pr. optagelse (kshana.test-conditions/1, TOML eller JSON). Den fil angiver, hvad et laboratorium ved om optagelsen: de forventede satellitter og for hver hændelse dens typeetiket, start og slut, berørte satellitter og angivet J/S- eller jammereffektprofil. Det er kun metadata. Scorerne pr. satellit, for hele kørslen og pr. hændelse, er:- tilgængelighed, tid til tab af lås og den angivne J/S ved tabet;
- tid til genopnåelse, fra hændelsens slutning og fra tabet;
- målt forringelse af C/N0 pr. bin for angivet J/S;
- episoder med falsk lås pr. låst time (trackerens flag eller Doppler mod en sandheds-sidecar);
- jitter i PLL- og DLL-diskriminatorer.
Ved siden af hver målt forringelseskurve tegnes en analytisk reference for spektral adskillelse (
jamming::effective_cn0_dbhzmed typensQ) og mærkes MODELLED, uanset hvor den optræder.Celler kører parallelt gennem sporingssessionens tilstandsmaskine for lås, og hver skrives atomisk under en nøgle af indholdshash. Nøglen dækker optagelsens SHA-256, hashes for betingelse, front-end, design, kørsel og bedømmelse, den krævede
data_class(synthetic|client-confidential) og motorens version. Medrun.epochssat gemmes hver celles strømkshana.track-epoch/1og lås-hændelser også, navngivet efter cellenøgle og hashet ind i cellen.cell_keyogreport::digester offentlige, så en forbruger kan udlede hver nøgle og digesten igen. En ny kørsel springer derfor færdige celler over, og output afhænger aldrig af antallet af arbejdere. Kørslen skriverscorecard.csv/.json, en selvstændigreport.htmlog enDIGEST. Tærskler for bestået/ikke bestået ([scoring.bars], kan tilsidesættes pr. optagelse) anvendes, når rapporten bygges.[scoring] cn0_estimator = "m2m4" | "nwpr"(standard"m2m4", del af bedømmelsens hash) vælger den C/N0, der ligger bag den rapporterede C/N0 og forringelseskurven. Begge estimater bedømmes og rapporteres altid (medianer for hele kørslen og for baseline og pr. J/S-bin), og cellen og scorekortet registrerer estimatoren. NWPR læser omkring 8 dB × Bn·T for lavt under sløjfens egen jitter; M2M4 gør ikke.
Også nyt:
kshana iq campaign report <dir>bygger scorekortene, rapporten og digesten op igen fra cellerne;kshana iq conditions <file>kontrollerer en testbetingelsesfil mod dens skema;events_from_sigmf = trueimporterer en SigMF-optagelses annotationerkshana:test_eventsom hændelser;- Python får
iq_test_conditions,iq_campaignogiq_campaign_report; kshana-mcpfåriq_campaign, som er inkrementel og kan genoptages under budgettet for sampel pr. kald, med hver fil afgrænset til arbejdsmappen, ogiq_campaign_status.
Tests:
tests/iq_campaign.rskører en syntetisk kampagne med 3 optagelser × 2 front-ends × 2 design. Dens scener bærer angivne C/N0-profiler, og den dækker:- hver metrik kontrolleret mod den injicerede sandhed;
- genoptagelse efter en delvis kørsel med én arbejder med en ødelagt celle, byte-identisk med en uafbrudt kørsel med fire arbejdere;
- epokefiler pr. celle;
- en regressionstest af genopnåelse med tre satellitter på 20 s: med
reacquireslået til er hver kanal tilbage inden for 2 s efter et hul på 2 s; udfaldet medreacquireslået fra er fastlåst; - tærskler dømt igen uden at køre igen;
- CLI'en;
- ignorerede kontroller af gennemløb og hukommelse i release-tilstand, herunder en optagelse på 4 GB (5,45× realtid, hukommelsestop 2 MB over start-RSS; målinger på én maskine, ikke tærskler).
Kun software: intet sendes, og ingen bølgeform for interferens eller spoofing syntetiseres. Design og noter om som bygget:
docs/design/LAB-CAMPAIGN.md.Sporingsmotor til lab-afspilning (0.34.0: B3.1, B3.2, B3.3, B6.1).
Filer med sløjfedesign:
kshana.loop-design/1TOML (docs/design/LOOP-DESIGN-TOML.md; parseriq::track::design). Ét eller flere navngivne design fastsætter hvert sløjfefelt:- bærebølgetype (PLL, FLL eller FLL-assisteret PLL), ordener og båndbredder;
- diskriminatorer for PLL/FLL/DLL og støtte til bærebølgen;
- afstand og integration;
- tærskler for lås og C/N0-vinduer samt bitsynkronisering;
- tilstandsmaskinen for lås;
- overdragelsen til opnåelse (
"auto"eller eksplicit).
Design kan
extendshinanden. Ukendte nøgler afvises. Hvert opløst design har en SHA-256-hash over en kanonisk JSON-form (nøgler sorteret på hvert niveau, fast talformatering), så hashen ikke afhænger af feltrækkefølgen; hvert output registrerer den. Flader:kshana iq track --design <file> [--design-name], hvor eksplicitte flag tilsidesætter designet og registreres;kshana iq sweep --design <file>, som kø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, track-epoke-kolonnencn0_m2m4_dbhzeftercn0_beaulieu_dbhz; Python-epokeordbøger). Estimatet af andet og fjerde moment over de samme vinduer som NWPR, kun ud fra prompt-effekt: NWPR læser lavt under sløjfens egen bærebølgejitter (omkring 8 dB × Bn_PLL·T), og M2M4 gør ikke. På GPS L2C CM (20 ms, nominelt 40 dB-Hz, PLL 1 til 10 Hz) læser den 39,93 dB-Hz ved hver båndbredde, mens NWPR falder fra 39,55 til 38,22; på L1 C/A ved 45 dB-Hz læser den 45,34. NWPR og hvert andet output er uændret (en bit-for-bit-fastlåsning). Den binære post forbliver 184 bytes (værdien tager den reserverede float og flagbit 6).Ekstra korrelatortaps (multikorrelator / SQM).
[design.integration] extra_taps_chips = [..](forskydninger i chips fra prompt, positiv tidlig; højst 16, hver inden for ±2) korrelerer ekstra replikaer ved siden af E/P/L og returnerer dem somEpochOutput.extra((offset, value)i designets rækkefølge). Sløjferne bruger dem aldrig. Nøglen udelades af den kanoniske JSON, når den er tom, så standarddesignets hash og hvert output uden taps er uændret (kshana.track-epoch/1bliver; CSV/JSONL/binær uden taps er bit-identiske). Med taps: kolonner i CSV/JSONL og en binær post på184 + 16 × tapsbytes, hvis header bærerextra_taps_chips, så en gammel læser afviser filen i stedet for at fortolke den forkert.--extra-taps(CLI),extra_taps(Python) ogextra_taps_chips(MCPiq_track). Designene i én kørsel skal være enige om taps.Parallelle kanaler (
iq track/iq sweep --threads <N|auto>; RustTrackSession::with_threads). Hver bid af kanaler kører på op til N tråde (std::thread::scope;wasm32forbliver seriel). En kanals korrelation og tilstandsmaskine for lås berører kun den kanal; dens epoker og hændelser bufres og skrives til sinks i kanalrækkefølge, så outputtet (CSV, JSONL, binær, hændelser, oversigt) er byte-identisk med den serielle kørsel for ethvert N. Standarden forbliver 1 tråd. Målt på en optagelse med 12 kanaler, 4 s, 4,092 MHz på 4 kerner: 19,5 s seriel, 11,5 s ved 2 tråde, 6,3 s ved 4 (3,1×; den indledende opnåelse er seriel).Eksport af opnåelsesoverflade (
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 overfladen af korrelationseffekt over Doppler × kodefase, som søgningen beregner (dens celler eracquire's, bit for bit) med toppen og to finere Doppler-forfininger: et parabolsk estimat og en fin søgning med 1/16 bin (≈5 Hz ved 4 ms kohærent, mod bins på 167 Hz).acquireselv og hver standard er uændret.Streamet epokeoutput (
kshana.track-epoch/1;iq::track::sink). Hver sløjfeopdatering bærer:- korrelatorerne early/prompt/late;
- alle tre diskriminatoroutput;
- NCO-tilstandene for PLL/FLL/DLL og bærebølgefasen;
- PLI og låsflagene;
- begge C/N0-estimater og bittene;
- låstilstanden.
Det skrives, mens det sker, som CSV, JSON Lines eller en versioneret binær form med læsere 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 sit svar ud fra oversigten med afgrænset hukommelse.- En kørsels heap vokser ikke længere med optagelsens længde:
tests/iq_track_memory.rsmåler det med en tællende allokator (6× længden, samme top inden for 64 KiB), med en kontrol, der viser, at stien i hukommelsen vokser. - Streamet output er bit-identisk med genafspilningen i hukommelsen.
Låsetilstandsmaskine (
iq::track::lock,TrackSession): pull-in → låst → tabt → genindfangning → pull-in, eller taget ud af drift, når et tab varer længere endreacq_window_s(standard 30 s). Mislykkede søgninger gentages hverreacq_interval_s(0,1 s), jævnt fordelt, så planen for genforsøg højst lægger 0,1 s til en målt genindfangningstid. En valgfri back-off (reacq_max_interval_soverreacq_interval_s) er som standard slået fra, ogmax_reacq_attemptser en valgfri grænse (0, ingen, som standard). Et udfald på 2 s på tre PRN'er ved 4,092 MS/s ender nu med, at hver kanal er genindfanget og låst. Med et budget på 3 forsøg blev hver kanal taget ud af drift inden for 0,2 s efter tabet.- Tærskler (
loss_dwell_s,pull_in_max_s, Doppler-vinduet for genindfangning) kommer fra udformningen. Hver overgang er en hændelse med sin årsag. - Falsklås-kontrollen søger den sporede Doppler mod dens ±1/(2T) FLL/PLL-alias. Den fanger den falske lås, som PR #38 målte (−2400 Hz sporet, 500 Hz fra den rigtige). Med genindfangning slået til ender kanalen låst på den indsatte Doppler.
- Et signalhul på 0,8 s erklæres som tab og genindfanges inden for 0,3 s efter signalets tilbagekomst.
--summaryfinal_state(og tabellens kolonne) er tilstanden efter den sidste overgang, så en kanal, der er taget ud af drift efter sin sidste sløjfeopdatering, viserRETIRED.- FLL-hjælp kun under pull-in (
[design.carrier] fll_assist = "pull-in", standarden;"always"bevarer den tidligere adfærd bit for bit). FLL'en overdrager til PLL'en, når den udglattede PLI har ligget på eller overfll_off_pli(0,8) ifll_gate_dwell_s(0,1 s), og vender tilbage underfll_on_pli(0,6). Når den var slået til, brød FLL-stien på 10 Hz faselåsen under ca. 38 dB-Hz på rene signaler: ved 35 dB-Hz var faselåsandelen 10–16 %, med en sand fasefejl på 38–41°. Med gating holder standarden 100 % ved 35 dB-Hz med 4,5°, det samme som en PLL alene. Pull-in fra en overdragelsesfejl på 100 Hz er uændret. Evidens med tærskler fastsat på forhånd:docs/design/evidence/carrier-lock/. Standardsløjferne er derfor ikke bit for bit identiske med tidligere kørsler af standardudformningen. Brugfll_assist = "always"for at gengive dem. Kendt grænse: ved 35 dB-Hz kommer overdragelsen 1,9–2,6 s inde i sporingen, og ved 33 dB-Hz holder FLL'en på 10 Hz PLI under overdragelsestærsklen, så pull-in aldrig gennemføres. - Nye nøgler til sløjfeudformningen og nye API'er, opfø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, hvormax_reacq_attemptser ændret fra en standard på 3 til en valgfri grænse (standard 0);- Rust:
LoopConfig.fll_assist(FllAssist,FllGate),LoopCore::set_fll_enabled,EpochOutput.fll_active,ChannelSummary.final_state.
- Udformningens hash er over en kanonisk JSON-form, og den indbyggede standards hash er
33261cd171a53803a6c262686e878e01f37d902a93d5918c20a44297b8ef8e80(fastlåst af en test). - Noter om kompatibilitet for output:
- tabellen for
iq trackhar en afsluttende kolonnefinal_state; - CSV-filen for
iq sweephar en afsluttende kolonnedesign_hash, og dens JSON hardesign_hashogwarnings; - sweepets
mean_cn0_dbhzer nu middelværdien over hver opdatering, der har et NWPR-estimat (resumé med afgrænset hukommelse), ikke længere over anden halvdel af kørslen.
- tabellen for
- Genindfangning er slået fra i den indbyggede standard, hvor tilstandsmaskinen kun observerer, og sløjferne kører bit for bit, som de gør uden den. (Selve standardsløjferne er dog ændret: se FLL-hjælp ovenfor.) Slå den til pr. udformning (
[design.lock] reacquire = true), med--reacquireeller medreacquire=True. - En advarsel for
commensurate_sampling: når fs ligger inden for 1e-6 af et multiplum af halvdelen af chiprate (iq::track::commensurate_samples_per_chip), advareriq track/iq sweep(output,--summary, sweep-JSON), MCP-svaret fraiq_trackog Python-resultatet fraiq_trackom, at jitter og bias i kodesløjfen ikke er repræsentative. Grundårsagen er dokumenteret med tærskler fastsat på forhånd idocs/design/evidence/dll-jitter/. Ved præcis 2 samples pr. chip med 0.5-chip afstand er DLL's S-kurve ét enkelt trin, og sløjfen dithrer: ≈ 0,09 chip RMS-kodefejl (≈ 26 m) ved 45 dB-Hz, mod ≈ 0,004 chip ved en ikke-kommensurabel rate. Den lave NWPR C/N0 på ~2 dB ved den rate har samme årsag. Ved præcis 0 Hz kode-Doppler og 4 samples pr. chip krydser koden aldrig dødzonen på ±0.21 chip, så en kodefase-bias på op til ca. 0,2 chip kan bestå uden at vise sig i jitteren (målt: 0.5-chip afstand giver 2,0× kodefejlen i kontrolkørslen med et gennemsnit på +0,011 chip; 0.25-chip afstand giver +0,125 chip); advarslen dækker raten. - Kendt grænse: standardudformningen overdrager ikke FLL→PLL under ca. 35 dB-Hz (et pull-in-gulv på ~35 dB-Hz; se FLL-hjælp ovenfor og
docs/design/evidence/carrier-lock/). - En falsklås- eller genindfangningssøgning, der ikke kan køre (en rate uden et helt antal samples pr. kodeperiode), stopper ikke længere sporingen.
- Tests:
tests/iq_track_engine.rs,tests/iq_cli.rs,iq::track::design::tests,tests/pythonog MCP IQ-rundturen.
- Tærskler (
C/N0-profiler i syntetiske scener (0.34.0).
iq::channel::cn0_profileplanlægger tidsvarierende C/N0 pr. satellit i Kshanas egne scener som dB-forskydninger i forhold til scenens C/N0. Former: trin, rampe, stykvis lineær og seedede scintillationslignende Rice-fading med en angivet S4 og dekorrelationstid. De anvendes gennem den eksisterende kanalkrog i scenen (Cn0ProfileChannel, sammensat med effekterne fra ionosfære, troposfære, scintillation og flervejs), uden ændring af scenens kerne. Reference-sidecarenscn0_dbhzfølger profilen.- Flader:
kshana iq scene … --cn0-profile <toml>ogkshana.iq_scene(…, cn0_profile="<toml>"). - Hvad den er til: sløjfer, monitorer og kampagnescoring kan stresstestes mod en kendt reference. Den ændrer kun styrken af de legitime signaler.
- Kontroller (
tests/iq_cn0_profile.rs). Tærskler: middelintensiteten af fadingen inden for 5 % af 1, S4 inden for 8 % af målet (ved S4 = 0,3, 0,7 og 1), intensitetskorrelation over 0,9 ved 0,05 τ og under 0,05 ved 5 τ; reference nøjagtigt den angivne C/N0 plus profilen; et sporet fald i NWPR C/N0 inden for 0,7 dB af et trin på 6 dB. Målt: S4 inden for 1,3 % af målet og et sporet fald på 6,26 dB.
- Flader:
Detektionsmonitorer på IQ-stien (0.34.0 "Lab replay"). Nyt modul
iq::monitor, ny kommandokshana iq monitorog ny bindingkshana.iq_monitor(path, ...). De observerer en optagelse og rapporterer tidsserier samt markerede hændelser (start-, alarm- og sluttidspunkter, spids, tærskel). De detekterer og måler kun; intet her genererer et signal.- Totaleffekt / AGC: blokeffekt og den forstærkning, en ideel AGC ville anvende; markerer stigninger og fald.
- Spektrum før korrelation: Welch-PSD pr. blok mod en indlært baseline. Overskudstærsklen kommer fra et mål for falsk alarm. Desuden kompleks kurtosis og en pulsdetektor. Pulsdetektoren tæller samples over en tærskel i hver blok og udløser en hændelse, når den nøjagtige binomiale øvre hale for det antal er under
pulse_pfa(standard 1e-4 pr. blok), ikke når en z-score passerer en grænse: ved de små forventede antal i korte blokke er en enkelt sample allerede flere sigma. - C/N0 pr. kanal: to ensidede CUSUM-ændringsdetektorer (fald og stigning), fodret med uafhængige estimater (skridtet er sat ud fra sløjfens C/N0-vindue).
- SQM fra korrelatorerne: delta
(I_E − I_L)/I_Pog forhold(I_E + I_L)/(2 I_P), plus asymmetritests fra ekstra korrelatorer, når en kanal leverer dem. - Serier for låseindikatorer: PLI og en frekvenslåsindikator fra successive prompts, som rå signaler. Beslutninger om lås og tab af lås forbliver hos sporingsmotorens låsetilstandsmaskine.
Ét streamet gennemløb (
iq::monitor::run::run_monitors) kører det hele med en TOML/JSON-indstillingsfil (MonitorConfig); kampagnekøreren bruger samme indgang. Alt er MODELLED. Hver statistik kontrolleres mod sin lukkede form ved seedet simulering (tests/iq_monitor.rs):- overskridelser af blokeffekt mod Gamma-halen;
- kurtosis-middelværdi 2 og spredning
2/√N; - pulsandel
e^{−t}; - CUSUM-løbelængder mod Siegmunds approksimation (målt 330 og 8,46 samples mod 338 og 8,34);
- faselåsindikatoren mod middelværdien for Rician-fase;
- på et sporet C/A-signal afviger spredningen af SQM-delta og -forhold med omkring 6 % fra de førsteordens lukkede former (målt 5,97 %; testtærskel 12 %).
Formlen for falsk alarm ved spektralt overskud er en approksimation; den målte rate var 1,3× formlen. Fra ende til anden markerer monitorerne:
- et trin på 6 dB i C/N0 (ændringstidspunktet inden for ét estimat);
- en reflekteret sti, der dukker op midt i optagelsen (forholdstest);
- et signaludfald (PLI falder fra 0,999 til −0,3 og FLI fra 0,93 til 0,03 under det);
- en smalbåndstone og spredte samples med høj amplitude (spektral-, puls- og kurtosistest). Det er generiske DSP-testinput, ikke interferensmodeller.
Ændret#
iq track/iq sweepstreamer gennem den nye session (se Tilføjet).--csvbeholder sine kolonner fra 0,32, men streames nu, så rækker fra flere kanaler flettes i tidsorden i stedet for at være grupperet efter kanal.--jsonbeholder sin form fra 0,32 og holder stadig hver epoke i hukommelsen: brug--epochstil lange optagelser.iq sweepmåler jitter over opdateringerne i anden halvdel af kørslens varighed (tidligere anden halvdel af antallet af opdateringer), og dens CSV/JSON får en kolonnedesign_hash.- Sporingstabellen får en kolonne
final_state. - Brugsteksten påstår ikke længere, at
iq tracktager front-end-flagene; kuniq acquireanvender dem. - I Python har
iq_tracknu som standardNoneforacq_noncoherentogdoppler_max(udformningens værdier, 1 og 5000 Hz i den indbyggede udformning). Dens epoker får early/late-korrelatorerne,carrier_phase_cycles,bit_edge,bitogstate, og resultatet fårdesignogevents.
Rettet#
Standardskridtet for indfangning overdrager ikke længere et residual til Galileo E1-sporing, som FLL'en ikke kan trække ind. Skridtet
2 / (3 · N · T_code)efterlader op til1 / (3 · N · T_code)Doppler-fejl ved overdragelsen, men den standardmæssige tokvadrant-FLL trækker kun1 / (4 T_track)ind. For hver kode på 4 ms eller længere (N = 1), herunder Galileo E1-B og E1-C, lå residualet (83,3 Hz ved 4 ms) uden for pull-in på 62,5 Hz, og sporingen falsklåste ved +125 Hz med en faselåsindikator på 0,97, der skjulte det. Standardskridtet er nu desuden begrænset til0.2 / T_track(kshana::iq::acq::default_step_hz), 0,8 af pull-in, så overdragelsen forbliver inden for den, selv når nabobinnen vinder. (0,4 blev prøvet først: den falsklåste 1 kørsel ud af 42 på E1-B, og en kohærent GPS L1 C/A-søgning på 1 ms valgte en bin 350 Hz fra og låste ved +500 Hz; 0,25 og 0,2 havde ingen i de samme kørsler.) Pris: Galileo E1-B/E1-C går fra bins på 166,7 Hz til 50 Hz, 201 bins over ±5 kHz i stedet for 61; koderne på 1 ms (166,7 Hz,N = 4) er uændrede."auto"i en sløjfeudformning betyder dette; et eksplicitdoppler_step_hzeller--doppler-stepbruges, som det står, ogiq acquire(ingen sporingsoverdragelse) beholder lærebogsskridtet. Epokehovedet og--summaryregistrerer nu det opløste skridt og sløjfebåndbredderne for hver kanal (resolved). Standardudformningens hash er uændret. Ændring i output: detektioner på koder på 4 ms og længere kan lande i andre Doppler-bins.GPS L2C CM (20 ms sløjfeopdatering) holder lås med standardudformningen. Standard-PLL'en på 15 Hz og FLL'en på 10 Hz har
Bn · Tpå 0,3 og 0,2 ved T = 20 ms, og sløjfen mistede låsen selv fra en perfekt start (PLI −0,08, M2M4 15,8 dB-Hz). Ny udformningsnøglecarrier.bn_t_max(standard 0,1) begrænser PLL- og FLL-støjbåndbredderne tilbn_t_max / T, når sløjfeopdateringstiden er længere end 4 ms (Design::loop_config_for): 5 Hz og 5 Hz ved 20 ms, 10 Hz og 10 Hz ved 10 ms for BeiDou B1C; koderne på 1 ms og 4 ms beholder 15 og 10 Hz. Den gælder også for eksplicitte båndbredder;bn_t_max = 0slår den fra. Nøglen udelades fra den kanoniske form ved sin standard, så standardhashen er uændret; en udformning, der sætter en anden værdi, har en anden hash. Ved 45 dB-Hz giver L2C CM nu PLI 0,996, Doppler-fejl 0,00 Hz og M2M4 42,71 dB-Hz. Kendt åbent punkt: NWPR C/N0 aflæses her 1,76 dB for lavt (og 2,45 dB for lavt på B1C ved 10 ms), så rækken T5 i matricen for L2C forbliver et ignoreret fund.docs/assets/clock-ensemble-band.svgregenereret: den committede figur var forældet i forhold til sit eget scenarie (en dataændring, ikke en gentegning). Diagrammet blev tegnet 2026-06-02 ud frascenarios/clock-ensemble.toml; to dage senere satte 67fed19e flicker-FM-gulvene i det scenarie (kvanteflicker_floor = 1e-16, CSACflicker_floor = 2e-11), og figuren blev aldrig tegnet om. Den viste kørslen før gulvene: y-akse 0 til 47 ns, CSAC-udfald p95 pr. kørsel på 10,5 til 47,6 ns (middel 25,2 ns), klassisk holdover 4050 s i middel. Scenariet, som det leveres (og som tutorialen og CLI-oversigten allerede angiver), giver y-akse 0 til 407 ns, CSAC p95 pr. kørsel 40,8 til 374,0 ns (middel 167,0 ns), klassisk holdover 844 s [220 til 2130 s]; specifikationslinjen på 20 ns ligger på de samme 20 ns på en akse, der er omtrent ni gange højere. Motoren er uændret: dagens motor på junifilen for scenariet gengiver den gamle figurs akse nøjagtigt. Figuren refereres ikke fra README eller dokumentationen.
Kendte begrænsninger#
- NWPR C/N0 aflæses for lavt ved høj C/N0·T pr. prompt, og BOC(1.1) ved 5 MS/s mister omkring 1 dB. NWPR er uden bias på ideelle prompts, men sløjfens egen PLL-jitter koster omkring en tilpasset 8 dB × Bn·T (én scene, fire punkter: −0.24/−0.44/−0.77/−1,58 dB ved 1/2.5/5/10 Hz og 20 ms; omkring −1 dB ved standarden
bn_t_max = 0.1); M2M4 er ufølsom. BeiDou B1C-data ved 5 MS/s mister også omkring 1 dB promptseffekt til båndbegrænsning (brug 10 MS/s eller mere). Ingen af delene er en estimatorfejl; rækkerne T5 i signalmatricen for GPS L2C og BeiDou B1C forbliver ignorerede fund med disse årsager.
[0.33.1] - 2026-10-08#
Sikkerhed#
- Diagramtekst og Studios overtagelse af diagrammer er hærdet. Tekst, som et scenarie fører ind i et genereret diagram, escapes nu ensartet af én fælles rutine, og Studio overtager kun tegnemarkup fra et diagram. Studios adresseparametre, opslag efter nøgle og type samt hentning af scenarier er begrænset til kendte værdier. Medfølgende diagrammer, registrerede resultater og offentliggjorte tal er uændrede. Opgradering anbefales til alle, der åbner scenariefiler fra ikke-betroede kilder i Studio eller indlejrer genererede diagrammer på websider. Sikkerhedsbulletin: GHSA-h25h-cg9f-v2cg.
[0.33.0] - 2026-10-08#
Dokumentation#
- Interferens- og spoofing-omfanget af IQ-laget, angivet nøjagtigt. Posterne for 0.31.0 og 0.32.0 nedenfor siger, at IQ-laget tilføjer "ingen syntese af interferens- eller spoofing-bølgeformer". Det er rigtigt for selve IQ-laget (
iq::scenegenererer kun legitime GNSS-signaler), men det blev læst som en udtalelse om hele motoren, og det er det ikke: siden 0.29.0 skriver sektionen[iq]i scenarietypenspectrumet SigMF-snapshot af sin analytiske model med de konfigurerede jammere i (støjlignende jammere bin for bin, toner og chirps som bølgeformer), ogspoof_capturesummerer et autentisk signal og et spoofer-replikasignal i hukommelsen for at teste sløjfens opfangning (kompositten skrives aldrig ud). Motoren har desuden båret en software-GNSS-modtager siden 0.20.0 (sdr: indfangning og sporing; siden 0.31.0 ogsåiq::acqogiq::track). Intet i Kshana sender eller styrer radiohardware. Statuslinjen i README,docs/POSITIONING.md,docs/SPECTRUM.mdog IQ-designnoterne siger det nu; de udgivne poster er bevaret, som de blev offentliggjort. Ingen adfærd ændres. - Kendt begrænsning: kommensurabel sampling. Ved en samplerate, der er et heltals- eller halvtalsmultiplum af chiprate, ligger samplene på de samme chipfaser i hver chip, og kodediskriminatoren bliver en trappefunktion. På et syntetisk GPS L1 C/A-signal ved 45 dB-Hz med 0.5-chip afstand giver 2,046 MHz (2 samples/chip) ≈ 0,09 chip (≈ 26 m) RMS-kodefejl og en bias på −0,09 chip, mod ≈ 0,003 chip ved en ikke-kommensurabel rate. NWPR C/N0 aflæses ≈ 2,4 dB for lavt dér. Ved 4,092 MHz afhænger det af afstanden og kode-Doppler. Ved 0,5 chip er det harmløst ved 1500 Hz Doppler, men 2× med en bias på 0,011 chip ved 0 Hz, og ved 0,25 eller 0,1 chip er det 8–10× kodefejlen. Bæresporing er upåvirket.
docs/design/iq-notes/receiver.mdhar målingerne.
Tilføjet#
GNSS IQ-lag på MCP-serveren (fase B.1).
kshana-mcpfår seks værktøjer, der driver lagetkshana iqfra en agent:iq_signals(de accepterede signalnavne og IQ-opsætningen),iq_info(beskriv en optagelse),iq_scene(generer en scene med angivet profil eller broadcast-efemeride, med den valgfri kanal på signalniveau),iq_acquire(FFT-indfangning, eventuelt bag front-end-trin),iq_track(indfang, derefter DLL/PLL/FLL-banken) ogiq_frontend(båndpas, notch, blanking, excision, AGC, kvantiserer). IQ-samples krydser aldrig protokollen: hvert værktøj tager filstier inde i én arbejdsmappe sat afKSHANA_MCP_IQ_DIR(usat slår IQ-filværktøjerne fra og lader alle andre værktøjer upåvirkede), afviser stier, der opløses uden for den, og output, der allerede findes, medmindreoverwriteer sat, håndhæver et sample-budget pr. kald (KSHANA_MCP_IQ_MAX_SAMPLES, standard 50.000.000) før noget arbejde, afviser ukendte argumenter og svarer med et kompakt JSON-resumé (detektioner, C/N0, låsetilstand og hver skrevet fil med sit antal bytes). Output pr. epoke går kun til filer, som kalderen navngiver. Værktøjerne kører samme kodesti som CLI'en gennem en ny offentlig grænseflade,kshana::iq::cli::execute, som returnerer CLI'ens meddelelse i stedet for at udskrive den (stdout er MCP's JSON-RPC-kanal);iq::cli::build_codeogiq::cli::signal_nameser nu også offentlige. Kun software og additivt: IQ-laget tilføjer ingen syntese af interferens eller spoofer, intet sendes nogensinde, og der er ingen nye afhængigheder.server.jsonerklærer de to miljøvariabler. Round-trip-tests imcp/kshana-mcp/tests/iq_round_trip.rsgenererer en kort scene med to satellitter og kontrollerer indfangning mod scenens egen reference-sidecar, sporingslås og C/N0, front-end, SigMF-output, budgettet, stiafgrænsning og den deaktiverede tilstand.GNSS IQ-laget i valideringsregisteret. En krydskontrol fastsat på forhånd mod gps-sdr-sim (en uafhængig GPS L1 C/A-basisbåndsgenerator, MIT, commit 28ca29a6) er nu en del af den altid aktive testsuite (
tests/iq_gpssdrsim_cross_generator.rs). Dens committede referenceoutput (tests/fixtures/iq_gpssdrsim_cross_generator/: 20 ms af gps-sdr-sims eget 8-bit I/Q, dens kanalliste og kanaltilstanden bag den fra en harness linket mod samme build) regenereres afscripts/gen_iq_gpssdrsim_ref.sh. Intet ved testtid behøver netværk eller det eksterne værktøj. To registerrækker tilføjes (251 rækker: 124 valideret, 123 modelleret, 4 partner):- GNSS IQ-scenens signalgeometri mod en uafhængig basisbåndsgenerator: Valideret. Scenens reference (synligt sæt, pseudorange, kodefase, Doppler, sigtevinkler) for en scene med broadcast-efemeride stemmer med gps-sdr-sims kanaltilstand på alle 11 kanaler: værst 1,6 mm, 5.5e-6 chip, 7.4e-5 Hz, 4e-9 grad, mod tærskler på 0,05 m, 2e-4 chip, 0,02 Hz og 1e-4 grad fastsat før kørslen.
- GNSS IQ-indfangning på uafhængigt genererede I/Q-samples: Modelleret, med et fund.
iq::acqfinder hver simuleret satellit i gps-sdr-sims samples inden for de registrerede tærskler (kodefase inden for 0,195 chip, Doppler inden for 72 Hz). Den registrerede tærskel "ingen anden PRN detekteret" fejler dog: på gps-sdr-sims støjfrie output overskrides tærsklen for gaussisk støj af de andre satellitters krydskorrelation for alle 21 fraværende PRN'er. Den strenge test beholdes, ignoreret med fundet, og en fastlåst test registrerer det. Ingen motorkode eller offentlig API ændres. Sample-I/Q sammenlignes ikke sample for sample: gps-sdr-sims heltals-sinustabel, forstærkninger, nul begyndelsesbærebølgefase og trunkerede LNAV-felter er ikke størrelser, en modtager behøver at være enig om. Sammenligningen foretages på de observabler, en modtager måler.
Ændret#
iq trackoverdrager som standard fra en indfangning på ≈4 ms (adfærdsændring). Indfangningen, der initialiserer hver sporingskanal, integrerer nuceil(4 ms / T_code)kodeperioder kohærent i stedet for én, hvorT_codeer kodens fulde periode (primær gange sekundær længde for en lagdelt kode, den enhed indfangningen integrerer over). De ulagdelte koder på 1 ms (GPS L1 C/A, BeiDou B1I, GLONASS L1OF) søger nu 4 perioder (4 ms), så standard-Doppler-skridtet2 / (3 · N · T_code)er ~167 Hz i stedet for ~667 Hz. Hver kode, hvis fulde periode allerede er 4 ms eller længere, beholder 1 periode: Galileo E1-B (4 ms), BeiDou B1C (10 ms) og de lagdelte GPS L5-I/L5-Q, Galileo E5a-I/E5a-Q og E1-C (10 til 100 ms med deres overlay-koder) samt GPS L2C. Hvert signal integrerer derfor mindst ~4 ms. En søgning på én periode kunne overdrage en kanal op til ~333 Hz ved siden af, uden for FLL'ens pull-in, og den sporede så en falsk lås ~500 Hz væk, mens den rapporterede en ren sporing. På et seedet sweep af 180 GPS L1 C/A-kanaler (Doppler på tværs af ±5 kHz, 38 til 47 dB-Hz, halvdelen med navigationsdata;docs/design/evidence/iq-track-acq-default/, kan genkøres) falder falske låse fra 27 af 180 til 1 af 180, og oversete indfangninger fra 102 til 11, for ~40 ms mere søgning pr. PRN på GPS L1 (11 → 52 ms). Den ene resterende falske lås er ved 38 dB-Hz, 36 Hz ved siden af. Alle flader stemmer:kshana iq trackogkshana iq sweep(--acq-coherent), Pythonkshana.iq_track(acq_coherent=Noneer nu auto; stub opdateret) og MCP-værktøjetiq_track. Brugere, der var afhængige af den gamle standard, kan angiveacq_coherent=1(--acq-coherent 1). Standarden for--coherentikshana iq acquireforbliver 1. Nye offentligeiq::acq::auto_coherent_periodsogiq::acq::AUTO_COHERENT_S; regressionstesttests/iq_cli.rs::track_default_handoff_does_not_false_lock_where_one_period_did.- Hver genereret grafik følger nu webstedets Observatory-tema: hvert diagrams bytes ændres. Det er en bevidst revision af de offentliggjorte figurer, kun farver og skrifttyper; ingen plottet værdi, koordinat eller etiket er flyttet. Hvert scenaries
*.chart.svg(og dermed Studios diagrameksport og README-demodiagrammerne), kørselsrapportens HTML (*.report.html), tidslinjeanimationen (--animate), HTML-siderne for scenarieresultater og studier, valideringsoversigten samt dokumentationens figurer og diagrammer brugte den varme mørke juli-palet (#0c0b08baggrund,#e0bd84guld) og et varmt papirtema til rapporter. De henter nu hver farve og skrifttype fra ét modul,src/palette.rs, som spejlerweb/theme.css: diagrammer tegnes instrumentmørkt på Observatory-baggrunden (#060A14) i Geist-skriftstakken; rapporten, animationsafspilleren og resultatsiderne følger seerens lyse/mørke præference med Observatory-tokens for lys og mørk. De seks fejldomæner beholder hver én farve (interferens koral, spoofing magenta, tidssynkronisering blå, baner cyan, integritet lime, navigation rav), og evidensniveauerne læses valideret lime, modelleret rav, partner magenta. Vandfaldsfarveskalaerne beholder deres perceptuelle (inferno) rækkefølge, forankret påny i den nye baggrund.tests/palette_sync.rsholder modulet synkroniseret medweb/theme.cssi begge temaer, kontrollerer, atdocs/assets/palette.jsonogdocs/diagrams/mermaid-config.json(begge genereret fra modulet, til Python-figurværktøjerne og mermaid-cli) er aktuelle, og slår fejl, hvis en hex-farvekonstant optræder isrc/uden for paletten.tests/published_figures_still_reproduce.rsfår en tredje diagnose, "kun farver og skrifttyper er flyttet", så en paletrevision kan skelnes fra en flyttet plottet værdi. Hvert gengivet README-diagram blev kontrolleret lig sin forgænger under denne normalisering.tools/gen_validation_figures.pylæser paletten og genererer nu også de tre README-resultatfigurer, der ikke havde nogen committet generator (domain-coverage-map,scenario-fom,sgp4-regime-bars), med rigtige tekstelementer, ud fraweb/capabilities.json, resultatetclock-holdoverogtests/fixtures/sgp4_comparison.md.tools/gen_readme_assets.pylæser samme palet, hvilket retter dens afdrift fra webstedet i lyst tema. Værdierne isgp4-regime-barser kolonnen med værste tilfælde forkshana↔refi den fixture (7.31e-9, 8.05e-9, 8.18e-9 og 4.12e-6 km), uændret fra Matplotlib-figuren, ogtests/figures_doc_sync.rsslår nu fejl, hvis den committede figur og fixturen er uenige.
docs/assets/figures/domain-coverage-mapopdateret til aktuelle data (en dataændring, ikke en gentegning). Figuren angav 28 funktioner på tværs af 8 domæner (11 validerede, 17 modellerede), forældet i forhold til sin egen angivne kilde; tegnet nu af sin nye generator ud fraweb/capabilities.jsonviser den 46 funktioner på tværs af 8 domæner (17 validerede, 29 modellerede).
Rettet#
Q for CW/smalbåndsjammere er nu 1,0, ikke 1,5. Lærebogsværdien for en tone på bæreren er 1 (en tone bevarer signalets spektrale spids,
κ = T_c,Q = 1/(R_c κ)); den gamle 1,5 gjorde en tone mindre skadelig end bredbåndsstøj ved samme J/S. Ændring i output: omkring −1,8 dB effektiv C/N0 under CW/smalbåndsjammere ved høj J/S i scenarietypernejamming,lunar-jammingog interop (tonen i det medfølgende eksempelspectrum: 17,98 dB-Hz fra tabellen, var 19,74). Bredbånds-Q forbliver 1,0 (konservativt, omkring 3 dB under lærebogens ~2) i afventning af gennemgang af 0,34. Sætq_overridefor at beholde den gamle 1,5.Heltalsoutput fra
kshana iq scenebruger heltalsintervallet. Med enhedseffektstøj og en skriveskala på 1 kom scener ici8/ci16ud som omkring {-1, 0, 1}, og 2-bit-scener havde deres tærskler ved 2,8 sigma. Heltalsformater skaleres nu, så den forventede RMS pr. komponent er en fjerdedel af fuld skala (31,75 LSB i ci8, 8191,75 i ci16) eller 2 LSB i 2-bit. Skalaen og antallet af klippede elementer udskrives og skrives til sidecar-filen. Float-output er uændret.Otte fixture-pins i syv testfiler slår ikke længere fejl på macOS på grund af forskelle i sidste bit (del af issue #36). De pins, der kontrollerer, at motoren stadig bygger en uafhængig references committede inputs (Jacobianer, en tilstandstabel, opsendelsesazimutter), sammenlignede bit for bit og slog fejl på macOS arm64 med 2 til nogle tusinde enheder på sidste plads (ulp). De sammenligner nu inden for 1e-12 af en skala taget fra fixturen; heltal, nøgler og længder sammenlignes stadig nøjagtigt, og en mutationstest viser, at en relativ ændring på 1e-6 stadig slår fejl. Pinnen for opsendelsesazimut sammenligner
sin azog den opstigende/nedstigende gren i stedet for selve azimutten, fordiasinforstærker én ulp af sit argument til omkring 3e-9 rad, hvor en inklination er lig med et steds kobredde. Ingen tolerance for en uafhængig reference og ingen tærskel fastsat på forhånd er ændret. To tests (månens fælles OD, månens observerbarhed) er ikke dækket: på macOS flytter deres præregistrerede sammenligninger sig selv, og det overlades til en opfølgning.kshana iq trackogkshana iq sweepanvender front-end-flagene. Brugsteksten annoncerede--bandpass/--notch/--blank/--excise/--agc/--bitspåtrack, mentrackogsweepbyggede aldrig kæden: flagene blev tavst ignoreret, og et flag uden værdi som--notchslugte flaget efter sig. Begge kommandoer parser dem nu, somiq acquiregør, og sætter en ny front-end-kæde foran indfangningsgennemløbet og sporingsgennemløbet. Outputtet svarer til at køre kommandoen på den fil,iq frontendskriver for de samme flag.IQ-scenedata placeres pr. signal.
kshana iq scene --data(ogNavData::Seeded) lagde bits på 50 bit/s på hvert signal, piloter inklusive, og med GPS LNAV-raten på Galileo og BeiDou. Data følger nu hvert signals egen symboltakt, angivet af den nyeSpreadingCode::data_modulation()(DataModulation, sat af 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 afvises på piloter, på GPS L2C som én CM/CL-strøm, ogNavData::Lnavpå alt andet end L1 C/A. Brugerdefinerede koder beholder den tidligere takt på 20 ms som standard. En programmatiskScene, der bad omNavData::Lnavpå en kode, der ikke er L1 C/A, ellerNavData::Seededpå en pilot, plejede at generere tavst og returnerer nu en fejl ved første læsning.GLONASS L1OF-kanaler indfanges og spores på deres egen FDMA-bærebølge.
iq::acq::acquireog sporingskanalerne blandede hver kode ned fra kunif_hz. I en GLONASS-optagelse med flere kanaler fandt en søgning efter kanal +3 derfor signalet fra kanal 0 (alle kanaler deler én afstandskode) og kiggede aldrig 1,6875 MHz højere. Begge bruger nuSampleSpec::baseband_hz(carrier) = if_hz + (carrier − center_hz). Bæreleddet er nul for enhver optagelse centreret på signalets egen bærebølge og udelades, når centret er ukendt, så CDMA-behandling er uændret. Hvis du har omgået den gamle adfærd ved at læggecarrier − centerind i sidecar-filensif_hz, så fjern det led: forskydningen anvendes nu fra bæreren og centret, så hvis det bliver, anvendes den to gange. Kendt begrænsning, uændret her: en GLONASS-scene identificerer hver satellit ved sin frekvenskanalk, og satellit-id'et af typenu32ombrydes ved en negativ kanal. Reference-sidecar-filen skriverk = -7somsat_id4294967289 (k + 2^32). Læs den tilbage somkmed en cast tili32.
[0.32.0] - 2026-10-05#
Tilføjet#
- GNSS IQ-laget i CLI og Python (0.32.0 fase A). Det eksisterende modul
iqkan nu bruges uden at skrive Rust. Fem nye kommandoer underkshana iqslutter sig til gruppen for datahåndtering:scenegenererer en lang IQ-scene med flere satellitter til en fil med en reference-sidecar;acquirekører FFT-indfangning af en eller flere PRN'er over en optagelse og rapporterer hver detektion (PRN, Doppler, kodefase, statistik, tærskel);trackindfanger og kører derefter DLL/PLL/FLL-banken over en optagelse og udsender sporingsoutput pr. epoke (CSV/JSON) med konfigurerbare sløjfebåndbredder, integrationstid og korrelatorafstand;sweepgenafspiller én optagelse over flere sløjfeudformninger og rapporterer de resulterende jitter- og låsemål pr. udformning; oglabfittilpasser modellen for tab af sløjfelås til en tidslinje for modtagertillid. Den samme kerne er eksponeret for Python (kshana.iq_scene,iq_acquire,iq_track,iq_labfit,iq_signals) og returnerer NumPy-venlige lister og dicts. Kun software og additivt: ingen nye afhængigheder, ingen udsendelse, ingen syntese af interferens- eller spoofing-bølgeformer; motoren, indfangningen, sporingen og sløjfeudformningerne er crate'ens egne, så en CLI- eller Python-kalder får de samme bits som Rust-testene. Nyt moduliq::cli; sceneens egen reference-sidecar er den uafhængige reference itests/iq_cli.rs(indfangning genfinder hver indsat kodefase og Doppler, sporing konvergerer mod den indsatte Doppler). Intet offentliggjort antal scenarietyper og ingen række i verifikationsmatricen ændres. - Resterende GNSS IQ-biblioteksfunktioner i CLI-kommandoen
iqog i Python (0.32.0 fase A.2). Bygger videre på fase A og gør resten af lagetiqtilgængeligt uden at skrive Rust:- Udbredelseskanal på
iq scene(og Pythoniq_scene): en førsteordens ionosfære (--iono-stec/--iono-vteceller--iono-klobuchar), Saastamoinen/Niell-troposfæren (--tropo), Cornell-scintillationsmodellen (--s4,--scint-tau0,--sigma-phi), spekulær flervejs fra jorden (--multipath-height/--multipath-ground), landmobilkanalen med tre tilstande (--land-mobile) og en blok uden sigtelinje (--nlos) anvendes på hver satellit gennem en ny crate-intern bro (iq::channel::SceneChannelAdapter), der omregner kanalmodellernes absolutte stier til sceneformen med overskud over geometrien. - SigMF-output på
iq scene(--format sigmf): skriver samples som et par.sigmf-data/.sigmf-metamed en capture og annotationer pr. satellit;acquire/tracklæser allerede SigMF, så en scene kan gennemløbes frem og tilbage uden tab. - Front-end-DSP: en ny kommando
iq frontend <in> <out>og de samme flag påacquire/track(--bandpass,--notch,--blank,--excise,--agc,--bits1/2/3/8/14) kører trinnene iiq::frontend(båndpas-FIR, adaptivt notch, pulsblanking, excision i frekvensdomænet, AGC, kvantiserer); spejlet i Python somiq_frontend. - Scener med broadcast-efemeride:
iq scene --nav <rinex_nav> --rx-pos lat,lon,alt(med--start/--window/--prn) placerer hver sunde GPS-satellit i dens sande broadcast-geometri ved hjælp af motorens RINEX-læser, så reference-sidecar-filen bærer den reelle afstand, Doppler og kodefase pr. satellit; spejlet i Python somiq_scene_broadcast. Kun software og additivt: ingen nye afhængigheder, ingen udsendelse, ingen syntese af interferens- eller spoofing-bølgeformer (kanalens udbredelseseffekter virker kun på det legitime signal). Hver numerisk påstand er testet mod en uafhængig reference (lukket form eller indsat reference) i enhedstestene for kanal/front-end og itests/iq_cli.rs.
- Udbredelseskanal på
[0.31.0] - 2026-10-04#
Tilføjet#
- GNSS IQ-lag: simulering på signalniveau og softwaremodtagerbehandling. Et nyt modul
iqløfter Kshana fra en front-end til én satellit og korte blokke i L1 C/A til et fuldt lag på signalniveau, tilgængeligt fra kommandogruppenkshana iq. Det genererer lange rå IQ-scener med flere satellitter med en reference-sidecar pr. epoke (iq::scene); anvender udbredelse på signalniveau — ionosfære med kode-bærebølge-divergens, troposfære, amplitude- og fasescintillation (Cornell-modellen), Fresnel-flervejs og en landmobilkanal med tre tilstande, med manglende sigtelinje (iq::channel); indfanger og sporer med FFT-indfangning og en DLL/PLL/FLL-bank med flere kanaler og genafspiller én optagelse gennem mange sløjfeudformninger (iq::acq,iq::track); modellerer front-end — FIR/IIR-filtrering, kvantisering fra 1 til 14 bit, AGC, notch, pulsblanking og excision i frekvensdomænet (iq::frontend); streamer store optagede datasæt med afgrænset hukommelse — formaterne int8/int16/float32/pakket 2-bit og reel IF, SigMF med flere filer, resampling, en datasætfortegnelse med SHA-256 pr. fil og en batchkører (iq::io); tilføjer spredningskoder til GPS L5/L2C, Galileo E1 (CBOC, rigtige ICD-hukommelseskoder) og E5a, BeiDou B1C/B1I og GLONASS L1OF, hver kontrolleret mod sit interfacekontroldokument (iq::signals); og tilpasser modellen for tab af sløjfelås til en rigtig modtagers observerede adfærd i laboratoriekørsler, med leave-one-run-out-fejl på tilbageholdt datasæt og ekstrapolering mærket som forudsigelse (iq::labfit). Hver numerisk påstand testes mod en uafhængig reference (en ICD-tabel, en lukket form eller en uafhængig modtager, der genfinder den indsatte reference); de fysiske kanal- og sløjfemodeller forbliver MODELLED. Dette er kun et softwarelag: det skriver IQ-filer til softwaremodtagere og syntetiserer ikke interferens- eller spoofing-bølgeformer og styrer ikke radiohardware. Intet offentliggjort antal scenarietyper og ingen række i verifikationsmatricen ændres. Udformning:docs/design/GNSS-IQ-PLAN.md. - Modtagertillid: vurder en rigtig GNSS-modtagerlog.
kshana receiver-trust <scenario.toml>læser en log fra u-blox UBX, RINEX 3 (med en valgfri broadcast-navigationsfil), Android GnssLogger eller NMEA 0183 ind i én tidsstemplet tidslinje og kører tillidsmonitorer over den: fald i bærebølge-til-støj-tæthed (C/N0), tab af lås, automatisk forstærkningsstyring (AGC), u-bloxs jamming-indikator, positionsspring og, med RINEX og navigation, motorens egen enkeltpunktspositionsbestemmelse med paritetsbaseret autonom integritetskontrol i modtageren (RAIM) og den urstøttede monitor. Hver epoke er nominel, forringet eller upålidelig, og resultatet siger hvornår og hvorfor. Hændelser og forudsagte fald i C/N0, der er angivet i scenariet, scores mod tolerancer angivet i samme fil: detekteret, sen eller overset, og enig eller uenig. Output er resultat-JSON, en CSV pr. epoke og et diagram; resultatet bærer logens SHA-256 og hver tærskel. Kan også nås fra Python (kshana.receiver_trust), WebAssembly-pakken (receiver_trust, logs inline) og Model Context Protocol-serverens (MCP) nye værktøjassess_receiver_log. Guide:docs/RECEIVER-TRUST.md; eksempel:examples/receiver-trust/. På spoofing-logs fra JammerTest 2024 gengiver motorstien den præregistrerede pipelines første alarm ved hvert offentliggjort starttidspunkt (tests/receiver_trust_jammertest.rs). Monitorerne forbliver MODELLED; ingen række i verifikationsmatricen ændres.
0.30.0 - 2026-10-03#
En minor-udgivelse. Valideringsrunde 2 og pakkerne fra bølge 1 løfter verifikationsmatricen fra 223 rækker (93 VALIDATED) ved 0.29.3 til 249 rækker (123 VALIDATED, 122 MODELLED, 4 PARTNER); hver oprykning blev kontrolleret mod en uafhængig reference med en tolerance fastsat før kørslen, og hver uenighed offentliggøres som et fund. Nyt: en native NAIF-kernelæser og DE440-sti, én valideret SGP4-til-ITRS-propagerings- og tidssti, et målt urbibliotek, en LunaNet AFS-referencegenerator, løsere med udvidet præcision og kvadratrodsinformation og rigtig IQ-behandling af månedata fra LuGRE. Offentliggjorte tal, der flyttede sig, er opført som revisioner nedenfor.
Syvogtyve rækker i verifikationsmatricen bliver VALIDATED, efter at en uafhængig reference stemte inden for en tolerance fastsat før den første sammenligning (oprykningsreglen i docs/VALIDATION.md): ti i en første valideringsrunde og sytten i en anden. Enoghalvtreds MODELLED-rækker blev stillet over for en ekstern reference i den første runde og de resterende rækker, der kunne tages op, i den anden; hver uenighed er registreret nedenfor som et fund frem for at blive tunet væk. Tre rækker blev delt, så en valideret del ikke bærer en uvalideret rest, hvilket løfter matricen fra 223 til 226 rækker; valideringspakkerne, der siden er føjet til, tager den til 249. Tallene er læst fra den genererede docs/VERIFICATION-MATRIX.md.
| 0.29.0 | efter runde 1 | Ikke udgivet | |
|---|---|---|---|
| Rækker i verifikationsmatricen | 223 | 223 | 249 |
| heraf VALIDATED mod en uafhængig ekstern reference | 83 | 93 | 123 |
| heraf MODELLED | 136 | 126 | 122 |
| heraf PARTNER | 4 | 4 | 4 |
Forkortelser brugt i denne post
| Forkortelse | Betydning |
|---|---|
| ADD, ARAIM, MAAST | Airborne Design Document (for ARAIM); avanceret autonom integritetskontrol i modtageren; Stanford Universitys Matlab Algorithm Availability Simulation Tool |
| ADEV, VRW, ARW | Allan-deviation; hastighedsrandomwalk; vinkelrandomwalk |
| ANISE, SPICE, NAIF, PCK | et open source-værktøj til astrodynamik (Nyx Space); NASA's værktøj Spacecraft, Planet, Instrument, C-matrix, Events fra dets Navigation and Ancillary Information Facility; planetkonstantkerne |
| BCRS, TDB, TT | barycentrisk himmelsk referencesystem; barycentrisk dynamisk tid; terrestrisk tid |
| BIPM, UTC(k) | Det Internationale Bureau for Mål og Vægt; et laboratoriums realisering af koordineret universaltid |
| CCSDS, OEM, LTC, TCL | Consultative Committee for Space Data Systems; Orbit Ephemeris Message; månetidssystemer skrevet i meddelelsens felt TIME_SYSTEM |
| CRLB | Cramér–Rao nedre grænse |
| CW | Clohessy–Wiltshire relativ bevægelse |
| DE440 | Development Ephemeris 440 fra Jet Propulsion Laboratory |
| DOP, PDOP | præcisionsfortynding; positionspræcisionsfortynding |
| EKF, UKF, INS, GNSS, IMU | udvidet Kalman-filter; unscented Kalman-filter; inertinavigationssystem; globalt satellitnavigationssystem; inertimåleenhed |
| EMT, VPL, HPL | effektiv monitortærskel; lodret og vandret beskyttelsesniveau |
| EOP, IERS, PCC, MAE | Jordens orienteringsparametre; International Earth Rotation and Reference Systems Service; Prediction Comparison Campaign; middelabsolutfejl |
| ERFA, SOFA | Essential Routines for Fundamental Astronomy; Standards of Fundamental Astronomy |
| GMAT | NASA's General Mission Analysis Tool |
| NTN, SSB | ikke-terrestrisk netværk (3GPP); synkroniseringssignalblok |
| IGS, ILRS, ITRF2020 | International GNSS Service; International Laser Ranging Service; International Terrestrial Reference Frame 2020 |
| ILS, LAMBDA | heltals-mindste-kvadrater; Least-squares AMBiguity Decorrelation Adjustment |
| ISB | intersystembias |
| LEO | lav jordbane |
| MHSS, PL, TPL | løsningsseparation med flere hypoteser; beskyttelsesniveau; beskyttelsesniveau for tidssynkronisering |
| PSD, IQ, SigMF | effektspektraltæthed; in-phase- og kvadratursamples; Signal Metadata Format |
| QPN | kvanteprojektionsstøj |
| RAIM | autonom integritetskontrol i modtageren |
| SBAS, WAAS, DFMC, GEO | satellitbaseret augmenteringssystem; det amerikanske Wide Area Augmentation System; dobbeltfrekvens med flere konstellationer; en geostationær SBAS-satellit |
| RMS, SISRE | kvadratisk middelværdi; signal-i-rummet-afstandsfejl |
| RTKLIB | et open source-bibliotek til GNSS-positionering |
| TCXO | temperaturkompenseret krystaloscillator |
| VLBI | interferometri med meget lang baseline |
Valideret#
Hver række nedenfor angiver sin type uafhængig reference (Library: et uafhængigt tredjepartsbibliotek, der beregner en entydigt defineret størrelse; Measured: rigtige måledata; P2: et uafhængigt numerisk bibliotek, der genberegner en lineær-algebra-størrelse på committede inputs), den uafhængige reference, tolerancen fastsat før kørslen og resultatet. Hver oprykning blev kørt igen af en anden gennemgår, som regenererede fixturen byte for byte og viste, at en bevidst motormutation gør testen rød.
- GNSS/INS-sensorfusion (Library), afgrænset til det løst koblede 15-tilstands fejltilstands-EKF: NaveGo v1.4 (LGPL-3.0, kørt under GNU Octave) på dets egen rigtige Ekinox IMU/GNSS-køretur. Kshanas horisontale, vertikale og positionsinnovations-RMS er 0,912, 0,940 og 0,861 af NaveGos (tærskel 1,2), og dens gennemsnitlige normaliserede innovation er 0,395 (tærskel 1,5). GNSS er til stede under hele køreturen, så intet udfald er testet. Det tæt koblede UKF og det koblede urfilter ligger uden for påstanden.
- 3-DOF-attitude- og pejlefejlbudget (Library), indsnævret til spidsen af gravitationsgradient-momentet: Basilisk 2.9.1 GravityGradientEffector, 40 tilfælde, inden for 1e-12 relativt (værst 2.1e-15). RSS-pejlebudgettet er en sum af tal angivet af kalderen og ligger uden for det.
- Fælles geometri for kommunikation og navigation på Månen (Library), indsnævret til stedplacering, azimut, elevation og afstand: ANISE 0.10.2, 768 samples, inden for 1e-6 grad og 1 mm (værst 2.2e-12 grad og 5.6e-9 m). Parameteren for afstandsnøjagtighed er et udformningsinput uden for påstanden.
- Momentfri attitudedynamik for stiv krop (Library): Basilisk 2.9.1 spacecraft hub, 1e4 s på to generelle inertier, kvaternion og vinkelhastigheder inden for 1e-9 (værst 3.3e-11 og 3.4e-12 rad/s).
- Opløsning af heltalsmultiplicitet i GNSS-bærebølgefase (LAMBDA) (Library), indsnævret til ILS-løsningen og dens to bedste normer: RTKLIB v2.4.2-p13
lambda(), 300 kovarianser, 0 heltalsafvigelser, normer inden for 1e-9 relativt (værst 5.6e-13). Den bootstrappede succesrate forbliver kun kontrolleret internt. - Sammensat PL for tidssynkronisering, skalar MHSS (P2): numpy 2.3.5 og scipy 1.18.1 på 300 committede inputs, PL inden for 1e-9 relativt (værst 1.2e-10), drivende delmængde identisk.
- GLS-fællesmode-whitening og Mahalanobis-identiteten (P2): numpy 2.3.5 LAPACK på 201 committede kovarianser, inden for 1e-12 relativt (værst 7.9e-16); konditionstal op til 19,3.
- DE440-leverandør af månens hovedaksenorientering (Library): SPICE
pxformpå den binære PCK ved 2.000 epoker mellem noderne, inden for 1.7e-5 rad (værst 1.7e-6 rad, omkring 3 m på overfladen), efter rettelsen opført under "Rettet". - SigMF-optagelser som input og output og Welch-spektre (Library), indsnævret til SigMF-læsning og -skrivning og
welch_psd: scipy 1.18.1signal.welchinden for 1e-12 relativt pr. bin (værst 6.0e-14); optagelser fra sigmf-python 1.13.0 dekodet bit-identisk; cratens metadata gyldige mod skemaet for SigMF v1.2.6. IQ-syntese og dens modelsammenligninger ligger uden for det. - Fitter til LEO-broadcast-efemeride og SISRE som funktion af fitinterval (Measured), indsnævret til Kepler-fittet med 16 parametre og dets SISRE for kun bane: præcise baner fra TU Graz ITSG for fire satellitter mod statistikken fra Liu et al. 2025, komponenter inden for 1.5x (0,804 til 1,087) og SISRE inden for 1.5x (0,716 til 0,809).
Fund#
Den uafhængige reference var uenig med disse rækker, så de forbliver MODELLED. Hvert fund er også skrevet ind i rækkens tekst om den uafhængige reference (og dermed i docs/MODELLED-RATIONALE.md), med en test, der fastlåser det.
- Estimering af tilstand for ur ombord: på tilbageholdte IGS-ure for 11 GPS Block IIF-satellitter er filteret med tre tilstande konsistent ét skridt frem, men overkonfident ved én time på 9 af 11 (periodiske led og flicker-led er ikke i modellen).
- Spoofing-detektion: på JammerTest 2024 slog ingen monitor på observabelniveau alarm inden for 10 s efter nogen af de 8 offentliggjorte starttidspunkter, og tre vinduer før starttidspunktet havde falske alarmer.
- Beskyttelsesniveau for tidssynkronisering under spoofing: den målte uopdagede tidsfejl overstiger TPL ved 3 af 8 detekterede starttidspunkter (1.9x til 5.3x); en urkalibrering på 60 s dækker ikke vandringen i modtagerens TCXO.
- Opsendelsesvindue og opstigningsgeometri: mod Orekit 12,2 stemmer geometrien op til afrunding, men stedets hastighed fra Jordens rotation misser 1e-6 relativt ved 62,9 grader bredde (1.12e-6, den polarbevægelse, som den sfæriske model udelader). Runde 2: hastigheden for den sande pol med en epoke stemmer, standardhastigheden uden epoke misser stadig (se nedenfor).
- Ballistisk korridor for genindtræden (Allen–Eggers): den forudsagte maksimale deceleration for Stardust-genindtrædenen er 61,8 g mod den rekonstruerede 32,89 g (+88 %, tolerance 15 %).
- Fælles fejl i UT1 og polarbevægelse: mod nøjagtighedsformlen trykt i 178 numre af IERS Bulletin A stemmer polen inden for 1.5x, men UT1 gør ikke (0,48 ved 10 dage, 1,59 ved 40 dage). Afløst i runde 2: rækken er nu VALIDATED (se nedenfor).
- Offline standardinput til Jordens orientering: astropy bekræfter rækketællingen, men de 12 rækker, som cratet kalder Bulletin A-forudsigelser, er markeret som målt (I), ikke forudsagt (P). Tallene for samstemmighed i rækken for den operationelle prediktor var derfor mod målte rækker. Afløst i runde 2: motoren klassificerer rækker efter flag, og rækken er VALIDATED.
- Fejl i Jordorienteringsprediktion i operationel stil: prediktorens UT1-fejl er 2.4x til 12.6x fejlen i Bulletin A ved 1 til 10 dage og 5,32 ms ved 10 dage, uden for intervallet 0,36 til 3,13 ms i den 2. EOP PCC.
- Geodætisk VLBI på Månen: mod lysrejsetider fra ANISE gennem DE440 ligger ingen forsinkelse inden for 1 ps; det største hul er 24 µs, mest det analytiske månecentrum (omkring 200 km fra DE440). Runde 2: kernestien er VALIDATED i en egen række; denne analytiske sti forbliver MODELLED.
- Eksport til månens interoperabilitet: Orekit 12,2 afviser tidssystemerne LTC og TCL, så udveksling af OEM-filer for Månen med en anden læser er ikke fastslået.
- Clohessy–Wiltshire relativ bevægelse: mod Orekits ulineære bevægelse ved 100 m er forskellen 1,2 til 6,3 mm, over 1 mm; den skalerer som det udeladte andenordensled, så den præregistrerede tolerance lå under linearisationsfejlen. Afløst i runde 2: andenordenskorrektionen er VALIDATED mod den samme tærskel.
- Fejlvækst for INS/TRN under coasting: mod en frit inertial Monte Carlo fra NaveGo holder vækstlovene inden for 5 % til 600 s og overvurderer derefter (2.2x til 8x ved én time), fordi de udelader Schuler-tilbagekoblingen. Afløst i runde 2: Schuler-fejlmodellen er VALIDATED.
- Servicevolumen på Månen ud fra rigtig konstellationsgeometri: 4 af 12 offentliggjorte tilgængelighedsstatistikker afviger med mere end 2 procentpoint (op til 22,5).
- Overgrænse for heterogen sporbarhedsbias i UTC(k): på 105.024 BIPM-rækker overskrides overgrænsen i 50,8 % af rækkerne; den offentliggjorte usikkerhed afgrænser BIPM's måling af forskydningen, ikke forskydningen.
- Klassifikation af datum-nulrum på Månen: på den offentliggjorte geometri med fem reflektorer er korrelationen -0.78 mod -0.97, og CRLB for origo er 96 til 98 % under artiklens.
- Substrat for månens LLR-datumgeometri: mod 192 ILRS-normalpunkter for Månen fra 2024 var RMS af envejsresidualet 96 m med den tidligere orienteringsinterpolation og er 22,7 m efter rettelsen nedenfor, stadig over tærsklen på 10 m (afrundede stationskoordinater, ingen polarbevægelse). Orienteringsserien klampes tavst uden for 2024-2025. Runde 2: modellen for målt afstand er VALIDATED i en egen række (2,81 m); serien dækker nu 2014-2030 og giver fejl uden for den.
- Kobling fra relativistisk urrate til referencesystem: selvpotentialeleddet er 3.18e-4 over den offentliggjorte værdi (tolerance 1e-4); artiklen evaluerer et andet potentiale, så ingen offentliggjort værdi af denne lukkede form findes. Afløst i runde 2: ækvatorialpotentialet af grad 2 er VALIDATED mod den samme artikel.
- Fysiske konstanter for hvert legeme i solsystemet: 12 af 84 konstanter for de tilføjede legemer afviger fra NAIF pck00011 og gm_de440 (ældre elementer for Marsmåner; andre GM-løsninger for Uranus, Neptun og Pluto). Runde 2: konstanterne følger nu NAIF (en transskription, ikke medregnet), og den beregnede orientering stemmer med SPICE; rækken forbliver MODELLED.
- Valgbare LEO-efemeridemodeller: fittet med 22 parametre efterlader 1.71x og 1.86x den offentliggjorte fejl langs banen på buer på 20 min, over 1.5x. Afløst i runde 2: modellen med 22 parametre og dens fit er VALIDATED i en egen række.
- Fælles GNSS- og LEO-positionering: intersystembiasen stemmer med RTKLIB, men 93,2 % af epokerne ligger inden for 3 m af ITRF2020 mod 95 %; RTKLIB selv når 88,2 % på dataene (93,6 % efter rettelsen af gruppeforsinkelsen i runde 2).
- Fællesmodeblindhed i integritet og dækningskort og DOP-kort: begge sammenligninger bestod, men blev afvist ved gennemgang, fordi en bevidst forkert motor også består dem (den første kontrollerer kun en intern identitet; den andens offentliggjorte gulve kan ikke se en fordoblet PDOP). Runde 2: fællesmodeblindhed i integritet er VALIDATED på paritetsbærende inputs; dækningskortene forbliver et fund (se nedenfor).
Valideringsrunde 2#
Den anden runde tog hver række, der stadig kunne tages op efter den første runde, med friske præregistreringer committet, før noget fixture blev hentet, eller en uafhængig reference kørt, en adversariel anden gennemgår, der kørte hver sammenligning igen, og en bevidst motormutation, der skal gøre hver test rød. Ejeren accepterede den rettede formulering af rækken om grænsen uden for Omega den 2026-10-02, før den blev rykket op (dens gamle tekst modsagde koden).
Rykket op til VALIDATED (17). Type af uafhængig reference i parentes; tolerance fastsat før kørslen.
- Kobling fra relativistisk urrate til referencesystem (Reference): Ashby og Patla 2024 L_m inden for 2.8e-6 (tærskel 1e-4) ud fra ækvatorialpotentialet af grad 2 for de to felter, som artiklen citerer; pyshtools tyngdefelt af grad 350 for den radiale post (8.3e-5); DE441-månehastighed (2.5e-3).
- Offline standardinput til Jordens orientering (Library): astropy 8.0.1 og IERS Bulletin A nr. 039 bekræfter de 30 endelige, 54 hurtige og 90 forudsagte rækker i det genskårne udtræk.
- Fælles fejl i UT1 og polarbevægelse (Library): fulde rotationer fra astropy og pyerfa gengiver den fælles tabel (UT1 og pol inden for 6e-16, kombinationen inden for 1.9e-7); de realiserede fejl i IERS Annual Report 2019 giver forhold på 1,001 til 1,100.
- EO-nyttelastens fodaftryk og dækning (Library): Orekit 12,2 og GeographicLib 2,1 ved hver præregistreret tærskel, med den nodale J2-regression nu i nodeafstanden.
- Clohessy–Wiltshire relativ bevægelse (Library): med en andenordenskorrektion i lukket form inden for 1.2e-7 m af Orekits ulineære bevægelse mod 1e-3 m; den lineære matrix alene forbliver karakteriseret (1,2 til 6,3 mm).
- B-plane-målstyring og patched-conic-gravitationsassistance (Library): GMAT R2026a B-plane, asymptoter, C3 og heliocentriske elementer; sbpy 0.6.0 og Kasuga og Jewitt 2019 for Tisserand-parameteren.
- Fejlvækst for INS/TRN under coasting (Library): en Schuler-fejlmodel med ni tilstande inden for 5 % af korrigerede coast-kørsler fra NaveGo i alle 48 punkter (værst 3,70 %).
- Fællesmodeblindhed i integritet (P2): numpy
lstsqpå 1464 paritetsbærende inputs inden for 1e-12 (værst 1.06e-14). - Fælles multiteknik-OD og ur på Månen (P2): numpy genberegner hvert Gauss-Newton-skridt, sigma og stationsfejl på seks netværk (inden for 2.4e-11) efter en rettelse af QR-løsningen.
- Kovarians for stationskoordinater i månens VLBI (Library): en Jacobian bygget med SPICE gengiver observationsplanen, spektret, sigmaerne og nulrummet inden for 1 % og 0,1 grad; numpy til 2e-13.
- Grænse for uopdagelig fællesmode, residual uden for Omega (P2, formulering rettet ved ejerens beslutning): numpy LAPACK på 256 tilfælde inden for 1e-12, seks eksakte uendeligheder.
- Basisinvariant klassifikation af nulrum (P2): delrumsskæring med SciPy og NumPy på 72 konstruerede matricer, heltal eksakte, projektornorm inden for 6.0e-15.
- Enkeltfrekvens ionosfære- og UTC-tjenester i en LEO-navigationsmeddelelse (Library): GNSSTk 15.3.1 for Klobuchar, Az og UTC-driften; ERFA for de tre skudsekundtilfælde.
- Positioneringsgrænse for 5G ikke-terrestriske netværk (P1): grænser for enkelt-SSB fra Bachl, Lei og Nabeel 2026 inden for et halvt trykt ciffer; numpy for kovarianserne for positionsbestemmelserne.
- LLR-model for målt afstand (Measured, ny række udskilt fra substratet for LLR-datum): 192 ILRS-normalpunkter for Månen ved 2,81 m RMS mod en tærskel på 10 m, med IERS 2010 barycentrisk lystid; komponenterne under tærsklen opløses ikke én for én, og rækken siger det.
- Geodætisk VLBI på Månen, kernesti (Library, ny række udskilt fra rækken for månens VLBI): SPICE-konvergerede lystider inden for 1 ps og partielle afledede inden for 1e-6 ved epoker nær J2000; den analytiske standardsti forbliver MODELLED.
- LEO-efemeridemodellen med 22 parametre fra Liu et al. 2025 og dens fit (Measured, ny række udskilt fra rækken for valgbare modeller): rigtige præcise baner inden for 1.5x af de offentliggjorte statistikker på artiklens dage og tilbageholdte dage (0,683 til 1,186); skalakonventionen for n_dot er transskriberet og ikke valideret af denne sammenligning, og stopreglen er Kshanas regel om parameterkonvergens, ikke artiklens regel om RMS-ændring. ATOMIC-polynomiet og tabellen med fem højder forbliver MODELLED.
Eksisterende VALIDATED-rækker med nyt grundlag (ingen ændring i antal).
- Planetpositioner fra JPL Standish-elementerne og lystid mellem solsystemets legemer: de post hoc fastsatte tærskler på det dobbelte af nominelt er erstattet af præregistrerede sammenligninger med JPL Horizons DE441 (RMS højst tallet i Explanatory Supplement tabel 8.10.1, værst 0,778, Jordens opdeling og ICRF-rotationen inkluderet; lystider inden for 1e-6 s af Horizons på DE441-positioner, værst 6.7e-9 s). Deres flag "grænse sat efter sammenligningen" er fjernet.
- Integritet (RAIM/ARAIM/SBAS): rækken hviler ikke længere på plausibilitetskontroller. Den siger nu: ARAIM-løsningsseparationen med flere hypoteser fra ADD v4.2 stemmer med Stanford MAAST for ARAIM 2 på 270 rigtige tilfælde (værste VPL-forskel 2.2e-3 m mod 0,05 m); snapshot-RAIM-detektion og -udelukkelse stemmer med RTKLIB
raim_fdepå 2016 af 2016 beslutninger, med hældningsbeskyttelsesniveauet inden for 2.7e-12 m; SBAS DO-229E L1-beskyttelsesniveauerne stemmer med Stanford MAAST på rigtige WAAS-udsendelser (2868 par inden for 1.6e-5 m). Den siger klart, at funktionerne med ensartet sigmaraim::araim_raimograim::araim_dual_raimIKKE er ADD-konforme (huller ved matchede inputs på 0.75/4.04 m og 0.39/1.93 m VPL/HPL, et fund), at DFMC L5 SBAS-sammenligningen er et fund (308 par uden GEO i sigte er beskyttet af Kshana og ikke af MAAST), og atraim::solution_separation_raimikke har nogen ekstern sammenligning. Dens selvmarkering er fjernet. - LEO-fitter til broadcast-efemeride: den integrerede referencebane føjes til den validerede del (Orekit 12,2 inden for 4,55 mm over 6 h, tærskel 2 cm); korrektionspolynomierne, urfittet og afvejningen af opdateringsperioden forbliver modellerede.
Fund og blokerede rækker (forbliver MODELLED). Hver rækkes tekst om den uafhængige reference bærer fundet og dens fastlåste test.
- Modulation af navigationssignaler (Betz 2001, Hein 2006): spektre og korrelationer stemmer; sidelobes ved 24 MHz og hver flervejsbias (11 til 15 % for lav) gør ikke, årsag uafklaret.
- TDOA/FDOA-geolokalisering: grænserne matcher Ho og Chan og Ho og Xu og forfatternes kode til 3e-12; Ottawa-faktorerne trykt fra en Monte Carlo afviger med 1,3 % og 4,4 %.
- Jordens GNSS på månedistance: GENESIS-zenitmiddelværdier stemmer med Montenbruck et al. 2023 på 5 af 6; nadirmiddelværdier er 1,0 til 2,4 satellitter for høje.
- Dæknings- og DOP-kort: udformninger for Jorden stemmer med Orekit, gnss_lib_py og numpy ved hver tærskel; udformninger for Månen og Mars overskrider 1e-9 kun på næsten singulære celler.
- Fælles GNSS-positionering: dobbeltfrekvens 79,9 % og præcise produkter 94,2 % inden for 3 m mod 95 % (RTKLIB 67,9 % og 94,1 %); ISB-forskellen for præcise produkter skyldes, at RTKLIB ignorerer antenneforskydninger.
- Sporingssløjfer (GNSS-SDR 0.0.19): stemmer ved 35 til 45 dB-Hz; ved 30 dB-Hz PLL +21 %, DLL -32 %, tærskler +1,5 dB; slip-tider 0,5 til 2 dekader kortere.
- Servicevolumen på Månen (Orekit og Hipparchus): 155 af 160 værdier stemmer; kravet om værste sample slår fejl på næsten singulær LNCSS B-geometri.
- Kvanteinertisensor: QPN-gulvet alene er 21 til 31 % under den målte støj fra Gauguet 2009 (tærskel 30 %, misset med 0,5 point).
- Oscillator-forudindstillinger: målte enheder overstiger forudindstillingerne for rubidiums holdover, cæsiums korttidsstabilitet og CSAC's værste enhed; OCXO-forudindstillingen har ingen målt optegnelse.
- Rumvejrstæthed: Jacchia 1971 ligger inden for en faktor 2 af accelerometertætheder ved solmaksimum, men er omkring 1.7x for tæt i minimummet i 2008.
- Geometrifri skrå TEC: 33 af 36 buer inden for 3 TECU af CODE-kortet (værst 6,84).
- Spoofing-detektion og TPL mod den officielle log fra JammerTest 2024: 4 af 10 starttidspunkter detekteret i tide; TPL overskrides ved 4 af 10.
- Urfilter på friske IGS-ure: to af 11 satellitter slår fejl på kriteriet for innovationssum.
- Mindste kvadraters plus autoregressiv EOP-prediktor: UT1 1,73 til 2.11x Bulletin A ved 2 til 10 dage.
- Overgrænse for realiseret UTC(k)-forskydning: samlet overskridelse 0,0333 mod 1e-2.
- Månens referencesystemdatum fra en kampagne: SPICE-delen stemmer; P2-delen med estimerede stationer misser 1e-9 på et problem med kondition 2.1e8.
- Månens referencesystemdatum fra rigtig LLR: 15 af 16 tal stemmer med SPICE; sigma for z-translationen er 1,03 % for høj mod 1 %.
- Genindtræden (Allen-Eggers): punktmasseløsningen stemmer med rekonstruktioner fra rumagenturer (kun en krydskontrol); accelerometersammenligningen er blokeret på en læsbar Hayabusa2-kilde.
- ITU-T-masker: de trykte regneeksempler stemmer; klassegrænserne i G.8273.2 har ingen (blokeret).
- Geometri for opsendelsesvindue: stedets hastighed for den sande pol med en epoke stemmer med Orekit (4.9e-8); standardhastigheden uden epoke misser stadig (1.12e-6). Ikke rykket op; opfølgning afventer.
- Fysiske konstanter for hvert legeme: nu afviger 0 af 84 fra NAIF (en transskription), og den beregnede orientering stemmer med SPICE til 1.4e-10 rad. Ikke rykket op; opfølgning afventer.
- Blokeret af en afgrænsningsbeslutning fra ejeren, hver med sin stemmende sammenligning committet: absolut stationsobserverbarhed på Månen, DOP for overfladefyr, eksporten uden for boresight, detektionseffekt på tværs af modaliteter, konsistensstatistikken for fælles mode og polær LEO-dækning.
- Blokeret på data: budgettering af fejl ved tidsoverførsel (kræver en datareduktion på rigtige data), JammerTest C/N0 (antenneposition og effektfordeling ikke dokumenteret).
Revisioner (offentliggjorte tal, der flyttede sig, gammelt -> nyt).
- Beskyttelsesniveauer for
snapshot_raimligger nu på det geodætiske lokale niveau i stedet for det radiale: op til 0,31 m HPL og 0,14 m VPL ved ABMF (16 grad N); ingen golden-fil er flyttet, men det registrerede resumé i tutorialengnss-simflytter sig fra middel-HPL 22,1 m / VPL 40,0 m til 22,2 m / 39,9 m (docs/tutorials/scenarios/gnss-sim.toml). - Standarder for kobling til Månens ratereferencesystem: d_alpha/d_scale 3.139807e-11 -> 3.138801e-11; d_alpha/d_radial 1.807187e-17 -> 1.806185e-17 pr. meter.
- Offline standardkørsel for EOP (
realtime-frame-eop, celler opført idocs/revisions/M035-default-eop-recut-cell-changes.md): predicted_rows 12 -> 90; polgulv 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; rækkerne i tabel 2 itests/golden/realtime-frame-eop.csv; samstemmighed for den operationelle 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 ur: 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øjdetabel, 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).
- Skalaen
nDoti LEO-navigationsmeddelelsen 2^-60 -> 2^-58 (ikke præregistreret, oplyst; uden for fit-sammenligningen); CRC for liu22-eksempelrammen 0x62373A -> 0xDED99C. - Verifikationstabellen i
docs/LEO-NAVMSG.md: rækken for Liu og ATOMIC delt i en VALIDATED række med 22 parametre og en MODELLED række for ATOMIC og fem højder. - Rækketekst for DE440-orienteringen af månens hovedakser: spænd 2024-2025 / 731 rækker -> 2014-2030 / 6.209 rækker; "klampes tavst" -> giver fejl uden for sit spænd.
- Scenarie
eo-coverage: equatorial_ground_track_spacing_km 2756,37 -> 2752,17 km; nye felter inclination_deg (98,19) og nodal_period_min (98,893). constellation-multi-gnss-coverage(referenceuret for TDOP/GDOP er nu den lavest nummererede konstellation i sigte): globalt GDOP maks. 2,2236 -> 2,1205, middel 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-kortet pr. celle; mean_visible_by_constellation summeret som heltal (omkring 1e-12 relativt, usynligt ved 4 decimaler).- Fælles GNSS-positionsbestemmelse med enkelt frekvens efter rettelsen af broadcast-gruppeforsinkelsen: 93,2 % -> 93,6 % inden for 3 m; ISB-median -0.351 -> -0.114 ns.
tracking-loopjitter_table log10_mean_time_to_cycle_slip_s (Costas-sløjfe SNR rho/4): ved tærsklen på 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: hvert output flytter sig med Schuler-fejlmodellen; TRN-spidsen i det medfølgende scenarie 52,932679 -> 44,711834 m (tests/conflict_resilience_architecture_guard.rs).- Rapport for
lunar-vlbi: ny nøgle geometry_path ("analytic" ved standardkørslen, ingen numerisk værdi ændret); nye valgfrie felter planetary_kernel_path, earth_orientation_kernel_path og moon_orientation_kernel_path, med epoch_partials på kernestien; typens beskrivelse er omskrevet. Verifikationsrækkens uafhængige reference for kernestien er SPICE (0,06 ps); ANISE (0,12 ps) bliver en krydskontrol af kerneevaluering. - Legemskonstanter: 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); Phobos' ækvatorialradius 13,1 -> 13,0 km; pol og primærmeridian for Phobos og Deimos fra pck00011; prime_meridian_deg for solsystemet indeholder nu de kvadratiske og periodiske led.
europa-surface-pnt(body-pntpå Europa), fra den fulde orientering af Europa i pck00011 (7cfd66b4; orienteringen stemmer med SPICE pxform til 1.4e-10 rad), som flytter landeren i inertialrummet: tilgængelighed kun via relæer / med afstanden til Jorden 0,485 / 0,725 -> 0,480 / 0,719 (83 -> 82 af 171 epoker kun via relæer), median-PDOP 5,266 -> 5,360, RMS-fejl i positionsbestemmelsen 129,516 / 100,983 m -> 112,742 / 86,147 m, median formel sigma 5,266 / 4,272 m -> 5,360 / 4,239 m. Tabellen idocs/SOLAR-SYSTEM.mdog pinnen imcp/kshana-mcp/tests/round_trip.rsfølger med;mars-orbit-pnter uændret.space-weather(f107 180, f107a 165, kp 4), den kalibrerede faktor erstattet af 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 tilføjet (1186,7 K);tests/space_weather_reference.rs: solcyklussvinget ved 800 km er nu 10.4x (NRLMSISE-00 13.6x), og påstanden om højde følger NRLMSISE's stigning til 500 km og fald 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 (resumétekst uændret ved 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.jsonudsendt påny for de nye og fjernede felter ovenfor.
Valideringspakker#
D12, udvidet præcision og en kvadratrodsløser (to nye VALIDATED-rækker: 226 -> 228 rækker, 110 -> 112 validerede).
Del 1, uafhængig reference med udvidet præcision:
- Månens datum for referencesystem med estimerede stationer: en uafhængig reference med mpmath-udvidet præcision på 50 cifre (præregistreret 804662d5, konditionsskalerede tærskler ud fra en a priori-formel for baglæns fejl) stemmer på en ny kampagnedato (2026-03-18) og på det oprindelige scenarie fra 2024-01-01; ny VALIDATED række under P2. Den afgør den tidligere strid om dobbelt præcision: motorens datumsigmaer er forkerte med op til 9.7e-6, NumPys inversions- og egenværdiveje med op til 6.2e-6, og dens Cholesky- og QR-veje med omkring 1e-8. Motoren er inden for sin fejlgrænse, men omkring tusind gange mindre nøjagtig end en faktoriseringsvej.
- Miljø for uafhængig reference: mpmath 1.3.0 tilføjet.
- Revisioner: ingen. Ingen golden-fil eller offentliggjort figur ændres; rækken "Lunar frame datum from an observing campaign" forbliver MODELLED (grundlæggerens beslutning 2026-10-02, mulighed A: den låner ikke status fra den separate række); dens testtekst citerer den nye test og dens fund.
Del 2, løser for kvadratrodsinformation af datum:
- Ny valgfri løser for kvadratrodsinformation (
linalg_sr;solver = "srif"i scenariet lunar-frame-campaign): Householder-QR, marginalisering gennem den trekantede faktor, en Jacobi-SVD til spektret og kompenserede produkter udelukkende fra korrekt afrundede operationer. Mod den uafhængige reference på 50 cifre (præregistreret b41908c9) stemmer dens datumsigmaer til 3e-13 på en ny dato (2026-06-09); på inputtene fra 2026-03-18 og 2024-01-01 er standardløseren forkert med op til 1e-5. Ny VALIDATED række under P2. Standardløseren og dens output er uændrede. De præregistrerede tærskler fastslår kun fejl over omkring 2e-7 relativt: de afviser standardløseren, men ikke et vendt Householder-fortegn, et ikke-kompenseret prikprodukt eller en spektral endelig invers, og rækken siger det. - Valgfrie kvadratrodsstier ved siden af de uændrede standarder:
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, hvor begge er nøjagtige (en intern kontrol, ingen række; ingen validering påstås for dem).precise_od::fituddelegerer nu til en fælles rutine; dens output og hvert scenaries standardoutput er uændrede. - Rangbeslutninger i månens referencesystemkampagne: en præregistreret kontrol med udvidet præcision over 40 dage bekræfter hver afgørbar stationsblok- og fuldrangs-Helmert-beslutning. A priori-grænsen kan ikke fastslå de 20 rangdefekte Helmert-dage; i eksakt aritmetik er deres defekt geometrisk, med tærsklen på 1e-9 inde i kampagnens naturlige interval af egenværdiforhold. Ingen række.
- Påstanden for rækken om kampagnen med udvidet præcision er indsnævret til "inden for grænsen for værste tilfælde", og dens kontrol af svageste retning med stationer fastholdt måler nu en rigtig vinkel (6.6e-16 rad; sammenligneren er skiftet fra acos til en korde, tærsklen er ikke ændret).
- Revisioner: ingen. Ingen golden-fil eller offentliggjort figur ændres; rækken "Lunar frame datum from an observing campaign" er uændret og forbliver MODELLED (grundlæggerens beslutning 2026-10-02, mulighed A).
D4, rygraden for JPL-kerneefemeride, fase 1 (fire nye VALIDATED-rækker: 228 -> 232 rækker, 112 -> 116 validerede).
- NAIF-kernelæseren har sin egen række.
naif_kernel(DAF-container, SPK type 2, binær PCK type 2) stemmer med SPICE Toolkit (CSPICE N0067 via spiceypy 8.2.0) og med ANISE 0.10.6 på alle 600 DE440-tilstande og 200 rotationer af månens orientering på et tilfældigt gitter trukket fra præregistreringscommitens eget hash (abcd9133), inden for tærskler udledt på forhånd fra Chebyshev-evaluering i dobbelt præcision (værst 0,6 % af tærsklen, 1.95e-3 m). Rækken påstår, at motoren læser JPL-kerner korrekt, ikke at DE440 eller den analytiske serie er nøjagtig (tests/naif_reader_spice_oracle.rs). ephem_provider::KernelEphemeris: DE440 (eller en hvilken som helst SPK af type 2) positioner gennem motorens egen læser, med todelte TDB-epoker og kernens SHA-256 gemt til rapporter; den erstatter aldrig en planet med systemets barycenter.LunisolarSourcelader en geometristi vælge den analytiske serie (standarden) eller en kerne.- Valgfri kerne-Måne for
lunar-llr-datumoglunar-vlbi-fim: en nøgleplanetary_kernel_pathlæser det geocentriske månecentrum fra kernen; intet andet ændres, og rapporten får en blokmoon_ephemeris, der navngiver kernen og dens SHA-256. Uden nøglen er begge rapporter byte-identiske med før. - Kovarians for punkt på månens overflade på kernestien (ny VALIDATED række): med hver station fastholdt og beaconen på DE440-Månen stemmer beaconens kovarians med en SPICE lysrejse-Jacobian (værst 1.7e-3 mod en tærskel på 1 %) og en NumPy-invers (4e-14 mod 1e-9), præregistreret 4a51256 (
tests/lunar_vlbi_surface_point_spice_oracle.rs). Rækken for den analytiske sti forbliver MODELLED: på den analytiske Måne er dens mindste beacon-sigma 3,9 % under den uafhængige reference. - Månens datum for referencesystem fra en rigtig kampagne, kerne-månecentrum (ny VALIDATED række): på 447 usete normalpunkter fra 2019-Q2, præregistreret 830d945a før nogen blev hentet, stemmer datumkovariansen på kernestien med den uændrede uafhængige reference fra SPICE og NumPy inden for 7.6e-5 mod tærskler på 1 % og 2 % (
tests/validate_llr_datum_kernel_moon_fresh.rs). Grundlæggeren besluttede, at denne række kun rykkes op på friske punkter; diagnostikken på sete data (c51f8b2) er et fund, ikke evidens. Tærsklen skelner ikke mellem månemodeller: den analytiske Måne består også på samme udsnit (værst 3.8e-3), den planlagte mutation (kerne-Månen en time for sent) blev ikke opdaget, og ved foldet bestod også et månecentrum, der var cirka 4.650 km forkert (Månen taget om Jord-Måne-barycentret). Rækken påstår kovariansen på den sti, ikke månecentrum, og siger det. - Positioner for Solen, Månen, Merkur og Venus fra DE440 ved UTC-epoker (ny VALIDATED række):
KernelEphemeris::relative_position_utcstemmer med Skyfield 1,54 på 600 positioner mellem 1973 og 2026, værst 2,96 m, inden for en præregistreret tærskel (0bfafe6d) sat af serien med to led for TDB − TT (tests/kernel_ephemeris_skyfield_oracle.rs). Planetpositioner får denne nye kernerække nu; rækken for Standish og rækken for planetmåner er uændrede, og månerne venter på et scenarie, der har brug for dem (grundlæggerens beslutning). - Fund: den ene tærskel, som sammenligningen for LLR-datum misser (sigma for z-translation 1,025 % mod 1 %), falder til 0,049 %, når kun månecentrum læses fra DE440, på sete data (
tests/validate_llr_datum_kernel_moon.rs); på det friske udsnit fra 2019 består den analytiske Måne også, så den tærskel, der blev misset i 2015, var marginal for det kvartals geometri. De analytiske rækker "Lunar frame datum from a REAL observing campaign" og "Lunar-surface-point coordinate covariance … kept distinct from the Earth-station one" forbliver MODELLED; deres tekster om den uafhængige reference peger nu på rækkerne for kernestien. lunar_ephemerissiger ikke længere, at motoren ikke har nogen læser for binære kerner; den peger på rækken for læseren og forklarer, hvorfor rumfartøjskerner (typerne 13 og 21) stadig kommer gennem Horizons.- Revisioner: ingen. Ingen golden-fil, offentliggjort figur eller eksisterende testværdi ændres; de analytiske rapporter for
lunar-llr-datumoglunar-vlbi-fimog rapporten forlunar-vlbi-fimmed alle stationer fastholdt er byte-identiske med før (resultatets SHA-256-præfikser 9927aac2, cf1d2671, 25c357e4).
D9, målt urbibliotek "Clock Atlas" (tre nye rækker, én VALIDATED: 232 -> 235 rækker, 116 -> 117 validerede).
- Målt urbibliotek (
clock_library). Enhedskort (hvid fasestøj, hvid, flicker- og random-walk-frekvensmodulation, en lineær frekvensdrift og eventuelt faseled med én til fire pr. omløb) tilpasset en navngivet målt urregistrering og scoret på tilbageholdte data; hulbevidste Allan- og Hadamard-varianser; en konditioneringsdetektor, der logger hvert hul, fase-outlier, fasetrin, burst og frekvenstrin og intet kender til fil- eller dagsgrænser; omregning af et kort til støjmodellen for slot-timing, den udvidede Kalman-urmodel og spoofing-monitorens støjniveauer. Læsere til RINEX- og IGS-urfiler, BIPM-filer pr. laboratorium og Circular T afsnit 1 (realdata::clk); en samlet, hierarkisk ældningsgrænse for UTC(k) (utck_bound, endnu ikke scoret). - Identifikation af støj ved lag-1-autokorrelation (
allan::lag1_noise_id, Riley og Greenhall 2004), ny VALIDATED række (Library): stemmer med allantools 2024,6autocorr_noise_idpå 140 tilfælde, heltal identiske, værste forskel 9.6e-13 mod en tærskel på 1e-9 (præregistreret 2ec76864;tests/clock_library_lag1_noise_id_allantools.rs). - Målte enhedskort med forudsigelse på tilbageholdte data, ny MODELLED række (et fund): fit på en tredjedel, forudsigelse af Allan-deviationen for de to andre tredjedele inden for en faktor 1,5 (præregistreret 2ec76864). GPS Block IIF på et friskt IGS-vindue (2026-03-01 til 14): 10 af 11; G27 er optimistisk på to-timers-skalaen (værste faktor 1,510). Cæsium (inden for, 1,070), OCXO (uden for, 2,348) og strontium (inden for) rapporteres, ikke blinde. JammerTest-modtagerkortet og kortene for Galileo-masere og Deep Space Atomic Clock er blokeret. En modelklasse for ZED-F9P-modtager-TCXO på 12 statiske stationer i Wroclaw (Zenodo 6488497) slår fejl: 1 af 11 blinde stationer i en oplyst rettet genkørsel (
tests/clock_library_device_cards_oracle.rs,tests/clock_library_f9p_cards_oracle.rs). - GPS Block IIF-kort med led pr. omløb, ny MODELLED række (et fund): på et andet friskt vindue (2026-04-01 til 14) 9 af 11 inden for tærsklen; G03 (1,947) og G25 (1,581) er optimistiske, fordi deres tilbageholdte optegnelser er mere støjede end deres fit-tredjedele; hvis de periodiske led udelades, slår alle 11 fejl (præregistreret fb475550;
tests/clock_library_periodic_cards_oracle.rs). - M002, estimering af tilstand for ur ombord, runde 3 (et fund, forbliver MODELLED): efter den frosne konditioneringsdetektor klarer det udvidede filter fra runde 2, med uændret tuning og uændrede kriterier, (a) og (c) på alle 11 satellitter for første gang; (b) slår fejl på G09 (0,894) og G26 (0,876) (præregistreret fb475550;
tests/clock_state_ext_igs_conditioned_oracle.rs). - M010, spoofing-detektion, runde 3 til 4b (forbliver MODELLED): runde 3 blokeret (167 træningsepoker fra JammerTest-enhedens andre sessioner mod 3600); med et modelklassekort for ZED-F9P (runde 4 og 4b) udløser urmonitoren nul falske alarmer før starttidspunktet ved alle 10 loggede starttidspunkter (runde 2: 86), og 6 af 10 starttidspunkter detekteres inden for 10 s (runde 2: 4); de samme fire er stadig sene (
tests/clock_library_tcxo_card_jammertest_oracle.rs). - M083, overgrænse for UTC(k), runde 3: præregistreret prospektivt (fb475550) på Circular T-numre fra 465, endnu ikke kørt (
tests/utck_bound_prospective_oracle.rs). - Miljø for uafhængig reference: Wroclaw ZED-F9P-registreringen er datastyret under
$KSHANA_ORACLES/data/wroclaw_f9p(CC BY 4,0, omkring 1,5 GB); IGS-urfixturerne er medleveret (IGS-produkter, med kildeangivelse). - Revisioner: ingen. Ingen golden-fil, offentliggjort figur eller eksisterende testværdi ændres; M001 (genforankring af holdover) følges ikke op, fordi ingen urklasse blev rykket op.
D8, én valideret sti for propagering, referencesystem og tid (tre nye VALIDATED-rækker og M131 rykket op: 235 -> 238 rækker, validerede 117 -> 121).
De scenarietyper for Jordbaner, der bar deres egne modeller med kun to legemer, sekulær J2 eller sideraltid, deler nu én sti: SGP4/SDP4-elementsæt med todelte juliandatoer, ført til GCRS og ITRS (International Terrestrial Reference System) gennem IAU (International Astronomical Union) 2006/2000A-kæden, med valgfri Jordorienteringsparametre.
- Nye
sgp4::MeanElementSet,sgp4::SgpOrbit,sgp4::Eop,sgp4::teme_to_itrs_matrix[_eop]ogsgp4::gcrs_to_itrs_matrix[_eop];Sgp4::new_atogSgp4::propagate_attager todelte epoker. Nyjd2::Jd2::from_utc_calendar(SOFA's konventiondtf2dfor skudsekunddage),jd2::utc_to_tai,tai_to_utc,utc_to_ut1(gennem TAI, som SOFAutcut1),tai_to_ttog en todeltjd2::earth_rotation_angle. - Polartilstanden i
leo-pvtpropagerer med SGP4 ved 2026-01-01T00:00:00 UTC på IAU-kæden (leo_fusion::polar::latitude_sweep_attager enhver epoke); SGP4 Walker-generatoren roterer til det jordfaste referencesystem gennem IAU-kæden. - Scenarietypen
passeskører en ny prediktor for tilsyneladende passager (passes::predict_passes_apparent,apparent_look_angles): SGP4 på IAU-kæden, refraktion efter ITU-R P.834-9 og downlink-lysrejsetiden (nye indstillingerrefractionoglight_time, slået til som standard), Jordorienteringsparametre (ut1_minus_utc_s,xp_arcsec,yp_arcsec, standard 0), krydsninger løst til 1e-7 s og kulminationen ved gyldensnitssøgning. Den geometriskepasses::predict_passeser uændret. tests/no_private_models.rsforhindrer, at pakkens geometri-, tids- og propageringskerner bærer en privat Kepler-propagering, sekulære J2-rater eller en rotation med kun sideraltid; navngivne hurtige niveauer og fysik, der er en rækkes emne, er begrundede undtagelser.- Ny VALIDATED række "Two-part Julian dates and leap seconds on the Earth-orbit time path": pyerfa 2.0.1.5
dtf2d/utctai/taiutcpå 224 tidspunkter omkring alle 27 skudsekunder inden for 1e-6 s (præregistreret e947e69d); værst 1.9e-11 s. - Ny VALIDATED række "One Earth-orbit path": TEME-positioner for 232 elementsæt mod python-sgp4 2,24 (Vallados reference-SGP4) inden for 6.1e-8 m (tærskel 1 cm), og rotationerne GCRS -> ITRS og TEME -> ITRS mod ERFA
c2t06a,pnm06aogee06ainden for 2.9e-6 mas og 0,41 mas (tærskler 0,1 og 2 mas), med Jordorienteringsparametre (præregistreret 72ea9eb0). Oplyst: den første kørsel slog fejl ved 2016-12-31T23:59:59,5 med ét sekund af rotation; UT1 blev taget fra UTC's kvasi-juliandato på en skudsekunddag, motoren går nu gennem TAI, og den anden kørsel stemmer ved uændrede tærskler. - M131 "LEO coverage and dilution of precision for polar and Arctic users against MEO GNSS" bliver VALIDATED: Orekit 13.1.8 tager motorens GCRS-tilstande, roterer dem og beregner sigtbarhed og DOP (NumPy for grupper med flere ure); positioner inden for 6.8e-5 m (tærskel 0,2 m), antal i sigte identiske på 4040/4040 samples, median-DOP inden for 2.3e-11 relativt.
- Ny VALIDATED række "Apparent ground-station pass prediction with refraction and light time": Orekit 13.1.8 propagerer de samme elementsæt i en TEME, det bygger efter den angivne definition, med ITU-R P.834-refraktion og dets målemodel for lysrejsetid, over 60 tilfælde ved stationer i havniveau: 1210 passager, krydsninger inden for 3.4e-6 s (tærskel 5 ms), maksimal elevation inden for 5.5e-7 grad, tilsyneladende retning inden for 8.8e-7 grad (tærskel 1e-4 grad).
- Fund, holdt fastlåst: de første sammenligninger af hele påstanden mod Orekit fra ende til anden missede deres positions- og retningstærskler, ikke på grund af motoren, men fordi SDP4 i Orekit 13.1.8 afviger fra reference-SGP4 for cirkulære (e = 0) dybrumsbaner (op til 67 m), og dens standard-TEME er bygget på nutationen fra IERS 1996 (IAU 1980), omkring 72 millibuesekunder fra IAU 2006/2000A-kæden (2,7 m ved LEO). Orekits ITU-R P.834-koefficient for h*theta0^2 er 0,011380, hvor anbefalingen trykker 0,01380; sammenligningen er i havniveau, hvor leddet forsvinder, og forskellen over det er fastlåst.
- "Ground-station pass prediction (ground segment)" forbliver VALIDATED, med påstanden indsnævret til den geometriske
passes::predict_passes; typenpasseshører til den nye række. - Miljø for uafhængig reference: Orekit 13.1.8 med Hipparchus 4.0.3, pyerfa 2.0.1.5, python-sgp4 2,24 (
xval/d8-orekit13/setup.sh). - Revisioner: det medfølgende
scenarios/passes.tomlsamlet adgang 1675 s -> 1659 s (fem passager som før; bedste maksimale elevation 73,25 grad -> 70,08 grad), og hvert output forpassesflytter sig med den nye sti (den udskrevne linje idocs/examples/multi-tool-pipeline.mdog postenpassesidocs/CAPABILITY.mdsiger det nu); det medfølgendepolar-arctic-leo-coverageGNSS-VDOP ved ækvator 1,19669 -> 1,19710, ved 89,9 grad 1,50645 -> 1,50590, fusioneret VDOP ved 89,9 grad 1,14388 -> 1,14250 (de offentliggjorte tal med to decimaler 1,20, 1,51 og 1,14 er uændrede). Ingen golden-filer ændres. - Endnu ikke rutet:
leo_pass, tilstandene doppler, joint og timing ileo-pvtog referencebanen ileo_navmsg(deres modeller ligger ileo_link::geometryogleo_fusion::geom), og udformninger for Jorden iconstellation-design(et navngivet hurtigt niveau med to legemer).
D6, LunaNet AFS-referencegenerator, LSIS V1.0 (fire nye rækker, to VALIDATED: 238 -> 242 rækker, validerede 121 -> 123).
- LunaNet Augmented Forward Signal (AFS)-referencegenerator (
lunar_afs), fastlåst til LunaNet Signal-In-Space Recommended Standard (LSIS) V1.0 af 29. januar 2025 og navngiver den version i hvert output: bærebølgen på 2492,028 MHz; datakanalen AFS-I BPSK(1) med 500 symboler pr. sekund og dens Gold-kode på 2046 chips; pilotsignalet AFS-Q BPSK(5) med dets primære Weil-kode på 10230 chips, sekundære kode på 4 chips og tertiære kode på 1500 chips; rammen med identifikator 0 (synkroniseringsmønster, BCH (51, 8) underramme 1, CRC-24, LDPC-underrammer med rate en halv 2 til 4, blokinterleaver 60 gange 98) med en udtømmende dekoder for underramme 1 og en min-sum-LDPC-dekoder skrevet alene ud fra paritetskontrolmatricen; og IQ-syntese i basisbånd med referencemærker skrevet som en SigMF-optagelse. Koder genereres ud fra standardens skifteregistre og Legendre/Weil-konstruktioner. Intet kopieret fra standarden videredistribueres (den har ingen vilkår for genbrug): de primære indekser for AFS-Q kommer fra IS-GPS-800J, og det, som kun standardens bilag definerer (G2-forsinkelser for AFS-I, tertiære koder, LDPC-delmatricer), læses ved kørsel fra en lokal cache, somxval/lunar-afs/fetch_lsis.shfylder fra den NASA-hostede PDF, hver fil kontrolleret mod en fastlåst SHA-256 (lunar_afs::lsis). Modellen er en referencemodel til formatkontrol, ikke en kanal-, udbredelses- eller link budget-model. sigmf::meta_to_json_with_extensionsogsigmf::annotation_extension_fields: en optagelse kan bære navnerumsopdelte udvidelsesfelter deklareret icore:extensions.- Ny VALIDATED række "LunaNet AFS baseband rendering against an independent generator, given its channel state": mod LANS-AFS-SIM (BSD-2-Clause, commit 480c6bf3, S-band-build), nul chip-afvigelser over koderne for PRN 1 til 210, nul symbolafvigelser over de tre rammer i kørslen og en normaliseret kompleks korrelation på 0,999990 over 23,9 s af dens egne samples (værste blok på 2 ms 0,999948), inden for tærskler fastsat før sammenligningen (præregistreret 986ac280). Den driver rendereren med simulatorens egen kanaltilstand og dækker ikke effektfordelingen ud fra bærebølge-til-støj-tætheden eller SigMF- og 8-bit-skrivningen.
- Ny VALIDATED række "LunaNet AFS frame channel coding, FID 0": rammerne på 6000 symboler er identiske med rammerne fra LANS-AFS-SIM symbol for symbol (præregistreret 986ac280); koden for underramme 1 gengiver regneeksemplet i LSIS figur 8, og CRC-24 kontrolværdien i kataloget CRC-24/LTE-A.
- Begge rækker, der rykkes op, er datastyrede af LSIS-cachen: deres test af den uafhængige reference springes over med en meddelelse, indtil
xval/lunar-afs/fetch_lsis.sher kørt. - Fund (ny MODELLED række), "LunaNet AFS spreading-code generation": af 2.937.232 genererede chips og bits sammenlignet med standardens tabeller og filerne i bilag 3 afviger én, de "sidste 24 chips", som tabel E-5 trykker for tertiær PRN 147, hvilket dublerer cellen for PRN 151, mens standardens egen fil i bilag 3 stemmer med generatoren. Kriteriet om nul afvigelser er misset.
- Fund (ny MODELLED række), "LunaNet AFS closed-loop decodability": tre præregistrerede kørsler mod PocketSDR-AFS; den tredje klarede fuldt ud sine tærskler for sporing og dekodning, men ikke sin kontrol af, at en modtagerbuild, der kun udskriver, gengiver den fastlåste builds log, fordi to kørsler af den uændrede modtager allerede afviger i deres indfangningsregistre.
- Rettet: standardbærebølgen for
lunar_service(export_antenna.carrier_hz),lunar_jammingogattack_surfacevar en afrundet 2,4 GHz; den er nu LSIS-020 AFS-bærebølgen, 2492,028 MHz. Ved den gamle standard var tabet i frit rum undervurderet med 0,327 dB. - Revisioner: ingen. Hvert medfølgende scenarie navngiver sin bærebølge, og resultaterne af alle 138 scenariefiler er byte-identiske med den forrige main.
D7, rigtig IQ fra Månen og GPS LNAV (syv nye rækker, ingen VALIDATED: 242 -> 249 rækker, validerede 123 uændret).
portable_math::FftPlan: en hurtig Fouriertransformation (FFT) med blandet radix, hvis output er de samme bits på alle platforme; en SHA-256-pin af transformationerne på 8000 og 24000 punkter består på x86_64 og på wasm32-wasip1 (køremiljø ixval/portable-fft-wasm/).acquisition: parallel kodefasesøgning på samplet IQ (pcps_acquire,pcps_grid) med kohærent foldning, ikke-kohærent akkumulering, en chi-i-anden-tærskel for en falsk-alarm-sandsynlighed på tværs af søgningen og en cellegennemsnitsstatistik for båndbegrænset støj;refine,prompt_seriesmed kode-Doppler samt M2M4- og grid-peak-estimatorer for bærebølge-til-støj-tæthed (C/N0).gps_lnav: en kodning af den ældre GPS-navigationsmeddelelse (LNAV) efter IS-GPS-200 for underrammer 1 til 3, med paritet efter tabel 20-XIV og en feltdekoder.realdata::ion_sdr: en læser til ION GNSS SDR Metadata Standard (.sdrx) og dens samplefiler, medto_mid_risefor to-komplement-niveauer.realdata::lugre: LuGRE-batchhoved for IQS (Lunar GNSS Receiver Experiment), RAW-, ACQ- og NAV-telemetri og CLK-filer samt en kontrol, der opregner, hvor metadata i.sdrxmodsiger det binære hoved.antenna::GainPattern2Dog, iearth_gnss_lunar, yaw-styringens kropsreferencesystem, vinkler for udsendelsesazimut og off-nadir samttransmit_side_dbfor relativ C/N0 med målte mønstre.Kodning af GPS LNAV-navigationsmeddelelsen (ny række, forbliver MODELLED efter integratorens efterverifikation): på IGS-broadcastfilen fra 2. marts 2025, parset og dekodet af RTKLIB v2.4.2-p13, består alle 960 ord paritet, alle 96 underrammer dekodes, og alle 608 broadcast-heltal er lig Kshanas (
tests/gps_lnav_rtklib_integer_oracle.rs), men præregistreringen (d4d9eb9d) nåede den offentlige gren to sekunder efter committen med resultatet, så rækkefølgen "registreret før filen blev hentet" kan ikke påvises, og rækken rykkes ikke op.realdata::ion_sdrfylder ord fra den mest betydende bit (I i den høje nibble af en LuGRE-byte; den tidligere læsning gav det konjugerede signal), beholder den gamle læsning somSdrLayout::fill_lsb_firstog læser samples, der er bredere end et ord.acquisition::refine_doppler_coherent: fasekohærent Doppler-forfining (0,2 Hz RMS ved 30 dB-Hz over 200 ms i simulering).GPS L1 C/A mod gps-sdr-sim: chips og paritet er bit-eksakte; 230 af 1152 LNAV-felter afviger med én enhed, fordi gps-sdr-sim trunkerer, hvor det udsendte heltal kræver afrunding.
LNAV dekodet af RTKLIB: al paritet og alle underrammer består, og hver parameter er inden for et halvt kvantum; 41 skalerede værdier afviger med nogle få enheder på sidste plads gennem RTKLIBs decimale konstant 2^-43, over den registrerede tærskel.
LuGRE-indfangning mod GNSS-SDR 0.0.19: 266 af 266 beslutninger stemmer, 250 placeret på samme celle; de fleste positive er artefakter af et middel på −0,5 i de nøgne 4-bit-niveauer; C/N0-delen havde ingen samtidige flyvedata. To batches (OP5, OP12) blev udelukket ved en fejl: deres metadata stemmer med deres hoveder, men læseren kunne da ikke læse en sample bredere end et ord.
LuGRE-indfangning mod banepredikeret Doppler: med sampleeffektbeslutningen krydser hver søgning på båndbegrænset støj; med cellegennemsnitsbeslutningen stemmer de stærkeste par i størrelse med omvendt fortegn, hvilket viser, at den registrerede I/Q-rækkefølge er den konjugerede af dataene.
Blind indfangning på batches fra månens overflade: fire batches indfanger hver én satellit (forudsagt synlig, ingen falsk alarm ved 1e-7), ingen to, så tærsklen for Doppler-forskel har intet par at score.
Relativ C/N0 på månedistance (M039 omformuleret): 15 Block IIR/IIR-M-optegnelser og ét par, for få til den registrerede tærskel.
Revisioner: ingen; intet offentliggjort tal, golden-fil eller dokumentationsfigur ændret.
Rækken M039 "Earth-GNSS at lunar distance" omformulerer sin påstand på månedistance som den relative C/N0 mellem satellitter ved én epoke plus sigtbarhed (absolut C/N0 påstås ikke); den forbliver MODELLED. Den øverste NOTICE bærer kildeangivelsen for LuGRE under CC BY 4,0.
Rettet#
- Orienteringen af månens hovedakser fra DE440 interpoleres nu langs geodæten mellem daglige noder. Den tidligere elementvise interpolation var forkert med op til 2.0e-4 rad (340 m på månens overflade) nær kvartpunkterne i hver dag, ikke de "omkring 14 m", rækken angav. Dens brugere (geometri for månens laserafstandsmåling, månens datum, månens fejlobserverbarhed) får den rettede orientering.
- Rettelser af motoren i runde 2, hver kørt igen mod sin uændrede præregistrerede tolerance: IERS-årgangen for en EOP-række læses fra dens I/P-flag i stedet for fra en tom Bulletin B-blok;
snapshot_raimbruger det geodætiske lokale niveau; koblingen til månens ratereferencesystem bruger ækvatorialradius, J2 og rotation; liu22-fittet starter ved nul korrektioner uden priors og bruger artiklens middelbevægelsesrate; EO-nodeafstanden bærer den nodale J2-regression; Costas-sløjfens tid til cycle slip bruger rho/4; den fælles positionsbestemmelse anvender broadcast-gruppeforsinkelsen for parret; den fælles løsning for Månen bruger et QR-skridt; NTN-grænsen evalueres på den sande position; urreferencen i konstellationsudformningen er den lavest nummererede konstellation i sigte; DE440-orienteringsserien spænder over 2014-2030 og giver fejl uden for den i stedet for at klampe.
Tilføjet#
leo_navmsg::truth::TruthOrbit::from_ecef_states, en referencebane bygget ud fra tabellerede jordfaste tilstande, brugt i sammenligningen af fitteren på rigtige baner.- Testfilerne og fixturerne til sammenligningerne ovenfor, hver med sin generator og en
NOTICE.md, der angiver kilde, licens, hentedato og SHA-256. - Runde 2:
araim_reference::add_v42_protection_levelsog_ecef(ADD v4.2-fejldetektion efter Stanford MAAST for ARAIM 2, BSD-3-meddelelse i kilden);raim::snapshot_raim_fde;cw_dynamics::second_order_correctionogpropagate_second_order; INS-fejlmodellen med ni tilstandeinertial::coast::ErrorDynamics; partielle afledede forlunar_vlbi::KernelGeometryog inputtenelunar-vlbipå kernestien;naif_kernel, en læser til SPK type 2 og binære PCK-kerner;lunar_llr_geometry::llr_bcrs_one_way_mmed ITRF2020-stationer; tætheden fra Jacchia 1971;solar_system::link_onover enhver efemeridekilde;launch::site_rotation_speed_at;eo_payload::j2_nodal_periodogground_track_spacing_equator_j2;batch_ls::gauss_newton_qr;precise_products(læsere til RINEX-ur, ANTEX og DCB).
[0.29.3] - 2026-10-01#
En patch-udgivelse på 0.29.2. Kshana Studio er bygget om omkring to visninger: en enkel visning, der svarer først og forklarer med almindelige ord, og en avanceret visning med det fulde dashboard. Der følger to små rettelser på kshana.dev med. Motoren ændres ikke: hvert medfølgende scenarie giver et resultat, der er byte-identisk med 0.29.2 bortset fra versionsstemplet.
Ændret#
- Kshana Studio har en enkel visning. Det er den, Studio åbner på.
- Svaret kommer først: et scenarie åbner på sit resultat, formuleret i én almindelig sætning. Hvert medfølgende scenarie har sin egen sætning, skrevet ud fra det, scenariet måler.
- Der vises højst fem indstillinger, dem der ændrer svaret mest. Resten ligger under "Avancerede indstillinger", foldet sammen, indtil du åbner dem.
- "Sådan beregnes det" forklarer metoden i få linjer, og "Til forskere" viser motorens egne tal, scenariefilen og den evidens, der ligger bag resultatet.
- Det fulde dashboard er den avancerede visning. Alle paneler, diagrammer, eksporter og rapporter fra den tidligere Studio findes dér.
- En kontakt skifter mellem de to visninger og bevarer din plads. Scenariet, den visning du var i, og alle indstillinger, du har redigeret, følger med. Studio husker, hvilken visning du brugte sidst. Links fra webstedet og dokumentationen åbner den enkle visning; et link med
view=advancedåbner den avancerede visning, og alle tidligere Studio-links åbner stadig det samme scenarie og den samme visning. - En hurtigere første visning på langsomme forbindelser. Det optagne svar for et scenarie tegnes, før resten af Studio er indlæst, så på en langsom mobilforbindelse vises svaret efter cirka to sekunder i stedet for cirka ni.
- Bedre søgning. En søgning viser nu først de scenarier, hvis område eller titel matcher ordene, før scenarier, der kun nævner dem i filnavnet eller teksten.
Rettet#
- Globussen på forsiden bliver ikke længere tom, når reduceret bevægelse er slået til. Når systemindstillingen for reduceret bevægelse var slået til, kunne en ændring af vinduets størrelse efterlade hero-globussen tom, indtil siden blev rullet. Globussen tegnes nu om i samme billede som størrelsesændringen.
- L-bånd-konsollen på forsiden forklarer sit tomme bånd. I "Watch a jammer take the band" forblev GPS L5 / Galileo E5a-panelet mørkt hele minuttet, hvilket virkede ødelagt. Ingen jammer sender i det bånd i dette scenarie, og satellitsignalerne ligger under støjgulvet, så intet dér hæver sig over det. En diskret mærkat siger nu det i hver panelstrækning, hvor intet ligger over gulvet (L5 / E5a-panelet og L2C-panelet, før dets støjjammer starter), sammen med hvert båndets C/N0 og låsetilstand fra den samme kørsel. Den placeres kun dér, hvor intet er over gulvet, så den dækker aldrig jammerenergi.
0.29.2 - 2026-10-01#
En patch-udgivelse på 0.29.1. Den fjerner duplikeret kode i LEO-navigationsmeddelelses-, fusions- og spektrummodulerne, tilføjer et lyst tema til kshana.dev, flytter Kshana Studio til sin egen adresse, gør webstedet læsbart for søgemaskiner og AI-assistenter, retter flere små ting i Studio og lader npm-udgivelser publicere uden et gemt token. Intet motoroutput ændres: hvert medfølgende scenarie giver et resultat, der er byte-identisk med 0.29.1 bortset fra versionsstemplet.
Tilføjet#
- Et lyst tema til kshana.dev. Hver side kan læses lys eller mørk. Webstedet følger læserens systemindstilling og har en kontakt til at ændre den.
- Søgemaskiner og AI-assistenter kan læse webstedet. Hver side har nu sin egen titel, beskrivelse, kanoniske adresse, tags til sociale kort og strukturerede schema.org-data samt almindelig tekst til de sektioner, et script tegner. Webstedet udgiver
robots.txt, ensitemap.xmlmed datoen for hver sides seneste ændring,llms.txtogllms-full.txt(en kort og en fuld guide i almindelig tekst til AI-assistenter) samt en IndexNow-nøgle, så en udrulning kan fortælle søgemaskiner, hvad der er ændret. - npm-udgivelser kan publicere uden et gemt token. npm-jobbet kører nu Node 24 og npm 11.5.1 eller nyere, som understøtter npm trusted publishing: npm bytter udgivelsesjobbets GitHub-identitet til en kortlivet legitimation. Hemmeligheden
NPM_TOKENvirker stadig og bruges, så længe den er sat, så intet ændres, før trusted publishing er slået til for pakken på npmjs.com.docs/RELEASING.mdangiver trinnene.
Ændret#
Forsidens overskrift er læsbar hen over globussen. En blød skygge ligger nu bag overskriften og dens tekst og toner baneliniernes og satellitprikkernes visning på den animerede globus ned, hvor de krydser den.
Kshana Studio har sin egen adresse: https://kshana.dev/studio/. Hvert link på webstedet og i dokumentationen peger dertil. Den gamle adresse,
/playground/, virker stadig og videresender til den nye, så scenariet, visningen og andre indstillinger i linket bevares.Rettelser i Studio. Motorfilen hentes én gang i stedet for to. Mens den hentes, viser Studio scenariets optagne resultat med det samme, markeret som optaget, i stedet for en tom skærm. På en telefon er overskriften én kompakt række. Nøgletallene ombrydes to på en række, så intet skjules uden for skærmens kant. Feltmærkater bruger scenariets egne ord med feltnavnet ved siden af, og søgningen finder felter ved begge dele.
Mindre duplikeret kode. LEO-navigationsmeddelelsens enhedstabel skrev de samme ti SISRE-statistikrækker for fire tilpasningsoversigter. En makro skriver dem nu én gang. De to spektrum-vandfaldsdiagrammer deler én tidsakse, farvebjælke og C/N0-bjælkepanel. Hovedgitterets nedsampling genbruger
downsample_grid, og Simpson-integralet genbrugernavsignal::simpson. LEO-passagetypens to indgangspunkter deler ét opsætningstrin.leo_link::geometryimporterer vektorhjælpefunktionerne fraleo_fusion::geomi stedet for at kopiere dem. Den avancerede rapport importerer API-rapportens HTML-escape i stedet for at kopiere den. Hver af de 139 scenariefiler iscenarios/blev kørt på 0.29.1 og på denne kode, og hver outputfil er byte-identisk.Enhedstabellerne for leo-navmsg og leo-pvt har deres egne filer. De er flyttet ud af moduler, der også indeholder logik, til
src/leo_navmsg/units.rsogsrc/leo_fusion/pvt_units.rs.PVT_UNITSbeholder sin offentlige sti. Kun disse to tabelfiler kommer med i undtagelserne for kopi-og-indsæt-detektion for deklarative kataloger isonar-project.properties, somtests/sonar_cpd_exclusions_are_justified.rskontrollerer.
Rettet#
- READMEs CI-badge viser resultatet af push til main. Badget talte kørsler af alle hændelser på main, så det kunne vise "failing", mens hver push-kørsel var grøn; det beder nu kun om push-kørsler (
event=push).
0.29.1 - 2026-10-01#
En patch-udgivelse på 0.29.0: det målte dækningstal, projektets navnelinje på kshana.dev, et hurtigere dækningsjob og en opdateret README. Intet motoroutput ændres: hvert scenarie giver samme resultat som på 0.29.0.
Rettelser af offentliggjorte tal#
- Linjedækning: ~96 % → ~95 %. Dækningsjobbet målte den udgivne 0.29.0-kode igen (commit
db796dd, CI-kørsel 36809850252, 2026-10-01): 95.35 %, 55.970 af 58.697 linjer isrc/. Det offentliggjorte tal var 95,63 % (37.697 af 39.419 linjer), målt påb1d350dfør 0.28.0; det blev rundet til ~96 %. Det nye tal rundes til ~95 %, så alle flader, somtests/coverage_figure_doc_sync.rslåser fast, flytter sig sammen:docs/COVERAGE.md, README-badget, Evidence-linjen og CI-tabellen, badgene på crates.io, PyPI og npm, den tekniske rapport og dækningssiden på kshana.dev. Gulvet på 85 % er uændret.
Tilføjet#
- Navnelinjen på kshana.dev. "Kshana · क्षण · the precise instant" åbner nu forsidens hero og står under mærket i hver sides fodlinje. kshana.dev sender stadig ingen forespørgsler til nogen anden vært: devanagari-skriften er en selvhostet Noto Sans Devanagari-delmængde med de tre bogstaver i क्षण (1.692 bytes,
web/fonts/, med teksten til SIL Open Font License og dens SHA-256 iweb/fonts/FONTS.json).web/tools/fetch_third_party.pyhar lært at gemme en Google Fonts-delmængde medtext=under et indholdsadresseret filnavn.
Ændret#
- Webstedets links lander dér, hvor de peger, på rene adresser. Et link til en sektion placerer nu sektionen lige under overskriften, på en telefon og på en computer: et sektorlink under Missioner åbner sektoren med dens panel øverst; links under Funktioner og Udgaver holder deres plads, mens diagrammerne ovenover tegnes; Udgaver lægger ikke længere en ekstra forskydning for overskriften til; og et link ind i en foldet del af en dokumentationsside åbner den. Hver side linkes med sin rene adresse (
/evidence#research,/docs/changelog,/for forsiden), og de kanoniske links, sitemappet og omdirigeringerne fra gamle adresser nævner de samme; adresserne med.htmlvirker stadig. Forskning har sit eget link i overskriften mellem Evidens og Udviklere og i fodlinjen. Dokumentationen viser ikke længere køreplanen (ROADMAP.mdbliver i repositoriet): gruppen Projekt er Changelog, Licensing, Security, Contributing, Governance og Code of conduct, og ordlisten er flyttet til Kom i gang. - Dækningsjobbet er hurtigere. På 0.29.0 tog det 143 minutter mod raske 91 til
- Fuzzeren
tests/property.rs, årsagen sidste gang, tog 4 af dem. Det medfølgende korpus voksede fra 74 til 139 scenarier, og tre testprogrammer gennemgik det hele én fil ad gangen (determinismto gange,advanced_reportoganimationén gang): tilsammen 37 minutter under dækningsinstrumentering mod 3 på 0.27.2. De deler nutests/support/corpus.rs, som kører arbejdet for hvert scenarie på hver kerne og returnerer resultaterne i sorteret rækkefølge; hvert scenarie og hver assertion bevares. På en arm64-bærbar, debug-build:determinismtager 143 s på 14 kerner mod 612 s medKSHANA_CORPUS_THREADS=1(den gamle serielle gennemgang).
- Fuzzeren
- README, opdateret. Den åbner med samme navnelinje som webstedet; Studio-skærmbillederne er taget om fra Studio 0.29.1, med et nyt af Studio på en telefon og dens trinlinje i bunden; en ny strimmel, "The site", viser tre sider af kshana.dev fra build 0.29.1 (
tools/capture_site_shots.mjs, sammensat aftools/readme_shots.pyog registreret idocs/assets/readme/site/SHOTS.json); dækningstallet er ~95 %; og forskningsfigurens alt-tekst, som gentog arkitekturfigurens, beskriver nu artiklerne. Badgene i overskriften er mindre og kortere (18 px høje; "~95%", "83/223", "quality", "AGPL-3.0", "zenodo.20528627"), så alle elleve er der plads til på to linjer; hvert link og hver alt-tekst bevarer sin fulde betydning. - Jobbet til container-imaget får 90 minutter. Ved v0.29.0 ramte det emulerede linux/arm64-build af imaget
kshana-mcpden gamle grænse på 45 minutter, mens det kompilerede sin sidste crate, så imaget, MCP-registerets post og kanalkontrollen ikke blev publiceret. Grænsen er nu 90 minutter; imaget er uændret. - Otte float-literaler er omgrupperet i
src/ephem.rsogsrc/sgp4.rs(0.323_273_64→0.323_273_640): SonarQube Cloud læste en sidste gruppe på_64eller_32som et manglende suffiksf64ellerf32(regel S7454). Værdierne er de samme tal, så hvert resultat er uændret.
0.29.0 - 2026-10-01#
Tolv nye scenarietyper og tre nye måder at læse en kørsel på. Motoren dækker nu radiospektret, hele solsystemet, konstellationer omkring ethvert legeme, kampagner, der kæder scenarier sammen til én mission, og positionering, navigation og tidssynkronisering (PNT) fra lav jordbane (LEO) fra signalet til positionsbestemmelsen. Hver kørsel kan også skrives som en animation, en fuld rapport og et sæt interoperabilitetsfiler til andre værktøjer.
Omkring motoren: en gentegnet kshana.dev (et websted med flere sider og et nyt Kshana Studio-dashboard, der kører alle funktioner i browseren), en omskrevet README, fjorten værktøjer på Model Context Protocol-serveren (MCP), et browser-build, der giver de samme tal som det native, og en offentlig side for Kshana Pro.
| 0.28.0 | 0.29.0 | |
|---|---|---|
| Scenarietyper | 63 | 75 |
| Scenariefiler (plus ét suitemanifest) | 77 | 138, hvoraf 132 er medfølgende til kshana example |
| Rækker i verifikationsmatricen | 174 | 223 |
| heraf VALIDATED mod en uafhængig ekstern reference | 66 | 83 |
| hvoraf MODELLED (angiven model, kontrolleret for intern konsistens) | 104 | 136 |
| hvoraf PARTNER (kræver en partners hardware eller data) | 4 | 4 |
Hvor væksten kommer fra:
| Område | Typer | Scenariefiler | Matrixrækker (valideret + modelleret) |
|---|---|---|---|
| Spektrum | 1 | 1 | 3 (1 + 2) |
| Solsystemet og positionering omkring ethvert legeme | 2 | 3 | 6 (2 + 4) |
| Konstellationsudformning | 1 | 3 | 3 (2 + 1) |
| Kampagner | 1 | 5 | 3 (0 + 3) |
| Scenarier til søs, på vej og på skinner | 0 | 5 | 0 |
| Animation, rapporter, interoperabilitetseksporter | 0 | 0 | 0 |
| LEO-signaludformninger og multibåndsspektret | 1 | 4 | 4 (2 + 2) |
| LEO-passage og linkbudget | 1 | 6 | 9 (6 + 3) |
| LEO-navigationsbesked | 1 | 5 | 9 (3 + 6) |
| LEO-positionering, tidssynkronisering og fusion | 3 | 8 | 8 (1 + 7) |
| LEO-kæde fra ende til anden | 1 | 3 | 1 (0 + 1) |
| LEO-modstandsdygtighed, fokusområder og slutbrugerscenarier | 0 | 18 | 3 (0 + 3) |
| Tilføjet i alt | 12 | 61 | 49 (17 + 32) |
LEO-funktionen er systemagnostisk: den kører på generiske, angivne parametre og kræver intet navngivet system. Navngivne systemer er valgfri forudindstillinger, hver i sin egen fil med sin offentlige kilde. Én forudindstilling, Celeste IOD (demonstration i kredsløb), bruger tal præsenteret på ESA NAVISP LEO-PNT-workshoppen, 2026 (ESA er Den Europæiske Rumorganisation; NAVISP er dens Navigation Innovation and Support Programme); den ligger i én fil, src/celeste_iod.rs, sammen med sine fem scenarier, der kun findes i repositoriet, så den kan holdes tilbage uden en kildeændring, og ingen af dens workshoptal gentages i denne changelog.
Læs "Rettelser af offentliggjorte tal", før du opgraderer. Ét motoroutput ændres (kolonnerne i inertialsystemet for typen ephemeris, efter en fortegnsrettelse i nutationsmatricen), og dokumentationsgennemgangen rettede tal, som tidligere dokumenter havde trykt.
Forkortelser brugt i denne post
Statusser: VALIDATED betyder kontrolleret mod en uafhængig ekstern reference (en offentliggjort tabel, en anden gruppes software eller måledata); MODELLED betyder en angiven model, der kun er kontrolleret for intern konsistens; PARTNER betyder, at kontrollen kræver en partners hardware eller data.
| Forkortelse | Betydning |
|---|---|
| 3GPP, 5G, NTN | 3rd Generation Partnership Project; femtegenerations mobilnet; ikke-terrestrisk net |
| 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 faseskiftmodulation; multiplekset binær offsetbærebølge (signalmodulationer) |
| ATOMIC | Autonomous Time and Orbit Determination for Microsatellite Constellations (en offentliggjort LEO-efemeridemodel) |
| C/A, L1, L2, L2C, L5 | grov/akvisitionskode samt bærebølge- og civile signalnavne i Global Positioning System |
| C/N0 | forhold mellem bærebølge og støjtæthed |
| CIO | Celestial Intermediate Origin |
| CLI | kommandolinjegrænseflade |
| CRC-24Q | 24-bit cyklisk redundanskontrol (Qualcomm-polynomium) |
| CSAC | chipskala-atomur |
| CSS, HTML, SVG, XML | Cascading Style Sheets; HyperText Markup Language; Scalable Vector Graphics; Extensible Markup Language |
| CSV, JSON, PDF, TOML, URL | kommaseparerede værdier; JavaScript Object Notation; Portable Document Format; Tom's Obvious Minimal Language; uniform ressourcelokator |
| CW | kontinuert bølge |
| CZML, KML, GeoJSON | Cesium Language; Keyhole Markup Language; Geographic JSON (kort- og globusformater) |
| DE441 | Development Ephemeris 441 fra Jet Propulsion Laboratory |
| DOI | digital objektidentifikator |
| DOP, GDOP, PDOP, HDOP, VDOP | præcisionsforringelse: geometrisk, position, horisontal, vertikal |
| E1, E5, E5a, E5b | Galileos signalnavne |
| E3F | et slotnavn i konstellationstabellen for Global Positioning System |
| ECEF | jordcentreret, jordfast |
| EE | jævndøgnsligningen |
| EGM2008 | Earth Gravitational Model 2008 |
| EIRP | ækvivalent isotropisk udstrålet effekt |
| ERFA, SOFA | Essential Routines for Fundamental Astronomy; Standards of Fundamental Astronomy (astronomibiblioteker til reference) |
| ESA, NAVISP | Den Europæiske Rumorganisation; dens Navigation Innovation and Support Programme |
| FDMA | frekvensdelt multipel adgang |
| GCRF, GCRS | Geocentric Celestial Reference Frame; Geocentric Celestial Reference System |
| GLONASS | Ruslands Global Navigation Satellite System |
| GNSS, GPS | globalt satellitnavigationssystem; Global Positioning System |
| IAU | Den Internationale Astronomiske Union |
| ICD, OS SIS ICD, OS SDD | grænsefladespecifikation; Galileo Open Service Signal-In-Space Interface Control Document; Galileo Open Service Service Definition Document |
| ICRF | International Celestial Reference Frame |
| IMO | Den Internationale Søfartsorganisation |
| INS, MEMS | inertinavigationssystem; mikroelektromekanisk system |
| IOD | demonstration i kredsløb |
| IQ | i fase og kvadratur |
| IS-GPS-200 | grænsefladespecifikationen for Global Positioning System |
| ISS | Den Internationale Rumstation |
| ITRF, ITRS, PEF, TEME | International Terrestrial Reference Frame; International Terrestrial Reference System; pseudo-jordfast; sand ækvator, middeljævndøgn (referencesystemer) |
| ITU, ITU-R | Den Internationale Telekommunikationsunion; dens radiokommunikationssektor |
| J/S | forhold mellem jammer og signal |
| J2 til J6, J2000 | zonale harmoniske i tyngdefeltet; epoken 2000-01-01 12:00 |
| JPL | Jet Propulsion Laboratory |
| LEO, MEO | lav jordbane; mellemhøj jordbane |
| MBSE | modelbaseret systemudvikling |
| NEES | normaliseret estimationsfejl i anden potens |
| NeQuick-G | Galileos ionosfæremodel |
| OEM, SP3, TLE | Orbit Ephemeris Message; Standard Product 3 (præcise baner); tolinjers elementsæt |
| PNT, PPP | positionering, navigation og tidssynkronisering; præcis punktpositionering |
| PSD, SSC | effektspektraltæthed; spektral separationskoefficient |
| RAIM, SQM | modtagerautonom integritetsovervågning; overvågning af signalkvalitet |
| RINEX, RTCM | Receiver Independent Exchange Format; Radio Technical Commission for Maritime Services |
| RMS | kvadratisk middelværdi |
| RTKLIB | et open source-bibliotek til GNSS-positionering, brugt her som uafhængig reference |
| SGP4 | Simplified General Perturbations 4 (banemodellen for tolinjers elementsæt) |
| SHA-256 | Secure Hash Algorithm, 256-bit |
| SigMF | Signal Metadata Format |
| SISRE | afstandsfejl for signal i rummet |
| 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 | rumfartøjsidentifikator |
| T/P/F | en Walker-konstellations samlede antal satellitter, baneplaner og faseforskydning |
| TEC | samlet elektronindhold |
| UHF | ultrahøj frekvens |
| UTC | Coordinated Universal Time |
| WGS 84 | World Geodetic System 1984 |
| X1, X5 | signalnavne i Xona Pulsar-systemet |
Rettelser af offentliggjorte tal#
Et ændret offentliggjort tal er en rettelse og bliver registreret, aldrig rettet i det skjulte. Denne udgivelse indeholder én rettelse af motoroutput og flere af tal, der er trykt i dokumentationen.
Motoroutput
- TEME→GCRS-reduktionen drejede med 2·Δψ: nutationsmatricen havde fortegnet for Δψ omvendt.
nutation::numatbyggedeRx(−(ε̄+Δε))·Rz(Δψ)·Rx(ε̄), hvor SOFAsiauNumatbyggerRx(−(ε̄+Δε))·Rz(−Δψ)·Rx(ε̄), sånutation_matrix,nutation_matrix_2000a,teme_to_gcrsoggcrs_to_temeroterede med det dobbelte af nutationen i længde, cirka 25 buesekunder. Hver kontrol på kæden var en egenskabstest (korrekt rotation, rundtur, et bidrag fra nutationen forskelligt fra nul), som en fortegnsfejl består; Vallado-testen fra ende til anden dækkede TEME→PEF, TEME→ITRF og GCRS→ITRS, men ikke TEME→GCRS. På Vallado-eksemplet (AIAA 2006-6753, 2004-04-06) missede kæden den offentliggjorte GCRF med 1.145 m; den lander nu 0,11 m fra den, og matricen er lig ERFAsnumattil 1e-14.tests/frame_reference_vectors.rs::teme_to_gcrs_matches_vallado_gcrfognutation::tests::nutation_matrix_matches_erfa_numatfejler begge med det gamle fortegn. Konsistenstesten for CIO (Celestial Intermediate Origin) isrc/cio.rshavde tilskrevet den resulterende afvigelse på ~130 m til "≈ 2·EE"; resten er nu 5 cm, og dens grænse er strammet fra 250 m til 1 m. Dette flytter offentliggjorte tal, registreret her som en rettelse: kolonnernegcrs_r_moggcrs_v_m_sfor typenephemeris(omkring 0,8–1,0 km for det medfølgende ISS-scenarie (Den Internationale Rumstation); dets kolonner for TEME, jordfast, sporet på jorden, pejlevinkel og Doppler ændres ikke) samtPropagator::position_in_frame/state_gcrsfor rammerne GCRS og ITRS. Intet medfølgende scenaries oversigtslinje, diagram eller golden hash læser disse kolonner. De nye interoperabilitetseksporter bruger den rettede kæde: den førsteorbit-sgp4-gps-satellits CZML-position stemmer med en ERFA-reduktion af den samme TLE (propageret af Python-pakkensgp4) til 2,3 cm. - Typen
leo-navmsg, native og i browser-buildet. Typen beregner nu hver transcendent funktion gennem ét bærbart matematikbibliotek, så dens frame er de samme bytes på hver platform og i hvert build (under Fixed). Hvert tal forleo-navmsgflytter sig med, og det samme gør trinnetnavmsgileo-pnt-chain. Typen er ny i denne udgivelse, så intet fra en tidligere udgivelse flytter sig, men tal, der er trykt før rettelsen, gør: kontrolværdien for scenariet med kodning og afkodning idocs/LEO-NAVMSG.mdvar0x110315og er0x19105F, og den afkodede meddelelses SISRE er 0,129 cm. På kshana.dev viste Missioner-kortet forleo-navmsg-fit-interval-tradeen værste afstandsfejl på 1,6 mm med en tilpasning på 60 s og 40,3 mm med en tilpasning på 900 s; webstedet bygges nu af denne udgivelses motor og viser 1,8 mm og 46,6 mm. - Jamming-fodaftrykskortet på kshana.dev (Missioner). Hver af dets 875 celler er én kørsel af
maritime-strait-jamming, hvor kun modtagerens position er ændret. Cellerne beregnes nu ud fra de samme koordinater med tre decimaler, som cellens link "open this run" giver Kshana Studio, så en celle viser præcis det, dens link gengiver. Middelværdien af forholdet mellem jammer og signal (J/S) for 30 celler flytter sig med 0,1 dB, op eller ned; ingen celles tracking-tilgængelighed ændres. Motoren giver identiske resultater for hver celle i 0.28.0 og 0.29.0. - Seedet resampling i WebAssembly-pakken (WASM). Browser-buildet trak andre bootstrap- og shuffle-indekser end det native build ud fra det samme seed (under Fixed). Intervallet
quantum-anomaly-detectfor arealet under kurven i browseren var[0.9901265, 0.9938305]og er nu det native[0.99035875, 0.993861]. Intet nativt tal flytter sig.
Tal trykt i dokumentationen
Dokumentationen blev gennemgået ord for ord mod kørsler af denne udgivelses motor. Hvor et trykt tal ikke svarede til kørslen, blev dokumentet rettet, og hver rettelse er opført her, gammelt → nyt. I hvert tilfælde nedenfor ændrede motoroutputtet sig ikke; dokumentet havde misforstået det, afrundet det forkert eller overlevet det.
- Dokumentationsgennemgang af siderne om spektrum, konstellation, kampagne, animation, rapport og interoperabilitet samt en ny
docs/SOLAR-SYSTEM.md. Hvert tal blev kørt igen med denne motor. To offentliggjorte tal flytter sig:docs/CONSTELLATION-DESIGN.mdangav testen af dækning med 5 000 satellitter som "about 0,13 s in a debug build"; det kunne ikke gengives (1,24 s på en belastet bærbar), så siden angiver nu den andel af forfiltret, testen udskriver (9,9 % af 19.440.000 parvise tests), og release-binærfilens 0,14 s for den medfølgendeleo-pnt-mega-shell. Den samme side angav E3Fs krydsning som "off by 0,050 deg"; ingen test udskriver det tal, så siden angiver nu kun tærsklen på 0,06 deg, som testen håndhæver, og udledningen 7,30 mod 7,36 deg bag den. Intet motoroutput ændres. - LEO-PNT-dokumenter: rettede offentliggjorte tal (kørt igen på denne udgivelses motor).
docs/LEO-SIGNAL.mdbåndafvejning: den første ordens ionosfæriske forsinkelse forgeneric-ser 3,24 m (var trykt som 3,25 m) og forgeneric-c-wide0,77 m (var 0,78 m).docs/LEO-NAVMSG.mdkodning og afkodning: den afkodede meddelelses SISRE var trykt som 0,119 cm, hvor kørslen gav 0,122 cm; siden angiver nu 0,129 cm, tallet efter rettelsen af platformsuafhængigheden under Fixed nedenfor.docs/LEO-PASS.mdLEO-mod-GNSS-passage: 32 dB mindre fritrumstab ved passagens top (var "26 to 32 dB"). For signal- og passagetallene ændrede motoroutputtet sig ikke; dokumenterne havde misforstået eller afrundet det forkert. - Vejledningerne, det gennemarbejdede pipeline-eksempel og kommandoen
/kshana-run, gennemgået mod denne udgivelses motor. Rettelser af offentliggjorte tal, gammelt → nyt: de typer, der skriver<scenario>.table.csv, er seks, ikke fire (leo-navmsgogtelecom-timingmanglede;docs/tutorials/README.md,commands/kshana-run.md); krydsningen for koldt atom ½bT² i vejledning 3 er 18.443 s, ikke 18.440 s; rundturfejlen foroem-interopidocs/examples/multi-tool-pipeline.mder den målte 4.88e-7 km, ikke "~1e-7 km"; CSAC-holdover-båndet i vejledning 2 er de 2000–3200 s, testen hævder, ikke "~2600–4400 s"; vejledning 1 citerer SP3-rækkerne og geometriblokken med den præcision, motoren skriver dem med. Intet motoroutput ændrede sig. - Siderne om validering, kvante, SGP4, animation, påstande og integritet.
docs/VALIDATION.md: den håndhævede grænse for den simulerede Allan-deviation på ét sekund for et ur med hvid frekvensstøj er 20 % (var trykt som 25 %; grænsen på 25 % er den, der gælder på kurven ved 1, 10 og 100 s); rækken for hastighedens tilfældige gang angiver nu sin håndhævede grænse på 20 % ved siden af de omkring 12 %, der er observeret; og det chipskala-atomurs tilgængelighed iorbit-gnss-challengeder omkring 0,73 (var trykt som omkring 0,83).docs/QUANTUM.md: den vibrationsbegrænsede støj pr. skud i sidens gennemarbejdede eksempel med koldt atom er omkring 46 gange dens skudstøjgulv (var "~45×"; 46,49 genberegnet), og intervallet "1–50 µg/√Hz" for udstyr i felten, som modsagde en enhed, siden selv citerer, er erstattet af de to citerede enheders offentliggjorte tal.docs/SGP4-VALIDATION.md: den største positionsforskel er 4,12 mm (var "≈ 4 mm"), med satellitten angivet ved navn.docs/ANIMATION.md: videoindkoderens eksempel læste de 24 billeder i sekundet med 12; det bruger nu 24, den rate, billedmanifestet angiver.docs/CLAIMS-VS-REALITY.md: jamming-modellen har 10 tests (var 8), og det koblede filters "2,97 m against 48,8 m" er erstattet af det, dets test hævder (den koblede positionsfejl under 0,6 gange den afkoblede og vinder i mindst 90 af 100 forsøg).docs/INTEGRITY.md: stemplet "Today" læste v0.22.0; det nævner nu denne udgivelse, og to funktioner bygget siden (fejltilstanden for hele konstellationen og integritetsstøttemeddelelsen) forlader dens liste over huller.
Tilføjet#
Spektrum
- Scenarietypen
spectrum: en L-bånd-spektrummodel og et vandfald (src/spectrum.rs,src/sigmf.rs,docs/SPECTRUM.md). Hele GNSS-L-båndet som én effektspektraltæthed (PSD): GPS L1 grov/akvisitionskode (C/A) og L2 civil (L2C) (BPSK(1)), Galileo E1 (multiplekset binær offsetbærebølge, MBOC(6,1,1/11), eller BOC(1.1)), GPS L5 og Galileo E5a (BPSK(10)), et kT-støjgulv med en modtagers støjtal samt jammere med kontinuert bølge (CW), smalbånd, chirp og matchet støj på en scriptet tidslinje. Hver jammer vurderes pr. bånd ud fra sin spektrale separationskoefficient (SSC), hvilket giver forholdet mellem jammer og signal (J/S) og den effektive bærebølge-til-støjtæthed (C/N0) pr. bånd pr. række. Diagrammet er et SVG-vandfald med C/N0-bjælker; result.json bærer gitteret blokmiddelværdiberegnet i effekt. Valgfri[iq]tegner modellen som IQ-sampel, skriver og læser en optagelse i Signal Metadata Format (SigMF) (cf32_le,ci16_le) og sammenligner et Welch-estimat med modellen; valgfri[recording]estimerer en rigtig SigMF-fil. Medfølgende eksempelscenarios/l-band-waterfall-jamming.toml: en chirp tager L1 C/A og E1 ved 10 s, en CW-tone på L1-bærebølgen holder C/A på 17,98 dB-Hz, efter chirpen stopper, mens E1, hvis spektrum har et nulpunkt dér, kommer sig; L5 og E5a er urørte.- Ny VALIDATED-række: signal-PSD'erne og SSC'erne, mod BPSK(n)-hovedloben på 2n x 1,023 MHz, BOC(1.1)-lobernes centrering ved +/-1.023 MHz, de lukkede Parseval-former bag de offentliggjorte SSC'er på -61.8 / -64.8 / -67.8 dB/Hz og lærebogens Q = 1 (CW) og 1,5 (matchet). BOC(1.1)-PSD'ens maksimum ligger ved +/-0.759 MHz, ikke ved lobens centrum; testen fastlåser begge dele.
- To nye MODELLED-rækker: vandfaldet og C/N0-tidslinjen, som reduceres nøjagtigt til kæden for typen
jamming(krydskontrolleret i hver rapport), og SigMF-codec og Welch-estimatoren. Ingen optagelse fra tredjepart findes i repositoriet. navsignal: en MBOC-variant ogspectral_separation_coeff_offset.- Rapporten udskriver den C/N0, som den repræsentative Q-tabel for typen
jammingville give, ved siden af den spektrumafledte; for en CW-tone på C/A-bærebølgen afviger de med 1,8 dB. Tre nye matrixrækker: én valideret (signalspektre og spektrale separationskoefficienter) og to modellerede.
Solsystemet
- Efemeride for solsystemet og positionering omkring ethvert legeme. To nye scenarietyper.
solar-system: Solen, de otte planeter, Pluto, Månen, Phobos, Deimos, Io, Europa, Ganymedes, Callisto og Titan ved én epoke: heliocentrisk position og hastighed i International Celestial Reference Frame (ICRF), gravitationsparameter, radier, J2 (den anden zonale harmoniske), hvor den er offentliggjort, siderisk rotation, polen og nulmeridianen fra Den Internationale Astronomiske Union (IAU), et banespor over én omdrejning samt lysrejsetid, envejs- og tovejsafstand, solens Shapiro-forsinkelse og solafstand fra et observatørlegeme og for ethvert ekstra link. Planeterne kommer fra Keplerelementerne fra Jet Propulsion Laboratory (JPL) af Standish og Williams (tabel 1, 1800 AD til 2050 AD; tabel 2a/2b, 3000 BC til 3000 AD); månerne fra JPLs middelelementer med IAUs synkrone rotationsrate og Titan fra IAUs rotationsmodel. Eksempel:scenarios/solar-system-tour.toml.body-pnt: en orbiter eller en lander på overfladen omkring et hvilket som helst af disse legemer, der navigerer med pseudoafstande fra en Walker-konstellation omkring legemet og en urfri tovejsafstand fra Jorden; præcisionsforringelse, formel usikkerhed og seedede mindste kvadraters positionsbestemmelser med og uden jordlinket. Eksempler:scenarios/mars-orbit-pnt.toml,scenarios/europa-surface-pnt.toml.Bodyfår Merkur, Venus, Jupiter, Saturn, Uranus, Neptun, Pluto og de syv måner, et navneopslag og en fysisk post;AnalyticSolarSystemgiver ethvert legeme i forhold til ethvert andet gennem den eksisterende sømEphemerisProvider.- VALIDATED mod JPL Horizons (Development Ephemeris DE441; fixtures og forespørgsler i
tests/fixtures/solar_system/): Merkur til Saturn og Jorden fra tabel 1 inden for to gange den angivne nominelle fejl (værst 1,87 gange), alle otte planeter fra tabel 2a/2b (værst 1,71 gange) samt lysrejsetiden fra Jorden til Mars og Jupiter. MODELLED: Uranus og Neptun fra tabel 1, som overskrider den angivne fejl mod DE441 (2,0 og 5,2 gange), Pluto, månerne, legemekonstanterne og resultaterne forbody-pnt. - Fund: Montenbruck & Gills månerække i
src/ephem.rser allerede henført til J2000-jævndøgnet af sit eget præcessionsled (0,05 grader fra Horizons), så den bruges uden en yderligere præcessionsrotation. Seks nye matrixrækker: to validerede (planetpositioner, lysrejsetid) og fire modellerede.
Konstellationer omkring ethvert legeme
- Konstellationsudformning i stor skala (typen
constellation-design,src/constellation.rs). Walker delta- og Walker star-mønstre (T/P/F), eksplicitte elementlister og udformninger med flere skaller, flere konstellationer pr. kørsel, omkring Jorden, Månen, Mars eller enhver anden planet, Pluto eller en stor måne ud fra de legemekonstanter, som typensolar-systemtilføjede. Forudindstillinger ud fra offentliggjorte nominelle elementer: baseline og den udvidelige konstellation med 24 slots for Global Positioning System (GPS) (Standard Positioning Service Performance Standard, SPS PS, 2020), Galileo Walker 24/3/1 (Open Service Service Definition Document, udgave 1,1), BeiDou med mellemhøj jordbane Walker 24/3/1 samt geostationære og skråtstillede geosynkrone satellitter (Open Service Performance Standard 3,0) og GLONASS 24/3/1 (Interface Control Document 5,1). Dækning og præcisionsforringelse (DOP) over et bredde-/længdegrad-gitter: satellitter i sigte, GDOP, PDOP, HDOP og VDOP (geometrisk, position, horisontal, vertikal) og tilgængelighed pr. celle, globalt og på det værste sted, med ét modtagerur pr. konstellation. Et synlighedsforfilter (dækningshalvvinkel plus et breddegradsbånd under satellitten, nøjagtigt på et sfærisk legeme) kører 5.000 satellitter på et gitter på 10 deg på omkring 0,13 s i en debug-build.- VALIDATED: Walker-generatoren gengiver tabel 23 i Galileo OS SDD og slotformlen i GLONASS ICD; GPS-forudindstillingen gengiver SPS PS-kolonnen med ækvatorkrydsninger (35 af 36 steder inden for 0,0108 deg; E3F inden for 0,06 deg, idet tabellens egen række er inkonsistent); GPS-baselinens globale HDOP-fordeling matcher SPS PS appendiks B (median 0,940 mod 0,94, 95 % 1,255 mod 1,25, middelværdi 0,965 mod 0,96; tærskel 0,03).
- MODELLED: vilkårlige udformninger, andre legemer, BeiDou-fasen og knuderne for skråtstillet geosynkron bane, tolegemebaner med valgfri J2, kun geometri.
- Scenarier:
constellation-multi-gnss-coverage(102 satellitter, tilgængelighed 100 %, median PDOP 0,95, 31,0 i sigte over 10 deg),leo-pnt-mega-shell(5.000 satellitter, tilgængelighed 99,22 % ved PDOP på 3 eller derunder over 20 deg, 0 % ved polarhætterne, forfilteret beholder 11,5 % af de parvise tests),lunar-relay-constellation(14 satellitter omkring Månen, tilgængelighed 21,33 % samlet og højest over det sydpolare område). Alle tre er medfølgende tilkshana example. Noter:docs/CONSTELLATION-DESIGN.md. Tre nye matrixrækker: to validerede (Walker-generator og GNSS-forudindstillinger, GPS globalt DOP) og én modelleret.
- En kampagne drevet af spektrummodellen og konstellationer omkring ethvert legeme.
scenarios/campaign-spectrum-holdover-integrity.tomlkæder typenspectrumsammen med et urs holdover og en integritetsovervågning (en chirp tager L1 C/A og E1; en CW-tone holder derefter C/A nede, mens E1 kommer sig, og modtageren falder tilbage til en himmel med kun Galileo), fastlåst mod det selvstændige vandfaldseksempel itests/campaign_composition_reference.rs.constellation-designfinder nu sit centrale legeme gennemBody::by_name, så en konstellation kan lægges omkring enhver planet, Pluto eller en stor måne med de konstanter, typensolar-systembruger.
Kampagner
- Kampagner: mange scenarier sammensat til én kørsel. En ny type
campaign(src/campaign.rs, dokumenteret idocs/CAMPAIGNS.md) kører medlemmer af eksisterende typer gennem den samme afsendelse som kommandolinjen og læser tal ud af deres resultater. Fire sektioner, i enhver kombination:[[phases]]: en kædet mission på én tidslinje. Forudindstillinger for hver type læser urets tidsfejl mod dets grænse, det gennemsnitlige effektive forhold mellem bærebølge og støjtæthed (C/N0) mod tracking-gulvet, det lodrette beskyttelsesniveau mod alarmgrænsen, positionsfejl, satellitter i tracking og alarmflag, holdt på et fælles gitter med fasegrænser og hændelser. Tilstanden gives videre afcarry,handoffogend_at.[sweep]: en til tre punktnoterede nøgler af enhver type, eventuelt med et seedet ensemble i hver knude.[monte_carlo]: realisering k ved basisseed + k, med middelværdi, spredning, percentiler og et bootstrap-konfidensinterval på 95 % med fast seed.[compose]: delte værdier bundet ind i flere medlemmer, med en samlet bedste og værste oversigt. Hvert resultat bærer en kampagnehash og en digest over hvert medlems resultat. Fire medfølgende scenarier:campaign-jam-spoof-holdover-integrity(nominel, jamming, spoofing, der slutter ved urovervågningens detektion efter 370 s, holdover, der bærer den spoofede forskydning på 37,0 ns, mens en inertienhed driver videre, en integritetsalarm, genopretning),campaign-sweep-jammer-power,campaign-shared-jammer-sea-roadogcampaign-monte-carlo-clock-holdover.tests/campaign_composition_reference.rsfastlåser sammensætningsidentiteterne: en kampagne med én fase gengiver den selvstændige kørsel bit for bit på tre typer, et ensemble med fast seed er byte-stabilt, og på et ur med hvid frekvensstøj ligger ensemblets middelværdi inden for det rapporterede interval, med spredningen inden for chi-i-anden-intervallet for sqrt(q_wf * tau) = 16,459 ns. Tre nye modellerede matrixrækker.
Animation
- Animationseksport (
--animate svg|html|frames|all,src/animation.rs,docs/ANIMATION.md). Enhver kørsel, hvis resultat bærer en tidsserie, kan nu skrives som en animeret Scalable Vector Graphics-fil (SVG) (Cascading Style Sheets-keyframes, intet script: kurverne tegnes ind bag en bevægelig tidsmarkør), én selvstændig HyperText Markup Language-afspiller (HTML) (afspil og pause, scrub, hastighed, alle paneler på én synkroniseret markør, hændelsesmarkører, der søger ved klik; intet eksternt aktiv) eller en nummereret SVG-billedsekvens med etmanifest.json, der angiver billeder pr. sekund, varighed og billedtider til en videoindkoder. En kampagne afspilles som sine faser med sine alarmer markeret; en spektrumkørsel animerer sit vandfald række for række. Afspilleren følgerprefers-color-scheme, og underprefers-reduced-motionviser både SVG-filen og afspilleren det færdige billede i stedet for at bevæge sig.--animate-fpsog--animate-durationstyrer afspilningen;kshana::api::animate_tomlogkshana::animation::animate_resulter bibliotekets indgangspunkter, ogresult.jsonfår kun en blokanimation, når--animatekører. Outputtet er en ren funktion af resultatet og tilvalgene, byte-identisk ved en ny kørsel og uden tidsstempel. En type uden en samplet tidsakse afvises med "no time series to animate", og intet skrives. Eksportøren tegner kørslens egne sampel og tilføjer intet tal, så den er MODELLED (intern konsistens) og bærer ingen række i verifikationsmatrixen; intet offentliggjort tal ændres. Tests:tests/animation.rs(determinisme, antal billeder, ingen ekstern adresse, velformet XML, stien for reduceret bevægelse, og hvert medfølgende scenarie med en tidsserie animerer).
Rapporter
- Avancerede kørselsrapporter (
src/advanced_report.rs, docs/REPORTS.md). Hver kørsel i kommandolinjegrænsefladen (CLI) skriver nu<scenario>.report.html, en udskrivbar HyperText Markup Language-rapport (HTML), og<scenario>.report.json, det samme indhold som et maskinlæsbart JavaScript Object Notation-dokument (JSON). Sektioner: et resumé til ledelsen; hvert scenarieinput med sin enhed, læst fra feltenhedsskemaet (resultatets blokunits), ellers fra feltnavnets suffiks, ellers angivet som ikke angivet; resultaterne med kørslens diagram, hver skalar og en oversigt over hver numerisk kolonne; for en kampagne sweepets knudetabel, Monte Carlo-middelværdien, standardafvigelsen, 5., 50. og 95. percentil og bootstrap-konfidensintervallet med et histogram pr. måltal, kædens fasetabel eller sammensætningens medlemmer og samlede oversigt (og gitteret for en kørsel afsweepellersweep-nd); en hændelsestidslinje; mærkatet VALIDATED / MODELLED / PARTNER, den uafhængige reference og testevidensen for hver række i verifikationsmatrixen, som kørslens typer berører, læst fra matrixen gennem en krydsreference fra type til række (en række, der bedømmer én inputsti, for eksempel Simplified General Perturbations 4-stien (SGP4) fororbiteller sporet med målt registrering forslot-timing, vises kun, når kørslen tog den sti, og rækken for Shuttle Radar Topography Mission-læseren (SRTM) vises for ingen type, da intet scenariefelt læser en SRTM-flise); udsagnene om det, der ikke er modelleret, og antagelserne, hver citeret med sin kilde; og en gengivelsesregistrering (motorversion, kildecommit, når buildet sætterKSHANA_GIT_COMMIT, Secure Hash Algorithm 256-bit-digests (SHA-256) af scenariefilen og resultatdokumentet, seed, platform og den præcise kommando). Rapporten læser intet ur: samme scenarie, seed og motorbuild giver en byte-identisk rapport, og det eneste tidsstempel, den kan vise, er det,--study-nameallerede skriver. Et udskriftsstilark passer til A4 og US Letter, gentager tabeloverskrifter og holder rækker og figurer hele hen over sider; en Portable Document Format-fil (PDF) laves med browserens "Save as PDF". Der er intet tilvalg--report pdf, fordi det ville kræve en ny, tung afhængighed at tegne diagrammerne ind i en PDF. Tests:tests/advanced_report.rsrapporterer hvert medfølgende scenarie (ingen tom sektion, ingen pladsholdertekst, mærkater lig matrixen, scenariedigesten lig filens, byte-identisk ved en ny kørsel) ogtests/advanced_report_cli.rskører den registrerede kommando igen i en frisk mappe og kræver en byte-identiskresult.json. Intet offentliggjort tal ændres, og antallene af typer, scenariefiler og matrixrækker er uændrede. - Rapporten, animationen og eksporterne virker sammen. Den avancerede rapport får en sektion "Animation and exports": kørslens animerede tegning indlejret som et inaktivt billede (eller grunden til, at der ikke er nogen), links til animations- og eksportfilerne skrevet ved siden af og hvert interoperabilitetsformat med, om det gælder, hvorfor ikke, og dets specifikation;
report.jsonbærer den samme blokcompanions. HTML-animationsafspilleren viser de eksportfiler, der er skrevet ved siden af den. Kommandolinjegrænsefladen (CLI) laver nu eksporterne, før den skriver rapporten, så begge kan nævne filerne.
Interoperabilitetseksporter
- Interoperabilitetseksporter og -importer (
--export,src/interop/, docs/INTEROP.md).kshana <scenario.toml> --export <format>skriver scenariets geometri som CZML (Cesium Language), KML (Keyhole Markup Language 2,2, en standard fra Open Geospatial Consortium, med tidsmærkede spor af typengx:Track), GeoJSON (Internet Engineering Task Force Request for Comments 7946) og Ansys STK-efemerider (Systems Tool Kit).e(EphemerisTimePosVel, meter, én fil pr. bevægeligt objekt) samt det syntetiserede IQ-øjebliksbillede (i fase og kvadratur) fra typenspectrumsom et SigMF-par (Signal Metadata Format) gennem den eksisterendesrc/sigmf.rs.--export allskriver hvert format, der gælder, og udskriver, hvorfor de andre ikke gør;--export listrapporterer uden at køre. Bevægelige objekter skrives i Geocentric Celestial Reference System (CZMLINERTIAL, STKICRF) og jordfast WGS 84 (World Geodetic System 1984) længdegrad, breddegrad og højde (KML, GeoJSON); faste steder i CZML erFIXED. Typenjammingtilføjer to jammer-fodaftryk ud fra sine egne linkligninger.--import-route <file.geojson>skriver en GeoJSON-LineStringind i sporinputtene forterrain-nav,terrain-slam,gravity-mapogcombined-altpnt. Eksporter er byte-deterministiske og bærer intet tidsstempel.tests/interop_formats.rsvaliderer hver eksport mod dens offentliggjorte specifikation, sammenligner eksporterede satellittilstande med motorens egne til 1 mm og kører hvert medfølgende scenarie gennem hvert format, som enten eksporterer eller angiver hvorfor ikke (tabellen i docs/INTEROP.md). Intet offentliggjort tal ændres: IQ-syntesen i typenspectrumer flyttet ind i én delt funktion, og dens resultatdokument er byte-identisk, ogPassesScenariofårpropagator()ogepoch_calendar(), som bruges af dens egen kørsel. Antallene af typer, scenariefiler og verifikationsmatrixrækker er uændrede. Et bane- eller integritetsscenarie udenepochdateres ud fra sine satellitters egne data:t = 0er den tidligste epoke for TLE (tolinjers elementsæt), broadcast-efemeride eller SP3 (Standard Product 3), og hver sådan satellit roteres ind i GCRS- og jordfaste rammer på sit eget tidspunkt; 2000-01-01T00:00:00Z bruges kun, når ingen satellit bærer en epoke. SP3- og OEM-eksporterne (Orbit Ephemeris Message) beholder deres mærkat 2000-01-01. For at understøtte det erSgp4::epoch_jd_utc,Sp3Interpolator::jd_ut1ogPropagator::own_jd_utctilføjet; intet, der fandtes, læser dem.
Navigation fra lav jordbane: signal
- LEO-PNT-signaludformninger og et multibåndsspektrum. En ny type
leo-signalog en typespectrum, der rækker ud over L-båndet: én type, fire scenariefiler (tre medfølgende; filen Celeste IOD findes kun i repositoriet) og fire matrixrækker (to VALIDATED, to MODELLED).leo-signal: parametriserede signaludformninger til positionering, navigation og tidssynkronisering (PNT) fra lav jordbane (LEO) for ethvert system (bånd, sendebåndbredde, ITU-tildeling; akvisitions-, data- og pilotkomponenter med BPSK(n), BOC(m,n), MBOC eller flade spektre, effektandele, FDMA-underbærebølger, kodelængder og datarater), fra indkompilerede offentlige forudindstillingsfiler underdata/leo-signals/(Xona Pulsar X1/X5, Iridium STL, et Starlink-opportunitetssignal, CentiSpace, en repræsentativ C-bånd-udformning og repræsentative UHF/L/S/C/bred-C-udformninger, hver med sin kilde-URL) eller skrevet inline. Pr. signal: den båndbegrænsede PSD og effektandelene i båndet, Gabor-båndbredde, båndbegrænset early-late-kodetrackingjitter mod C/N0 og afstand (Betz & Kolodziejski 2009) og afstandsnøjagtigheden, akvisitionssøgerummet, detektionssandsynlighed og middeltid for seriel og kodeparallel akvisition, SSC ind i og fra GPS L1 C/A, Galileo E1, GPS L5, Galileo E5a, E5b og AltBOC med C/N0-tabet, CW-, bredbånds- og matchet J/S-tolerance fra spektrumtypens SSC-kode, en båndafvejning (ionosfærisk forsinkelse, fritrumstab, afstandsbestemmelse ved lige C/N0 og lige EIRP, jammertolerance) og valgfrie formkontroller mod en beskrevet måling. Eksempler:scenarios/leo-band-trade.toml,scenarios/xona-pulsar-signals.toml,scenarios/celeste-iod-classical-pilot-signals.toml(de Celeste IOD-bånd og den signalkonfiguration, der blev præsenteret på ESA NAVISP LEO-PNT-workshoppen, 2026; holdt tilbage sammen med forudindstillingen Celeste IOD, se "LEO-PNT end to end" nedenfor). Noter idocs/LEO-SIGNAL.md.spectrum: bånd kan nu være en forudindstillet signaludformning (hver komponent tegnet, båndbegrænset, med C/N0 og J/S henført til den trackede komponent) eller en brugerdefineret bærebølge og modulation;[[panels]]tilføjer vandfald over andre frekvensområder på én tidslinje; en jammer af typenwideband(barrage) slutter sig til de fire bølgeformer. Rapporten tilføjerbands[].tracked_power_dbw,bands[].designogpanelssamt én postnot_modelled. Almindelige bånd giver de samme tal som før. Eksempel:scenarios/multi-band-jamming-waterfall.toml.navsignalfår sinusintegralet, de lukkede former for BPSK-effekt i båndet og båndbegrænset Gabor-båndbredde, den båndbegrænsede early-late-jitter for ethvert spektrum og dens Gabor-grænse, den lukkede form for SSC for offset-BPSK, Galileo E5 AltBOC(15.10)-spektret og en parser for modulationsmærkater;Modulation::labeludskriver BPSK(1/3) som en brøk.- Fire matrixrækker: VALIDATED båndbegrænsede lukkede former (90,3 % af BPSK-effekten i hovedloben, jitteren, der reduceres til Kaplan & Hegartys koherente form, 0,0039564 chips ved 45 dB-Hz, B_L 1 Hz, d 1 chip, T 20 ms, og til sin Gabor-grænse, og BPSK-selv-SSC'en 2/(3 R_c); den lukkede Gabor-form og offset-SSC'en mod sin Parseval-form er angivet som interne krydskontroller); VALIDATED maksimal LEO-Doppler (Xona X1 33,2 kHz inden for de offentliggjorte 32 til 34 kHz, Iridium inden for 0,5 kHz af 36 kHz); MODELLED
leo-signal; MODELLED multibåndsspektrum.
Navigation fra lav jordbane: link
- LEO-PNT-passage og linkbudget pr. bånd: typen
leo-pass. LEO-PNT er positionering, navigation og tidssynkronisering fra satellitter i lav jordbane (LEO). En bruger (på jorden, til søs, i luften eller indendørs, stillestående eller i bevægelse) og én eller flere LEO-satellitter fra en udformet passage, eksplicitte elementer, et tolinjers elementsæt (TLE) gennem SGP4 eller en Walker-konstellation fra kodenconstellation-design. Pr. satellit, bånd og epoke: pejlevinkler, afstand, lukket form for afstandsrate og afstandsacceleration (kontrolleret ved hver kørsel mod centrale differenser), Doppler og Doppler-rate, fritrumstab, EIRP (ækvivalent isotropisk udstrålet effekt) med et isoflux-, gaussisk strålings- eller fladt satellitmønster, en patch-brugerantenne, gasdæmpning efter ITU-R P.676, regndæmpning efter ITU-R P.838/P.618, troposfærisk scintillation efter P.618, indtrængningstab i bygninger efter ITU-R P.2109 for en indendørs bruger, polarisationsfejltilpasning, systemstøjtemperatur og C/N0 (forhold mellem bærebølge og støjtæthed); den første ordens ionosfæriske forsinkelse pr. bånd ud fra en skrå TEC (samlet elektronindhold) efter Klobuchar eller lodret TEC under satellitten samt ionosfærefri båndpar med deres støjforstærkning. Galileo- eller GPS-satellitter vurderes med den samme modtager ud fra deres modtagne effekter i grænsefladedokumenterne, så den klokkeformede LEO-passage og de flade MEO-bærebølger (mellemhøj jordbane) deler ét plot. En sektion[iot]giver tid til første positionsbestemmelse, energi pr. positionsbestemmelse og batterilevetid mod driftscyklus (MODELLED).- Systemagnostisk: motoren kræver ingen forudindstilling. Valgfri forudindstillinger, hver i sin egen fil og mærket PUBLIC (med URL), REPRESENTATIVE eller WORKSHOP: generisk multibånd (UHF, L, S, C), generisk C-bånd, Xona Pulsar X1/X5 (arXiv 2509,19551), Iridium STL, Starlink som et opportunitetssignal kun med Doppler, CentiSpace og Celeste IOD (demonstration i kredsløb), hvis signalparametre blev præsenteret på ESA NAVISP LEO-PNT-workshoppen, 2026, og som ligger i
src/celeste_iod.rs, så de kan holdes tilbage (se "LEO-PNT end to end" nedenfor). - Offentlige byggeklodser i
src/leo_link/(geometry, antenna, itu, iono, energy, presets), som andre moduler kan kalde. - Scenarier:
leo-pass-vs-gnss-cn0,leo-indoor-uhf,leo-iot-energy,leo-pass-xona-pulsar,leo-pass-iridium,leo-pass-celeste-iod-multiband. - Ni matrixrækker. VALIDATED (6): koefficienterne i ITU-R P.838-3 mod dens tabel 5; regndæmpning og scintillation efter P.618-14 mod valideringseksemplerne fra ITU-R Study Group 3; indtrængningstab i bygninger efter P.2109 mod regnearket fra Study Group 3; første ordens ionosfærisk skalering mod gruppeforsinkelsesforholdet i IS-GPS-200 sammen med fritrumstabet; den maksimale Doppler for en stillestående bruger i en cirkulær bane mod arXiv 2509,19551 tabel 1. MODELLED (3): passagen og linkbudgettet, forudindstillingerne og budgettet for positionsbestemmelse med lavt energiforbrug. Én type og seks scenariefiler. Noter i
docs/LEO-PASS.md.
- Systemagnostisk: motoren kræver ingen forudindstilling. Valgfri forudindstillinger, hver i sin egen fil og mærket PUBLIC (med URL), REPRESENTATIVE eller WORKSHOP: generisk multibånd (UHF, L, S, C), generisk C-bånd, Xona Pulsar X1/X5 (arXiv 2509,19551), Iridium STL, Starlink som et opportunitetssignal kun med Doppler, CentiSpace og Celeste IOD (demonstration i kredsløb), hvis signalparametre blev præsenteret på ESA NAVISP LEO-PNT-workshoppen, 2026, og som ligger i
Navigation fra lav jordbane: navigationsmeddelelse
- LEO-navigationsmeddelelse (typen
leo-navmsg,src/leo_navmsg/). Broadcast-efemeride- og urmeddelelsen fra en satellit til positionering, navigation og tidssynkronisering (PNT) i lav jordbane (LEO), for enhver bane, bærebølge og model; navngivne forudindstillinger er valgfri data, og hver funktion kører uden dem. Én type, fem scenariefiler og ni matrixrækker (tre VALIDATED, seks MODELLED). Sedocs/LEO-NAVMSG.md.- Meddelelsesindhold: SVID, dataudgave, bånd og signalsundhed; uge, ugetid og et andengrads urpolynomium; efemeriden i en af fire modeller — Galileo OS SIS ICD's Kepler-sæt med 16 parametre, det sæt plus korrektionspolynomier langs sporet, på tværs af sporet og radialt, modellen med 22 parametre fra Liu et al. 2025 (doi 10.3390/rs17162894) eller ATOMIC's ECEF-polynomium med nul ur — og et Klobuchar-sæt, NeQuick-G-koefficienter med det effektive ionisationsniveau samt parametre for systemtid til UTC med ICD'ens skudsekundtilfælde.
- Tilpasning: en sand bane integreret med zonal J2–J6 eller EGM2008-tyngdekraft og atmosfærisk modstand, et seedet frit eller styret ur, en Levenberg–Marquardt-tilpasning på ikke-singulære elementer, derefter lineære mindste kvadraters korrektionspolynomier og et ur tilpasset netto af brugerens relativistiske led.
- Fire analyser og scenarier:
leo-navmsg-fit-interval-trade(afstandsfejl for signal i rummet (SISRE) mod tilpasningsinterval og opdateringsperiode),leo-navmsg-model-comparison(fire modeller, bits og Kshanas tilpasning med 22 parametre i Liu et al.-højderne ved siden af de offentliggjorte tal, MODELLED),leo-navmsg-midpass-update(kontinuitet ved hvert meddelelsesskift i en passage) ogleo-navmsg-encode-decode(Kshanas egen dokumenterede binære frame med CRC-24Q og et kvantiseringsbudget, en blok i RINEX-4-stil mærket som en Kshana-udvidelse og en CSV-tabel). - VALIDATED: de globalt gennemsnitlige SISRE-vægte mod den offentliggjorte tabel for mellemhøj og geostationær bane fra Montenbruck et al. 2018; Galileo-brugeralgoritmen mod RTKLIB på fire rigtige Galileo-broadcast-efemerider (
tests/leo_navmsg_reference.rs); CRC-24Q mod katalogets kontrolværdi og RTCM 10403 1005-eksempelframen. - Forudindstillinger, én fil hver med kilder: Xona Pulsar og Pulsar-0, Iridium, Starlink, CentiSpace, et repræsentativt C-bånd-system, ATOMIC og Celeste IOD (den eneste forudindstilling, der bruger materiale præsenteret på ESA NAVISP LEO-PNT-workshoppen, 2026, opbevaret i
src/celeste_iod.rssammen med sine scenarier, så den kan holdes tilbage).
Navigation fra lav jordbane: fusion
- Fusioneret MEO + LEO-positionering, -navigation og -tidssynkronisering:
leo-pvt,leo-pppogntn-positioning. Tre nye scenarietyper isrc/leo_fusion/, systemagnostiske: hver konstellation er Walker-skaller, elementsæt eller en GNSS-forudindstilling, hvert signal en bærebølge, en chiprate og en C/N0-envelope (forhold mellem bærebølge og støjtæthed), hvert fejlbudget en eksplicit énsigma, og navngivne systemer i lav jordbane (LEO) er valgfri forudindstillinger, én fil hver med deres kilder markeret som offentlig, workshop eller afledt (Xona Pulsar X1/X5, Iridium Satellite Time and Location (STL), Starlink-opportunitetssignaler, CentiSpace, et repræsentativt C-bånd-system, ATOMIC-efemeridemodellen med nul ur og én forudindstilling for ESA Celeste-demonstrationen i kredsløb, hvis parametre afledt fra workshoppen ligger isrc/celeste_iod.rs, så de kan holdes tilbage).leo-pvthar fire tilstande: Doppler-positionering (batch mindste kvadrater på afstandsrate med tilstande for urdrift og hastighed, en tilstand med opportunitetssignaler kun med Doppler, nøjagtigheden langs og på tværs af sporet i én passage samt Doppler-, Doppler-rate- og jerk-envelopen); fælles GNSS + LEO vægtede mindste kvadrater med ét ur pr. system (intersystembiasen) eller en kendt forskydning, sigma pr. måling som input og DOP mod antallet af LEO-satellitter; polar og arktisk dækning mod breddegrad; og LEO-tidsoverførsel til Coordinated Universal Time (UTC) mod C/N0 og modtagerens oscillator med udtrykket for systemtid til UTC i IS-GPS-200.leo-ppp: et flydende præcist punktpositionerings-udvidet Kalman-filter (PPP) på ionosfærefri kode og fase, kun med GNSS og med LEO-supplering, med dets konvergenstid og en Monte Carlo-konsistenstest med NEES (normaliseret estimationsfejl i anden potens). Det medfølgende scenarie giver 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 af de 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 af tendensen.ntn-positioning: 5G-positionering i ikke-terrestriske net (NTN) i 3GPP n256 mobil-satellit-S-båndet ud fra Cramér-Rao-grænsen for ankomsttid og Doppler.- Scenarier:
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(kun i repositoriet, holdt tilbage sammen med forudindstillingen Celeste IOD). - Otte matrixrækker: LEO-Doppler-envelopen VALIDATED mod de offentliggjorte tal for Iridium (±36 kHz: 35,9 kHz, inden for 5%) og Xona Pulsar X1 (32 til 34 kHz: 33,6 kHz fra skallen på 97 deg, uden udvidelse) (
tests/leo_doppler_reference.rs); Doppler-positionering, fælles pseudoafstandspositionering, PPP-konvergens, NTN-grænser, LEO-tidssynkronisering, polardækning og forudindstillingerne MODELLED. Tre typer og otte scenariefiler. Dokumentation:docs/LEO-PNT-FUSION.md.
- LEO-PNT fra ende til anden: typen
leo-pnt-chainog LEO-trinnene koblet sammen. Ét positionerings-, navigations- og tidssynkroniseringssystem (PNT) i lav jordbane (LEO) fulgt fra sin signaludformning til brugerens position, hvert trin motorens egen type på sin egen scenarietabel, med værdier givet videre i kode (docs/LEO-PNT.md):leo-pass-bånd kan nævne en udformning af typenleo-signal(signal = "xona-x5"): båndet tager udformningens centrum, sendebåndbredde og chiprate for den trackede komponent, fordeler sin EIRP (ækvivalent isotropisk udstrålet effekt) over udformningens komponenter og rapporterer hver epokes C/N0 (forhold mellem bærebølge og støjtæthed) for den trackede komponent og båndbegrænsede kodetrackingjitter (afstandsfejlen; parstøjen foriono_freebruger den også). Et bånd uden en udformning giver det samme output som før.leo-pnt-chainkører signal -> passage -> navigationsmeddelelse -> fusioneret fælles positionsbestemmelse medleo-pvt-> valgfrileo-ppp. Hvert LEO-system i positioneringstrinnet, der lader dem være usat, får en C/N0-linje i sin(elevation) tilpasset passagen, meddelelsens afstandsfejl for signal i rummet (SISRE: dens repræsentationsfejl i banen for passagens satellit, med et angivet ledod_sisre_mfor banebestemmelse i kvadratsum), og udformningens bærebølge og chiprate; PPP-tilfældene tager SISRE. Hver overdragelse er opført med sin værdi og enhed, ogtests/leo_pnt_chain.rskontrollerer, at hver er lig upstream-outputtet, og at ændringer upstream flytter tallene downstream.LeoNavmsgScenario::broadcast_sisreer det nye indgangspunkt for meddelelsen.- Scenarier:
leo-pnt-end-to-end(en generisk konstellation på 1080 km og det repræsentative signalgeneric-l),xona-pulsar-end-to-end(det offentlige X5-signal), begge medfølgende, og det valgfriceleste-iod-end-to-end, der kun findes i repositoriet. - Forudindstillingerne Celeste IOD (demonstration i kredsløb) for områderne passage, meddelelse og fusioneret positionering ligger nu i én fil,
src/celeste_iod.rs, sombuild.rskun kompilerer ind, når den findes (konfigurationsflagetkshana_celeste). Dens fem scenarier (scenarios/*celeste-iod*.toml) findes kun i repositoriet, så sletning af den fil og de scenarier holder hvert tal tilbage, der blev præsenteret på ESA NAVISP LEO-PNT-workshoppen, 2026, uden en kildeændring;tests/workshop_preset_isolation.rskontrollerer, hvilke filer der må nævne forudindstillingen eller bære dens tal for båndplanen. - Hver LEO-type i den avancerede rapports krydsreference, med sine stispecifikke rækker opført kun, når kørslen tog den sti (en regnrate, en bygning, en analyse eller tilstand, der kørte).
leo-pvt-Doppler-vinduerne fårt_sogleo-ppp-tilfældene fårt_min, så begge animerer;leo-passogleo-pnt-chaineksporterer CZML-, KML-, GeoJSON- og STK-efemerider, og de andre LEO-typer angiver, hvorfor et format ikke gælder.
Navigation fra lav jordbane: modstandsdygtighed, fokusområder og slutbrugerscenarier
- LEO-PNT-modstandsdygtighed, ét scenarie pr. eksperimentfokusområde og ét pr. slutbrugervertikal samt
docs/LEO-PNT.mdsom oversigt over hver LEO-type og hvert LEO-scenarie. Hvert scenarie kører uden nogen Celeste-data og er medfølgende.leo-passfår en sektion[spoofer]: en spoofer forfalsker, selvkonsistent i afstand og afstandsrate, signalerne for en påstået position, der springer og/eller skubbes væk fra den sande efter et indsættelsestidspunkt (pr. LEO-bånd og MEO-GNSS-signalet), med eller uden ionosfæren. To overvågninger kører ved en angivet sandsynlighed for falsk alarm: konsistens mellem Doppler og passagegeometri (målte afstandsrater mod dem, der er forudsagt ud fra banerne og en uafhængig forudgående position og hastighed; en generaliseret mindste kvadraters chi-i-anden over et vindue, på GNSS-, LEO- og alle kanaler, støj i frekvenslåsesløjfen ud fra C/N0) og konsistens mellem bånd (trinnet i hvert LEO-båndpars modelkorrigerede geometrifri kombination). Resultatet giver statistikkerne pr. epoke (så det animerer), hvert par og hvornår hver overvågning detekterer. Byggeklodser ileo_link::spoof. Ingen sektion, uændret output.- Hvert båndpar for
leo-passrapporterer også det skrå samlede elektronindhold (TEC), som dets geometrifri kombination gendanner ved passagens top, og den estimerede kodestøjs sigma (ionosfæresondering). Det tilføjer to felter til hvert multibåndsresultat forleo-pass; intet eksisterende tal ændres. - Tidssynkroniseringstilstanden i
leo-pvttagertrace = true: hver række rapporterer da sin tidsfejl og forudsagte sigma ved hver epoke, med de samme træk, så rækkestatistikkerne er uændrede, og kørslen animerer og kædes i en kampagne. - En kampagne eksporterer nu hvert medlemsscenarie, der har geometri (faseundersøgelser, sweepet og Monte Carlo-basisscenarierne, sammensatte medlemmer med deres delte værdier bundet), som sit eget filsæt, med medlemsmærkatet i filnavnet; før eksporterede en kampagne intet. Interoperabilitetstabellen i
docs/INTEROP.mdændres tilsvarende. - En kampagnes sweepnøgle kan indeksere et array af tabeller efter position (
system.2.sisre_m). - Scenarier for modstandsdygtighed:
leo-resilience-multiband-diversity(en barrage på 50 MHz i L5-båndet sweepet i effekt: hvert L-bånd-signal falder, mens LEO-signalerne i UHF-, S- og C-båndet beholder deres C/N0),leo-resilience-js-margin(J/S-margin ud fra modtaget effekt: GPS L5, Galileo E5a og Xona X5 tabt ved -105, -100 og -95 dBW, mens et generisk LEO-signal på -135 dBW stadig tracker ved -90 dBW),leo-resilience-spoof-doppler(et spring på 30 m, som Doppler-testen kun med GNSS misser, og som testen på alle kanaler detekterer 105 s efter indsættelsen),leo-resilience-spoof-monitors(fire spoofere mod begge overvågninger) ogleo-resilience-gnss-jammed-leo-carries(GNSS jammet, LEO-laget i S- og C-båndet trackes, modtagerautonom integritetsovervågning på LEO-laget alene alarmerer ved 2 af 30 epoker). - Scenarier 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(modstandsdygtighed i L, S og C erleo-resilience-multiband-diversity). - Vertikale kampagner, hver animeret og eksporterende sine LEO-passager:
leo-vertical-autonomous-vehicle,leo-vertical-rail-maritime(de medfølgende scenarier til søs og på skinner plus LEO),leo-vertical-critical-infrastructure-timing,leo-vertical-polar-arctic,leo-vertical-5g-network-timing,leo-vertical-asset-tracking-iot. Resultater på én linje idocs/LEO-PNT.md. - Tre MODELLED matrixrækker: overvågningen af spoofing med Doppler og passagegeometri, overvågningen af spoofing mellem bånd og ionosfæresondering.
tests/leo_resilience_verticals.rskontrollerer overvågningerne (tavse før indsættelsen, Doppler-statistikken kvadratisk i et spring, det ionosfæriske trin for en jordspoofer og intet fra en ionosfærebevidst), sonderingsidentiteten, tidssynkroniseringssporet mod rækkestatistikkerne og at en kampagnes eksport er lig hvert medlems egen. - Siden
leo-passflyttes tildocs/LEO-PASS.md;docs/LEO-PNT.mder oversigten.
Scenarier til søs, på vej og på skinner
- Scenarier til søs, på vej og på skinner. Fem medfølgende eksempler på eksisterende typer, så skibe, køretøjer på vej og tog hver har et gennemarbejdet tilfælde. Hvert tal er MODELLED; intet er valideret mod måledata.
scenarios/maritime-strait-jamming.toml(jamming): en bredbåndsjammer på 50 W på en mast på 30 m, 30 km væk over åbent vand fra et skib. Gennemsnitligt forhold mellem jammer og signal (J/S) omkring 48 dB, og tilgængeligheden falder fra 1,00 til 0,00.scenarios/maritime-port-approach-coast.toml(ins-trn-coast): et inertinavigationssystem (INS) af navigationsklasse ved 12 knob med GNSS tabt og uden støtte. Det krydser 10 m efter 281 s og 100 m efter 833 s, tallene for havneindsejling og åbent hav i resolution A.1046(27) fra Den Internationale Søfartsorganisation (IMO), brugt her som budgetter.scenarios/maritime-spoof-position-push.toml(spoof-detect): en spoofer på +2 dB, ikke afstemt med bærebølgen, der skubber fire satellitter for at trække et skib 500 m. Den fusionerede overvågning detekterer den (score 0,70 mod en tærskel på 0,50) på modtagerautonom integritetsovervågning (RAIM) og overvågning af signalkvalitet (SQM); effektovervågning alene misser den.scenarios/automotive-urban-canyon.toml(gnss-ins): en bil gennem en underføring på 15 s og et udfald på 60 s fra en jammer ved vejkanten mod et budget på 1,5 m for en halv vognbane. Den fusionerede RMS-fejl (kvadratisk middelværdi) under udfaldet er 1,9 m for en MEMS-enhed (mikroelektromekanisk system) i bilklasse og 0,7 m for en sammenligningsenhed af taktisk klasse; frit løbende driver MEMS-enheden til 850,8 m.scenarios/rail-tunnel-coast.toml(ins-trn-coast): et INS af taktisk klasse på et tog ved 160 km/h i en tunnel. Det krydser 2 m (sporadskillelse) efter 35,8 s, cirka 1,6 km inde, og 20 m efter 107,3 s. Dette er kun INS: motoren har ingen odometermodel, så det er den pessimistiske grænse. Antallet af scenariefiler i README flytter sig fra 77 til 82. Alle fem er medfølgende tilkshana exampleog opført i browserens playground.
Model Context Protocol-server
Serveren Model Context Protocol (MCP) når hver type og hver visning af en kørsel: syv nye værktøjer, fjorten i alt.
run_scenarioafsendte allerede hver type; det, en agent manglede, var en vej til et gyldigt scenarie af en type og de tre outputs, kommandolinjen skriver ved siden af et resultat. Nye værktøjer:list_example_scenariosogget_example_scenarioleverer de medfølgende referencescenarier (tabellenkshana example), hver med sin type og første sætning i sin egen overskrift, byte for byte filen underscenarios/. Et scenarie, der ligger i repositoriet, men ikke er medfølgende, afvises med grunden. Hver type undtagenlunar-llr-datum(hvis dataudsnit kun følger med repositoriet) har mindst ét eksempel.report_scenarioreturnerer kørslens rapport som JSON (JavaScript Object Notation) eller som den udskrivbare HTML-side (HyperText Markup Language) (docs/REPORTS.md).animate_scenarioreturnerer kørslens tidsserie som en animeret SVG-tegning (Scalable Vector Graphics), en HTML-afspiller eller nummererede billeder efter et JSON-resumé af det, der blev tegnet (docs/ANIMATION.md). Et svar bærer højst 120 billeder; kommandolinjen skriver enhver længde.list_export_formats,export_interopogimport_routeleverer interoperabilitetseksporterne og GeoJSON-ruteimporten (docs/INTEROP.md): CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, STK-efemeridefilen (Systems Tool Kit).eog SigMF (Signal Metadata Format), med et JSON-indeks over filerne (suffiks, størrelse og SHA-256, 256-bit-digesten fra Secure Hash Algorithm) og den binære SigMF-samplefil som base64.
Biblioteket får en funktion
bundled-scenarios, der som standard er slået fra, og som eksponerer tabellen med referencescenarier somkshana::bundled_scenarios; kun MCP-serveren slår den til, så Python-wheelen og WebAssembly-modulet stadig ikke bærer scenarieteksten. Studiesuiter (--study) forbliver kun i kommandolinjen, fordi en suite navngiver filer på disken, og serveren læser ingen. Rundturstestene kører hvert nyt værktøj mod medfølgende scenarier og kontrollerer motorens tal: spektrum, solsystemet, konstellationer omkring Månen og Europa, et kampagnesweep og typerne for signal, passage, navigationsmeddelelse, fusioneret positionering, præcis punktpositionering, ikke-terrestriske net og fra ende til anden i lav jordbane (LEO). Hver flade, der angiver antallet af MCP-værktøjer eller opregner værktøjerne, siger nu fjorten, undtagen playground-siden underweb/, som erstattes med webstedet.
kshana.dev, Kshana Studio og README
- En gentegnet kshana.dev. Den enkelte playground-side er erstattet af et websted med flere sider: Forside, Missioner, Funktioner, Evidens, Udviklere, Udgaver og Dokumentation, med Kshana Studio ét klik væk. Hvert diagram, kort og tal på det er en optaget kørsel af denne udgivelses motor, med scenariet og et link, der genåbner den samme kørsel i Studio; webstedets build afviser en optagelse lavet af en anden motorcommit. Dokumentationssiderne genereres ud fra repositoriets
docs/og installationsmulighederne ud fra dets kanaler. Skrifttyper og scriptbiblioteker leveres fra kshana.dev selv, så ingen side beder om noget fra en tredjepartsvært. Gamle adresser (/#playground,/#ledger, delingslinks af typen/#s=<scenario>, indlejringslinks af typen/?embed=1&…og resten) omdirigerer til deres nye sted, og en ukendt adresse får en 404-side. - Kshana Studio, et dashboard for hver funktion. Studio åbner på en startskærm med domænefliser og gode første kørsler og fører derefter en kørsel gennem fem nummererede trin: Vælg et scenarie, Sæt dets parametre, Kør motoren lokalt i browseren, Læs resultaterne (nøgletal først, hvert med en PASS- eller FAIL-chip, hvor kørslen angiver en tærskel, derefter panelerne) og Del eller eksporter. Én søgeboks finder scenarier, domæner og felterne i dem og hopper til kontrollen; kørsler kan fastgøres og sammenlignes; en brødkrumme siger, hvor du er; på en telefon bliver trinnene til en trinlinje. Hver scenarietype har sin visning, herunder spektrumvandfaldet, solsystemet, konstellationsdækning, kampagner, animationen, kørselsrapporten, interoperabilitetseksporterne og kæden i lav jordbane. Et dybt link (
?scenario=…&tab=…) åbner den samme kørsel på det navngivne panel. - Forskning og citering. Siden Evidens opregner de fem Kshana-artikler på arXiv (2606,22054, 2606,24210, 2607,02566, 2607,05415 og 2607,06212), hver med et resumé, en figur beregnet af denne motor, kommandoen der gengiver den, et Studio-link og BibTeX, ved siden af hvordan softwaren citeres. README får den samme sektion om forskning.
- En offentlig side for Kshana Pro.
docs/PRO.mdog webstedets side Udgaver angiver, hvad det proprietære Pro-lag tilføjer over den samme motor (udformningsoptimering, usikkerhed og følsomhed, missionsdossier, kampagneovervågning, spektrumsameksistens, jobtjeneste på egne servere, sporbarhed af krav), hvad hver producerer, og hvad den ikke gør. Hvert Pro-tal, webstedet viser, er angivet på den offentlige side. Pro tilføjer ingen fysisk model, og den åbne motor forbliver hel og gratis. - En omskrevet README. Korte sektioner, ét billede pr. sektion, Kshana-mærket, to rækker badges, genererede billeder af arkitekturen, scenarieforløbet, kæden i lav jordbane og verifikationen (
tools/gen_readme_assets.py, som fejler på et forældet billede) og Studio-skærmbilleder taget fra det kørende Studio aftools/capture_studio_shots.mjs. README'erne til crates.io, PyPI, npm og MCP-serveren følger samme udformning. Langt referencemateriale er foldet sammen eller flyttet tildocs/.
Ændret#
<scenario>.report.htmler nu den avancerede kørselsrapport, der er beskrevet under Added, og CLI'ens linjewrote …nævner også<scenario>.report.json. Den énsides resultatoversigt, den afløste, er uændret somRunOutput::html_report(), som Python- og WebAssembly-bindingerne stadig returnerer.OracleKind::modelled_reason()eksponerer den sætning,docs/MODELLED-RATIONALE.mdudskriver for hver MODELLED-række; det dokument er uændret.- README'en siger, hvad Kshana Pro bygger på. Sektionen Udgaver og linjen om Kshana Pro under "Support & professional services" angiver nu, hvad Pros værktøjer til modelbaseret systemudvikling (MBSE) og programstyring gør, og hvilke af den åbne motors offentliggjorte outputs det læser (hver kørsels
result.jsonogreport.json, scenariefilen, feltenhedsskemaet og verifikationsmatrixens mærkater), og hvad urenes digitale tvillinger, afvejningsstudier og bevispakker bygger på i den åbne motor. Kun formulering: intet motoroutput og intet offentliggjort tal ændres. - Kompatibilitet. Den offentlige enum
navsignal::Modulationfår en variantMboc, hvilket er en brydende ændring for en kalder, der matcher den udtømmende. Kolonnernegcrs_r_moggcrs_v_m_sfor typenephemerisændres (se "Rettelser af offentliggjorte tal"). En kørsel gengives stadig af den motorversion, der lavede den.
Rettet#
export_table_csvpå MCP-serveren nævnte fire typer som de eneste med en CSV-tabel (kommaseparerede værdier); seks udgiver en. Værktøjet returnerede altid tabellen fortelecom-timingog forleo-navmsg(dets analyseencode-decodepå en meddelelsesmodelkepler16ellerkepler-rac), men dets beskrivelse, dets afvisningsmeddelelse og de dokumenter, der opregner typerne, udelod begge, så en agent fik at vide, at den ikke skulle spørge. De er nævnt nu, og en rundturstest henter begge tabeller.Framen for LEO-navigationsmeddelelsen (lav jordbane) var ikke de samme bytes på hver platform og heller ikke i hvert build af én platform.
scenarios/leo-navmsg-encode-decode.tomlkodede en frame med cyklisk redundanskontrol0x110315i release-buildet på aarch64 macOS,0x898BD8i en debug-build af den samme kilde på den samme maskine og0x6A82D9i WebAssembly-buildet (WASM);leo-navmsg-celeste-iod.tomlgav0x6EDB2Dnativt mod0xC6E4F0i browseren. Tre årsager, hver sporet til den første afvigende værdi:- Mellem platforme. Den sande bane var bit-identisk på begge; tilpasningens udgangspunkt var det ikke.
truth::state_to_elementstager den oskulerende inklination fra enacosog perigæumsargumentet fra enatan2, og de to matematikbiblioteker afrunder dem forskelligt på sidste plads (over 20.000 argumenter er de uenige for 781 sinus, 858 cosinus, 1.931 eksponentialfunktioner og 1.899 arkustangens med to argumenter). - Mellem build-profiler. Et optimeret build på macOS slår en sinus og en cosinus af ét argument sammen til ét enkelt kald til systemets kombinerede rutine, og dens sinus er ikke den samme som sinus i den enkeltstående
sinfor 379 af 200.000 argumenter; et uoptimeret build laver de to kald. Typen tager en sinus og en cosinus sammen på tretten steder. - I uret. Normalsampleren i
rand_distrkalder værtensexpoglni sine to sjældne grene: af fire millioner seedede træk afveg tre i sidste bit mellem det native og WASM-buildet.
Levenberg–Marquardt-tilpasningen, som på denne bue stopper ved sin grænse på 80 iterationer og ikke ved et minimum, bærer én enhed på sidste plads over i forskellige kvantiserede felter. Typen beregner nu hver transcendent funktion gennem den nye
src/portable_math.rs, som kalder crate'enlibmi ren Rust (allerede i afhængighedstræet, nu nævnt iCargo.toml), kompileret fra én kilde for hvert mål og ikke et bibliotekskald, som optimereren omskriver:leo_navmsg::{truth, fit, elements, codec, sisre, services}og scenariekoden. Heltalspotenser på den sti er skrevet ud som kvadrér-og-gang, fordif64::powihar uspecificeret præcision, og det sande ur trækker sine normalafvigelser fraportable_math::standard_normal(Marsaglias polære metode på generatorens rå output). De delte rutiner, som den sande bane integrerer gennem, er skrevet én gang, generiske over matematikbiblioteket, med et indgangspunkt_portableinternt i crate'en ved siden af det eksisterende: den sfærisk-harmoniske acceleration, de zonale accelerationer og accelerationen fra atmosfærisk modstand, J2-sekulære rater og Klobuchar-forsinkelsen. De eksisterende indgangspunkter er uændrede til sidste bit, så ingen anden types tal flytter sig.leo_navmsg::tests::the_encoded_frame_is_the_same_bytes_on_every_platformfastlåser hele framen på 171 bytes og én kontrolværdi pr. efemeridemodel i den almindelige (uoptimerede) testprofil, på hver platform og uden nogen port for baseline-værten;the_kind_never_calls_the_host_mathematics_librarylæser typens kilder fra disken og fejler ved et iboende transcendent kald, ved en sampler af typenrand_distreller ved et kald ind i et modul, der ikke er gennemgået. Efter ændringen producerer et debug-build, et release-build og WASM-buildet byte-identiske resultatdokumenter for alle fem scenarier af typenleo-navmsg. Dette flytter tal, registreret her som en rettelse. Typenleo-navmsger ny i denne udgivelse, så intet offentliggjort i en tidligere udgivelse flytter sig, men hvert tal forleo-navmsggør, nativt og i WASM-buildet, og det gør trinnetnavmsgileo-pnt-chainmed: banetallene, fordi tilpasningen nu starter fra de bærbare elementer, urtallene, fordi det sande ur er en anden realisering af den samme proces.docs/LEO-NAVMSG.mder genereret ud fra de nye resultater; dens offentliggjorte kontrolværdi for scenariet med kodning og afkodning var0x110315og er0x19105F(position inden for 1,126 mm af den nøjagtige meddelelse, hvor den var 0,665 mm, ur inden for 0,185 mm, hvor det var 0,451 mm). Størrelsen af ændringerne i tallene under millimeteret er tilpasningens følsomhed, ikke en fejl i nogen af sættene: tilpasningen er uændret og stopper stadig ved sin iterationsgrænse.- Mellem platforme. Den sande bane var bit-identisk på begge; tilpasningens udgangspunkt var det ikke.
Seedet resampling trak andre indekser på et 32-bit-mål.
Rng::gen_rangeoverusizetager 64 bits fra generatoren på en 64-bit-vært og 32 bits på en 32-bit-vært, så det samme seed gav andre indekser og efterlod strømmen et andet sted, i WASM-buildet. Tre steder trak på den måde: percentil-bootstraps ieval_stats(bootstrap_ci,bootstrap_auc_ci), shufflingen før hver træningsgennemgang iimpairment_mlog permutationstesten iimpairment_study. De trækker nu gennemportable_math::uniform_index, som altid samplerer somu64: præcis det, en 64-bit-vært gjorde, så intet nativt tal flytter sig. Dette flytter offentliggjorte tal i WASM-pakken, registreret her som en rettelse: bootstrap-intervallet forquantum-anomaly-detectfor arealet under kurven (quantum_auc_ci,trade.foms[0].ci95) var[0.9901265, 0.9938305]i browseren og er nu det native[0.99035875, 0.993861].Filnavne for STK-efemerider ud fra id'er for bevægelige objekter. Et id for et bevægeligt objekt, der indeholdt et
/eller et mellemrum (en konstellationsskal og en satellit,Pulsar inclined/S1-0163), fik CLI'en til at gå i panik ved--export stk; hvert id går nu gennem en sikker filedel (bogstaver, cifre,-,_).Fortegnet i TEME→GCRS-nutationen, beskrevet under "Rettelser af offentliggjorte tal" ovenfor, fordi det flytter offentliggjort output.
0.28.0 - 2026-09-26#
Tilføjet#
- Scenarietypen
slot-timing(src/slot_timing.rs): sekunder, indtil et frit løbende ur forlader grænsen for en tidsindekseret routing- eller opgavetildelingsslot, hvert bidragende led på det tidspunkt med det dominerende navngivet, den tid, der er tilbage siden den sidste positionsbestemmelse, og det største interval mellem positionsbestemmelser, der holder uret inden for, netto af forsinkelsen for positionsbestemmelsen. Uret kommer fra en klassestandard, en forudindstilling fra et datablad for telecom-timing, et inline-datablad (maksima for Allan-deviation, ældning, temperaturkoefficient) eller en målt faseregistrering. Et brud ud over den længste middeltid, kilden understøtter, markeres som ekstrapoleret. Medfølgende eksempel:slot-timing-ocxo-leo. Sedocs/SLOT-TIMING.md. - Målt rødstøjgulv. En faseregistrerings overlappende Allan-deviation tilpasses med vægtede mindste kvadrater i basen for hvid fase og IEEE Std 1139-frekvensmodulation (
slot_timing::fit_weighted), hvert punkt vægtet med sine ækvivalente frihedsgrader, så et holdover-svar kan hvile på urets eget gulv i stedet for klasseantagelsen. En uvægtet tilpasning lagde et falsk flickergulv på en hvidstøjstestregistrering og forkortede et brud på 2.000 s med 30 %. - Validering med tilbageholdte data af holdover-inversionen på et rigtigt ur (
tests/slot_timing_cs5071a_holdout.rs): tilpasset på den første tredjedel af registreringen af 5071A-cæsium mod brintmaser ligger de forudsagte brud ved én sigma ved seks tærskler fra 0,5 til 2,5 ns inden for 0,84 til 1,03 af de brud, der er målt på de to andre tredjedele, mod en tærskel på 1,5, fastsat før testen første gang kørte. En kontrol (Allan-deviationen på ét sekund læst som hvid støj) misser med en faktor omkring 1.000 og består ikke tærsklen. Ny VALIDATED registerrække; workflowetrealdata-clockkører den nu. - Den samme forudsigelse på en rigtig krystaloscillator (
tests/slot_timing_ocxo_holdout.rs,scripts/fetch_ocxo.sh): på en målt ovnstyret krystaloscillator er forudsigelsen med tilbageholdte data konservativ, ved 0,59 til 0,70 af det målte brud og aldrig senere, og for det meste uden for tærsklen på 1,5, fordi den oscillators støjgulv blev halveret under registreringen på 5,5 timer; tilpasset i stikprøven lander den inden for 0,98 til 1,17. Krystaltilfældet er ikke valideret og forbliver MODELLED. Kørslen afslørede også et manglende led: en krystals frekvens vandrer, så modellen bærer nu usikkerheden i den frekvens, der er kendt ved positionsbestemmelsen (fix_frequency_sigma); uden den var forudsigelsen optimistisk med op til 2,5×. - Den samme forudsigelse på atomure i kredsløb (
tests/slot_timing_igs_holdout.rs,scripts/fetch_igs_clocks.sh): 14 dages endelige ure fra International GNSS Service for GPS Block IIF-satellitterne, med protokollen skrevet ned, før dataene blev hentet. Otte af ti satellitter lander inden for tærsklen på 1,5; G25 og G30 forudsiger brud op til omkring dobbelt så sent som målt. Protokollen kræver, at hver satellit består, så tilfældet i kredsløb er ikke valideret og forbliver MODELLED; udfaldet er fastlåst. - Urklasserne temperaturkompenseret krystal (TCXO), ovnstyret krystal (OCXO) og atomfrekvensstandard med rubidium (RAFS) (
ClockClass::Tcxo,Ocxo,Rafs), de dele som en kommerciel smallsat-platform eller en jordgateway flyver med, hver med ét offentligt datablad som kilde (ClockClass::source).ClockClass::ALL,idogfrom_ider tilføjet.baseline_clock_classiquantum-tradeaccepterer de tre nye id'er. At tilføje varianter til en offentlig enum er en brydende ændring for en kalder, der matcher den udtømmende. - Beskyttelsesniveau for tidssynkronisering for en modtager i kredsløb (
src/orbital_timing.rs, den valgfri sektionspoofingi typenslot-timing): hvor længe en jordspoofer kan nå en satellit i lav jordbane pr. passage, det træk, som en spoofer ved en angivet maksimal rampehastighed akkumulerer, før satellitten forlader dens rækkevidde, eller en uafhængig kontrol kører, og om hver kontrol ved jordkontakt eller krydslink er uafhængig af den spoofer. Reduceres nøjagtigt tiltpl::timing_protection_level_nsfor et ur uden flicker-, hvidfase- eller random-run-støj. MODELLED. - Tre noter:
docs/SLOT-TIMING.md(herunder hvilken vandringsmetrik en slot bør accepteres mod: maksimal absolut tidsfejl, ikke maksimal tidsintervalfejl eller tidsdeviation, og hvorfor),docs/DECEIVED-TIME.md(en signeret kommando anvendt på et bedraget tidspunkt fejlroutes stadig) ogdocs/DEPLOYMENT-TARGETS.md(hvor Kshana kører; ingen flyvekerne udenno_stdtilbydes).
0.27.4 - 2026-09-26#
Udgivelsen v0.27.3 nåede crates.io (kshana og kshana-mcp) og PyPI og stoppede derefter ved npm, så npm, MCP-imaget på ghcr.io, MCP-registret, JetBrains Marketplace og kshana.dev aldrig modtog den. 0.27.4 bærer den samme motor, med udgivelsesrettelsen nedenfor, til hver kanal.
Rettet#
- npm-udgivelsestrinnet navngiver tarballen med en eksplicit sti. npm læser en bar
npm-dist/kshana-0.27.3.tgzsom GitHub-genvejenowner/repo, så npm-jobbet for v0.27.3 forsøgte at klonegithub.com/npm-dist/kshana-0.27.3.tgzog fejlede med "Permission denied (publickey)". Selve tarballen var bygget og attesteret. Trinnet udgiver nu./npm-dist/*.tgz. Alt efter npm i udgivelsesrækkefølgen (MCP-imaget, JetBrains-pluginet, kanalparitetskontrollen og webstedet) blev sprunget over, som tilsigtet.
Ændret#
- Enhedskatalogerne for telecom-timing og
gnss-inser undtaget fra kopi-og-indsæt-detektion under samme politik og begrundelsestest som de andre kataloger. SonarCloud-kvalitetsporten var blevet rød på duplikering i ny kode (4,0% mod 3%), og hver duplikeret blok var en enhedsrække eller en post i en ITU-T-maske.
0.27.3 - 2026-09-25#
Tilføjet#
scenarios/small-uas-jammed-nav.toml: hvor længe en lille drones navigation holder, efter GNSS er jammet. Den kører en mikroelektromekanisk (MEMS) inertienhed i flyvekontrollerklassen, en Bosch BMI088, mod en enhed af taktisk klasse. GNSS-signalet (Global Navigation Satellite System) er nominelt i 100 s og derefter nægtet i 60 s (jamming-demo.tomlviser, hvorfor en jammer i nærheden gør det). BMI088's bias er de rester, der er tilbage efter kalibrering ved opstart, taget fra temperaturkoefficienterne i dens datablad (BST-BMI088-DS000-19 rev 1,9): 0,015 °/s pr. K for gyroen og < 0,2 mg pr. K for accelerometeret. To antagelser er markeret i filen: en opvarmning på 10 K efter kalibrering og fortsat opvarmning på 1 K pr. minut under flyvning. Driften under flyvning er den fejl, filteret ikke kan nå at lære, før jammingen starter, og det er den, der afslutter den inertielle glidning. Hvert tal er modelleret; at validere det kræver flyvelogs fra et jammet miljø.kshana example small-uas-jammed-navudskriver det.Hver
gnss-ins-sensor kan sætte sit eget filterprior ([imu_quantum.filter_prior]eller[imu_classical.filter_prior], medsigma_accel_biasogsigma_gyro_bias). Standarden er uændret, så hvert eksisterende scenarie giver det samme resultat. Den resterende gyrobias for en enhed af forbrugerklasse ligger omkring 26 sigma uden for standarden for taktisk klasse, hvor filteret aldrig ville lære den. Et prior, der ikke er endeligt og positivt, afvises, og resultatet gentager prioret, når et er sat.kshana example [<name>]giver en registerbruger et scenarie at køre. Encargo install kshana-bruger har den eksekverbare fil og ingen mappescenarios/, så den første kommando, hver quickstart gav dem, fejlede. Kommandolinjegrænsefladen (CLI) bærer nu de 75 referencescenarier, der kører på egen hånd, byte for byte, kompileret ind frascenarios/(src/bundled_scenarios.rs; tabellen ligger i CLI-binærfilen, så Python-wheelen og WebAssembly-modulet ikke vokser).kshana exampleopregner dem;kshana example clock-holdover > clock-holdover.tomlskriver ét. De to andre filer findes kun i repositoriet:lunar-llr-datumlæser arkiverede data fra måneafstandsmåling med laser, som kun følger med repositoriet, ogquantum-pnt-demonstrator.suiteer et studiemanifest, der kører tre søsterfiler med--study. At bede om en af dem siger hvorfor og afslutter med 2 i stedet for at udskrive noget, der ikke kan køre på egen hånd.tests/cli_first_run.rsholder tabellen op mod mappen i begge retninger, så en ny scenariefil, der hverken er medfølgende eller navngivet som kun i repositoriet, fejler.Hvert kvalitetsmål i et ur-, bane-, hybrid- eller fusionsresultat siger nu, om det er VALIDATED eller MODELLED, i selve resultatet. Resultatdokumentet får en blok
figure_tiers, altid dets sidste nøgle. Den opregner hvert rapporteret tal (for eksempelquantum.fom.timing_p95_ns) med dets niveau — VALIDATED betyder kontrolleret mod en uafhængig ekstern reference, MODELLED betyder en model fra grundprincipper, der er testet internt — og den række i verifikationsmatrixen, som niveauet læses fra. Niveauet kommer frasrc/verification.rsgennemsrc/fom_label.rs, så der ikke er nogen anden tabel, der kan drive. Før dette optrådte ordene "validated" og "modelled" nul gange i et holdover-resultat for et ur, og en læser af den rå JSON (JavaScript Object Notation) havde ingen måde at skelne de to fra hinanden. Positionstallene forhybridogfusionhar ingen ejende matrixrække, så de er opført underuntieredi stedet for at få et niveau. Blokken bærer ingen tal. Den er bevist additiv, ikke antaget: at fjerne den giver det tidligere dokument tilbage byte for byte, for alle fem typer (en motortest), og begge golden-harnesses (tests/registry_golden.rs,tests/cross_platform_golden.rs) fjerner nu præcis denne nøgle, og kun når den er den sidste, og hasher derefter resten mod deres uændrede frosne konstanter. En liste i hver harness fastlåser, hvilke scenarier der skal bære blokken, så udelukkelsen ikke i det stille kan udvides.En type
telecom-timingsvarer i en timingingeniørs enheder: tidsfejl, maksimal tidsintervalfejl (MTIE) og tidsdeviation (TDEV), hver med en PASS eller FAIL og en margin mod masker fra International Telecommunication Union Telecommunication Standardization Sector (ITU-T). Maskerne er transskriberet fra de gældende udgaver: G.8272 (07/2025) for klasserne A og B af primært referencetidsur (PRTC), G.8272.1 (2024) Amd. 1 (07/2025) for det forbedrede PRTC i låst tilstand og i holdover (herunder dets tidsfejlsenvelope, som stiger fra 30 ns til 100 ns over en holdover-periode bestemt af, hvor længe uret var låst), G.8273.2 (2023) Amd. 2 (11/2025) for telecom-grænse- og tidsslaveure, klasserne A til D, og G.8271.1 (2022) Amd. 3 (05/2025) for netværksgrænserne ved referencepunkt C. Hver post, som disse anbefalinger lader stå "til videre undersøgelse", er fraværende, ikke estimeret, ogdocs/TELECOM-TIMING.mdopregner hvert tal med sin tabel eller klausul og hver post, der blev udeladt. Rapporten giver også tiden til at overskride hvert tidsfejlsbudget: som standard standarden på 100 ns for ePRTC-holdover, en allokering på 400 ns for netværksholdover, grænsen på 1.100 ns ved punkt C og kravet på 1,5 mikrosekunder for ende-til-ende i klasse 4.Inputtet er enten en syntetisk holdover eller en række af din egen. Den syntetiske bruger en af fire oscillatorforudindstillinger (en ovnstyret krystaloscillator, en rubidiumstandard, en cæsiumstandard og et chipskala-atomur), hver med stabilitets-, ældnings- og temperaturtal fra et navngivet Microchip-datablad. Hvordan disse tal bliver til hvid, flicker- og random-walk-frekvensstøj, ældning og et temperaturled, er angivet i hver rapport og mærket MODELLED. En række af din egen er
[time_s, time_error_ns]-par, inline (sådan kører den i browseren) eller på native builds fra en fil med kommaseparerede værdier. MTIE/TDEV-tabellen, med hver valgt maskes grænse ved siden af, skrives som kørslens CSV-artefakt.scenarios/telecom-prtc-holdover-24h.tomler en rubidium-holdover på 24 timer med ældning, flicker og en daglig temperaturcyklus: dens største tidsfejl er 603,2 ns, den krydser 100 ns 8.206 s efter tabet og forbliver inden for 1,5 mikrosekunder hele dagen, og den består ikke holdover-envelopen for forbedret PRTC, som et ur, der ikke er af cæsiumklassen, bør ikke.scenarios/telecom-tie-ingest.tomlviser det inline input. MTIE og TDEV, som typen rapporterer, er kontrolleret mod pakken allantools på en indsendt holdoverrække med 2 048 sampel, nøjagtigt for MTIE og til 1.1e-15 for TDEV, så matrixen får én VALIDATED række og to MODELLED (maskeomskrivningen og forudindstillingerne) og står nu på 171 rækker — 65 VALIDATED, 102 MODELLED, 4 PARTNER. Dækningen af feltenheder går fra 60 af 61 typer til 61 af 62 og fra 1.742 til 1.788 beskrevne felter. Typen er ny og additiv: intet eksisterende scenarie, ingen fastlåsning og intet offentliggjort tal flytter sig.Playground kører motoren i en Web Worker i baggrunden, så et langsomt scenarie ikke længere fryser siden.
web/engine-worker.mjshoster WebAssembly-motoren, ogweb/engine.mjsvideresender hver scenarieudførelse til den — kørsler, parametersweeps og eksporterne SP3 / OMM / OEM / CSV. En kørsel, der varer længere end 150 ms, viser en optaget tilstand (Kør deaktiveret, "Running… N s") og en knap Cancel, der afslutter og genstarter workeren; en browser, der ikke kan starte en modul-worker, falder tilbage til den gamle sti i hovedtråden.cislunar-arc-recovery, udeladt af kataloget, fordi det frøs siden, er tilbage i det, mærket som langsomt: det tager omkring 13 s i Chrome (fire motorkald på omkring 3 s hver), hvor siden forbliver responsiv.Hver rapporteret størrelse i
cislunar-observabilitybærer nu en enhed, en proveniensklasse og en definition — den næstsidste type på undtagelseslisten for hele crate'en. Alle 41 numeriske felter i det UDGIVNE dokument er beskrevet, så dækningen af feltenheder går fra 59 af 61 typer til 60 af 61 og fra 1.698 til 1.742 beskrevne felter, med efterslæbet uden definition uændret på 239.Det var blokeret af den fastlåsning, der fryser det udgivne dokument, og som navngav
unitssom en nøgle, dokumentet aldrig må få. At tilføje en ville have betydet at slette den assertion og genbaselinere tre hashes i tre filer — en form, der ikke kan skelnes fra at dække over en regression. I stedet beviser de to fastlåsninger, der måler dette dokument, nu, at tilføjelsen er additiv: hver fjerner blokkenunitsigen og hasher på ny mod den konstant, der blev frosset, før blokken fandtes, og begge konstanter er uændrede. En mutation bekræfter, at garantien er ægte — flyt en udgivet værdi og genbaselinér hele dokumentets hash, som en skødesløs rettelse ville gøre, og fjern-og-hash-igen fejler stadig. Den tredje fastlåsning, i den generiske registry-golden-harness, er genbaselineret på linje med de seks søskende, der blev genbaselineret af netop den grund, og dens værdibærende literalexpect_summaryflytter sig ikke.realtime-frame-eoprapporterer, hvilken reference hver række for jordorientering blev bedømt mod, og hvor ofte reserveløsningen blev brugt.table3_joint_eop[].{ut1, polar_motion,combined}fårtruth_sourceogtruth_fallback_rows. Gulvetfinalbedømmes mod det endelige tal i Bulletin B og kan kun bruge epoker, der udgiver et; hver rækkedNbedømmes modtruth_pm()/truth_ut1(), som falder tilbage til den hurtige værdi i Bulletin A. På det medfølgende udtræk for 2026 er det 12 af 31 sampel ved én dag mod 0 ved gulvet — så gulvrækken og forudsigelsesrækkerne ved siden af hviler på målbart forskellig reference, hvilket rapporten nu angiver i stedet for at overlade det til at udlede af et sampeltal, der stiger, hvor indlejrede horisonter siger, at det ikke kan.moonlight-service-volumeudsender en Kepler-baseline af samme størrelse.ephemeris_comparison.keplerian_matchedkører den illustrative konstellation igen med det HENTEDE sæts eget antal satellitter, kun til stede når antallene er forskellige. Antallet er en del af den udformnings geometri — RAAN og middelanomali er begge spredt som360k/n— så uden det blev et hentet sæt med fem satellitter bedømt mod et illustrativt med otte, og udformning blev blandet sammen med størrelse. For referencesættet LANS med fem satellitter viser det sig, at 8,68 af dækningsgabet på 14,24 point er de tre manglende satellitter og kun 5,56 point udformningen; for de fire rumfartøjer, der virkelig er i månebane, når et specialbygget sæt med fire satellitter 4,86 %, hvor de når 0 %. En test fastlåser, at den matchede række er en genopbygget konstellation og ikke den konfigurerede omdøbt, hvilket er den måde, den først blev skrevet på, og det, kørslen derefter rapporterede.Ni funktionskort på det offentlige websted, der dækker 22 rækker i verifikationsmatrixen, som blev leveret uden noget kort på produktniveau. Motoren var vokset med en familie af funktioner — ARAIM-kontrollen mod offentliggjorte referencevektorer fra Working Group C, rigtig hentet geometri for måne-konstellationer, den lunare afvisningskontur med et målt C/N₀-bånd, trinnet fra VLBI-skema til stationskovarians, optisk og RF-overdragelse med fejlindsprøjtning på tværs af modaliteter, forudsigelse af jordorientering i realtid mod arkiveret Bulletin A, deling af apertur mellem navigation og kommunikation, INS/TRN-glidning og dækning af enheder og proveniens — hver med en matrixrække og et medfølgende scenarie, og ingen af dem nævnt på kshana.dev. Dækningen fra kort til række går fra 72 af 168 rækker til 94.
Otte scenarier er føjet til legepladsens katalog. Et funktionskorts Kør-knap vises kun, når
web/app.jsogså indeholder filen; seks kort pegede på et scenarie, som den ikke indeholdt, så de blev vist uden nogen måde at køre dem på. Et af dem, datummet for ægte laserafstandsmåling, havde været i den tilstand, siden det blev udgivet.tests/scenario_examples_doc_sync.rssikrer nu invarianten i begge halvdele: et kortsrun-mål skal både være pakket underscenarios/og udbydes af kataloget. Mutationstestet mod begge fejltilstande.moonlight-service-volumeudskriver sin geometri pr. satellit som<scenario>.table.csv, når et eksportsted er konfigureret (G11). Det er det største array, cratet udgiver: 2304 rækker i den udgivne fælles kommunikations- og navigationstabel. Det nåede kun frem til brugerne inde i JSON, den form, der afkortede et søsterscenaries kurve på 57 punkter til 23 punkter under en kolonne, som påstod at indeholde dem alle. Én række pr. forbindelse, rækkeantallet på overskriftslinjen, og antennekolonnerne kun til stede, når en antenne var konfigureret. En kørsel uden eksportsted er uændret på bytes og skriver ingen fil.SBOM'en beskriver nu det, der leveres: 60 komponenter blev til 66.
scripts/gen-sbom.shopførte hver pakke i opløsningen med standardfunktioner, dev-dependencies inkluderet. Det sattesgp4ogchrono, crates der kun bruges i test og ikke kompileres ind i noget artefakt, ind i styklisten og udelod kæden--features python, som PyPI-wheelen linker (pyo3,pyo3-ffi,pyo3-macros,pyo3-macros-backend,pyo3-build-config,portable-atomic,target-lexicon,heck), og som er wheelens grænse mod fremmede funktioner. Scriptet gennemløber nu opløsningsgrafen fra pakken kshana ad normale kanter og build-kanter alene, over foreningsmængden af standardfunktionerne og funktionssættenepythonogwasm(npm-pakken indeholder den samme SBOM), for hver målplatform. Den fastlåste CycloneDX-formatkontrol er genbaselinet gennem sin indcheckede generator: 60 → 66 komponenter, 53 → 60 sammensatte licensudtryk, og stadig nul skemafejl, når disse er placeret i standardformenexpression.CSV-reproducerbarhedstabellen når alle indgange, ikke kun CLI'en og Python-wheelen. MCP-serveren får et syvende værktøj,
export_table_csv, som kører et scenarie og returnerer den bytestabile tabel, CLI'en skriver som<scenario>.table.csv, eller en fejl, der nævner de slags, som udgiver en (realtime-frame-eop,lunar-time-budget,lunar-jammingogmoonlight-service-volumekun nårexport_site_lat_deg+export_site_lon_deger sat). WebAssembly-modulet fårtable_csv, som returnerer den samme tekst ellerundefined. MCP-rundturstesten og Python-bindingstestene fastlåser nu den returnerede CSV byte for byte modtests/golden/realtime-frame-eop.csvog fastlåser, atRunOutput.write_csvreturnerer antallet af skrevne bytes og 0 uden at oprette en fil for en slags uden tabel. Hver flade, der angiver antallet af MCP-værktøjer eller opregner værktøjerne, siger nu syv.run_alli WebAssembly-modulet: én motorkørsel for alle outputs.run,chart_svg,summaryogtable_csvudfører hver scenariet fra bunden, så legepladsen betalte for fire fulde kørsler pr. klik, omkring 12 s i stedet for 3 s forcislunar-arc-recoveryi en browser.run_allreturnerer{json, svg, summary, csv}fra én kørsel, og legepladsen bruger den nu. Den stemmer byte for byte med de fire separate kald.
Rettet#
REVISION: GNSS/INS-filterets kobling af gyrobias havde forkert fortegn, og tallene for udfald i
gnss-insændres. Det udvidede Kalman-filter med fejltilstand (EKF) holder begge inertibiaser som residualer (sand værdi minus det løbende estimat, ført tilbage ved addition). Accelerometerkolonnen drev hastighedsfejlen med+C_b^n b_a, men gyrokolonnen drev attitudefejlen med−C_b^n b_g. En residual gyrobias roterer i virkeligheden den beregnede attitude med+C_b^n b_g, så hvert estimat af gyrobias skubbede i den forkerte retning. Pakken var kun stabil, fordi dens standardprior for gyrobias (1e-4 rad/s, 1 sigma) var stram nok til at holde de tilstande på plads. Med en bredere prior divergerede filteret, selv når den sande gyrobias var nul: 93 m fusioneret udfaldsfejl blev til 4,3 km. De udgivne tal forscenarios/gnss-ins.tomlændres som følger:gnss-ins.tomlfør (≤ 0.27.2) efter koldatom-IMU, fusioneret RMS under udfald 96,1 m 1,9 m koldatom-IMU, coast inden for specifikation (50 m) 30 s 60 s (hele udfaldet) taktisk IMU, fusioneret RMS under udfald 62,5 m 3,1 m taktisk IMU, coast inden for specifikation (50 m) 37 s 60 s (hele udfaldet) Tallene for frit løbende drift (130,7 m og 314,3 m) ændres ikke; de brugte aldrig filteret. Pakkens tidligere aflæsning, at den fusionerede coast er begrænset af et attitudegulv fra overdragelsen og derfor ikke forbedres med en bedre sensor, var en artefakt af denne fejl og er trukket tilbage. Med konstante, støjfrie biaser lærer filteret dem nu, mens GNSS er tilgængeligt, så den fusionerede coast er et bedste tilfælde. Den eksterne filterpy-reference (
tests/gnss_ins_sensor_fusion_reference.rs) kontrollerer kun måleopdateringerne, og derfor så den aldrig propagationen. To tests kontrollerer nu fortegnet direkte, og begge fejler på det gamle. Den første, iclosed_loop.rs, fører en kendt residual gyrobias gennem strapdown og kræver, at filteret forudsiger den resulterende attitudefejl inden for 2 %. Den anden kræver, at en bred prior lærer en gyrobias på 1e-3 rad/s og holder sig inden for 6 m. Den tværplatformsgyldne reference forgnss-inser genfastlåst af denne grund og ingen anden.Hver registry-quickstart kører nu som skrevet på en ren maskine. Målt før denne ændring læste eksemplerne for crates.io og PyPI (Python Package Index)
scenarios/clock-holdover.toml, som en registry-installation ikke har, og npm-eksemplet gik ned under Node.js medTypeError: fetch failed, fordi pakkensinit()henter sin WebAssembly-binær, og Nodesfetchikke kan læse en lokal fil. Nu gælder:README.crates.mdogREADME.pypi.mdindeholder det scenarie inline, somREADME.npm.mdallerede gjorde. Rust-blokken er et helt program med sin egenmain, da den rustdoc-skjulte linje# Ok::<…>, som den før sluttede med, vises på crates.io og ikke kompilerer, når den indsættes.tests/readme_code_fences_doc_sync.rskompilerer den stadig byte for byte og afviser nu også en skjult linje i blokken.README.npm.mdadskiller browseren fra Node.js og giver en Node-opskrift, der læser binæren fra disken og sender den tilinitSync. Doc-sync-testen acceptererinitSyncsom den indlæser, wasm-bindgen genererer.- Alle tre indlejrer scenariet med dets proveniensstrenge uforkortede, så scenariets hash er
5ba83a232b94på alle flader. npm-eksemplet plejede at forkorte dem, hvilket gav det en anden hash end CLI'en. - Gengivet fra lokale builds af dette træ: et nyt
cargo new-projekt med en stiafhængighed til det pakkede crate byggede og kørte Rust-eksemplet; en wheel bygget med maturin fra de pakkede kilder og installeret i et nyt virtuelt miljø kørte Python-eksemplet; og pakkenwasm-pack --target web, pakket og installeret med npm, kørte Node-opskriften. Alle tre udskrev den samme oversigtslinje.
cargo run -- <scenario.toml>virker fra en klon.Cargo.tomlsætterdefault-run = "kshana". Uden den afviste cargo med "could not determine which binary to run", hvilket hvercargo run ---linje i dokumentationen ramte.CLI'ens fejl i det første minut siger, hvad du skal gøre nu. En scenariosti, der ikke findes, tilføjer nu et fingerpeg, der peger på
kshana example, og et andet positionelt argument udskriver brugsteksten og navngiver argumentet.--help,--version, fejlen for en ukendt indstilling (exit 2) og--validates enlinjedeok:ved succes lå allerede på main.tests/cli_first_run.rsdækker nu dem alle, da ingen test kørte binæren for nogen af dem før.list_kinds()i Python er dokumenteret som returnerende én JSON-streng, ikke en liste. Den returnerer de samme metadata somscenario_kinds(), serialiseret, så iteration gennemløber tegn. Den beholder sin strengreturnering, så eksisterende kaldere ikke går i stykker.kshana.pyi, bindingens dokumentationskommentar,docs/PYTHON_API.mdogREADME.pypi.mdsiger nu det og peger påscenario_kinds().De tre registry-README'er udskriver hver forkortelse ved første brug. PNT er nu udfoldet i sloganet, hvor det først optræder, og CLI, TOML, JSON, SVG, CSV, CSAC, HTML, URL og API er udfoldet i de filer, der bruger dem. Overskriften på tabellen med uafhængige referencer siger ikke længere "CI-gated", før CI er defineret.
Rettede et udgivet tal: tilgængelighed for ARAIM med to konstellationer på de medfølgende Celestrak GPS + Galileo TLE'er.
docs/CAPABILITY.mdangav, at sammenlægning af Galileo løfter tilgængeligheden fra 0,21 til 0,67 under en VAL på 12 m, og at den konstellationsfejlrobuste tilstand er begrænset med kun to konstellationer. Det stammede fratests/araim_dual_real_data.rs, der propagerede hver satellit fra sin egen TLE-epoke (parse_propagatorsdropper epoken), og epokerne i de filer spænder over 70,6 h (GPS) og 335,7 h (Galileo), så satellitterne stod på indbyrdes uforenelige tidspunkter. Testen bevarer nu hver epoke (parse_tle) og evaluerer hver satellit på ét fælles UTC-tidspunkt, den seneste TLE-epoke i sættet (2026-06-07T07:21:04). Den målte tilgængelighed over det samme gitter på 24 h med 289 sampler bliver kun GPS 0,993 (var 0,208), sammenlagt 1,000 (var 0,671) og konstellationsfejlrobust dobbelt 0,990 (var 0,031); ved APV-I-grænsen går dobbelttilstanden fra 0,180 til 1,000. Konklusionen vendes om: på en konsistent himmel bærer to konstellationer hypotesen om konstellationsfejl ved en VAL på 12 m. De samme tal fremkommer med den tidligste TLE-epoke som reference. En selvkontrol i testen fastlåser dens tilgængelighedsløkke sampel for sampel tilaraim_dual_constellation_availability, så den eneste forskel er tidsjusteringen.docs/CAPABILITY.mdogdocs/REAL_TLE_GUIDE.md§3 indeholder de nye tal; posten for 0.13.0 nedenfor er uændret som udgivet.De offentlige flader reklamerer ikke længere for RINEX 4 som valideret. Motoren afviser nu en RINEX 4-navigationsfil ved navn i stedet for at afkode den forkert, men standardgitteret viste stadig et kort "RINEX 3 / 4" med en valideret-pille, bundet til navigationsparserens RINEX-3-evidens. Kortet er nu "RINEX 3", og README,
docs/CAPABILITY.md,docs/STANDARDS.md,ROADMAP.mdog funktionsoversigten angiver det, der er sandt: RINEX 3.0x-observationsfiler parses, observationslayoutet 4,00 forventes at blive det, men ingen 4,00-fil er læst gennem koden, og RINEX 4-navigationsfiler afvises.--validatesiger, når "ok" betød, at der ikke var noget at kontrollere. Omkring to tredjedele af kataloget udgiver intet obligatorisk felt; de pakker kører deres referencekonfiguration fra et tomt indhold, så linten kun kunne udskrive "ok" for dem, med de samme ord som efter kontrol af seks felter. Succeslinjen angiver nu antallet af obligatoriske felter, den fandt til stede, eller at slagsen ikke kræver nogen.scripts/gate.shafviser en ikke-numeriskREPEATellerTEST_THREADS. Under bash 3,2 fikREPEAT=noden numeriske sammenligning til at give fejl og evaluere til falsk, så gaten meddelte "repeatability loop SKIPPED (REPEAT=0)" for en værdi, der ikke var 0, og skrev stadig en kvittering. Begge knapper afslutter nu med 2, medmindre de er rene heltal.MSRV er angivet som 1,85 overalt, hvor et menneske læser det.
Cargo.tomlgik til 1,85 ved sidste udgivelse; README-badgen, installations- og fejlfindingsteksten,codemeta.jsonog MCP-cratets egen begrundelse sagde stadig 1,75.RunOutput.__repr__i Python-bindingen angiver bytes, ikke "chars". Den udskrevlen()af UTF-8-strenge, som er et bytetal: 710 "chars" for en tabel på 708 tegn.README'en dokumenterer ikke længere
--study --study-namesammen.--study-nameer et flag for ét scenarie og ignoreres med--study(binæren advarer). De to eksempler til kopiering i README.md og README.crates.md viser nu study-kommandoen alene.Sidens evidens for urstabilitet angiver begge observerede tolerancer. 5071A-cæsiumserien gengives til ≤ 3e-5 og PHASE.DAT til ≤ 5e-5; afsnittet angav 3e-5 for begge.
To motoroutputfiler spores ikke længere.
scenarios/quantum-pnt-demonstrator.study.{json,html}var stemplet af motor 0.20.0 med alle kvalitetsmål tomme, og README'ens egen study-kommando overskrev dem, hvilket gjorde træet beskidt og blokerede push-gaten.*.study.json/*.study.htmlignoreres nu som de andre fire motoroutputs.Et seed-sweep på legepladsen fejler ikke længere ved hver kørsel. Sweepet trinnede heltalsknappen
seedlineært (1, 10,9, 20,8, …), og motoren, der læste den somu64, afviste hver brøkværdi. Heltalsknapper sweeper nu forskellige hele tal.Hver download fra legepladsen siger, hvilken motor og hvilket input der frembragte den. Nogle få slags (f.eks.
realtime-frame-eop) udskriver hverkenengine_versionellerscenario_hash, så deres downloads blev blot kaldtkshana-csv.csv. Navnet falder nu tilbage på den indlæste motors version og et FNV-1a-64-fingeraftryk på 12 hex-tegn af scenarieteksten.
Ændret#
Det udgivne crate er under halvt så stort som før, og
cargo install kshanabygger kun CLI'en. Pakken plejede at indeholde artiklerne, deres indsendelsespakker, artefakterne til artiklernes figurer, notebooks,docs/, vedligeholderscripts og eksempelprogrammerne. Intet af det kompileres af biblioteket eller CLI'en. Den indeholdt også de tre interne generatorer undersrc/bin/(crossover_study,gen_validation_artifacts,validation_report), så en registry-installation kompilerede og installerede fire eksekverbare filer, hvoraf tre kun er nyttige inde i et checkout. De træer og de tre generatorkilder er nu udelukket. Cargo opregner en pakkes binærer ud fra de filer, den indeholder, så det udgivne manifest nævner kunkshana. I en klon findes generatorerne stadig automatisk, såcargo run --bin <name>og udgivelsesjobbet, der kørervalidation_report, er uændrede. Målt medcargo package: 763 filer, 16,7 MiB, 6,8 MiB komprimeret før; 591 filer, 10,5 MiB, 3,0 MiB komprimeret efter. Dens verifikationsbuild, som kun kompilerer de pakkede filer, består.cargo install --pathpå det pakkede crate installerede én eksekverbar fil,kshana.Output, en tidssynkroniseringsingeniør kan læse: ikke mere
p95 0.0ns, ikke meresecurity 0.000uden angreb og stedtal, der stemmer med README'erne. Dette er en visningsrevision. Intet udgivet tal ændres; JSON-værdierne er identiske, hvilket golden-hashene ovenfor beviser.- Enlinjeoversigten udskrev det optiske urs tidsfejl i 95. percentil (p95) som
0.0ns, mens tabellen ved siden af viste 1.20e-4 ns. Et tidsfejltal, der ikke er nul, men for lille til én decimal, udskrives nu med tre betydende cifre (p95 1.20e-4ns); et nøjagtigt nul udskrives stadig som0.0. HTML-rapporten (HyperText Markup Language), study-sammenligningstabellen og legepladsens downloadbare rapport bruger samme regel, så intet tal, der ikke er nul, udskrives som0.000heller. securityer en analytisk grænse for spoof-detekterbarhed, som kun betyder noget over for et konfigureret angreb. Slagseneclock,orbit,hybridogfusionkonfigurerer intet, så deres oversigt udskriver nusecurity n/a (no attack)i stedet for et tal som0.000, der læses som en mislykket detektion. Værdien bliver ifom.security, markeretapplicable: falsemed begrundelsen ifigure_tiers, og rapporttabellerne viser "not applicable". Slagsenspoofscorer stadig detektion.- To oversigtsfastlåsninger i
tests/registry_golden.rsflyttede sig af netop disse to grunde og ingen andre:golden_clock(kvante-p95 og beggesecurity-værdier) oggolden_orbit(beggesecurity-værdier; dens p95-værdier er nøjagtigt nul). Deres hele dokumenthashes flyttede sig ikke. De forventede oversigter i README'en, de tre tutorials og deres undervisningsscenarier er opdateret til at passe, ogtests/tutorials.rskontrollerer undervisningskopierne mod motoren. - Legepladsens guidede rundtur åbner ikke længere ved første indlæsning. Dens modal fangede de første klik, og dens spotlight scrollede siden væk fra det sted, besøgende landede. Den starter fra knappen "Take the 60-second tour" eller den flydende Tour-knap.
- Siden scroller ikke længere sidelæns på en telefon. Ved 390 px udgjorde mærkerækken og GitHub-knappen omkring 410 px indhold, en overskridelse på 4 px; overskriften passer nu fra 320 px og op, og tabellen over kvalitetsmål scroller inde i sin egen boks i stedet for at udvide siden.
- Funktionsudforskeren indledte med sit eget kortantal ("46 capability cards … 17 backed by an external oracle") ved siden af README'er, der siger 64 af 168. Den indleder nu med verifikationsmatrixen, læst fra den genererede
web/data/verification-matrix.json(den samme matrix, README-tallene er fastlåst til), og nævner bagefter kortene som det oversigtslag, de er.web/counts.test.mjs, et nyt trin i arbejdsgangen for kontinuerlig integration (CI), kontrollerer regnestykket og krydstjekker README.md og sidens beskrivelser;tests/web_validation_counts_doc_sync.rsfastlåser forbindelsen fra Rust-siden.
- Enlinjeoversigten udskrev det optiske urs tidsfejl i 95. percentil (p95) som
Den offentlige beskrivelse indleder nu med tidssynkronisering og holdover, det bedst validerede område. README'ens åbning og
docs/POSITIONING.mdpræsenterer Kshana som en åben, reproducerbar PNT-robusthedsmotor for evidens med proveniensmærkning: tidssynkronisering og holdover for kritisk infrastruktur først (estimatorerne for Allan, modificeret Allan, tidsdeviation og maksimal tidsintervalfejl og holdover-coastvariansinversionen er de VALIDATED rækker bag det), kvante som en neutral afvejningsmetode mellem kvante og klassisk, hvis resultater er mærket MODELLED, og navigation til månen / cislunar rum og dybt rum som vedligeholdte funktioner frem for overskriften. Begge sider siger nu, hvad Kshana ikke er: ikke en radiofrekvenssignalsimulator eller hardware-in-the-loop-rig, ikke en erstatning for MATLAB/Simulink, STK eller Orekit, og peger på den nye slagstelecom-timingogdocs/TELECOM-TIMING.md. Den gamle linje "der findes intet godt åbent værktøj" er væk: en søgning, der ikke finder noget, er ikke evidens for, at intet findes.ROADMAP.mdfår en udateret prioriteret rækkefølge (tidssynkronisering først, kvanteafvejningen som nummer to, månen vedligeholdt) og dropper tre forældede punkter (Coriolis og lysforskydningssystematik, NRHO-begyndelsesbetingelserne og månescenariet, alle leveret); README'ens linje "Coriolis and light-shift remain roadmap" er rettet på samme måde.docs/CAPABILITY.mdholdt op med at underdrive. Rækken for jordfaste referencesystemer sagde "none", mens matrixen graderer GCRS→ITRS som VALIDATED; den er nu "full", og rækken for kernereferencesystemer registrerer ANISE-krydskontrollen som leveret. Guidet tilstand var opført som køreplan; legepladsen har leveret guidede skydere og en guidet rundtur. Et gennemløb modsrc/verification.rsrettede fem rækker mere, der var ældre end deres valideringer: Cowell-kraftmodellen og batch-/sekventiel banebestemmelse mod Orekit 12,2, jordstationspassager mod Orekits elevationsdetektor, kernen for præcisionsfortynding (dilution of precision) mod gnss_lib_py og OEM-import mod den uafhængigeoem-parser; rækken for verifikation og validering nævner nu de vagter, der kontrollerer, at hver citeret test findes.Ordlisten forklarer, hvad en resultatfil siger.
docs/GLOSSARY.mdfår forklaringer i almindeligt sprog af outputtermerne (holdover, p95, integritet, sikkerhedsscoren, PDOP,sigma_y,q_wf), telekommunikationens tidssynkroniseringstermer (time error, max|TE|, cTE, dTE, MTIE, TDEV, PRTC, ePRTC, T-BC, T-TSC, OCXO, CSAC) og de tre evidensniveauer (VALIDATED, MODELLED, PARTNER).Forkortelser er udfoldet ved første brug i hvert håndskrevet offentligt dokument. README'en og 24 filer under
docs/havde adskillige hundrede forkortelser brugt før eller uden deres udfoldelse; hver er nu udfoldet, hvor den først optræder i den fil. De tre genererede filer (docs/VERIFICATION-MATRIX.md,docs/MODELLED-RATIONALE.md,docs/SCENARIOS.md) er ladt i fred: de skrives ud frasrc/verification.rsogapi::list_scenario_kinds(), så deres ordlyd skal ændres ved kilden.Linjedækning har et måltal i registret.
docs/COVERAGE.mdregistrerer 95,63 % (37.697 af 39.419 linjer) fra CI-jobbetcoveragepåb1d350d, ogtests/coverage_figure_doc_sync.rsfastlåser de fem offentlige "~96%"-flader til det, det ene overskriftstal, der blev vedligeholdt i hånden og allerede én gang var flyttet uden at blive bemærket.Nye doc-sync-gates for flader, som intet læste.
tests/readme_code_fences_doc_sync.rskontrollerer hverimport { … } from "kshana"i en JavaScript-blok mod WebAssembly-eksporterne og fastlåser README.crates.md's Rust-eksempel byte for byte til en kopi, testbinæren kompilerer.tests/security_md_doc_sync.rsfejler, hvissrc/lib.rsmister#![forbid(unsafe_code)], eller SECURITY.md holder op med at angive det.tests/no_overclaims.rsscanner nu ogsåweb/README.mdog de tre registry-README'er, og hver standard på siden skal udtrykkeligt angive sitproof.De to kontroller af ægte hardwareure kører på en runner.
realdata-clock.yml(månedligt og ved dispatch) henter serierne 5071A og PHASE.DAT og kører begge tests medKSHANA_REQUIRE_REALDATA=1, så et manglende input fejler i stedet for at blive sprunget over. Begge hentescripts er fastlåst til ét allantools-commit og verificerer SHA-256.Python-typestubben kontrolleres mod den byggede wheel (
mypy.stubtesti bindingsjobbet), hvilket er sådan,csv/write_csvblev leveret uden stub.Ordlisten definerer URE, EOP, FoM, CTI og TIB, som README'en og registret brugte uden forklaring.
Hver slags udgivne feltkontrakt er nu sand, og en test holder den der. Fem af de 61 slags ændredes. Slags med et ikke-tomt
required_fieldsgår fra 21 til 22:ephemeriskræver nutle|orbit+epoch(en barkind = "ephemeris"plejede at bestå--validateog derefter fejle kørslen), ogquantum-tradetilføjercandidate_adev_taus+candidate_adev_values|candidate_clock_class, som dens kørsel allerede krævede. En obligatorisk post må bruge|(en af disse) og+(alle disse sammen);--validateforstår begge.lunar-joint-od-clock,pvtogearth-gnss-lunarudgiver 9 ægte valgfrie felter, de havde udeladt.docs/SCENARIOS.mdsiger nu, atkinder obligatorisk for hver slags undtagenclock.tests/required_fields_are_true.rskontrollerer hver slags mod dens leverede scenarie: fjernes en obligatorisk post, skal kørslen fejle, og et dokument med kun de obligatoriske felter skal køre.Noterne til JetBrains Marketplace er bag en gate.
scripts/check-version-sync.shfejler nu, medmindre den nyeste<change-notes>-post iplugin.xmlangiver den version, der leveres; syv udgivne versioner havde serveret noterne for 0.22.0 uændret.Den tekniske rapports dækningstal er det målte.
paper/kshana-technical-report.mdsagde "near 97 %"; den siger nu omkring 96 % (95,63 % målt,docs/COVERAGE.md) og er den sjette flade, dækningstesten fastlåser.Motorklienten uden for hovedtråden er testet (
web/engine.test.mjs, i CI): dispatch-tilladelsesliste, annullering og genstart, de tre fallback-ruter i hovedtråden og nedbrudsgendannelse, mod en falsk worker.Intet udgives, før det mærkede commit har bestået sine tests, og en udgivelse er ikke færdig, før hvert registry serverer den. Rækkefølgen er nu tag, verificér, udgiv, paritet, side, i én kørsel af
release.yml(docs/RELEASING.md).- Udgivelsen venter på afgørelsen.
publish.yml,mcp-publish.ymlogjetbrains-plugin.ymlstarter ikke længere ved tag-push;release.ymlkalder dem fra jobs, der harneeds: verify. Før løb de om kap med den: ved v0.27.2 havde crates.io, npm og Python Package Index (PyPI) alle udgivet inden for 4,5 minutter efter tagget, ogverifyvendte tilbage 84 minutter efter det; ved v0.27.0 udgav npm og PyPI, mens crates.io-jobbet fejlede. Et manuelt genforsøg på et tag holdes tilbage af det nyescripts/check-release-verdict.sh, som kræver en grønverifyfor netop det commit fra Actions-grænsefladen og lukker af ved alt andet. - Alt bygges, før noget uploades, og crates.io, hvis pakketrin var det, der fejlede midt i en udgivelse, udgiver først.
- Et manglende registry-token lader jobbet fejle i stedet for at springe uploaden over og melde succes.
- En paritetskontrol efter udgivelsen.
scripts/check_channel_parity.pypoller crates.io (kshanaogkshana-mcp), npm, PyPI (kildedistributionen og alle seks platformswheels) og ghcr.io, indtil hver serverer versionen, eller lader kørslen fejle; docs.rs og Model Context Protocol-registret (MCP) rapporteres, men er ikke påkrævet. Kørt mod tidligere udgivelser finder den 0.22.0 manglende fra npm og PyPI, 0.23.0 fra PyPI og 0.27.0 fra crates.io. - Prækompilerede kommandolinjebinærer til macOS (Apple silicon og Intel) og Windows x86-64, navngivet efter mål (
kshana-aarch64-apple-darwinog så videre), ved siden af Linux-kshana, hvis navn er uændret. EnSHA256SUMS-fil dækker hvert aktiv, ogverify-releasekontrollerer den og kører macOS- og Windows-binærerne på deres egne systemer. - kshana.dev viser en udgivelse, ikke
main. Den plejede at blive udrullet igen ved hvert push tilmain, mens dens sider nævnte den sidste udgivelse.pages.ymlbygger nu kun et udgivelsestag: udgivelsen igangsætter den, når hver kanal serverer versionen, og en manuel dispatch ruller den seneste udgivelse (eller en navngiven) ud igen. - Én kilde til wheels.
publish.ymls håndkopierede matrix med seks mål er væk; den kalderwheels.yml, så auditwheel-taggaten og bytereproducerbarhedskontrollen nu bedømmer de wheels, PyPI modtager, og en fejl i en af dem stopper udgivelsen. - Fastlåste byggeværktøjer. Hver arbejdsgang anmoder om Rust 1.93.0 (msrv-jobbet om sin egen version);
publish.ymlogpages.ymlhavde anmodet om@stable, og loggen for v0.27.2 viser, at rustup installerede 1.98.1 og derefter kompilerede med 1.93.0 kun fordirust-toolchain.tomlhar forrang. wasm-pack er fastlåst til 0.13.1 (den version, der byggede v0.27.2, og som det ufastlåste installationsscript valgte) med en kontrolsumkontrol, og mcp-publisher til 1.8.1 med dens udgivne SHA-256.scripts/check-toolchain.shfejler nu, hvis en arbejdsgang beder om en anden compiler eller sender et downloadet script ind i en shell. Intet verifikationsjob, ingen golden-fastlåsning og intet lokalt gate-script er fjernet eller lempet.
- Udgivelsen venter på afgørelsen.
Sikkerhed#
Hver tredjeparts GitHub Action er fastlåst med commit-SHA, 93 referencer på tværs af 15 arbejdsgange, 92 af dem nye, med tagget bevaret som en afsluttende kommentar, som Dependabot kan opdatere. Undtagelsen er
dtolnay/rust-toolchain, hvis tag er værktøjskædevælgeren.MCP-serverbilledets basislag er fastlåst med multiarkitektur-digest, og Dependabot overvåger nu
mcp/kshana-mcps Dockerfile, så OS-lagene stadig modtager sikkerhedsopdateringer gennem en gennemgået PR.Kontrollen af tag mod manifest kører i de to udgivelsesarbejdsgange, der leverer tagets version.
mcp-publish.yml(ghcr-billede, MCP-registret) ogjetbrains-plugin.yml(Marketplace) løber om kap medpublish.ymli stedet for at vente på den, så et fejlskåret tag kun blev kontrolleret i en søsterarbejdsgang. Begge kører nuscripts/check-version-sync.shfør build.Fire sikkerhedsbulletiner, Dependabot rejste den dag, dens alarmer blev slået til, er rettet. MCP-serveren går fra
rmcp1,7 til 2,2: tre bulletiner modrmcp< 2,1 (en lækage i Streamable-HTTP-sessionstabellen, manglende OAuth-validering af beskyttet ressource, brugerdefinerede headers der følger en omdirigering på tværs af oprindelser), ingen af dem nåbare her, da serveren kun taler stdio, men et udgivet crate bør ikke fastlåse en sårbar SDK. Makroerne irmcp2 kræver Rust 1,88, såkshana-mcpalene erklærer nurust-version = "1.88"; biblioteketkshanabliver på 1,85. Den ene API-ændring (Content→ContentBlock) er gennemført, og rundturstestene består. SonarQube-scanningshandlingen går fra v5 til v6, som retter et bulletin om argumentinjektion (≥ 4,0, < 6,0).
0.27.2 - 2026-09-22#
Tilføjet#
Hvert Rust-element, en række i verifikationsmatrixen citerer, opløses nu mod craten. Den eksisterende vagt kontrollerede de citater, der er formet som filstier; 63 af de 164 rækker, der ikke er partnerrækker, nævner i stedet deres evidens som et element i craten (
navsignal::code_tests,integrity::tpl_scalar::tests,api::tests::tracking_loop_kind_round_trips_through_the_dispatch), og et token uden suffikset.rsvar usynligt for en stiscanner. De rækker kunne have nævnt et omdøbt modul, et tømt testmodul eller en funktion, der aldrig fandtes, og hver gate ville være forblevet grøn.tests/verification_rows_name_a_test_that_exists.rsopløser alle 339 sådanne citater gennem modultræet, kræver, at hver række, der ikke er en partnerrække, nævner mindst én test, der faktisk bærer#[test], og kræver, at partnerrækker ikke nævner nogen. Fire mutationer blev brugt til at bedømme den: omdøbning af et citeret modul, at lade en rækkes eneste testcitat pege på en funktion uden test, omdøbning af det rigtigemod testsog fjernelse af#[test]-attributterne fra det; hver slår over i rødt på den påstand, der ejer den.Én række var allerede forkert: Alternative / complementary PNT citerede
tests/*, en glob, som ikke er et citat. Den nævner nutests/alternative_complementary_pnt_reference.rsog de tre testmoduler i craten bag den.De udgivne figurer kontrolleres igen mod motoren ved hver build (
tests/published_figures_still_reproduce.rs). De tre demodiagrammer i README er motorens egetchart.svg-output, og intet kørte scenariet igen; artiklens to crossover-studier blev genereret én gang og committet; og README'en angiver fire kvalitetsmål i prosa ved siden afscenario-fom.png. Alle tre er nu fastlåst til levende motoroutput.Afstemningen af dem gav det nyttige resultat: demodiagrammerne var tegnet ved motor 0.22.0 og artiklens crossover-JSON ved 0.20.0, og ved 0.27.1 er hver plottet værdi i alle fem artefakter identisk; de tre diagram-SVG'er adskiller sig fra en ny kørsel med nøjagtigt to tegn hver, versionsstemplet i sidefoden. Diagrammene er tegnet igen, så sidefoden er sand. Artiklens JSON er bevidst efterladt stemplet 0.20.0: den er optegnelsen over den kørsel, hvis figur en udgivet artikel indlejrer, og at stemple den igen ville påstå en proveniens, som PDF'en ikke har. Vagten fastslår i stedet den stærkere egenskab, at den nuværende motor stadig gengiver hver udgivet værdi.
Rettet#
SonarCloud-analyser blev registreret som
VERSION=not provided, så perioden for ny kodeprevious_versionaldrig rykkede frem: den var stadig forankret ved analysen den 2026-07-02, bedømte toogfirs dages arbejde som ét enkelt delta og målte 7877 "nye" duplikerede linjer mod en tærskel på 3 %. Scanningen sender nu cratets version. Den underliggende duplikering er reel og skjules ikke af dette: den er koncentreret i de deklarativeFieldUnit-registre, der gentages på tværs afensemble,hybrid,fusion,inertialogreport, og i verifikationstabellen med 168 rækker, og den nævnes her som arbejde i stedet for at blive udeladt af målingen.scripts/gate.shhavde ingen lås for én skriver, og hver kørsel skrev den samme log. Det er ikke pedanteri: kvitteringensintegration_binaries,tests_passedogtests_ignoredlæses tilbage UD AF den log, og pre-push-hooken stoler på kvitteringen. En gate, der var dræbt, men hvis testbinær stadig var i live, blev ved med at skrive ind i den fil, den næste kørsel netop havde afkortet, så en kørsels tal kunne være blevet taget for en anden kørsels og give tilladelse til et push på grundlag af en suite, der aldrig kørte på det træ, der blev pushet. Der er nu én gate pr. checkout (den afviser med exit 75 ved siden af en levende og rydder en forældet lås, hvis pid er væk) og én log pr. kørsel, medtarget/gate-run.logopdateret fra den afsluttende kørsel på vej ud. Begge retninger er testet: en levende pid afvises, en død ryddes.src/verification.rspåstod, at dens tests "do not prove the named test/oracle strings resolve to live code". To vagter gør nu netop det, så moduldokumentationen sagde det modsatte af sandheden; den angiver nu, hvad der kontrolleres maskinelt, og hvad der overlades til menneskelig vurdering. En forældet henvisning tilverification::gen, hvor modulet erartifacts, er rettet i søstervagtens egen dokumentation.
Ændret#
mainblev omskrevet den 2026-09-22 og force-pushet. Ti commits blev til fire. Omskrivningen slog hvert commit, der efterlod en gate rød, sammen med det commit, der ryddede den, så hvert commit påmainnu har et træ, der består, og fjernede de annullerede kørsler, som en samtidighedsgruppe for hele grenen havde efterladt på hvert erstattet commit.Intet blev kasseret. Commits fra før omskrivningen kan stadig nås gennem de tags, der peger på dem, og det endelige træ er byteidentisk med det træ, omskrivningen startede fra;
git diffmellem den gamle spids og den nye er tom bortset fra de tre arbejdsgangsfiler, som denne udgivelse ændrer.De erstattede SHA'er, til alle der har en reference til en af 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 Tagsene v0.27.0 og v0.27.1 blev bevidst IKKE flyttet. De peger stadig på
7bba514og7864142, de nøjagtige commits, hvis træer frembragte de artefakter, der nu ligger på crates.io, npm, PyPI, ghcr.io og MCP-registret. Et cratets.cargo_vcs_info.jsonregistrerer den sha1, det blev pakket fra, registries er uforanderlige, og SLSA-attesteringen af byggeproveniens på aktiverne i udgivelsen v0.27.1 er bundet til det commit. Hvis tagsene var flyttet, ville hvert af de udgivne artefakter have peget på et commit, der ikke længere findes. At lade dem stå holder de gamle commits tilgængelige og hver udgivet provenienskæde opløselig, til prisen af to tags, der ikke længere er forfædre tilmain; derfor findes denne udgivelse: v0.27.2 givermainet tag af sit eget, pakket fra et commit, der ligger på den.Dette er den anden offentliggjorte omskrivning af denne historik; den første, den 2026-09-21, gjorde forfatterskab kanonisk og er optegnet i noterne for 0.27.0 med dens egne to hængende crate-sha1'er. En omskrivning offentliggøres her hver gang, for et repository, der sælger verificerbar proveniens, kan ikke i det skjulte flytte grunden under et udgivet artefakt.
0.27.1 - 2026-09-22#
Rettet#
Det udgivne crate kompilerede ikke.
src/lunar_orientation.rsindeholder eninclude_str!på øverste niveau aftests/fixtures/llr_geometry/de440_moon_pa.csv, og manifestet udelukker/tests/fixturesfra pakken, så den tarball, crates.io modtager, manglede en fil, som biblioteket selv indlejrer. Udgivelsen af v0.27.0 fejlede sin verifikationsbuild af den grund, og ingen 0.27.0 nåede crates.io; npm og PyPI, hvis jobs ikke afhænger af den, udgav normalt. Udelukkelsen har nu en undtagelse for netop det ene katalog.Hver anden
include_str!af en fixture isrc/ligger inde i et#[cfg(test)]-modul og når derfor aldrig det pakkede bibliotek. Kun en på øverste niveau gør.Intet i CI kørte
cargo package, og derfor blev en tarball, der ikke kan kompilere, først opdaget af udgivelsesjobbet, efter at to andre registries allerede havde leveret. Etpackage-job bygger og kompilerer nu den nøjagtige tarball ved hvert push.
Ændret#
- Fastlåsningerne af emissionen for månereferencesystemets realisering flytter sig ikke længere ved en versionsforhøjelse. SVG-sidefoden bærer motorversionen, så hver udgivelse re-baselinede tre hashes, to gange på én dag, og en fastlåsning, der tages om af rutine, holder op med at blive læst. Versionsstrengen normaliseres til en pladsholder før hashing, og emissionen kontrolleres separat for at angive den kørende version, så det forhold kontrolleres mere præcist, end hashen nogensinde kontrollerede det.
0.27.0 - 2026-09-22#
Tilføjet#
lunar-llr-datum, datummet for månereferencesystemet fra en ægte observationskampagne.lunar-frame-campaignerstattede en indsprøjtet Helmert-transformation med en simuleret kampagne og sagde det: dens stationsnetværk, dens tidsplan og dens sigma pr. observation er illustrative input. Dette scenarie fjerner simuleringen fra de to steder, hvor en tidsplan og en fejlmodel indgår i svaret. Epokerne er afsendelsestiderne for 337 arkiverede ILRS-normalpunkter for månelaserafstandsmåling (2015-04-08 .. 2015-06-27, Grasse MeO 7845 og Matera MLRO 7941, alle fem retroreflektorarrays), og hver observationsvægt er det normalpunkts egen arkiverede præcision,bin_rms / sqrt(n_raw), en median på 5,13 mm envejsafstand, taget ud af filen og ikke valgt her. Stationskoordinaterne kommer fra IERS ITRF2020 og reflektorkoordinaterne fra JPL DE430 Tabel 7; hver fixture registrerer en URL, en hentedato og en SHA-256 og genereres igen fra sin kilde af en committet generator, der verificerer kilden og afbryder frem for at udsende et tal. Rapporten nævner, hvilke forbindelser der er målt, og hvilke der stadig er modelleret, og de modellerede er målt: den observerede minus beregnede envejsafstand over de rigtige data er 156.494 m RMS, hvilket det samme testsæt bekræfter mod JPL Horizons over det samme tidsrum (195.655 m RMS-vektor, værste epoke 0,054° — inden for de ~0,3°, som den indbyggede analytiske måneserie hævder for sig selv). Additivt: en ny slags, en ny læser (realdata::llr_crd) og et nyt modul (lunar_llr); de eksisterende pakker til månereferencesystemet er fastlåst bit for bit.sigma_ure_msom scenarieparameter pålunar-integrityogmoonlight-service-volume. Nøjagtigheden af afstandsmåling i signalrummet var en konstant på kompileringstidspunktet (LUNAR_SIGMA_URE_M), så et sweep af servicevolumen kun nogensinde kunne svare bestået/ikke bestået ved én fast værdi. Beskyttelsesniveauer er nøjagtigt lineære i den, så når den eksponeres, bliver sweepet til et krav til nøjagtigheden af afstandsmåling over hele volumenen. Standarden gengiver den tidligere adfærd bit for bit.Eksport af geometri pr. satellit på
moonlight-service-volume:export_site_lat_deg+export_site_lon_degtilføjer etper_sat_geometry-array, der giver azimut, elevation og skråafstand til hver satellit ved hver epoke for ét navngivet selenografisk sted, plus synlighedsflaget. Den samlede dækningsoversigt slår med vilje geometrien pr. satellit sammen, men skråafstand er netop det, et linkbudget bruger, så en fælles kommunikations- og navigationsanalyse kunne ikke udføres ud fra oversigten alene. Slået fra, medmindre begge koordinater er angivet; rent additivt.lunar_service::topocentric, den offentlige hjælpefunktion for synsvinkler bag eksporten.En række i verifikationsmatrixen for den nye geometrifunktion.
Det rigtige antennemønster i geometrieksporten. Motoren har haft et mønster for en cirkulær blænde med ensartet belysning siden P1 (
antenna::pattern_gain_dbi, Airy-formen[2·J₁(x)/x]²), og intet uden forantenna.rsbrugte det; i stedet gjorde en boresight-forstærkning parret med en tommelfingerregel fra forstærkning til strålebredde arbejdet. En valgfriexport_antenna-tabel påmoonlight-service-volume(læses kun, når eksportstedet er sat) giver nu hver eksporteret række vinklen uden for boresight ved satellitten og sendeforstærkningen mod stedet fra det mønster og tilføjer enantenna_pattern-blok, der rapporterer antallet i strålen under det rigtige mønster ved siden af antallet i strålen under den symmetriske tilnærmelse (θ₃dB[deg] = √(31000/G_lin)) med forskellen som en navngivet korrektion. Begge tal udskrives; ingen af dem erstatter den anden. Målt ved motorens egen repræsentative månebrændvidde (1 m parabol, 2,4 GHz, η = 0,60) over et sted ved sydpolen og den illustrative skal af LCNS-klassen afviger de to med mere end én satellit: det rigtige mønster placerer 0 af 76 synlige forbindelser inde i halveffektstrålen, tilnærmelsen påstår 28, en korrektion på −2,33 satellitter pr. epoke, værste enkelte epoke 3. Tilnærmelsen bærer sin egen blændeeffektivitet (0,641 mod den70·λ/D-graders regel, den normalt citeres med, 0,920 mod en ensartet cirkulær blænde), så på en parabol med η = 0,60 returnerer den en stråle, der er 1,238× for bred; blokken udskriver begge de underforståede effektiviteter i stedet for at overlade dem til at blive udledt. Rent additivt: målt over det dokumenterede arbejdspunkt 597 eksisterende blade, 0 ændret, 0 fjernet, 494 tilføjet.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 dele bag. Mønsteret er også nu forankret mod de udgivne Airy-konstanter og ikke kun mod sig selv: halveffektskrydsningen findes ved bisektion og sammenlignes medx = 1.61634, hvilket gør den nøjagtige halveffektsbredde til1.02899·λ/Dog redeligt registrerer, at den konventionelle koefficient1.02placererpattern_gain_dbived −2,955 dB, ikke −3,010 dB.En reproducerbarhedstabel i langt format for
lunar-time-budget. Scenariets array-værdier outputs, gitteret over middelingstider, de syv kurverx(τ)pr. led og deres samlede rod-sum-kvadrat, nåede kun frem til brugerne som JSON-arrays. En udgivet tabel blev afkortet ved 400 tegn og udgav 23 af sine 57 middelingstider under en kolonne, der påstod at indeholde dem alle, og manuskriptet genopbyggede kurverne pr. led ud fra lukkede former, fordi motoren aldrig udskrev dem. En almindelig kørsel skriver nu også<scenario>.table.csvmed én række pr. (gitterindeks, middelingstid, led), som ikke kan afkortes til noget, der stadig ligner det hele. Gitterindekset er en nøjagtig sammenføjningsnøgle;τskrives med 13 betydende cifre og hverxmed 7, så bytes ikke forgrener sig mellem builds af den samme kilde. Rent additivt: rapport-JSON'en er byteidentisk.Rapporten for
hybrid-optical-rfbeskriver nu sig selv. Enlink_configuration-blok gentager de opløste linkinput (bærebølgens bølgelængde, sende- og modtageblænde, afstand, pulsbredde, integrationstid, effektiviteter og tab) med standarder anvendt, så en artikel angiver den konfiguration, den kørte ved, i stedet for at citere en standard læst ud af kilden. Enunits-blok angiver enhed og proveniensklasse for hver størrelse, en artikel sandsynligvis citerer. Sporene af overdragelseskovariansen er grunden til, at den findes: de blev udskrevet som en barvariance, og et manuskript udledte kvadratmeter ud fra en intern konsistenskontrol. Udledningen var rigtig, og netop derfor var det en defekt: intet ville have fanget, at den var forkert. Rent additivt: målt på tværs af fire konfigurationer 456 eksisterende felter, 0 ændret, 0 fjernet, 196 tilføjet.En række i verifikationsmatrixen for tidsbudgettets reproducerbarhedstabel, redeligt
InternalConsistency/ MODELLED: totalen kontrolleres mod rod-sum-kvadratet af leddene i den samme fil, som deler motorens egne leddefinitioner og derfor ikke er en uafhængig reference. Tilsammen tilføjer disse tre rækker. Den løbende total for dette uudgivne afsnit er 168 rækker — 64 VALIDATED, 100 MODELLED, 4 PARTNER.
Ændret#
Commit-forfatterskab i hele historikken er nu én enkelt identitet, og to udgivne crates peger på et commit, der ikke længere findes. Den 2026-09-21 blev git-historikken omskrevet, så hvert menneskeligt commit er forfattet og committet af
ashfordeOU <236818772+ashfordeOU@users.noreply.github.com>. Det bar tidligere tre stavemåder af én person: 688 commits somashfordeOU <contact@ashforde.org>, 34 somChakshu Baweja <contact@ashforde.org>og 94 allerede kanoniske. Det enedependabot[bot]-commit blev bevidst efterladt som sin egen forfatter: at omdøbe en bots afhængighedsopdatering ville påstå forfatterskab af arbejde, ingen her har udført.Intet indhold ændredes. Omskrivningen rørte kun forfatter- og committer-headere, og det kan kontrolleres frem for blot at påstås: træet for hvert tag og hver gren er bitidentisk med det, det var før.
v0.26.0opløses stadig til træet92284e9420605568f1bfabb78cd95d383b40f3e2, nøjagtigt som før.Hvad det kostede. Et commits navn er en hash over dets træ, dets forældre og dets forfatterheadere, så ændring af en forfader omdøber hver efterkommer. Udgivelsescommittet
v0.26.0vardce2dbf7700788cf6de46260c14673c0e5347360og er nud4921f3025569e00e425e1747d0acfc261e96e18. To artefakter registrerede det gamle navn ved udgivelsen og kan ikke rettes, fordi en udgivet registry-version er uforanderlig ved design:kshana0.26.0 på crates.io —.cargo_vcs_info.jsonregistrererdce2dbf…kshana-mcp0.26.0 på crates.io — den samme sha1,path_in_vcs: mcp/kshana-mcp
Intet andet er berørt. npm-pakken registrerer ingen
gitHead, og PyPI-distributionen registrerer slet intet commit; begge dele blev kontrolleret frem for antaget.Der findes ingen reparation, der får
dce2dbf…til at nævne det omskrevne commit: den streng er den gamle afstamning, og den eneste måde, den opløses på, er at beholde den udgivne historik fra før omskrivningen, hvilket ville genskabe det forfatterskab, omskrivningen fjernede. Proveniens for 0.26.0 går derfor gennem tagget og ikke gennem den registrerede sha1, og tagget leverer de identiske bytes, craten blev bygget fra. Den næste udgivelse registrerer et gyldigt commit uden behov for handling.
Rettet#
realtime-frame-eopbrugte som standard en EOP-fil uden prædiktionsrækker (G12). Scenariet indlejrede et uddrag affinals2000Amed fem rækker, kun endelige, som sin standard uden net, så en bar kørsel rapporteredepredicted_rows.n = 0, og tabellen pr. horisont hvilede på 5, 4, 3 og 2 par. Motoren kunne altid læse en prædiktionsrække; inputtet havde simpelthen ingen. Standarden er nu det ordrette IERS-uddrag for 2026 (tools/finals2000A_2026.txt, MJD 61173–61204): 20 endelige fra Bulletin B og 12 Bulletin A-rækker med kun prædiktion, så en bar kørsel uden filargument og uden net rapportererpredicted_rows.n = 12og en tabel pr. horisont ved n = 20 / 31 / 30 / 29, og sammenligningen med den operationelle prædiktor og enigheden mod produktets egne udgivne prædiktioner udfyldes også. Det langvarige uddrag med 45 rækker blev målt som alternativet og afvist: det er også kun endeligt, så det ville have efterladtpredicted_rows.npå 0. Dette flytter udgivne tal, under regel R4 og med stifterens bemyndigelse: ti af de 22 celler i den udgivnep4_frame_eop.csvog 24 af de 42 udfyldte celler itests/golden/realtime-frame-eop.csv. Det målte polgulv for hurtig minus endelig bliver 0,0678 mas (fra 0,0769 mas), hvilket er den værdi, artiklen P4's egen tabel over polbevægelse allerede udgiver ved n = 20; de to stemmer nu overens i stedet for at afvige med 13,5 %. Hvert andet tal, P4 udskriver fra denne tabel, er uændret ved den udskrevne præcision. Den fulde opregning gammel → ny, inklusive de felter, der ikke flyttede sig, står idocs/revisions/G12-default-eop-cell-changes.md. Uddraget med kun endelige leveres stadig, er fastlåst på bytes og anvendes: et antal prædiktionsrækker på nul i det er filens egenskab, og en test beviser det stadig.En forældet satellitbegrænsning i
moonlight-service-volume. Scenariet begrænseden_satstil 12, selv om dets egen konstellationsbygger understøtter 24, og en test hævder 24, så hvert ønsket antal over 12 blev stiltiende reduceret, og et sweep over satellitantallet gav identiske værdier over 12, umuligt at skelne fra ægte geometrisk mætning. Nu begrænset ved byggerens grænse. Det er en adfærdsændring kun forn_sats > 12.Den samme forældede begrænsning i
lunar-differential-pnt.lunar_dpntbegrænseden_satstil 12 med samme konsekvens, og denne nåede en udgivet tabel:dpnt_nsats_sweep.csvhar enn = 16-række, der er byteidentisk med sinn = 12-række, fordi motoren returnerede et svar for tolv satellitter under en etiket for seksten satellitter. Nu begrænset ved byggerens grænse på 24, og en ny test fastlåser det: hver større konstellation skal både rapportere sit eget antal og strengt forbedre beskyttelsesniveauet, så begrænsningen ikke kan vende tilbage ubemærket. Dette flytter udgivne tal: beskyttelsesniveauet forn = 16bliver 16,92 m → 14,57 m. Sweepet til 24 er kurven strengt monoton (11,94 m ved 24 satellitter, 29,5 % bedre end ved 12), så der er ingen mætning ved 12; det tilsyneladende plateau var begrænsningen. Adfærdsændring kun forn_sats > 12.
0.26.0 - 2026-09-18#
En udgivelse om dokumentation, gennemsigtighed og legeplads. Ingen motoradfærd ændres: verifikationsmatrixen står på 102 rækker — 56 VALIDATED, 42 MODELLED, 4 PARTNER, uændret fra 0.25.0.
Tilføjet#
- Rustdoc på crate-niveau (
//!ilib.rs), der dækker indgangspunkter, modellen for ærlighed og evidensniveauer og reproducerbarhed, så docs.rs åbner på en rigtig landingsside i stedet for en bar modulvæg. docs/SCENARIOS.md: en reference pr. slags for alle 50 scenarieslags, genereret fraapi::list_scenario_kinds()(den eneste sandhedskilde) afgen_validation_artifactsog vogtet aftests/scenarios_reference_doc_sync.rs, så den ikke kan glide væk fra dispatcheren.- Moduldokumentation for de 11 tidligere udokumenterede offentlige moduler (
allan,estimator,fom,hybrid,inertial,models,report,run,scenario,timetransfer,types). - Litteraturkilder til fem formelmoduler, der angav en ligning, men ikke nævnte nogen reference:
batch_ls(Tapley/Schutz/Born; Bjorck),cr3bp(Szebehely; Koon et al.),detection(Kay),attitude_budget(Wertz; Sidi),reentry(Allen-Eggers, NACA TR-1381). - En udgivet
security.txtpå kshana.dev til koordineret offentliggørelse af sårbarheder. - Valideringsniveau pr. kørsel på legepladsen. Tabellen over kvalitetsmål for en enkelt kørsel bærer nu en VALIDATED/MODELLED-pille pr. tal, læst fra det samme
fomTier()-opslag, som den downloadbare rapport bruger (spejlersrc/fom_label.rs, selv afledt af verifikationsmatrixen), så det niveau, der vises ved siden af et levende tal, aldrig kan være uenigt med registret. lunar-attack-surfacei legepladsens menu: alle 50 slags, der kan dispatches, er nu ét klik væk (var 49/50).- Fem flere funktionskort, der kan køres (rumvejr, evaluering af RF-forstyrrelser, robusthed, CCSDS OEM-interoperabilitet, KIF), hvilket løfter antallet af kort, der kan køres, fra 11 til 16. Kort, der kun gælder API og bibliotek, beholder et redeligt dokumentationslink i stedet for en falsk kør-knap.
Ændret#
- Dokumentationsdækningen ratcheteres nu i CI.
check-doc-coverage.shkompilerer biblioteket medmissing_docs, tæller advarslerne og fejler kun, hvis antallet stiger over et fastlåst loft (986). En hård#![warn(missing_docs)]under-D warningsville have gjort ~1000 i øjeblikket udokumenterede offentlige elementer til et byggebrud natten over; på denne måde fejler nye udokumenterede offentlige elementer buildet, mens den eksisterende bunke betales ned bevidst.
Rettet#
- MCP-værktøjets række
list_scenario_kindsreklamerede for "~17 built-in scenario kinds", mensapi::list_scenario_kinds()i nogen tid havde eksponeret 50: et agentvendt dokument, der underdrev den reelle funktion tre gange. Fastlåst til det sande antal. - Genererede formatkontrol-referencen for CycloneDX-SBOM'en igen for den opdaterede afhængighedsgraf (60 komponenter). Resultatet af formatkontrollen er uændret: nul normaliserede skemafejl, og hvert atomart licens-id er stadig i den officielle SPDX-opregning.
0.25.0 - 2026-07-15#
Tilføjet#
- Fem funktioner løftet til eksternt VALIDATED, hver nu krydskontrolleret mod en uafhængig tredjepartsimplementering af den samme entydigt definerede størrelse (ikke-cirkulært, med fixtures der kan genereres igen offline):
- Omregning fra IEEE-1139-potenslov til Allan-deviation mod lukkede former i
allantoolsfor alle fem støjtyper (tests/powerlaw_oadev_reference.rs); - CRPA MVDR / vægte for minimumsnorm-nulstyrende stråleformer mod numpy/scipy LAPACK (
tests/crpa_reference.rs); - Wahba / TRIAD / QUEST attitudebestemmelse mod SciPys SVD
Rotation.align_vectorspå støjfri observationer (tests/wahba_reference.rs); - CCSDS 502,0 OEM-udveksling af kovariansblokke kørt rundt gennem den uafhængige
oem-parser (tests/ccsds_oem_covariance_reference.rs); - kernen for detektionsstatistik ved kvadratlovsoptagelse (generaliseret Marcum-Q / P_d / P_fa / tærskel) mod SciPy
ncx2/chi2(tests/acquisition_reference.rs). Den maskinkontrollerede valideringsmatrix flytter sig til 56 VALIDATED · 42 MODELLED · 4 PARTNER på tværs af 102 rækker (var 51 · 47 · 4). Redelige forbehold om omfang er bevaret, f.eks. dækker løftet af optagelse kun kernen for detektionsstatistik; CFAR/straddling-tab forbliver MODELLED.
- Omregning fra IEEE-1139-potenslov til Allan-deviation mod lukkede former i
- Kvalitetsmål i positionsdomænet (
fom::positioning_performance): nøjagtig CEP, SEP og 2DRMS ud fra en navigationsløsnings 3D ENU-positionskovarians plus et horisontalt beskyttelsesniveau. CEP/SEP er de nøjagtige mediane radiale fejl (ikke den lineære regel0.589·(σ₁+σ₂)), krydskontrolleret mod kvantiler for rayleigh/maxwell iscipy.statsog en uafhængig median fra en NumPy-Monte-Carlo (tests/positioning_fom_reference.rs). Erstatter den tidligere redelige stub, der ikke var implementeret; funktionssignaturen ændredes fra(), der returnerede en fejl, til(cov_enu, hpl_m), der returnerer enPositioningFom. - Ækvivalente frihedsgrader (EDF) for konfidensintervaller er gjort færdige for alle estimatorer i Allan-familien (
assurance::uncertainty::edf): EDF for modificeret Allan, Hadamard og total varians bruger nu Greenhall & Rileys kombinerede EDF-algoritme og formen TOTVAR fra tabel 7 i NIST SP 1065 (tidligere var kun EDF for overlappende Allan implementeret; de andre genbrugte den stiltiende), krydskontrolleret modallantoolsedf_greenhall/edf_totdev(tests/uncertainty_edf_reference.rs). - Uafhængige eksterne krydskontroller for månens PNT-geometri, DOP, EOP, DRO og RF-afstandsmåling (
tests/validate_p*.rs, med fixtures og referencegeneratorer undertests/fixtures/{p1_footprint,lunar_service,eop_prediction,rf_ranging_precision,dro_family_jpl,p2_independent_dop}/). Hver kontrol kører en allerede leveret modelleret funktion mod en reference, der er frembragt af en anden implementering, så enigheden er ikke-cirkulær: den orbitale sende-/optagelsesfodaftryk modscipy.special.j1(Cephes, en reelt anden Bessel J1); DOP for overfladebøjers geometri mod en uafhængig NumPy-løsning af(HᵀH)⁻¹; væksten i prædiktionsfejl for UT1/EOP-persistens mod en separat NumPy-genparsning af de samme ordrette IERS-rækker ifinals2000A; den plane familie af distant retrograde baner mod NASA/JPL's Three-Body Periodic Orbit Database; og præcisionsbudgettet for RF-afstandsmåling mod en reference ud fra første principper. Disse er yderligere regressionsevidens for eksisterende moduler; at tilføje disse krydskontroltests omdøber ikke i sig selv nogen funktion (de fem løft ovenfor er separate, referencestøttede statusændringer isrc/verification.rs). - Scenariet
lunar-attack-surface(src/attack_surface.rs,kind = "lunar-attack-surface"): en sammensat, binærnåbar (CLI / Python / MCP / wasm viarun_toml) P1-kørsel af månens signalsikkerhed, der sammenstiller effektunderskuddet i linkbudgettet og dets følsomhedsbånd på 12–18 dB, den krævede sendeeffekt for jam/spoof mod afstand, det orbitale optagelsesfodaftryk under et rigtigt antennemønster, udfaldet af indtrækning ved spoof-optagelse i sporingsløkken, rækkevidden til horisonten på et legeme uden atmosfære og budgettet for OSNMA/TESLA-autentificering. Et tomt indhold gengiver P1-baselinen. - Følsomhedsbånd for effektunderskud (
linkbudget::deficit_sensitivity_band,deficit_power_factor): et ægte sweep over flere akser (reference × EIRP × skråafstand) bygget påsweep::SweepAxisog evalueret gennemreceived_signal_power_dbw, der gengiver P1-båndet på 12–18 dB og afstemmer de lineære faktorer 32× (afrundet) / 36× (uafrundet). - Tredimensional spoof-optagelseskube (
spoof_capture::capture_cube): tilføjer aksen for bærebølge-/Doppler-forskydning til optagelseskortet (J/S × kodeforskydning × bærebølgeforskydning, låsetid pr. celle); snittet med nul bærebølge reduceres nøjagtigt til den 2-Dcapture_map.
Ændret#
- Detektion i et spredt monitornetværk (
monitor_network) sammensætter nu den fysiske AGC-statistik fraspoof_monitorsog det selenografiske synlighedsgitter fralunar_servicetil at udlede hver stations detektionsstatistik og geometri, i stedet for frie parametre og et ad hoc-overlap langs storcirkler; sandsynlighederne for detektion pr. monitor og for netværket er stadig de lukkede former med chi-kvadrat/Marcum-Q fradetection. FelterneSurfaceMonitor/SpoofEventændredes til fysiske størrelser (bredde/længde/højde/effekt).
Rettet#
- Dimensionering af overhead ved OSNMA/TESLA-autentificering (
nma_budget): OSNMA-feltandelene pr. side (8-bit HKROOT + 32-bit MACK pr. side på 2 s) var fejlmærket som totaler pr. subframe, hvilket underdrev overheadet 15× (1,33 bit/s). Rettet til de udgivne totaler pr. subframe på 30 s i SIS-ICD (HKROOT 120 + MACK 480 bit ⇒ 20 bit/s). Konsekvensen angives nu redeligt: ved en navigationsrate for AFS på 50 bit/s er overheadet for autentificering en førsteordens omkostning på ≈40 %, ikke nogle få ubetydelige procent; feltetauth_latencyer dokumenteret som forsinkelsen af nøgleafsløring (en nedre grænse for tiden til første autentificerede positionsbestemmelse fra ende til ende).
0.24.0 - 2026-07-09#
En bred funktionsudgivelse. Den leverer to fuldt eksternt validerede analysesuiter, en komplet familie til multikriterie-beslutningsanalyse (MCDA) og estimatorerne for Allan-wander / langtids-τ urstabilitet, og åbner et nyt lag af scenarier, der kan køres, for månens tidsbudget, EOP/referencesystem i realtid, hybrid optik/RF, cislunar observerbarhed og lagdelt PNT-robusthed under konflikt, oven på substratet, plus et substrat af funktioner for månebøje på overfladen og signalsikkerhed. Den maskinkontrollerede valideringsmatrix vokser til 51 VALIDATED · 47 MODELLED · 4 PARTNER på tværs af 102 rækker (var 40 · 47 · 4 på tværs af 91): alle elleve nye rækker er eksterne referencevalideringer af estimatorerne for beslutningsanalyse og tidssynkronisering, kontrolleret mod uafhængige biblioteker (SciPy, pymcdm, pyDecision, allantools) til stram tolerance, mens den nye PNT-funktionsflade redeligt vises som MODELLED. Som altid opgraderes ingen numerisk modelpåstand uden et eksternt datasæt bag sig.
Tilføjet#
Scenarier, der kan køres: hvert et registreret scenarie kind, dispatchet gennem motoren og bevist fra ende til anden i CI af tests/determinism.rs (som kører hver medfølgende scenarios/*.toml og fejler hårdt på enhver fixture, der ikke kan køres):
- Lagdelt PNT-robusthed under konflikt (
conflict-resilience,src/conflict_resilience.rs): en seedet Monte-Carlo-motor for robusthed i en PNT-arkitektur med flere lag, med en overlevelsesmodel for yndefuld nedbrydning pr. vektor i §4,2 (fire navngivne trusselsvektorer, den lukkede form for overlevelse af anvendelig PNT, som hver Monte-Carlo pr. lag konvergerer mod, udskrevet i resultat-JSON'en) og dokumenteret, mod afdrift vogtet proveniens for trusselsparametre (src/conflict_threat_params.rs). MODELLED arkitekturer; konvergensen fra overlevelses-Monte-Carlo mod lukket form er den validerede kerne. - Cislunar observerbarhed (
cislunar-observability,src/cislunar_observability.rs): et egenspektrum for observerbarhedens Gramian over en bue, en differentialkorrigeret frø-generator for distant retrograde baner (DRO) og en uafhængig krydskontrol med kvadratrodsinformationsfilter, hvis posteriore kovarians bliver endelig netop ved fuld observerbar rang. MODELLED konstellation; invarianterne for rang/Gramian/STM/SRIF er den validerede kerne. - Heterogen kontinuitet og integritet i hybrid optik/RF (
hybrid-optical-rf,src/hybrid_integrity.rs,src/optical_availability.rs,src/optical_linkbudget.rs,src/cross_raim.rs): tilgængelighed og integritet på tværs af domæner, når optisk og RF-PNT kombineres. MODELLED. - Endogent tidsbudget for månen (
lunar-time-budget,src/lunar_time_budget.rs) og budget for referencesystem / EOP i realtid (realtime-frame-eop,src/realtime_frame_eop.rs,src/frame_eop.rs): tids- og jordorienteringsbudgetterne P3/P4 for månen, udledt endogent af tidskæden i stedet for påstået. MODELLED.
Eksternt validerede analysesuiter: biblioteksfunktioner, der hver kommer ind i matrixen som nye VALIDATED rækker (kontrolleret mod en uafhængig ekstern reference, ikke en selvkontrol):
- Fuld suite til multikriterie-beslutningsanalyse (MCDA) (
src/mcda/): de fire metodefamilier: værdiaggregering (WSM, WPM, WASPAS), ratiosystem (MOORA) og proportional (COPRAS), afstand til idealet (TOPSIS), kompromisprogrammering (VIKOR) og outranking (PROMETHEE II med seks former for generaliseret kriterium, ELECTRE I konkordans/diskordans), plus AHP med prioritetsvægte fra Perron-egenvektoren og Saatys gate for konsistensforhold (CR < 0,10), MAUT-nytte, udtræk af Pareto-front og analyse af vægtenes følsomhed. De ni aggregatorer gengiver pymcdm / pyDecision, og AHP-egenvektoren stemmer med SciPy/LAPACK, alt til < 1e-9 (tests/mcda_*_reference.rs). Følsomhedstornadoen vises også inde i scenariet for robusthed under konflikt. - Estimatorer for Allan-wander og langtids-τ urstabilitet (
src/allan.rs): MTIE (den peak-to-peak-statistik for tidsfejlswander i ITU-T G.810/G.823/G.8261, som synkroniseringsmasker er skrevet mod), MDEV og TDEV som wander i tidsdomænet og Theo1 / TOTVAR som estimatorer med udvidet rækkevidde. VALIDATED mod allantools på serien i NIST SP 1065; den biasfjernede hybrid ThéoH bygget på TOTVAR forbliver redeligt MODELLED. - Sikringsværktøj med ekstern reference (
src/assurance/): et referenceværktøj koblet direkte til CI-gaten for ærlighed, en W3C-PROV-proveniensoptegnelse med en deterministisk Merkle-rod og Greenhall-ækvivalente frihedsgrader + chi-kvadrat-konfidensintervaller på stabilitetsestimater. - Udvidelsessømmen PackRegistry / ExternalPack (
src/registry.rs,src/api.rs): en dispatch-søm, så funktionspakker rutes gennem ét register (indbygget dispatch ligger på CLI'ens hot path; pakker uden for træet kobles på bag etExternalPack::register_intomed standard), vogtet af en golden-testsuite for byteidentitet og standalone-/wasm32-CI-gates.
Modelleret funktionssubstrat: nye biblioteksmoduler, der fødes ind i scenarierne ovenfor og kommende (endnu ikke et selvstændigt scenarie kind):
- DOP for månebøje på overfladen (
src/lunar_beacon.rs) med budget for realiseret nøjagtighed, sweep over N satellitter og GDOP-kort, plus en forstyrret månefemeride (src/lunar_perturbed.rs) og geometri for horisont uden atmosfære / invers spoof-effekt / underskudsbånd for AFS (src/jamming.rs,src/linkbudget.rs). Genbruger den med gnss_lib_py validerede DOP-kerne. - Indlæsning af DEM i LOLA-format + sigtelinje over terræn (
src/realdata/lola_dem.rs). - Signalsikkerhedens forsvar i tre lag: spoof-optagelse, krydssensor-integritet og dimensionering af monitornetværk (
src/spoof_capture.rs,src/cross_sensor_integrity.rs,src/monitor_network.rs) med et antennefodaftryk for orbital stråle og et budget for OSNMA-autentificering (src/antenna.rs,src/nma_budget.rs). MODELLED.
Ændret#
- Valideringsmatrixen og alle afledte artefakter blev genereret igen fra den eneste sandhedskilde (
src/verification.rs): registret på siden, diagrammerne over modulkort og valideringsproveniens og README'ens/de enkelte fladers antalsstrenge står nu på 51 / 47 / 4 af 102 (var 40 / 47 / 4 af 91); vagten for ærlighed i antal scanner nu hele git-historikken, og README'ens figurer er forenet på den mørke brandpalet. - Én fælles adaptiv integrationsdriver understøtter nu både
integrateogintegrate_dopri(src/integrator.rs) og fjerner den duplikerede stepper. - Statisk analyse med SonarQube Cloud er føjet til CI (Rust + importeret dækning), med badges for rating af sikkerhed / vedligeholdelighed / pålidelighed på README'en.
- Disciplin for udgivelse / pakning: CI registrerer et udrulningsmiljø pr. udgivelse til pakke/registry, og det fokuserede offentlige standalone-job er holdt uden for de langsomme valideringsbinærer.
- Hygiejnevagten mod angivelse af ophav er afgrænset til kun markører for forfatterskab, så navngivning af en integrationsvært eller et produkt ikke længere fejler buildet.
- Dokumentation: README'ens afsnit Citing opregner nu de fire udgivne arXiv-preprints, og DOP-funktionen for overfladebøjer er dokumenteret i rækken for månen.
En passage, der nævner AI-klienter fra tredjeparter, er udeladt her; den står i CHANGELOG.md på GitHub.
Rettet#
- Heltalsløkketællere til løkker drevet af flydende tal (Sonar S2193).
- Nøjagtig invers chi-kvadrat ved få frihedsgrader via Newton-forfinelse i stien for konfidensintervaller i sikringsværktøjet.
- kshana.dev: standardsektionen åbner nu som standard, og fallbacken for registerantallet er rettet; forældede strenge i README / siden omkring observerbarhedslaget er synkroniseret.
0.23.0 - 2026-06-29#
En funktionsudgivelse, der tilføjer et almindeligt lag for Fisher-information / Cramér–Rao-observerbarhed og optimalt eksperimentdesign, og den udgivelse, artiklen om månens PNT-observerbarhed hviler på. Den maskinkontrollerede valideringsmatrix vokser til 40 VALIDATED · 47 MODELLED · 4 PARTNER på tværs af 91 rækker (var 39 · 46 · 4 på tværs af 89): den nye estimationsmotor er kontrolleret mod en ekstern reference og er VALIDATED; dens anvendelse på månen er redeligt MODELLED. Som altid opgraderes ingen numerisk modelpåstand uden et eksternt datasæt bag sig.
Tilføjet#
src/fim.rs: Fisher-information, Cramér–Rao-grænser og optimalt eksperimentdesign. En almindelig, genbrugelig motor for estimationsteori: Fisher-informationsmatrixenM = HᵀWHud fra en målejacobian og vægte; en symmetrisk egenværdiløser (cyklisk Jacobi); den nedre Cramér–Rao-grænse via den inverse eller Moore–Penrose-pseudoinversen plus en basis for nulrummet, når informationen er rangdefekt (tilfældet med frit netværk / datumdefekt); og D-, A-, E- og T-optimale metrikker for eksperimentdesign med enbest_design-vælger over kandidatgeometrier. VALIDATED mod NumPy (eigh/inv) og Kays udgivne lukkede grænser (1993) til 1e-9 (tests/fim_observability_reference.rs), så den kommer ind i matrixen som en række med ekstern reference frem for en selvkontrol.- Observerbarhed ved fælles banebestemmelse for månen (
lunar_observabilityisrc/lunar_combination.rs, vist på rapporten for månekombinationen): anvender FIM/CRLB-motoren på den fælles løsning for bane og ur for at blotlægge defekten i det absolutte stationsdatum, genoprettelsen af rangen, når stationer på Jorden som baseline tilføjes, den opnåede CRLB for stationens position og E-optimal konditionering. Redeligt MODELLED: estimationsmotoren er eksternt valideret, men det månenetværk, den anvendes på, er en repræsentativ simulering, og intet nuværende datasæt kan gøre den geometri til en måling. - Repræsentativ geometri for elliptiske frosne månebaner (ELFO) til scenariet for månekombination (
orbit_ecc,orbit_inc_deg,orbit_argp_deg,orbit_planes; cirkulær placering er stadig standard) og et observerbarhedsfelt uden VLBI på rapporten, så resultatet om datumdefekt kan vises at være geometriuafhængigt. Den samme stige 3→1→0 og tærsklen på tre stationer gælder på en ELFO i Moonlight/LCNS-familien, og med tre VLBI-baselines på Jorden er den absolutte stationsposition observerbar ved en grænse under en meter, fastlåst afelfo_geometry_confirms_the_observability_structure. Stadig MODELLED.
Ændret#
- Valideringsmatrixen og hvert genereret evidensartefakt blev genereret igen fra den eneste sandhedskilde (
src/verification.rs): registret (web/data/verification-matrix.json),docs/VERIFICATION-MATRIX.md,docs/MODELLED-RATIONALE.md, figurerne for valideringsfordeling og referencetyper og README'ens antalsstrenge på tværs af alle distributionsflader står nu på 40 / 47 / 4 af 91.
0.22.1 - 2026-06-29#
En udgivelse, der kun gælder pakning. Ingen ændringer i motor, scenarier eller resultater; valideringsmatrixen er uændret på 39 VALIDATED · 46 MODELLED · 4 PARTNER på tværs af 89 rækker.
Rettet#
- npm-udgivelse: pakkens
repository.url, afledt af crate-manifestet, brugte GitHub-ejeren med forkert store og små bogstaver (AshfordeOU), hvilket fejlede npms sigstore-verifikation af proveniens (den sammenligner ejeren med forskel på store og små bogstaver). Manifestetsrepositoryer nu den kanoniske version med små bogstaver,ashfordeOU, så den genereredepackage.jsonstemmer med proveniensens emne, og npm-udgivelsen udgives.
Ændret#
- Wheel-buildet fastlåser
codegen-units = 1, så manylinux-wheelen er bytereproducerbar på tværs af genopbygninger (reproducerbarhedskontrollen med genopbygning og diff).
0.22.0 - 2026-06-29#
En konsolideringsudgivelse med fokus på evidens, proveniens og disciplin i distribution. Den maskinkontrollerede valideringsmatrix vokser til 39 VALIDATED · 46 MODELLED · 4 PARTNER på tværs af sine 89 rækker (var 15 · 42 · 4 på tværs af 61), drevet af krydsvalidering af modellerede funktioner mod uafhængige eksterne referencer. Hvert distribueret artefakt bærer nu en kryptografisk SLSA-attestering af byggeproveniens, leveres med en CycloneDX-SBOM og udgives i takt på tværs af alle flader. Ingen numerisk modelpåstand opgraderes uden et eksternt datasæt bag sig; ny funktion forbliver redeligt MODELLED.
Tilføjet#
- Attitudedynamik (
src/attitude_dynamics.rs, MODELLED): drejningsfrie Euler-ligninger for stive legemer + kvaternionkinematik (RK4), med selvtests af bevarelseslove (kvaternionens norm, kinetisk energi, |Iω|, præcession for symmetrisk top). - Krydsvalidering af modellerede funktioner mod uafhængige eksterne referencer, der bringer valideringsmatrixen til 39 VALIDATED rækker, hver støttet af et eksternt datasæt (CI-gaten for ærlighed forbyder status VALIDATED uden et). De nyeste valideringer med ekstern reference: den målte stabilitetskurve for optiske ure (tilpasningen af ADEV-kurven i
quantum_tradegengiver den udgivne σ_y(τ) for det optiske gitterur med ⁸⁸Sr 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 af spredningskode for GPS L1 C/A (G1/G2-LFSR'en isrc/sdr.rsgengiver kodefase-oktalerne i tabel 3-Ia i IS-GPS-200 for PRN 1–9); og SRTM-læseren af digitale højdemodeller på rigtigt terræn (src/altpnt/terrain.rslæser en medfølgende SRTM v3-flise fra NASA/USGS i public domain, N36W117 / Death Valley, og placerer Badwater Basin inden for dets dokumenterede opmålingsbånd). - Nye MODELLED funktioner, hver internt krydskontrolleret mod en lukket form eller en søster-kodesti: relativ bevægelsesdynamik efter Clohessy–Wiltshire / Hill, passiv geolokalisering af sendere med TDOA/FDOA, attitudebestemmelse med Wahba/TRIAD/QUEST, løsning af heltalsmultiplicitet i GNSS-bærebølgefase (LAMBDA), B-plane-styring og patched-conic gravitationsassistance, stråleformning med CRPA-array mod jamming, statistik for optagelse af GNSS med kvadratlov, flertydighed i fringes / dynamisk område for kvante-inertialsensorer, IEEE-1139 potenslovsur-støj + flicker-FM-gulv og CCSDS-OEM-udveksling af kovariansblokke.
- Register for evidens fra én kilde med genererede verifikationsdokumenter og en vagt mod afdrift; et register over validering, der kan gennemses på kshana.dev, med dybe links til evidens pr. kort.
- Maskinlæsbare metadata til citering:
codemeta.json(CodeMeta 2,0) og.zenodo.json, fastlåst til Cargo-manifestet aftests/citation_metadata_doc_sync.rs. - Proveniens i forsyningskæden: SLSA-attestering af byggeproveniens for crate-tarballen, wheels, sdist og npm-tarballen; PyPI OIDC Trusted Publishing; CycloneDX-SBOM leveret inde i wheelen og npm-pakken; diff af reproducerbart build og verifikation efter udgivelse.
- Synlighed:
robots.txt,sitemap.xmlog metadata for Open Graph / JSON-LD på kshana.dev; en genereret figurvalidation-breakdownafledt af matrixen. - README'er pr. flade til crates.io / PyPI / npm med en vagt for ærlighed i antal.
Ændret#
- Sagnac-tidsoverførsel: referencen er løftet til ExternalDataset; Sagnac-korrektionen for en omsejling af ækvator kontrolleres nu mod Ashbys udgivne 207,4 ns (Living Reviews in Relativity 6:1, 2003, ligning 1,29; gengivet til < 0,05 ns). Den sammensatte funktion for tidsoverførsel forbliver redeligt MODELLED.
- Dokumentation, diagrammer og figurer opdateret til den levende matrix (39/46/4/89): diagrammet over valideringsproveniens, figuren
oracle-kind-stacked(nu genereret fra matrixen med en CI-vagt mod afdrift), VALIDATION/PROVENANCE/CAPABILITY/QUANTUM-MODELS/WHEEL_TAGS, arkitektur- og tutorialdokumenterne og totalen i registret på kshana.dev. - Kildetræet er omformateret med den fastlåste rustfmt (værktøjskæde 1.93.0): ren stil, ingen ændring i adfærd.
- Versionering i takt. Hver distributionsflade (crate, PyPI, npm, MCP-crate + OCI-billede, JetBrains-plugin) versioneres nu i takt med motoren, håndhævet af
scripts/check-version-sync.shi CI. - JetBrains-pluginet er omlicenseret til AGPL-3.0-only (den udgivne 0.1.1 angav stadig Apache-2.0) og udleder nu sin Marketplace-version fra udgivelsestagget.
- Hærdning af robusthed:
unwrap-kald uden for test er fjernet eller begrundet;clippy::unwrap_useder gatet på kode uden for test. - kshana.dev, en overhaling med bevis først: dominerende hero, arkitekturdiagrammer og resultatfigurer, i18n, sammenklappelige/responsive sektioner for register og standarder.
Rettet#
- SP3 præcis efemeride: anvend IGS' korrektion af jordrotationsknude under interpolation.
- Billeder i registries: README'erne for PyPI/crates.io/npm bruger absolutte billed-URL'er; den primære README's relative billedstier blev vist som ødelagte billeder på PyPI-siden for 0.21.0. En CI-vagt (
tests/surface_readme_image_urls_doc_sync.rs) forhindrer tilbagefald. - CI:
fmt+clippygrønne; hold op med at kompilere mod git-ignorerede rigtige data.
Tests#
- Kalman-urkovariansen forbliver PSD og symmetrisk (egenskabstest,
tests/property.rs). - Doc-sync-vagter: hver offentlig streng for valideringsantal, citeringsmetadata, den genererede figur og billed-URL'er i README'erne for fladerne er alle fastlåst til deres sandhedskilde.
0.21.0 - 2026-06-26#
Denne udgivelse tilføjer to MODELLED applikationssuiter til den åbne motor: en demonstrator for kvanteaktiveret PNT (betroet kvantetidsoverførsel, GNSS-fri kvantenavigation, kvantefejl-/anomalidetektion) og en PNT-suite for månen / cislunar rum (månekoordinattid, VLBI på månen, fælles banebestemmelse + ur, realisering af referencesystem, servicevolumen, differentiel PNT, interoperabilitetseksport), hver kan køres fra én kind og udskriver hver en redelig TradeEvidence-optegnelse plus et register over repræsentativitet / huller til flyvning. Den leverer også seks nye valideringer med ekstern reference, der bringer den maskinkontrollerede valideringsmatrix til 15 VALIDATED · 42 MODELLED · 4 PARTNER på tværs af dens 61 rækker. De nye applikationstal er MODELLED ud fra illustrative parametre fra offentlige kilder: ingen TRL, ingen flyvearv, ingen certificering og ingen opbakning fra et agentur, og de validerede kerner, de genbruger, er mærket som sådanne.
Tilføjet#
- Demonstratorsuite for kvanteaktiveret PNT (
quantum-time-transfer,quantum-gnss-free-nav,quantum-anomaly-detect). Tre MODELLED applikationsområder, der kan køres, bag motoren, hvert udskriverTradeEvidenceplus en optegnelse over repræsentativitet / huller til flyvning:- Betroet kvantetidsoverførsel (
src/timetransfer_chain.rs): et budget for optisk gitterur + fotonisk link mod CSAC + RF tovejs, der genbruger beskyttelsesniveauet for tidssynkronisering, med en kvalitetsmål for sikkerhed mod forsinkelses-/genafspilningsangreb (1 − P_md) og detektion af uranomali + CUSUM-latens. - GNSS-fri kvantenavigation (
src/quantum_nav_od.rs): en inertial coast med koldatominterferometer mod et INS af navigationsklasse over et GNSS-udfald, redeligt om, at uden en ekstern positionsbestemmelse forbliver accelerometerets bias uobserverbar, så fejlen stadig vokser. - Kvantefejl- / anomalidetektion (
src/quantum_faults.rs): et mærket fejlkatalog med en bootstrap-CI for ROC AUC og en mindst detekterbar fejl ved en fast falsk-alarm-rate. - Et fælles bibliotek for fejlmodeller af kvanteenheder (
src/quantum_devices.rs) og et samlet værktøj til afvejning mellem kvante og klassisk (src/qtrade.rs) ligger under alle tre.
- Betroet kvantetidsoverførsel (
- PNT-suite for månen / cislunar rum. Syv MODELLED
kind, der kan køres, lagt oven på CR3BP-kernen: månekoordinattid (sekulær rate LTC/TCL − TT,src/lunar_time.rs), observabel for forsinkelse i geodætisk VLBI på månen (src/lunar_vlbi.rs), fælles estimator med flere teknikker til banebestemmelse + ur i batch (src/lunar_combination.rs), realisering af referencesystem (7-parameter Helmert + IAU 2015 WGCCRE-binding,src/lunar_frame_realise.rs), analyse af servicevolumen i Moonlight / LCNS-klassen (src/lunar_service.rs), differentiel PNT på månen (src/lunar_dpnt.rs) og en eksport for interoperabilitet på linje med LunaNet / IOAG (CCSDS-OEM + tidsskala for månen i KIF-kuverten,src/lunar_interop.rs). Alle MODELLED ud fra illustrative parametre fra offentlige kilder; ikke valideret mod rigtig VLBI / Gateway-sporing; ingen tilknytning til eller opbakning fra et agentur. - Seks nye valideringer med ekstern reference (valideringsmatrixen står nu på 15 validerede):
- ADEV / HDEV på et rigtigt 5071A-cæsiumur: valideret mod Stable32-referencer for dekadepunkter (
tests/cs5071a_reference.rs). - OADEV / MDEV / TDEV på Stable32-referencen
PHASE.DAT: valideret mod Stable32's udgivne tabeller (tests/phasedat_reference.rs). - ROC AUC for anomalidetektion på rigtig ESA OPS-SAT-telemetri: valideret mod scikit-learn (
tests/opssat_ad_reference.rs). - Syntese af ICGEM-tyngdefunktionaler: valideret mod GRS80-standarden for normal tyngde (Somigliana γ til 3.5e-12; EGM2008-forstyrrelseskort,
tests/icgem_gravity_reference.rs). - Klobuchar-modellen for broadcast-ionosfære: valideret mod RTKLIB (
tests/klobuchar_reference.rs). - RAIM-detektionskernen (171 tilfælde,
tests/raim_reference.rs) og SBAS DO-229E-beskyttelsesniveauet på rigtige EGNOS-data (RTKLIB SBAS-PL-fork,tests/sbas_reference.rs): begge valideret mod deres eksterne referencer.
- ADEV / HDEV på et rigtigt 5071A-cæsiumur: valideret mod Stable32-referencer for dekadepunkter (
- Register over repræsentativitet og huller til flyvning (
src/representativeness.rs). En struktureret optegnelse, hver demonstrator udskriver: hvad der er repræsentativt, hvad der er forenklet, og hvad der står mellem modellen og flyvning, den redelige ledsager til hver MODELLED afvejning. - Aggregering af studier og ergonomi i CLI. Et manifest for scenariesuiter med aggregering af studier med én kommando, hash-stabile studiemetadata +
--study-name, linting af scenarier med--validateog visning af valideringsniveau pr. kvalitetsmål i studierapporter.
Ændret#
- kshana.dev er redesignet omkring en fælles domænerygrad: funktioner og validering samlet i én domæneudforsker med et fælles ordforråd, de nye validerede øer vist, et landnøjagtigt animeret jordinstrument og en CTA til at bestille et studie, samt brandingen/linkene for Ashforde OÜ.
- README + ARCHITECTURE gennemgået for fuldstændighed og ærlighed: forældede antal validerede rettet (nu 15 eksterne referencer), diagrammerne udvidet, og preprintsene om det betingede beskyttelsesniveau for tidssynkronisering (arXiv:2606,24210) og optimismegabet for RF-forstyrrelser (arXiv:2606,22054) citeret.
- Kilderne i
paper/og JOSS-udkastets pipeline opbevares i det offentlige repo.
0.20.0 - 2026-06-22#
Denne udgivelse tilføjer fire studiefunktioner til den åbne motor: et betinget beskyttelsesniveau for tidssynkronisering, scoring af PNT-robusthed på linje med rammeværk, en evaluering af optimismegabet for RF-forstyrrelser og en software-defineret modtager / frontend til rigtige data, hver kan gengives fra én kommando og skriver et bytedeterministisk artefakt. Alle studier er MODELLED (syntetisk eller kalibrering mod offentligt datasæt), bærer deres redelige proveniens (motorversion, seeds, konfigurationshash) og valideringsmærker og er ikke certificeringer.
Tilføjet#
- Betinget beskyttelsesniveau for tidssynkronisering (
tpl). En grænse begrænset af holdover for den uopdagede tidsfejl under GNSS-spoofing, med et k-sigma-gulv for monitoren, en van Loan-coastvarians over detektionslatensen og en CUSUM-tid til alarm. Kalibreret på et rigtigt optaget angreb (JammerTest 2024, scenarie 2.1.1) viacargo run --release --example tpl_jammertest, der gengiver dens referencetabel ud fra skalarer genvundet fra den offentlige optagelse (det rå datasæt videredistribueres ikke). - Scoring af PNT-robusthed på linje med rammeværk + studie af beslutningsinstabilitet (
resilience). Arkitekturmodel, scoring på linje med RPCF, Dirichlet-vægtsimplex, Kendall-tau og instabilitet i flip-rate for top 1 og kollaps af diversitet i fælles tilstand (Hill-N2), medcargo run --release --example resilience_report -- paper-artifacts/resilience-study.json. Krydsreference idocs/RESILIENCE-CROSSWALK.md. - Studie af optimismegab for RF-forstyrrelser (
impairment_study,impairment_ml,eval_stats). Et panel af 13 detektorer over et parameterfunderet syntetisk korpus, et optimismegab mellem i og uden for distributionen, trends i skaleringslove med en permutationsnul og en leave-one-out-prædiktor for nedbrydning, viacargo run --release --example optimism_study -- paper-artifacts/optimism-study.json. - Frontend til software-defineret modtager (
sdr) og adaptere til rigtige data (realdata/). Rå IQ/IF til korrelatortaps og SQM, plus adaptere til indlæsning (RINEX, u-blox UBX, GnssLogger, JammerTest, Yunnan, SatGrid) og probe-eksempler. De læser optagelser, brugeren selv leverer lokalt; ingen optagelser committes. - Committede studieartefakter. De bytedeterministiske
optimism-study.jsonogresilience-study.jsonspores nu underpaper-artifacts/, så studietallene kan kontrolleres uden at bygge igen; de kan stadig genereres igen fra generatorerne ovenfor. Rå datasæt bliver uden for repoet (/realdata-cache/).
Ændret#
- Versionen er forhøjet til 0.20.0 på tværs af
Cargo.toml,CITATION.cffogREADME; artefakterne til crossover-studiet er genereret igen, så deres stempel stemmer med den udgivne version.
0.19.0 - 2026-06-18#
Ændret#
- Omlicenseret fra Apache-2.0 til GNU AGPL-3.0-only, med en kommerciel licens tilgængelig fra Ashforde OÜ (dobbeltlicensering). Den åbne motor forbliver fuldt åben og offentligt verificerbar; AGPL's netværks-copyleft (§13) betyder, at en lukket eller hostet afledt udgave skal vende tilbage til open source, eller tage en kommerciel licens. Det forsvarer den validerede kerne mod fork-og-luk og bevarer samtidig troværdigheden af en offentlig, kørbar og kontrollerbar motor. Se
LICENSE(AGPL) og den nyeLICENSING.md(hvad hver licens dækker, og hvornår den gælder).LICENSEindeholder nu AGPL-3.0-teksten; SPDX-headere i alle kilder er opdateret tilAGPL-3.0-only;NOTICE,README,GOVERNANCE,GLOSSARY, hjemmesiden og metadata for crate/pakker (Cargo.toml,pyproject.toml,CITATION.cff, MCP-craten + billedet) er opdateret tilsvarende.- Bidragsydervilkår (
CONTRIBUTING.md) licenserer nu indgående bidrag under AGPL og giver Ashforde OÜ ret til at inkludere bidrag i den kommercielt licenserede udgave, så dobbeltlicensen bliver ved med at virke. - Afhængighedspolitikken er uændret, men begrundet påny (
deny.toml,GOVERNANCE): afhængigheder forbliver permissive (Apache/MIT/BSD/ISC). AGPL tillades kun for kshanas eget crate: en copyleft-afhængighed ville smitte den kommercielle udgave og bryde dobbeltlicensering. - Note til downstream: dette er en copyleft-omlicensering. Brugere, der har støttet sig til de permissive vilkår i Apache-2.0, kan fortsætte med at bruge den sidste Apache-2.0-udgivelse (
v0.18.0og tidligere, som udgivet); frav0.19.0og frem er det AGPL-3.0 / kommerciel.
Sikkerhed#
- Forhøjede
pyo30,24 → 0,29 for at fjerne RUSTSEC-2026-0176 / RUSTSEC-2026-0177 (GHSA-36hh-v3qg-5jq4 / GHSA-chgr-c6px-7xpp) fra eksterne OSV-/afhængighedsscanninger. Begge er bulletiner på funktionsniveau, hvis berørte funktioner (BoundList/TupleIterator::nth/nth_back,PyCFunction::new_closure) Kshana aldrig kalder, ogpyo3er en valgfri afhængighed (funktionenpython), så den reelle eksponering var nul, men forhøjelsen bevarer en ren scanning for downstream-revisorer. Migreredesrc/python.rstil API'et i pyo3 0,29 (returtypen Bound forscenario_kinds; eksplicitskip_from_py_objectpå pyclass'enRunOutput). Alle 11 tests af Python-bindingen består mod den genopbyggede udvidelse.
0.18.0 - 2026-06-17#
Tilføjet#
Elleve nye scenarieslags, der kan køres: demonstratorer for to udbud, en CCSDS-interoperabilitetsbro og en suite for missionsanalyse / miljø af første orden (alle MODELLED, additive; eksisterende reproducerbarhedsgoldens er uændrede). Hver kan dispatches fra CLI / Python / WASM / MCP, leveres med en
scenarios/<kind>.tomlog bærer et eksplicit MODELLED mærke i sin resultat-JSON og enlinjeoversigt (en test pr. slags itests/dominance_demonstrators.rshævder, at mærket er til stede, og at outputtet aldrig indeholder strengenVALIDATED):impairment-eval(src/impairment_eval.rs): testbænk til evaluering af maskinlæringsbaseret detektion af RF-forstyrrelser: et mærket syntetisk korpus + en detektoruafhængig ROC/AUC-harness + en rapport om optimismegab mellem i og uden for distributionen (kun operationelle karakteristika, aldrig felt-/IQ-data).quantum-trade(src/quantum_trade.rs): afvejning mellem kvante og klassisk PNT med indlæsning af målt ADEV og en robusthedskuvert uden GNSS.space-weather(src/space_weather.rs): sol-/geomagnetiske indekser (IAGA-tabellen Kp↔ap, daglig Ap, centreret 81-dages F10.7a), eksosfærisk temperatur efter Jacchia-71 og en aktivitetsdrevet kobling til termosfærisk massefylde over en statisk atmosfære (IKKE en model for absolut massefylde som NRLMSISE).oem-interop(src/oem.rs): CCSDS 502,0 OEM-import + rundturs-bro for efemerider fra GMAT / Orekit / STK (læserenparse_oem, den nøjagtige inverse af skriveren).launch-window(src/launch.rs): totlegemers opsendelsesazimut (sin Az = cos i/cos lat), Δv for planskifte, bonus fra stedets rotation og geometri for daglige muligheder.reentry(src/reentry.rs): ballistisk korridor for nedstyrtning efter Allen-Eggers: maksimal deceleration, hastigheder ved maksimal g og maksimal opvarmning, højde ved maksimal g.eo-coverage(src/eo_payload.rs): geometri for EO med swath / GSD / adgang / revisit (SMAD-rumtrekant).space-packet(src/space_packet.rs): kodning/afkodning af primær header i CCSDS 133.0-B Space Packet med bitnøjagtig rundtur.attitude-budget(src/attitude_budget.rs): 3-DOF drejningsmoment fra tyngdegradient + RSS-budget for pegefejl (skalarbudget før hardware, ikke en reguleringssløjfe).passes(src/passes.rs): prædiktion af op-/nedgang for passager over jordstation (AOS/TCA/LOS, maksimal elevation, adgang).link-budget(src/linkbudget.rs): envejs linjeligning efter CCSDS-401 / DSN-810-005 (C/N₀ = EIRP − FSPL − L_other + G/T − k, FSPL / Eb·N₀ / margen / lukning).
Hybrid UKF med 17 tilstande, kvante + klassisk, tæt koblet: gjort til et scenarie, der kan køres (MODELLED). En ny scenarieslags
hybrid-ukf(src/fusion/hybrid_ukf.rs,scenarios/hybrid-ukf.toml), der gør det tidligere kun-API-baserede ukendt-filter (unscented) med 17 tilstande for tæt koblet GNSS/INS (src/fusion/tightly_coupled17.rs) til et scenarie, som bindingerne til CLI/Python/WASM/MCP kan dispatche. Fejlvektoren med 17 tilstande er de 15 INS-fejltilstande (position, hastighed, attitudeskævhed, accelerometer- + gyrobias) udvidet med den CAI-afledte korrektion af accelerometerbias: koldatominterferometret (src/inertial/quantum_imu.rs) sætter gulvet for hastighedens random walkq_va, så driften ved lang coast er den, kvantesensoren begrænser, og et ur med 2 tilstande, fase + frekvens, hvis processtøj kommer fra q-parameter-urmotoren (clock_state::q_from_allan, der afbilder et urs Allan-deviationsprofil til PSD'erneq_wf/q_rw, skaleret til afstandsenheder). Platformen er GNSS-støttet i en indledning (filteret lærer biaser, hastighed og ur) og coaster derefter gennem et GNSS-udfald alene på CAI-IMU og ur, så kørslen demonstrerer klassisk IMU på kort sigt + kvante på langt sigt som hybrid. Kvalitetsmålet er filterets selvkonsistens: samlet NEES (Normalised Estimation Error Squared, over den estimerbare delmængde af position/hastighed/ur) og innovationshvidhed NIS (Normalised Innovation Squared) over et Monte-Carlo-ensemble, kontrolleret mod deres 95%-bånd for χ² (Bar-Shalom §5,4). Det matchede filter lander inden for båndene; et med vilje fejljusteret filter (knapperneq_factor/r_factor) markeres: en objektivt kontrollerbar, skelnende gate, ikke en gummistempling. Kontrollen af NEES/innovationshvidhed er den STATISTISKE REFERENCE: en påstand om selvkonsistens (filterets rapporterede kovarians svarer redeligt til spredningen af dets egne fejl under den modellerede støj), IKKE en garanti for nøjagtighed i den virkelige verden. Redeligt omfang: alt er modelleret / simulering; CAI- og urinputtene er afgrænsede værdier, repræsentative for litteraturen, ikke målt hardware; CAI-hardwaren og dens nøgleperson forbliver ejet af partneren; intet her antyder TRL > 3, flyvearv eller ekstern validering (resultat-JSON'en og enlinjeoversigten bærer disse mærker eksplicit). Den ene bane med konstant hastighed i plan gør attitude- og IMU-biastilstandene kun svagt observerbare, så NEES vurderes over de 8 estimerbare tilstande; en manøvrerende bane til fuld observerbarhed af alle 17 er på køreplanen. Tilføjer også instrumentering af konsistens iUkf::update_stats(returnerer NIS pr. opdatering) ogTightlyCoupled17::{update_gnss_nis, nees, nees_subset}. Alle eksisterende scenarier er upåvirket (additivt; reproducerbarhedsgoldens uændrede).Sekventiel (rekursiv) terrænreferenceret navigation: SITAN som et løbende filter. En ny scenarieslags
terrain-slam(src/altpnt/sequential.rs,scenarios/terrain-slam.toml), der kører den eksisterende målemodel for højdemåler mod DEM epoke for epoke gennem SIR-motorenparticle_filteri stedet for den grov-til-fin-søgning i batch, somterrain-navbruger til at genfinde en enkelt konstant INS-forskydning. Ved hvert waypoint propageres skyen med det INS-rapporterede tillæg (selv forvansket af væksten i drift pr. trin), vægtes om efter terrænmatchet og resamples ved degeneration, så en tidsvarierende INS-drift følges langs sporet, hvilket en tilpasning med konstant forskydning strukturelt ikke kan. På den syntetiske DEM forbliver det rekursive estimat begrænset og konvergerer igen (slut ≈ 70 m), mens den uunderstøttede inertialløsning divergerer ubegrænset til ≈ 5 km; fejlen pr. epoke følger terrænets særpræg (den coaster på det biasede INS over flade sadler og låser igen over udpræget relief), og monitoren for effektiv stikprøvestørrelse bekræfter en sund sky. Redeligt omfang: kortet er kendt og fast, rekursiv lokalisering mod en lagret DEM (lokaliseringshalvdelen af terræn-SLAM), ikke fælles estimation af kortet; ikke-cirkulær ved konstruktion (den indsprøjtede driftrampe er den uafhængige reference). Alle eksisterende scenarier er upåvirket (additivt; reproducerbarhedsgoldens uændrede).Rygrad for robusthed uden GNSS + skiver af FutureNAV-demonstratoren (
src/holdover.rsog fundamenter for robusthedskuvert undersrc/impairment_eval.rs,src/quantum_trade.rs,src/navsignal.rs,src/inertial/quantum_imu.rs, med verifikationsskiver for FutureNAV isrc/verification.rs). Sammensætter byggeklodserne til alternativ PNT (urets holdover, signalsporing, inertial coast, terræn) til én fortælling om robusthed ved GNSS-udfald. MODELLED; additivt.Kshana Interchange Format (KIF): en versioneret, selvbeskrivende kuvert til artefakter (
src/interchange.rs). En skemamærket indpakning om scenarieresultater, så et lagret artefakt bærer sin slags, skemaversion og mærkerne MODELLED/VALIDATED med sig, og ældre kuverter forbliver læsbare med fremadrettet kompatibilitet. Additivt; eksisterende resultat-JSON uændret.Modulation / sporing af navigationssignal + differentialkorrektor for CR3BP-halo/NRHO (
src/navsignal.rs,src/cr3bp.rs). En model af første orden for modulation og sporing af navigationssignal og en differentialkorrektor for det cirkulære begrænsede trelegemeproblem til halo-baner / næsten retlinede halo-baner, vist på den eksisterende akse for dybt rum. MODELLED.Evalueringstilstand for distributionsskift + knap for korpussets alvorlighedsskala til
impairment-eval(src/impairment_eval.rs). Tilføjer en eksplicit opdeling i og uden for distributionen og en justerbar alvorlighedsskala for korpus til ROC/AUC-harnessen for optimismegab (kun operationelle karakteristika, aldrig felt-/IQ-data).ROI pr. dækning i omkostning + afbildning af integritetspåvirkning ved udeblevet detektion (
src/frugal.rs,src/integrity_impact.rs). Et ROI-perspektiv for frugal engineering (omkostning pr. enhed dækning) og en afbildning fra rate for udeblevet detektion til integritetspåvirkning. MODELLED; additivt.Citeret parameterark for fejlmodel for koldatominterferometer (CAI) (
src/inertial/quantum_imu.rs). Et parameterark med litteraturhenvisninger og afgrænsede værdier for den inertiale CAI-model: inputtene er citeret, ikke målt hardware (ingen TRL- eller flyvepåstand); det fødes ind i gulvet for hastighedens random walk ihybrid-ukf.Projektets styring.
GOVERNANCE.md, der dokumenterer beslutningsmodellen og grænsen mellem åbent og lukket; funktionskortets række for fællesskab/styring flytter sig franone → partialfor at afspejle det.
Rettet#
Beskyttelsesniveau for ARAIM-integritet: nominel bias (
b_nom) og σ_URA anvendes nu. MHSS-beskyttelsesniveauet trækker nu den ensidige projektion af nominel biasb_k = Σ_i |s_i|·b_nomfra pr. fejltilstand og bruger integritets-sigmaet σ_URA (adskilt fra nøjagtigheds-sigmaet σ_URE), som bæres på Integrity Support Message. Det gør beskyttelsesniveauet mere konservativt og korrekt efter standarderne og ændrer derfor PL-værdierne, som eksisterende integritetsscenarier rapporterer. ISM/scenariet får felterne#[serde(default)]sigma_ura_m/b_nom_m, så input, der lader dem stå usat, beholder den tidligere adfærd. Sedocs/ARAIM_REFERENCE.mdfor den genoprettede formelb_kog den redelige implementeringsnote.Spoof-monitorens χ²-konsistens.
parity_raim_testbruger nu den fælles stiraim::chi2_quantilefor invers χ², hvilket fjerner en anden, afvigende χ²-implementering, så RAIM og paritetsmonitoren for spoofing er enige om deres tærskler.gravity-map-navkoblet til CLI-dispatcheren. Scenariet kunne tidligere kun nås gennem API'et; det dispatches nu som enkind=som hvert andet scenarie.Dokumentation/korrekt antal. Antallet af scenarietyper i README er nu knyttet til
api::list_scenario_kinds().len()af enscenario_count_doc_sync-test, så det dokumenterede antal ikke længere kan afvige fra dispatcheren.
0.17.0 - 2026-06-14#
Tilføjet#
- Dybrums- og Mars-PNT — åben radiometrisk navigationsmotor + GSE-simulering. En ny, rent additiv funktionsakse oven på den Jord-validerede kerne (hvert eksisterende Jord-scenarie er byte-identisk — reproducerbarhedens golden-filer består uændret uden regenerering). Tilføjer: en dynamikkerne for flere legemer (
Body{mu, re, zonals, gravity, rotation, IAU-pole}med tesseral tyngdekraft for Mars GMM-3, et IAU-legemefast Mars-referencesystem, en udskifteligEphemerisProvider-søm, to-delte Julian-datoer med præcision under et mikrosekund og TT↔TDB); radiometriske observable (iterativ lystid + Shapiro-forsinkelse, to-/en-/tovejs Doppler og afstand via Moyers to-benede løsning, koherent transponder-omdrejning, regenerativ/PN-afstandsmåling efter CCSDS 414, Δ-DOR efter CCSDS 506, medier som solplasma, troposfære og ionosfære); parsing og udskrivning af CCSDS-TDM (503); et reduceret-dynamisk kvadratrods-informationsfilter med empiriske RTN-accelerationer, et ur med tre tilstande om bord og en Mars-modstandsmodel; en fælles estimator, der fusionerer envejs- og tovejsmåling; scenarieoverfladenmars-pnt(relækonstellation + LMO/transfer/overflade) på tværs af CLI, Python, WASM, MCP og playground; og en ende-til-ende-simulator for GSE-ydeevne (geometri → linkbudget → observable → SRIF → kovarians). Valideringsniveau — valideret ved simulering: syntetisk lukket-sløjfe-OD (Mars-LMO ≈ 0,2 m) og analytisk selvkonsistens, hvor den Sol-centrerede Mars-dynamik uafhængigt er krydstjekket mod JPL DE440 (xval/anise-mars-od, kun med kerne: 137 m @ 1-dages bue, den ærlige umodellerede n-legeme-rest). De rapporterede dybrumsnøjagtigheder er simulerings- og kovarianskvalitetsmål, ikke resultater fra rigtige missioner; validering mod rigtige DSN/ESTRACK-sporingsdata står stadig på køreplanen. ANISE (MPL-2.0, edition-2024) er afgrænset til en krydstjek-crate uden for workspace, så licensportencargo denyog MSRV-1.75-jobbet er urørte. - Sporet på jorden med myndighedsnøjagtighed ud fra reel IERS-jordorientering. Scenariet
ephemeristager et valgfrit felteop_finals2000a— selve indholdet af en reel IERS-finals2000A-fil, indlejret — og reducerer sporet på jorden gennem UT1−UTC og polbevægelse for hver epoke, interpoleret herfra (den sammeEopSeries, somprecise_odbruger), og tilsidesætter de nominelle skalarerdut1_s/xp_arcsec/yp_arcsec. Dataene følger med i scenariet, så kørslen forbliver reproducerbar og ikke kræver noget filsystem (den virker i WASM-playground). Et flagkshana --eop <finals2000A>folder en reel fil ind i scenariet fra CLI. Det lukker den skævhed, at kunprecise_odbrugte reelle jordorienteringsdata.
Rettet#
- Konsistent referencesystem for afstandsrate. Jordstationen afbildes nu ind i det inertielle system gennem den præcise inverse af satellittens reduktion (
frames::itrf_to_teme, som fortryder både polbevægelse og den sideriske rotation) i stedet for en GMST-rotation uden polbevægelse, så begge endepunkter deler ét system. Virkningen på den rapporterede Doppler ligger under valideringsgulvet, men den fjerner en reel systemforskel og en overdrivelse af "præcis" i kilden. carrier_hzvalideres. En bærefrekvens på nul eller en ikke-endelig værdi giver nu en fejl i stedet for i tavshed at give nul Doppler (det havde gjort λ = c/bærefrekvens uendelig), på linje med den eksisterende kontrol afstep_s.
0.16.0 - 2026-06-11#
Tilføjet#
- Validering af kraftmodellen ved efemeridetilpasning, krydsvalideret mod reelle myndighedsprodukter. En ny batch-estimator med mindste kvadrater (
src/precise_od.rs) med en variationel tilstandsovergangsmatrix og redigering af outliers, drevet af en fuld kraftmodel (PreciseForceModel: EGM2008-geopotential, tredjelegemer, faste + oceaniske + atmosfæriske tidevand og empiriske CPR/2-per-omløb-accelerationer), fodret af en reel IERS-finals2000A-parser for jordorientering. Valideret mod publicerede referencebaner: Galileo MEO til 13 cm efter tilpasning, ESA Swarm-A LEO og LRO måne (selenocentrisk, GRAIL-tyngdefelt, IAU-2015-legemefast system — reduceret-dynamisk 6,6 m, ærligt over målet på 5 m på den åbne vej; DE-klassens ANISE/DE440-vej, som når det, er en crate uden for workspace). - Scenariet
spoof-detect— en integreret spoofing-detektor i flere lag, der kombinerer RAIM-paritet for hver epoke, AGC- og signalkvalitetsmonitorer (SQM) og en fusioneret beslutning, valideret mod de publicerede scenarieparametre for TEXBAT (Humphreys m.fl., ION GNSS 2012), herunder det svære tilfælde med bærebølgejustering. - Scenariet
ephemeris— tilstand, referencesystemer, spor på jorden og Doppler. Propagér én satellit (TLE→SGP4 eller en analytisk bane) og udskriv for hvert trin den inertielle TEME- og GCRS-tilstand (position og hastighed), den jordfaste ITRF/ECEF-position, WGS-84-sporet på jorden under satellitten (bredde / længde / højde) og det topocentriske azimut / elevation / afstand med afstandsrate og Doppler fra en jordstation. Kan nås fra CLI, Python, WASM og MCP-serveren og leveres som forudindstillingen "Ground track" i web-playground, hvor sporet tegnes over et rigtigt verdenskort (Natural Earth 1:110m-kystlinjer, indlejret — uden netværk eller eksterne afhængigheder). - CCSDS OEM-eksport (
--export-oem/export_oem = true) — den hastighedsbærende Orbit Ephemeris Message, som GMAT / Orekit / STK bruger, på niveau med de eksisterende SP3- og OMM-eksportører. - Faste, oceaniske (FES2004) og atmosfæriske (Ray 2001 S2) jordtidevand på geopotentialet (IERS Conventions kap. 6), koblet ind i kraftmodellen.
- ARM64-wheels — PyPI-buildet producerer nu også wheels til Linux aarch64 (manylinux_2_28), macOS arm64 og Windows arm64.
- Udvidet teknisk rapport (preprint) med link fra README, og JOSS-artiklen gjort klar til indsendelse (forfatterens ORCID, kompileret til PDF i CI ved hver ændring).
Ændret#
- Referencesystemer valideret til millimeteren mod publicerede Vallado-vektorer. Reduktionen TEME→PEF/ITRF, hele CIO IAU 2006/2000A GCRS→ITRS-kæden og konverteringen ECEF→geodætisk WGS-84 er nu fastlåst til det gennemregnede eksempel i Vallado m.fl. (AIAA 2006-6753) med dets IERS EOP, ikke blot til intern selvkonsistens.
- Uafhængige krydstjek af tidsskalaer. ERA og skalaerne UTC/TAI/TT stemmer med
hifitimetil < 1 µs, og planeteefemeriden DE440 stemmer med JPL Horizons (geocentriske positioner for Måne/Sol), begge som altid-aktive CI-porte. - Web-playground skjuler fanen med kvalitetsmål, når et resultat ikke har nogen rækker med kvalitetsmål, så bevispakker med kun diagram (efemeride, RAIM, spoof) åbner på deres diagram — for efemeride på sporet på jorden — i stedet for en tom tabel.
- Playgroundens vejledte skydere og parametersweep virker nu for scenariet efemeride / spor på jorden: dets parametre (stationens bredde / længde, tidstrin, varighed, UT1−UTC) kan justeres, og et sweep kan afbilde overflyvningens geometri (maksimal elevation, spidsværdi for Doppler, højde, hastighed) mod hver af dem — fx maksimal elevation mod stationens bredde. Fanen Sweep vises nu kun, når et scenarie faktisk kan sweepes, så ingen bevispakke tilbyder en styring, der ikke afbilder noget.
- Dokumenterede SGP4-tilnærmelsen
DUT1 ≈ 0ved GMST-kaldet (en rotationsfejl på ≤ ~13″, godt inden for SGP4's egen modelfejl) og opdateredeCAPABILITY.md.
0.15.1 - 2026-06-09#
Tilføjet#
- JetBrains-pluginet Kshana — PNT simulator er nu udgivet og accepteret på JetBrains Marketplace. README,
kshana.devog distributionsdokumentationen linker direkte til det.
Rettet#
- Udgivelse i MCP-registret lykkes nu:
server.jsondescriptionvar over registrets grænse på 100 tegn (HTTP 422). Den er forkortet, og servernavnet (og imagets ejerskabsmærke) er rettet til det kanoniske navnerumio.github.ashfordeOU/kshana-mcp. - Udgivelse på JetBrains Marketplace lykkes nu: CI uploadede igen den samme pluginversion, som allerede var oplistet manuelt, hvilket Marketplace afviser. Pluginversionen er hævet til
0.1.1, og idempotensvagten behandler nu også svaret "already contains version" som en vellykket no-op. kshana.dev: cache-busting: de versionsstemplede query-strenge tilstyle.css/app.jsfølger udgivelsen, så tilbagevendende besøgende altid får den aktuelle build.
0.15.0 - 2026-06-08#
Tilføjet#
kshana-mcp— Kshana som en Model Context Protocol (MCP)-server (mcp/kshana-mcp/). En selvstændig crate uden for workspace (SDK'enrmcper edition 2024), der stiller den validerede motor til rådighed for AI-agenter og assistenter — Cursor, JetBrains AI Assistant / Junie og enhver MCP-klient — over stdio. Værktøjer:run_scenario,list_scenario_kinds,validate_scenario,export_sp3,export_omm, alle et tyndt lag overkshana::api.- JetBrains IDE-plugin (
ide/jetbrains/). Højreklik på et scenarie.toml→ Run Kshana Scenario; kvalitetsmål og resultat-JSON streames ind i et Kshana-værktøjsvindue. Rent platformsbaseret Kotlin-plugin, kompatibelt med alle JetBrains IDE'er 2024,3+. - Offentlig distribution + automatisk udgivelse ved hver release for begge:
kshana-mcptil crates.io (cargo install kshana-mcp) viapublish.yml.kshana-mcpsom et multi-arch-OCI-image påghcr.io(docker run ghcr.io/ashfordeou/kshana-mcp) via en nymcp-publish.yml.kshana-mcptil det officielle MCP-register via GitHub OIDC (ingen hemmeligheder); registerposten (server.json) bruger OCI-pakketypen med en etiketverificeret ejer.- IDE-pluginet til JetBrains Marketplace via
publishPlugin(låst bag token, valgfri udviklersignering) ved hvert release-tag.
0.14.1 - 2026-06-08#
Tilføjet#
- Uafhængig krydsvalidering af referencesystemer med ANISE/SPICE (
xval/anise-frames/). En selvstændig crate uden for workspace krydstjekker IAU 2006/2000A CIO-reduktionen ikshana(kshana::cio::gcrs_to_itrs_matrix, GCRS→ITRS) mod ANISE (den rene Rust-genimplementering af NAIF/SPICE), som roterer GCRF→ITRF93 ud fra JPL'searth_latest_high_prec.bpc, med de samme IERSfinals2000A-jordorienteringsparametre givet til begge sider, over otte kvartalsvise epoker 2020–2023. De to uafhængige realiseringer af referencesystemet stemmer til en maksimal relativ rotation på 0,028″ — ≤ 0,86 m på jorden, ≤ 0,93 m i LEO, ≤ 3,6 m i GNSS-bane og ligger dermed med stor margin inden for det mangeårige krydstjek af referencesystemet i ROADMAP på "< 10 m" (det supplerer de eksisterende bit-for-bit-ankre fra SOFA/ERFA og erstatter dem ikke). Craten er isoleret, fordianise+hifitimeer MPL-2.0 / edition-2024 og aldrig må komme ind i den publicerede afhængighedsgraf forkshana, densCargo.lock, licensportencargo denyeller MSRV-buildet; ANISE er låst meddefault-features = false. Omfatter en binærframe-xval(henter den ~5 MB store BPC, udskriver en tabel, skriverreport.{json,md}), en testport, der selv springer over uden kerne/netværk, og et valgfrit CI-job kun medworkflow_dispatch(blokerer aldrigmain). Dokumenteret idocs/VALIDATION.md(CIO-rækken) ogROADMAP.md.
Rettet#
- Mobilvenlig playground. Rettede vandret overløb af playgroundens
.panelpå telefoner (et CSS-grid-element, der som standard harmin-width: auto, blev gengivet ~100 px bredere end viewporten) viamin-width: 0og breddebeskyttede styringer; kontrolleret rent ved 360 / 390 / 414 / 768 px. Justerede handlingsknapperne "Pin to compare" / "Download report" (lige store marginbokse i flex-rækken). Forstørrede kørselsknapper, skydere, udvalgslister og navigationslinks til ~44 px, minimum for berøringsmål efter WCAG 2.5.5 / Apple HIG, på telefoner og berøringsenheder, mens størrelserne på skrivebordet er uændrede.
0.14.0 - 2026-06-08#
Rettet#
- Robusthedsstyrkelse fra en modstridende kamptestgennemgang. (1)
sbas_protection_levelafviser nu elevation/azimut/varians, der ikke er endelige, og negative eller ikke-endelige diagonaler i kovariansen (en næsten singulær geometri skaleret op med lille σ kunne tidligere slippe forbi den absolutte pivotport og returnere et NaN-VPL / et absurd HPL som en gyldigSome— en tavs integritetsfejl). (2) Den numeriske propagator (propagate/propagate_dopri) fejler lukket ved en begyndelsestilstand, der ikke er endelig, i stedet for at lade den adaptive regulator snurre for evigt. (3) DEM-cellehjælperen går ikke længere i panik ved et gitter med én prøve (1×N). (4) Azimut forlunar_look_angleholdes strengt i[0, 360). (5)SphericalHarmonicField::from_gfcafviser ikke-fysisk (NaN / ikke-positiv)GM/radius.
Tilføjet#
- Binær
validation_report+ release-artefakt: en afhængighedsfri generator, der udskriver et trykklart HTML-valideringsresumé på én side, som indekserer hver CI-håndhævet validering (SGP4 666/666, EGM2008, bit-for-bit-referencesystemer, NIST Allan, IMU-datablade, ARAIM/SBAS, reproducerbarhed på 3 OS, dækning) til dens test og eksterne uafhængige reference. Release-workflowet generererkshana-validation-summary.htmlog vedhæfter den (med SLSA-proveniens) til hvert mærket release. - numpy-interop pytest + styrkelse af wheel:
tests/python/test_numpy_interop.py(køres i CI) plus en fastlåst manylinux-container og et verifikationstrin medauditwheel showi wheel-buildet. - Tutorials og uddannelse:
docs/tutorials/(tre gennemregnede tutorials, annoterede scenarier for hvert domæne, øvelser på niveau 1/2/3) medtests/tutorials.rs, som fastlåser hvert citeret tal til motorens aktuelle output. - Eksterne indsendelsesartefakter (
paper/,notebooks/,submissions/): et udkast til en JOSS-artikel, en notebook om kvante mod klassisk og indsendelsessæt klar til awesome-gnss / ESA Navipedia / NASA ASCL / ESA ESSR / ION/IAC, plusFUNDING.yml— de eksterne trin forberedt til indsendelse. - Terrænreferenceret og kombineret alt-PNT-navigation (modulet
altpnt): en TERCOM/SITAN-terrænmatchende navigator over en DEM (indlæser til.hgt+ generator af syntetiske fixtures) og en kombineret navigator uden GPS med tyngdekraft + magnetfelt (IGRF) + terræn, tilgængelig som scenarietyperneterrain-navogcombined-altpnt. Valideret ved konvergens af terrænmatchningen (en kendt tilført forskydning blev genfundet) og en afgrænset fejl i det kombinerede filter over et vindue uden GPS. - LunaNet LANS-geometri (
lunar): navngivne steder på månens overflade (Apollo 11/15/16, Shackleton-randen) med autoritative selenografiske koordinater, udsigtsvinkler fra overfladen (az/el/afstand), sigtbarhed/dækning og DOP for stedet, valideret mod Månens radius, de publicerede stedkoordinater og identiteten for elevation på 90° ved radial overhead. - Vejledt playground i browseren: skydere i vejledt tilstand, et output-panel med faner, et rundvisningsoverlay ved første kørsel, tilstande for parametersweep og overlay af flere kørsler, en afhængighedsfri 3D-banevisning i canvas/SVG (bane-bevispakken udskriver nu en additiv
eci_track), en embed/iframe-tilstand og download som HTML-rapport — hver med node-enhedstest i CI. - Fejlmodel for IMU valideret mod datablade (
tests/imu_allan_spec.rs): ARW/VRW/bias-ustabilitet for ADIS16465/16488/16460 genfundet ud fra den syntetiserede Allan-deviation og kontrolleret mod producentens specifikationer (identifikation efter NIST SP1065 / IEEE 952). - Validering af Allan-estimatorer efter NIST SP1065 (
tests/allan_nist_sp1065_1000point.rs): de fire estimatorer gengiver de publicerede referencedeviationer for 1000 punkter og konfidensgrænserne i Table-32. - SBAS / DO-229E-beskyttelsesniveauer, ionosfærefri L1/L5 og et DO-316 compliance-kort (modulet
sbas).sbas_protection_leveldanner den vægtede geometrimatrix ud fra hver satellits elevation/azimut og fejlbudgettet for UDRE/GIVE/airborne/tropo, inverterer normalmatricen (deltorbit::invert4) og projicerer varianserne til HPL/VPL via K-faktorerne i DO-229E (PA 6.0/5.33, NPA 6,18).iono_free_l1l5tilføjer den ionosfærefri GPS L1/L5-pseudoafstand (IS-GPS-705,γ₁₅ = 1.79327), valideret til at ophæve motorens uafhængige forsinkelse i ionosfæren af første orden.do316_compliance_mapsporer kravene i DO-316/DO-229E til de funktioner, der implementerer dem. Valideret mod lukkede definitioner af K-faktorerne, referencegeometrieninv(GᵀG)i numpy og identiteten for kovarians ad to veje; krydstjekket mod RTKLIB/gLAB af de publicerede PL-værdier er dokumenteret som afventende gennemgang idocs/COMPLIANCE.md. - Fuldt tesseralt tyngdefelt med kugelfunktioner — EGM2008-feltet til grad/orden 70. Et nyt
gravity_sh::SphericalHarmonicFieldevaluerer geopotentialet og dets acceleration i det jordfaste system ud fra fuldt normaliseredeC̄_nm, S̄_nm-koefficienter med den stabile normaliserede Legendre-rekursion af Holmes–Featherstone (denormalisering ville give overløb ved denne grad). De medfølgende koefficienter er NGA's EGM2008-produkt (public domain, via ICGEM), samlet iegm2008_data.rsog gengivet bit-for-bit aftools/gen_egm2008.pyud fra den indcheckedetools/egm2008_to70.gfc; enhver ICGEM-model i.gfckan indlæses viafrom_gfc. Valideret mod tre uafhængige referencer: sammenfald med en punktmasse (kunC̄00=−μr/|r|³), et felt med kun zonale led, der gengiver den eksisterendeforces::zonal_acceltil ~1e-9, og den analytiske acceleration, der stemmer med differensgradienten af det direkte summerede potentiale til <1e-6. - Lense–Thirring-acceleration (frame-dragging) fra generel relativitet (
forces::lense_thirring_accel, IERS 2010 ligning 10,12), det gravitomagnetiske led ud over den eksisterende Schwarzschild-korrektion, koblet ind i den numeriske propagator via et nyt flagForceModel::lense_thirring(). Valideret som lineær i Jordens impulsmoment og 1–2 størrelsesordener under Schwarzschild-leddet, det område som målingerne fra LAGEOS / Gravity Probe B ligger i. - Et trait
Propagator, der forener de analytiske og numeriske banepropagatorer. Den numeriske Cowell-propagator med kraftmodel er nu en førsteklasses jævnbyrdig til SGP4: en ny typeNumericalPropagator(begyndelsestilstand +ForceModel+Tolerance+ valg mellem trindobling eller Dormand–Prince-Integrator) ogSgp4implementerer beggepropagator::Propagator, hvisstate_at(t_seconds) -> StateVectorreturnerer den inertielle TEME-tilstand i SI-enheder (m, m/s), så de to kan udskiftes bag enBox<dyn Propagator>. SGP4-implementeringen er den præcise omregning km/min→SI af den iboende metode (verificeret ved en ligheds-test); den numeriske implementering består gennem traitet den samme port for præcis Kepler under en meter, de to adaptive drivere stemmer, og enPropagatorErrorbringer den underliggende SGP4-kode frem.
0.13.0 - 2026-06-08#
Denne release lukker det største korrekthedshul i motoren: jordorientering og reduktion mellem referencesystemer sker nu på niveau med en referenceimplementering (valideret bit-for-bit mod ERFA/SOFA), integritetsstakken får ARAIM med to konstellationer på rigtige GPS+Galileo-TLE'er, og lagene for propagering, kvantesensorer, måne/cislunar og geomagnetisme uddybes alle — sammen med et typet Python-API, en rigere browser-playground og en reproducerbarhedsmatrix på tre OS. Højdepunkter:
- Referencesystemer, bit-for-bit. Fuld IAU 2000A- og 2000B-nutation, IAU 2006-præcession, den CIO-baserede (X, Y, s) IAU 2006/2000A GCRS↔ITRS-reduktion, IERS-polbevægelse og TEME→GCRS/ITRS som outputsystemer — hver valideret bit-for-bit mod referencerutiner fra ERFA/SOFA.
- ARAIM med to konstellationer (GPS + Galileo) på rigtige TLE'er, med HPL/VPL, output som Stanford-diagram og en åben
docs/ARAIM_REFERENCE.md. - Cislunar PNT: en CR3BP-propagator for Jord–Måne, systemerne MCI↔MCMF, selenografiske koordinater og et kørbart LunaNet-scenarie for månens integritet.
- Kvantesensing: Coriolis- og AC-Stark-systematik for kold-atom-interferometeret, et driftsweep og validering mod budgettet fra Freier (2016).
- IGRF-14, den geomagnetiske hovedfeltmodel, selvstændig og valideret.
- Typet Python-API (PyO3
RunOutput/ScenarioMeta,.data(),scenario_kinds,validate_toml, typestubs) med et wheel-build i CI, plus førsteklasses GCRS/ITRS-output fra propagatoren og CCSDS OMM-eksport. - Troværdighed og reproducerbarhed: en direkte sammenligning af SGP4-nøjagtighed mod den uafhængige crate
sgp4, en CI-port for dækning (~97% linjer påsrc/) og en reproducerbarhedsmatrix på tre OS (ubuntu/macos/windows).
Ændret#
- Hvert diagram i playground passer nu til sidens tema. Alle tolv SVG-diagramgeneratorer — resultat-/holdover-diagrammet (
src/report.rs+src/chart.rs), Allan-deviationsdiagrammet (web/app.js) og hvert scenariediagram (src/hybrid.rs,jamming.rs,timetransfer.rs,spoof.rs,raim.rsStanford + tilgængelighed,lunar.rs,ensemble.rs,sweep.rs,gnss_sim.rs,fusion/pack.rs,inertial/mod.rs) — brugte kolde marineblå paneler (#0e131b), kølige grå akser/tekst og en skurrende serie-palet i rødt/blåt/lilla. De bruger nu overalt den varme grafitpalet:--bg-paneler, varmt--line-gitter,--fg-etiketter, med en konsekvent tildeling af serier — kvante = honninggul (--accent-bright), klassisk = varm rav (--partial), spec/grænse =--crit. Sikkerhedskodede visninger bevarer deres betydning: RAIM Stanford-diagrammet forbliver grønt (tilgængelig) / rav (vildledende) / rødt (farligt) / dæmpet stålgråt (utilgængelig), og HPL/VPL læses som guld/bronze. - Diagrammer beskriver nu sig selv, når de gemmes/downloades. Begge diagrammer bager deres titel ind i SVG'en (Allan-diagrammets titel + undertitlen "lower is better" var tidligere kun HTML omkring billedet, så et gemt billede havde ingen billedtekst), og begge har en proveniensfod —
Kshana v<version> · <scenario-hash> · kshana.dev— så et downloadet diagram kan stå alene og forbliver reproducerbart. - Hvert diagram har nu proveniensfoden. Foden —
Kshana v<version> · scenario <hash> · kshana.dev— stemples centralt for alle scenarietyper iapi::run_toml(den var tidligere kun på diagrammerne for holdover og Allan), så ethvert gemt eller downloadet billede — fra playground, CLI's eksport med.chart.svgeller HTML-scorecardet — angiver sin version, sit scenarieaftryk og sin kilde. Hashen er mærketscenariofor tydelighedens skyld og stammer fra resultatetsscenario_hash, hvor den findes, med en reserve ud fra kildehashen for integritets- og månerapporterne. Hvad aftrykket er, og hvorfor det er der, er dokumenteret i afsnittet "Output" i README og idocs/PROVENANCE.md.
Rettet#
raim::chi2_quantileog RAIM Stanford-støjsampleren går nu ikke længere i panik ved input uden for intervallet / der ikke er endelige (et fund fra fuzzing, der afhang af rækkefølgen iread_dir, fra de nye ARAIM-scenarier).chi2_quantilebeskytter nup/ksomnormal_quantile(returnerer en grænseværdi i stedet for at gå i panik medassert!), ogNormalfor Stanford-støj i tilgængelighed begrænser til en strengt positiv σ — så integritets-/ARAIM-stakken aldrig går i panik ved muterede eller fejlkonfigurerede scenarier.
Tilføjet#
- CI-matrix for reproducerbarhed på tværs af platforme. Et nyt job
reproducibility-matrixkører reproducerbarhedstestene på ubuntu-latest, macos-latest og windows-latest ved hvert push. Fordi det fulde resultat-JSON ikke er byte-identisk på tværs af OS (afvigelse i libm i sidste ULP), hævder det præcist den platformsinvariante projektion — inputaftrykket plus outputformen, fastlåst for hvert scenarie som SHA-256-goldens itests/golden/af den nyetests/cross_platform_golden.rs— ved siden af de numeriske fastlåsninger (golden.rs, til 1e-6), SGP4-tilstandene (sgp4_verification.rs, til 2e-5 km) og determinisme i samme proces (determinism.rs). Tilsammen beviser de reproducerbarhed på tværs af platforme på tre OS uden skrøbeligheden ved præcis byte-hashing af hele outputtet.docs/REPRODUCIBILITY.mddokumenterer opdelingen. - Port for kodedækning i CI. Et nyt job
coveragekørercargo-tarpaulinmed den LLVM-kildebaserede motor, udgiver en lcov-rapport som build-artefakt og håndhæver en nedre grænse for linjedækning påsrc/(genererede datatabeller, CLI-indgangspunktet, testene og web-aktiver er udeladt). Målt linjedækning er ~97% påsrc/(SGP4 og urmodulerne ≥95%); porten er sat til 85% — over målet på ≥80% og med afstand til den målte værdi, så den fanger regressioner uden at flakke. Et dækningsbadge er udgivet i README. - SGP4/SDP4 sammenlignet direkte med den uafhængige crate
sgp4. En ny test (tests/sgp4_crate_comparison.rs) krydsvaliderer Kshanas propagator mod det mest udbredte SGP4-bibliotek i Rust (neuromorphicsystems/sgp4, tilføjet som en dev-afhængighed kun til test) over de samme 666 vektorer fra AIAA 2006-6753. Når begge køres med tyngdemodellen WGS72, som vektorerne bruger, stemmer de to uafhængige implementeringer til under en mikrometer på jordnære og resonante baner og til 4,12 mm i værste tilfælde på tværs af alle områder, og begge gengiver referencetabellentcppver.out. Den indcheckede sammenligningstabel (tests/fixtures/sgp4_comparison.md, regenereret viaKSHANA_REGEN_FIXTURES=1) opdeler resultatet efter område (LEO/MEO, dybt rum, ½-døgns- og 1-døgnsresonans) og noterer de fire bevidst patologiske tilfælde, som craten afviser ved konstruktionen. De levende påstande holder begge inden for 2e-5 km af referencen og stemmer indbyrdes inden for 4e-5 km — et værn mod regression, ikke en engangsøvelse. Det er konkurrencedygtig stamtavle: korrekthed mod en uafhængig kodebase, ikke blot en statisk tabel. (Craten har som standardfrom_elementsmed WGS84 og afviger derfor fra WGS72-referencen med ~km — ærligt fremhævet i tabellens tekst.) - CCSDS OMM-eksport kan nu nås ende-til-ende. OMM-skriveren (
src/omm.rs) havde tidligere ingen vej fra CLI/API; de middelelementer, et scenarie af typenorbithar, kan nu udgives som et CCSDS 502.0-B-2 OMM-katalog — én OMM KVN-meddelelse for hver TLE-defineret satellit — viakshana <orbit.toml> --export-omm out.omm, ellerexport_omm = truei scenariet skriver automatisk<scenario>.omm(som spejler den eksisterende--export-sp3). Hver meddelelse bærer satellittens rigtige NORAD-katalognummer, COSPAR-internationale betegnelse (YYYY-NNNP) og epoke (CCSDS-form med dag i året), parset fra TLE-linje 1 af den nyetle::parse_tle_identity; navnelinjen bliver tilOBJECT_NAME(ellersOBJECT <id>).CREATION_DATEer scenariets epoke, ikke vægurstid, så outputtet er reproducerbart. Nyt API:api::export_omm/api::auto_export_omm,OmmFile::from_tle_block,OrbitClockScenario::to_omm_string. Et syntetisk Walker- eller RINEX-scenarie (uden TLE-middelelementer) giver en fejl i stedet for at udskrive en tom fil. Valideret mod det medfølgende øjebliksbilledegps-opsmed 30 satellitter (tests/sp3_export_roundtrip.rs). - Interaktive aflæsninger ved markøren på playgroundens diagrammer. Når markøren flyttes hen over et diagram, springer et trådkors til den nærmeste prøve og viser en værdi-tooltip (
web/hover.mjs, koblet ind iweb/app.js). På Allan-diagrammet viser den τ og hvert urs σ_y(τ); på scenariediagrammerne med tidsserier (urets holdover, dødregning, tidsoverførsel, hybrid PNT, GNSS/INS) viser den tiden og hver suites værdi i diagrammets egne enheder (ns / m / ps / udnyttelse), parset fra resultatet, så aflæsningen svarer til kurven. Specialiserede diagrammer (RAIM, spoof, sweep) får intet overlay. Diagrammerne forbliver selvbeskrivende blob-<img>-billeder — overlayet er et gennemsigtigt trådkors + tooltip ovenpå, så download/sammenligning/eksport er uberørt. Koordinatmatematikken (nærmeste prøve, markør→plot-brøkdel, parsing af polylinjer) er enhedstestet (web/hover.test.mjs, køres i CI). - A/B-sammenligningstilstand i playground. Fastgør en vilkårlig kørsel som baseline A, kør et andet scenarie, og de to vises side om side med en deltatabel over kvalitetsmål (holdover, RMS/p95 for tidssynkronisering, tilgængelighed), som farver vinderen for hvert mål (
web/compare.mjs, koblet ind iweb/app.js; deltalogikken er enhedstestet iweb/compare.test.mjs, køres i CI). Alle værdier indsættes som tekst og alle diagrammer via blob-<img>, så intet fra en scenariestreng nogensinde injiceres som markup. - Knapper til download af diagrammer (SVG + PNG). Hvert diagram i playground har nu en værktøjslinje "Download SVG / PNG" i samme tema (
web/chartdl.mjs, koblet ind iweb/app.js). SVG giver den trofaste, skalerbare original tilbage; PNG rasteriserer det samme selvbeskrivende billede i 2x til slides og dokumenter. Filerne navngives med deres proveniens —kshana-<chart>-v<version>-<scenario-hash>.<ext>— og logikken for filnavn/størrelse er enhedstestet (web/chartdl.test.mjs, køres i CI). - IGRF-14, den geomagnetiske hovedfeltmodel (
src/igrf.rs). Det standardiserede IAGA-felt med kugelfunktioner (grad/orden 13, epoke 2025,0 + sekulær variation 2025–2030; koefficienterne er maskingenereret fra den officielleigrf14coeffs.txtaftools/gen_igrf.pytilsrc/igrf_data.rs, bit-for-bit reproducerbart). En Schmidt-normaliseret syntese giver feltvektoren (nord/øst/ned) og afledte elementer (deklination, inklination, horisontal/total intensitet) på ethvert geodætisk sted/dato, plus den geomagnetiske pol og dipolstyrken — det magnetiske modstykke til tyngdekortets matcher for alternativ PNT-navigation. Valideret selvstændigt: syntesen stemmer med den præcise lukkede form for en tiltet dipol, hele det analytiske felt til grad 13 stemmer med en differens af det skalare potentiale, dipolaksen gengiver den kendte geomagnetiske pol (~80,7°N, −72,7°E) og en styrke på ~29,7 µT, og det globale felt er fysisk. - Typede Python-bindinger (
src/python.rs). Ud overrun/run_fullmed streng ind/streng ud udstiller modulet nu en typet klasseRunOutput(.json,.svg,.summaryog en tilgang.data(), der returnerer resultatet parset til en native Python-dict — ingen genparsing af JSON, kan pakkes ind i NumPy), plusrun_typed,scenario_kinds()(parset liste af metadata-dicts) ogvalidate_toml()(en liste af fejlmeddelelser, der ikke kaster). Leverer en typestub efter PEP 561 (kshana.pyi+py.typed) til mypy/pyright/editorer og en quickstart idocs/PYTHON_API.md. De eksisterende funktioner er uændrede. - Førsteklasses outputsystemer for propagatorer (enum
src/orbit.rsFrame+position_in_frame+state_gcrs). EnhverPropagator(Kepler, SGP4, RINEX, GLONASS, SP3) kan nu udskrive sin position i TEME, GCRS (≈ J2000) eller ITRS (jordfast) — TEME native, GCRS via den validerede reduktion TEME→GCRS, ITRS ved at kæde den ind i IAU 2006/2000A CIO-rotationengcrs_to_itrs— og sin fulde GCRS-tilstand (position + hastighed) viastate_gcrs. Det inertielle output for dato er ikke længere kun TEME. - CIO-baseret IAU 2006/2000A-reduktion fra himmelsk til jordfast (
src/cio.rs). Den moderne ækvinoksfrie kæde GCRS↔CIRS↔ITRS: CIP-koordinaterneX, Yaflæst af IAU 2006/2000A-matricen for bias-præcession-nutation (genbruger den validerede FW-præcession + 2000A-nutation med justeringen P03 aferaNut06a), serien med 66 led for CIO-lokatorens(eraS06, maskingenereret fra ERFA-referencen aftools/gen_s06.pytilsrc/cio_s06_data.rs, bit-for-bit reproducerbar), matricen GCRS→CIRS (eraC2ixys), jordens rotationsvinkel (eraEra00) og den fulde rotation GCRS→ITRS (eraC2tcio, sammensat med den eksisterende IERS-polbevægelse). Valideret bit-for-bit mod de publicerede testvektorer foreraXys06a(X=0.5791308482835292617e-3, Y=0.4020580099454020310e-4, s=-0.1220032294164579896e-7 ved JD_TT 2453736,5),eraC2ixysogeraEra00. CIO-kæden og den ældre TEME-reduktion med ækvinoks/GMST-1982 vises at stemme op til deres dokumenterede forskel i konvention for sideraltid på ≈2·(ækvinokstidsligningen). Det er den stringente reduktion, som sporet med ækvinoks/GMST tilnærmede. - Fuld IAU 2000A-nutationsserie (
src/nutation.rsnutation_iau2000a,nutation_matrix_2000a). Den komplette MHB2000-model — 678 luni-solare + 687 planetariske led — nøjagtig til < 0,1 mas, ved siden af den eksisterende afkortning 2000B med 77 led. Tabellerne er maskingenererede fra referencennut00ai IAU SOFA / ERFA aftools/gen_nut00a.pytilsrc/nutation_iau2000a_data.rs(generatoren gengiver den indcheckede fil bit-for-bit), og hele serien — både sættene af fundamentale argumenter fra IERS-2003 og MHB2000 og de planetariske længder — er valideret bit-for-bit mod den publicerede testvektor foreraNut00a(Δψ = −0.9630909107115518e-5, Δε = 0.4063239174001679e-4 ved JD_TT 2453736,5, til 1e-13 rad). Standardreduktionen TEME→GCRS beholder 2000B-serien (~1 mas, under kædens forenkling af hastighedssystemets rotation);nutation_matrix_2000audstiller matricen for dato på < 0,1 mas til kaldere, der har brug for den. - Kørbart scenarie for månens integritet (
kind = "lunar-integrity",scenarios/lunanet-araim.toml). Kobler passet for beskyttelsesniveau ved månens sydpol (src/lunar.rsLunarScenario→south_pole_hpl_pass) ind i scenariekøreren med et JSON-LunarReportog et SVG-diagram af HPL mod tid, så den cislunare integritetssag kan nås direkte fra CLI. Det bringer ærligt hullet frem: med LANS σ_URE på 30 m overstiger HPL ved sydpolen (≈ 260–450 m) en alarmgrænse på 50 m (0 % tilgængelig) — integritet for PNT på Månen er endnu ikke opnået. - Tilgængelighed af ARAIM med to konstellationer på rigtige GPS+Galileo-TLE'er og kobling til scenariekøreren (
src/raim.rs,src/orbit.rs,scenarios/araim-gps-galileo.toml). Tilføjeraraim_dual_constellation_availability(den avancerede ARAIM-motor — fejl i enkeltsatellitter og i hele konstellationer — kørt over et tidsgitter) ogvisible_positions_labeledog kobler den ind i kørerenIntegrityScenariovia et flagaraim_dual, så et ARAIM-studie med flere GNSS kan nås direkte fra TOML. En test på reelle data (tests/araim_dual_real_data.rs) på medfølgende øjebliksbilleder fra Celestrak af GPS+Galileo fra 2026-06-07 viser, at samling af Galileo løfter ARAIM-tilgængeligheden fra 0,21 til 0,67 under en krævende VAL på 12 m (10,5→21,8 satellitter i sigte), mens tilstanden, der er robust over for konstellationsfejl, grundlæggende er begrænset med kun to konstellationer — den kvantitative grund til, at robust integritet med to konstellationer presser mod en tredje konstellation eller SBAS. Ærlig rest: den numerisk præcise gengivelse af EU ARAIM TN Table A-3 mod en enkelt versionslåst epoke og en Zenodo-fixturepost. - Det cirkulære begrænsede trelegemeproblem (CR3BP) for systemet Jord–Måne (
src/cr3bp.rs). En ny cislunar dynamikkerne, som propagatorerne med to legemer/SGP4 ikke kan levere: bevægelsesligninger i roterende system (cr3bp_accel), en RK4-propagator (propagate_cr3bp), Jacobi-konstantens integral (jacobi_constant) og de fem Lagrange-punkter (lagrange_points). Valideret mod lukkede / publicerede ankre: de kollineære punkter for Jord–Måne (L1 ≈ 0,83692, L2 ≈ 1,15568, L3 ≈ −1,00506), de præcise ligesidede L4/L5 = (½−μ, ±√3/2, 0), alle fem bekræftet som ligevægte i feltet, Jacobi bevaret med integratorens præcision under propagering og den tilbagedrivende kraft uden for planen, der gør halo/NRHO-baner mulige. Det er grundlaget for at repræsentere en rigtig NRHO. Ærlig rest: differentialkorrigerede periodiske begyndelsesbetingelser for NRHO 9:2, den excentriske/efemeride-(DE)-model og den denormaliserede transformation ind i de selenocentriske systemer isrc/lunar.rs. - IERS-polbevægelse og reduktionen TEME→ITRF (
src/frames.rs). Tilføjerpolar_motion_matrix(SOFAiauPom00:W = Rx(−y_p)·Ry(−x_p)·Rz(s′)med TIO-lokatorens′),pef_to_itrf/itrf_to_pefogteme_to_itrf— den GMST-baserede rotation TEME→PEF efterfulgt af polbevægelse — og fuldender en ITRF-præcis jordfast position oven påteme_to_ecefkun med GMST (polbevægelse er en effekt på titals meter ved banens radius).x_p/y_per observerede IERS-størrelser, som kalderen leverer. Ærlig rest: en fuldt CIO-baseret (X, Y, s)-kæde og et numerisk krydstjek med ANISE/SPICE på <10 m er fortsat opfølgende arbejde. - Systematik i kold-atom-interferometeret, driftsweep og validering mod en publiceret enhed (
src/inertial/quantum_imu.rs,docs/QUANTUM.md). Udvider det førsteprincip-baserede CAI-accelerometer med de to førende deterministiske systematikker: Coriolis/rotations-fasenΦ_cor = 2·k_eff·v_⊥·Ω·T²(coriolis_phase, med den tilsvarende accelerationsbias2·Ω×vviacoriolis_accel_bias) og AC-Stark-lysskift-fasenΦ_LS = (δ_LS,1 − δ_LS,3)/Ω_eff(ac_stark_phase, der ophæves af symmetrien π/2–π–π/2 ved et konstant skift). Tilføjercai_drift_sweep(drift af positionen ved dødregning mod cyklustid — kernen i en sammenligning mellem kvante og klassisk) og en valideringstest mod Freier m.fl. 2016 mobil gravimeter (arXiv:1512,05660): det modellerede gulv for kvanteprojektionsstøj ligger under og inden for ~2 størrelsesordener af den publicerede kortsigtede støj på 96 nm/s²/√Hz.docs/QUANTUM.mdopdateret. Ærlig rest: systematik fra bølgefront/strålepegning, løsning af stribemultiplicitet, den præcise gengivelse af flyvetesten for CARIOQA-PMP / Boeing-AOSense (kræver publicerede PSD'er for platformen) og en forudindstilling i JS-playground. - Cislunar systemreduktion og et integritetspas ved månens sydpol (
src/lunar.rs). Udvider månens ARAIM-motor med rotationen MCI↔MCMF (Moon-centered inertial ↔ Moon-fixed) (mci_to_mcmf/mcmf_to_mci, en forenklet model med middelrotation med månens sideriske rate), selenografisk bredde/længde/højde (mcmf_to_selenographic/selenographic_to_mcmf) ogsouth_pole_hpl_pass— en landet modtager i Artemis-området mod et repræsentativt sæt af LunaNet-relæer over et pas på 24 h, som ærligt kvantificerer integritetshullet: med den nominelle LANS σ_URE på 30 m er beskyttelsesniveauet endeligt, men overstiger en alarmgrænse på 50 m for overfladeoperationer. Ærlig rest: den præcise LANS NRHO-efemeride (en cislunar bane med 3 legemer), den fysiske libration / præcesserende månepol (DE421/SPICE) og et LunaNet TOML-scenarie er fortsat opfølgende arbejde. - ARAIM-meddelelse om integritetsstøtte, Stanford-diagram som SVG og den åbne ARAIM-reference (
src/raim.rs,docs/ARAIM_REFERENCE.md). Tilføjer en eksplicitIntegritySupportMessage(σ_URA / σ_URE / b_nom / P_sat / P_const, med WG-C-referenceværdierne for GPS+Galileo og omregnerne.fault_priors()/.dual_fault_priors()ind i motorerne for enkeltfejlaraim_raimog for fejl i hele konstellationenaraim_dual_raim), en selvstændig rendererstanford_svgaf Stanford-integritetsdiagrammet (de fire zoner, grænsenPL = error, hjælpelinjerne for alarmgrænsen, én farvekodet markør for hver epoke) ogdocs/ARAIM_REFERENCE.md, der dokumenterer algoritmen, ISM, fejlhypoteserne, kontrakten for beskyttelsesniveauet og fordelen ved to konstellationer. Testene viser gevinsten i geometri/redundans (samling af en anden konstellation strammer HPL ved enkeltfejl) og tolerance over for konstellationsfejl (brugeren med to konstellationer overlever tabet af en hel konstellation; en bruger med en enkelt konstellation kan ikke). Ærlig rest: numerisk gengivelse af EU ARAIM TN Table A-3 / tallet for tilgængelighed på 15–25 % mod et versionslåst øjebliksbillede af rigtige TLE'er, en Zenodo-fixturepost og kobling afaraim_dual_raimind i køreren for scenariefiler. - IAU 2000B-nutation og den fulde inertielle reduktion TEME→GCRS/J2000 (
src/nutation.rs). Tilføjer det andet og tredje stykke af en ægte inertiel reduktion af referencesystemer oven på den leverede IAU 2006-præcession: MHB2000-nutationsserien med 77 luni-solare led (nutation_iau2000b, den standardiserede IAU 2000B-afkortning med nøjagtighed på ~1 mas) med de fundamentale argumenter af Delaunay og SOFA-nutationsmatriceniauNumat, og kæden fra Vallado AIAA-2006-6980 TEME→TOD (ækvinokstidsligningen) → TOD→MOD (nutation) → MOD→GCRS (bias-præcession), udstillet somteme_to_gcrs(r, v, jd_tt)/gcrs_to_teme. Serien, argumenterne og enhedskonstanterne er afskrevet fra referencennut00bi IAU SOFA / ERFA og valideret bit-for-bit mod den publicerede testvektor foreraNut00b(Δψ, Δε til 1e-13 rad). Ærlig rest: den fulde IAU 2000A-serie med 678 led (<0,1 mas), et numerisk krydstjek med ANISE/SPICE på <10 m og polbevægelse er fortsat opfølgende arbejde (seROADMAP.md).
0.12.0 - 2026-06-06#
Denne release bringer Kshanas første ikke-analytiske banepropagator — en Cowell-integrator med en hierarkisk kraftmodel med seks perturbationer (to legemer + zonale led J2–J6 + Sol/Måne som tredje legeme drevet af epoken + solstrålingstryk med en konisk skygge af umbra/penumbra + atmosfærisk modstand + den post-newtonske relativistiske Schwarzschild-korrektion) drevet af et valg mellem to adaptive integratorer (RK4 med trindobling og det indlejrede par Dormand–Prince RK5(4)) — sammen med et lag til manøvre- og banedesign (impulsive og endelige brændinger, en Lambert-løser af Izzo og et porkchop-sweep), et alt-PNT-lag med tyngdekortmatchning, der genfinder et spor på 60 minutter uden GPS til under 500 m, en pipeline for banebestemmelse med batch og sekventiel og et fuldt tæt koblet GNSS/INS-UKF med 17 tilstande med dødregning med kvante-CAI. Hver numerisk funktion er fastlåst mod analytisk reference eller en håndafledt lukket form; de perturbationer, der er slået fra som standard, lader de udgivne goldens være urørte.
Tilføjet#
- Post-newtonsk (Schwarzschild) relativistisk korrektion (
forces::relativistic_accel+propagator::ForceModel::relativity). Tilføjer den dominerende perturbation fra generel relativitet på en bane nær Jorden — den førende årsag til den relativistiske periapsisdrejning — i IERS / Montenbruck–Gill-formen medβ = γ = 1a = (μ/c²r³)·{[4μ/r − v²]·r + 4(r·v)·v}. Som atmosfærisk modstand er den hastighedsafhængig, så den kører med på højresiden af integratoren(r, v)via [accel_rv], frivillig og slået fra som standard. Valideret selvstændigt: på en cirkulær bane falder den sammen med den lukkede form3μ²/(c²r³)·r̂(rent radial og udadrettet, komponenter uden for aksen er præcis nul); dens forhold til to legemer er den lærebogsmæssige≈1.9·10⁻⁹i LEO (signaturenμ/(c²r)); et tilfælde med radial hastighed stemmer med den håndforenkledeμ(4μ + 3v²r)/(c²r³); og i propagatoren forstyrrer den banen uden at sprede den — den halve storakse bevares til godt under en meter/døgn, det strukturelle modstykke til modstandens monotone henfald. Fordi den er slået fra som standard, er goldens for to legemer/J2/zonale led urørte. Tuning af PPN-parametre (β,γ) og Lense–Thirring-leddet (frame-dragging) er fortsat opfølgende arbejde. - Konisk skyggemodel for umbra+penumbra (
forces::conical_shadow), nu brugt af solstrålingstryk. Opgraderer den binære formørkelse med umbra-cylinder til en glat faktorν ∈ [0,1]: Solen og Jorden modelleres som skiver med tilsyneladende vinkelradiera = asin(R☉/d☉),b = asin(Rₑ/|r|)med tilsyneladende afstand mellem centrenec, ogνer én minus den brøkdel af Solens skive, som Jordens skive dækker (arealet af overlappet mellem to cirkler) — fuld sol forc ≥ a+b, total umbra forc ≤ b−a, ringformet forc ≤ a−bog en kontinuert penumbra imellem.srp_accelbruger den nu, så SRP-kraften aftager glat gennem formørkelsen i stedet for at slå til/fra. Tilføjer den nominelle IAU-værdiforces::SOLAR_RADIUS. Valideret selvstændigt:ν = 1i fuld sol ogν = 0dybt i umbraen (præcist), en glat monoton penumbra (νstiger 0 → ~½ vedc = b→ 1 over båndet[b−a, b+a]), og den koniske penumbra rækker ud over umbra-cylinderen (et punkt, som den binære cylinder kalder fuldt belyst, er0 < ν < 1for keglen). Den enklerecylindrical_shadower stadig tilgængelig; Solens randmørkning og den fladtrykte Jords skygge er fortsat opfølgende arbejde. - Indlejret integrator Dormand–Prince RK5(4) (
integrator::dopri54_step/integrator::integrate_dopri+propagator::propagate_dopri). Tilføjer det standardiserede indlejrede par af Dormand–Prince (1980) med Butcher-tableau ved siden af den eksisterende driver med RK4 og trindobling: syv FSAL-trin giver en løsning af 5. orden og et fejlestimat af 4. orden ud fra ét sæt evalueringer (7 mod 11 funktionskald pr. trin), et billigere estimat af den lokale fejl. Den adaptive driver genbruger den samme RMS-fejlnorm og trinregulatoren0.9·(1/err)^(1/5), så den er et alternativ, der kan sættes direkte ind;propagator::propagate_dopriudstiller den på kraftmodellen for banen. Valideret selvstændigt: det indlejrede fejlestimat er O(h⁵) (halvering af trinnet skærer det ~32×); DP5(4) integrerery' = ytileog den harmoniske oscillator over 50 perioder med bevarelse af energi til <1e-6; den når det samme endepunkt ved den samme tolerance med færre funktionsevalueringer end trindobling (uden at ofre nøjagtighed); ogpropagate_dopribestår den samme port mod analytisk reference som RK4-vejen — under en meter mod den præcise Kepler-løsning med universelle variable over en LEO-bane på 24 h — mens de to drivere stemmer til <1 m på en bane med J2..J6 (ingen lukket form). Højere indlejrede par (RKF7(8) / DOP853) er fortsat opfølgende arbejde. - Atmosfærisk modstand koblet ind i propagatoren som dens første hastighedsafhængige kraft (
forces::atmospheric_density+forces::drag_accel+propagator::ForceModel::drag). Tilføjer stykkevis eksponentiel atmosfære efter Vallado Table 8-4ρ = ρ0·exp(−(h−h0)/H)(28 bånd fra havniveau forbi 1000 km, begrænset under overfladen) og den kvadratiske modstanda = −½ · ρ(h) · (C_D·A/m) · |v_rel| · v_relmod den medroterende atmosfærev_rel = v − ωₑ ẑ × r(forces::EARTH_ROTATION_RATE = 7.2921151467e-5). Fordi modstand afhænger af hastighed, fårForceModelen nyaccel_rv(t, r, v), og højresiden af integratoren sender nu hastigheden videre (f(t,[r;v]) = [v; a(t,r,v)]); den rent positionsafhængigeaccel_ater uændret, så de konservative led og goldens er urørte. Valideret selvstændigt: densiteten forankres ved værdien 1,225 kg/m³ ved havniveau, begrænses under overfladen, aftager monotont gennem LEO, ligger i det solgennemsnitlige bånd ~1e-12 kg/m³ ved 400 km, og dens genfundne lokale skalahøjde (≈ 58 km ved 400 km) er fysisk; modstanden modvirker den medroterende relative hastighed med størrelsen ~2e-6 m/s² i LEO forC_D·A/m = 0.02 m²/kg; og — den afgørende signatur — modstanden er dissipativ: en bane på 300 km mister specifik energi monotont, og dens halve storakse aftager med et afgrænset ~km/døgn, hvor baselinen i vakuum bevarer energien til <1e-9. NRLMSISE-00-densiteten for termosfæren (klausulen om densitet i modstand på < 5 %) er fortsat opfølgende arbejde. - Solstrålingstryk koblet ind i propagatorens kraftmodel, drevet af epoken (
forces::srp_accel+propagator::ForceModel::solar_radiation). Tilføjer den SRP-model med kanonkuglea = ν · P☉ · cᵣ · (A/m) · (AU/d)² · d̂med en formørkelsesfaktor for cylinderskygge (forces::cylindrical_shadow, ν ∈ {0.1}): strålingstrykketP☉ = Φ☉/cud fra den moderne totale solindstråling på 1361 W/m² (≈ 4,5398·10⁻⁶ N/m²), aftagen af fluxen med kvadratet på afstanden(AU/d)²og det radiale skub væk fra Solen. Den kører med på den samme epokedrevne højreside som tredjelegemet og sampler Solenephemén gang ved den fremskredne epokeepoch_jd_tt + t/86400, delt mellem Solen som tredjelegeme og SRP. Kan sammensættes:with_zonals_j2_j6().third_body(true, true, epoch).solar_radiation(1.5, 0.02). Valideret selvstændigt mod håndafledte signaturer: strålingstrykket ved 1 AU fastlåses til sit lærebogsmæssige ≈ 4,5398·10⁻⁶ N/m²; SRP for en fuldt belyst LEO-satellit er bit-identisk med kanonkugleformlen, peger væk fra Solen og ligger i båndet ~1,36·10⁻⁷ m/s² for cᵣ = 1,5, A/m = 0,02 m²/kg; en fordobling af afstanden til Solen firedeler størrelsen (omvendt kvadrat); cylinderskyggen formørker kun umbra-cylinderen (modsolrettet og inden for én Jordradius af linjen Jord–Sol) og giver præcis nul SRP i formørkelse; og i propagatoren forstyrrer SRP en LEO-bane med en lille afgrænset størrelse, der skalerer ~lineært med A/m — mens en model uden perturbationer forbliver bit-for-bit tidsuafhængig, så goldens for to legemer/J2/zonale led er urørte. Den koniske umbra/penumbra (glat ν ∈ [0.1]), atmosfærisk modstand og ekstern krydsvalidering med GMAT/Orekit er fortsat opfølgende arbejde. - Sol/Måne som tredjelegeme drevet af epoken, koblet ind i propagatorens tidsvarierende højreside (
propagator::ForceModel::third_body/accel_at). Perturbationen fra tredjelegemet er ikke længere et selvstændigt kraftled — den integreres nu af Cowell-propagatoren som en ægte tidsvarierende kraft: hver evaluering af højresiden sampler positionerne af Sol/Måneephemved den fremskredne epokeepoch_jd_tt + t/86400(genbrugerprecession::julian_centuries_tttil omregningen mellem dage og århundreder), så forstyrrerne bevæger sig langs deres baner under integrationen i stedet for at være frosset ved starten. Kan sammensættes med enhver tyngdemodel (ForceModel::with_zonals_j2_j6().third_body(true, true, epoch)). Valideret selvstændigt: solleddet på højresiden er bit-identisk medthird_body_accelevalueret ved efemeridepositionen for det øjeblik ved bådet = 0ogt = 1 day(hvilket præcist beviser koblingen mellem 86400 s ↔ 1 døgn ↔ 1/36525 århundrede), forstyrreren rykker ~2,6·10⁹ m/døgn mellem prøverne (ikke frosset), de øjeblikkelige tidevandsstørrelser i LEO rammer de lærebogsmæssige bånd ~5·10⁻⁷ m/s² (Sol) og ~1,1·10⁻⁶ m/s² (Måne, ≈ 2× Solen), hvert legeme forstyrrer målbart banen over et døgn, mens det forbliver afgrænset, og den samme begyndelsestilstand propageret ved epoker et kvartal fra hinanden giver en anden bane (tidevandsaksen drejer 90°) — mens en model uden nogen af legemerne slået til er bit-for-bit tidsuafhængig, så goldens for to legemer/J2/zonale led er urørte. Efemeridenøjagtighed i DE-klassen og ekstern krydsvalidering med GMAT/Orekit er fortsat opfølgende arbejde. - Månens efemeride med lav præcision (
ephem::moon_position), der fuldender parret Sol/Måne som tredjelegeme. Tilføjer den lavpræcise måneserie af Montenbruck & Gill (§3.3.2) ved siden af solmodellen, så den legemeuafhængigeforces::third_body_accelnu kan drives af begge himmellegemer uden nogen ekstern DE/SPK-kerne. Valideret selvstændigt mod håndafledte signaturer for Månen: den geocentriske afstand holder sig inden for den virkelige kuvert fra perigæum/apogæum (~356.500–406.700 km) over en måned, og dens månedlige middel genfinder den halve storakse på ~384.400 km; den ekliptiske bredde overstiger aldrig månebanens inklination på ~5,3° (kontrolleret ved projektion på ekliptikas pol i ækvatoriale koordinater, hvilket validerer breddeserien og rotationen for skråstillingen sammen); Månens retning vender tilbage til inden for 1° efter én siderisk måned (27,3217 d), og dens daglige bevægelse holder sig i det fysiske bånd 12–15°/døgn; og perturbationen fra Månen som tredjelegeme på en LEO-satellit har den lærebogsmæssige størrelse ~1,1·10⁻⁶ m/s² (≈ det dobbelte af Solens). Positionsnøjagtighed i DE-klassen, atmosfærisk modstand og SRP er fortsat opfølgende arbejde. - Tyngdekraft fra et tredjelegeme (Solen) med en indbygget lavpræcis efemeride (
forces::third_body_accel,ephem::sun_position). Tilføjer perturbationen fra tredjelegemet til kraftmodellen:a = GM₃·((s−r)/|s−r|³ − s/|s|³)(direkte tiltrækning minus det indirekte led, som det geocentriske system skal trække fra), hvor Solens position leveres af den nye serie i moduletephem, den analytiske lavpræcisionsserie af Montenbruck & Gill — ingen ekstern DE/SPK-kerne nødvendig til en kørsel med lav præcision. Valideret selvstændigt: accelerationen stemmer med den præcise gradient af sit eget forstyrrende potentiale (third_body_potential), perturbationen forsvinder i geocentret og har den lærebogsmæssige størrelse ~5·10⁻⁷ m/s² på en LEO-satellit, og Solens efemeride rammer håndafledte ankre i J2000 — perihelafstand ≈ 1,471·10¹¹ m, deklination ≈ −23° nær decembersolhverv, en tilsyneladende bevægelse på ≈ 1°/døgn (≈ 90° pr. kvartal) og en afstand, der holder sig inden for kuverten på 0,983–1,017 AU for Jordens bane gennem et helt år. Leverer halvdelen med tredjelegemet i trinnet om kraftmodellen i milepælen for den numeriske propagator (Månen leveres i et ledsagende punkt ovenfor); positionsnøjagtighed i DE-klassen, atmosfærisk modstand og SRP er fortsat opfølgende arbejde. - Kraftmodel med zonale harmoniske J2–J6 (
forces::zonal_accel/zonal_potential). Udvider kraftmodellen i Cowell-propagatoren ud over J2 til hele Jordens zonale felt til og med grad 6 (de standardiserede publicerede ikke-normaliseredeJ2..J6fra EGM-96), koblet ind i propagatoren somForceModel::with_zonals_j2_j6(). Accelerationen er den præcise analytiske gradient af det zonale forstyrrende potentialeR(r) = −(μ/r)·Σ Jₙ(Re/r)ⁿPₙ(z/r)(Legendre-polynomier ved opadgående rekursion), valideret på tre uafhængige måder: den reduceres til den ved 666 vektorer valideredej2_acceltil maskinpræcision, når den begrænses til[J2]; den stemmer med den numeriske gradient af sit eget potentiale gennem hele feltet J2..J6 (den afgørende kontrol for et konservativt felt); og de ulige ledJ3mod de lige ledJ2/J4..J6udviser deres karakteristiske (anti)symmetri mellem nord og syd underz → −z— asymmetrien i pæreformen. En propageret bane med J2..J6 bevarer den samlede energi (kinetisk + central + zonalt potentiale) til ~1e-8 over et døgn og forstyrrer banen med kun J2 med en lille størrelse forskellig fra nul. Det leverer trin 2 ("zonale harmoniske J2–J6") i milepælen for den numeriske propagator; det tesserale felt af høj grad i EGM, modstand, SRP, tredjelegemer og ekstern krydsvalidering med GMAT/Orekit er fortsat opfølgende arbejde. - Numerisk (Cowell) banepropagator (
src/propagator.rs). Kshanas første ikke-analytiske propagator (resten af banestakken er analytisk SGP4/SDP4): den kobler kraftmodellen med to legemer + J2 (src/forces.rs) ind i den adaptive driver med RK4 og trindobling (src/integrator.rs) somf(t,[r;v]) = [v; a(r)], med en omskifterForceModel. Valideret mod en analytisk reference, der er stærkere end et numerisk krydstjek mod et andet værktøj ville være: den uforstyrrede bane gengiver den præcise Kepler-løsning med universelle variable til under en meter over en LEO-bane på 24 timer (en strammere port end "mod en numerisk reference < 10 m", som milepælen formulerer det), specifik energi og impulsmoment bevares til ~1e-9 relativt, og J2-regressionen af knuden gengiver den lukkede formj2_secular_ratestil første ordens teori (inden for 2 %, resten af orden O(J2²)). Tilføjer ogsåsolve_kepler_checked, en Newton-løser til Keplers ligning, der returnererErri stedet for et tavst forkert svar, når den ikke konvergerer inden for et afgrænset iterationsbudget (tilfældet mede = 0.999nær perigæum). Ærligt omfang: kraftmodellen er kun to legemer + J2 — det tesserale felt af høj grad i EGM (200×200 + indlæser), modstand (NRLMSISE-00), SRP, kræfter fra tredjelegemer og et eksternt krydstjek med GMAT/Orekit er fortsat opfølgende arbejde. - Tyngdekortmatchning uden GPS i 60 minutter til < 500 m (
run_gps_denied_gravity_nav). Uddyber alt-PNT-laget til valideringsmålet for ESA NAVISP Quantum Wayfarer: et køretøj flyver et spor på ~700 km gennem et GNSS-udfald på en hel time — dets inertielle løsning driver til ≈ 70 km — og en kold-atom-gravimeter plus en hierarkisk grov-til-fin partikel-/gittermatcher genfinder den konstante INS-drift til ≈ 145 m (< 500 m), en reduktion på > 480×. Gravimeterets virkelige hvide støjgulv tilføres som en deterministisk sådd sekvens, så matcheren aldrig får støjfri reference, men kørslen alligevel er præcis reproducerbar (verificeret bit-identisk og stabil til nogle få meter på tværs af støjrealiseringer). En test på regressionsniveau viser, at forfiningen er nødvendig — et enkelt groft gitter går i stå ved ~2 km, kun forfining i tre trin bryder barrieren på 500 m. Nyt indchecket scenariescenarios/gps-denied-gravity-nav.toml. Rækkendocs/CAPABILITY.mdforbliver ærligt delvis (der er stadig intet medfølgende EGM2008-kort), og dens evidens er opdateret til resultatet på < 500 m ved 60 min. Ærligt omfang uændret: felt med kugelfunktioner af lav grad + syntetiske mascons; en Monte Carlo over realiseringer af fejl i kortrepræsentationen er fortsat opfølgende arbejde. - Register over overdrevne påstande + værn mod regression (
docs/CLAIMS-VS-REALITY.md,tests/no_overclaims.rs). Lukker sporet for ærlighed og fjernelse af påstande: de fjorten overdrevne påstande, som en tidligere revision katalogiserede (OC-0…OC-13), er nu alle GREEN — de stærke påstande (OC-0koblet Kalman-filter for ur+position,OC-2jamming J/S→C/N₀→tab af lås,OC-7fysik for Mach–Zehnder-CAI,OC-8ARAIM HPL/VPL) er afløst af leverede, testede funktioner frem for en afdæmpet formulering, og de øvrige rækker er frataget påstanden, så de svarer til koden. En ny CI-test skanner de levende offentlige flader (README,CAPABILITY,GLOSSARY,web/) og fejler, hvis en pensioneret nøgen formulering af en overdrevet påstand dukker op igen uden forbehold, så en GREEN række ikke i tavshed kan gå tilbage. "Integritets"-kvalitetsmålet for hver kørsel er stadig ærligt mærket filterets selvkonsistens (ikke luftfartsintegritet); den reelle ARAIM HPL/VPL vises separat, så de to aldrig blandes sammen. - Navigation med tyngdekortmatchning (alt-PNT uden GPS). Nyt
src/gravimeter.rstilføjer det alt-PNT-funktionslag, som ESA NAVISP's studier Quantum Wayfarer / QT-CCI om tyngdekortmatchning efterlyser: en målemodel for kold-atom-gravimeter, hvis hvide støjgulv er afledt af ASD for CAI-accelerometeret (σ = ASD/√τ); et tyngdeanomalifelt med kugelfunktioner af lav grad og fuld normalisering (valideret mod de lukkede Legendre-funktionerP̄₁₁=√3·cosφ,P̄₂₀=(√5/2)(3sin²φ−1),P̄₂₂=(√15/2)cos²φog en håndafledt anomali med ét led på 1,897 mGal) plus syntetiske mascons til de lokale træk af høj grad; og et partikelfilter til tyngdekortmatchning (sammensat afmapmatch+particle_filter), der genfinder et spor uden GPS ud fra den anomalisekvens, det flyver igennem. Et indchecket NAVISP-benchmark (scenarios/gravity-map-nav.toml) skærer en fri inertiel drift på ~73 km ned til nogle få km. Ærligt omfang: Kshana medfølger ikke hele koefficientsættet EGM2008 på 2190° — feltet er af lav grad + mascons, ikke et rigtigt kort med høj opløsning; indlæseren til EGM/EIGEN, magnetkort, terrænstøttet SLAM og kobling afkind=i scenariemotoren med et SVG-diagram af drift er fortsat opfølgende arbejde. Rækkedocs/CAPABILITY.md"Gravity-map / alt-PNT navigation" → delvis. - Manøvremodellering og brohoved for banedesign. Nyt
src/maneuver.rstilføjer det første lag for banedesign over SGP4: impulsive ΔV-knuder, der anvender en diskontinuitet i hastigheden og fører en kovarians på 6×6 videre (deterministisk brænding ⇒ identitet som tilstandsovergang; kovariansen for udførelsesfejl roteres fra brændingens system — ECI eller LVLH — ind i hastighedsblokken), en integration af endelig brænding (konstant fremdrift over en brændebue med massen som tilstand), hvor den opnåede ΔV kontrolleres mod den lukkede Tsiolkovsky-raketligning til bedre end 0,01 %, en Lambert-løser af Izzo-2015 med én omdrejning (r1,r2, flyvetid ⇒v1,v2), en præcis Kepler-propagator med universelle variable (reference for to legemer) og et porkchop-sweep, der afbilder et gitter af affyringsepoke × ankomstepoke til C3 ved afgang og V∞ ved ankomst, udskrevet som et 2D JSON-array til konturgengivelse i browseren. Valideringen er selvstændig og stærkere end en tutorialaflæsning: hvert Lambert-output sendes rundt gennem Kepler-propagatoren (det skal lande tilbage pår2), og porkchop-minimummet kontrolleres mod det analytiske gulv for C3 ved Hohmann-transfer for to koplanare cirkulære baner. Kshana placerer dette som laget for ydelsessimulering over GMAT/Orekit, ikke som en erstatning (grene med flere omdrejninger og en rigtig planeteefemeride er fortsat uden for omfanget). Ti tests. - Fuldt tæt koblet GNSS/INS-UKF med 17 tilstande med dødregning med kvante-CAI. Nyt
src/fusion/tightly_coupled17.rsbærer hele den inertielle navigationstilstand, som et tæt koblet filter estimerer —[position, velocity, attitude-error, accelerometer bias, gyro bias, clock bias, clock drift](17 tilstande) — propageret gennem strapdown-mekaniseringen drevet af den målte specifikke kraft og vinkelhastighed, med rotationen fra legeme til inertialsystemC ≈ I + [ψ×]for små vinkler, så fejl i attitude kobler ind i vandret acceleration (den standardmæssige INS-tiltkobling). Under et GNSS-udfald glider det kun på IMU; procesindstøjen for velocity random walk er den afledteq_va(crate::inertial::quantum_imu) for kold-atom-interferometerets accelerometer, så driften ved dødregning er den, som kvantesensoren begrænser — et udfald på 120 sekunder forbliver afgrænset til nogle få hundrede meter mod de kilometer, som en fri INS af navigationsklasse ville nå. Opdateringen af pseudoafstand/afstandsrate køres gennem det delte unscented-filter (med α = 1 for velkonditionerede vægte ved denne tilstandsstørrelse). Fem tests: identitet for målemodellen, integration med konstant hastighed med perfekt IMU, GNSS-støtte, estimering af accelerometerets bias og benchmarken for udfald på 120 s begrænset af CAI.
0.11.0 - 2026-06-05#
Ændret#
- Ærlig indramning af kvantepositionering. Den overordnede beskrivelse er nu konsekvent "PNT-resilience simulator with quantum-sensor performance models" i README's tagline, citationslinjen,
CITATION.cff(titel + abstract) og bannerillustrationen — og erstatter den løsere markedsføringsformulering "hybrid quantum/classical PNT simulator". README's afsnit What it is / is not får en eksplicit afgrænsning "It is not (yet)" (ikke en førsteprincip-baseret fysikmotor for atominterferometri, ikke en GNSS-modtager/PVT-løser, ikke et værktøj til missionsdesign), og en nyROADMAP.mdpå øverste niveau gør kvantefysiklaget til et P2-punkt (Mach–Zehnder-CAI-fase, projektionsstøj, vibrationstensor), så læserne ved, at fysikken fra første principper er afgrænset og på vej, ikke opgivet. Ingen ændring i adfærd eller API.
Tilføjet#
- Handelsstudie af konstellationsdesign: Walker-designsweep med en Pareto-front, JSON for revisit-tid og en validering af Walker-formlen under en kilometer.
src/walker.rsfårwalker_design_sweep, som kører et gitterplanes × sats_per_plane(fx et handelsstudie på 3×3) ved fast inklination og tabulerer for hvert design dækningsbrøken, PDOP i værste tilfælde og det maksimale/gennemsnitlige hul i revisit;pareto_frontmarkerer de ikke-dominerede designs (færre satellitter, mere dækning, lavere PDOP, kortere revisit), ogWalkerDesignReport::to_jsonserialiserer cellerne og Pareto-fronten — felter for revisit-tid medregnet — som JSON. Ny validering fastlåser generatoren til Walker-formleni:T/P/F: satellitter i samme plads i nabobaner vises at kunne afbildes på hinanden ved en præcis rotationR_z(2π/P)til under 1 km over fulde 24 h af SGP4-propagering (den korte J2-periodiske vejrtrækning er fælles og ophæves), og pladserne i baneplanet bekræftes i gennemsnit at ligge med afstanden2π/S. Bygger på det indcheckede rigtige øjebliksbillede fra Celestrakgps-ops2021-07-28 (scenarios/orbit-sgp4-gps.toml, afprøvet af testene for scenariedækning og SP3-rundtur). - Avanceret overførsel af tid og frekvens: TWSTFT, GNSS common-view, PPP, optisk, tilpasning af potenslov efter IEEE-1139 og et urensemble. Nyt
src/timetransfer_adv.rsbygger de operationelle overførselsmetoder oven på de leverede lukkede former for Sagnac/common-view og værktøjerne for Allan-stabilitet.twstft_sagnacgiver Sagnac-korrektionen for Two-Way Satellite Time and Frequency Transfer som sløjfesummen over tre hop, præcis lig med BIPM's lukkede formΔt = 2·A·ω_E/c²(krydstjekket af den uafhængigetwstft_sagnac_bipm);run_twstftudskriver en serieT_A − T_Bover ét døgn og dens TDEV.gnss_common_view_seriestager enkeltdifferens mellem to syntetiske jordstationer, så satellittens ur ophæves.iono_free_combination+ppp_receiver_clocker den ionosfærefri PPP-kombination og løsningen for modtagerens ur mod en (syntetisk) reference af SP3-klasse, som præcist ophæver ionosfæren af første orden.rytov_variance,fried_parameterog den lognormalelognormal_fadingmed enhedsmiddel modellerer den scintillation, turbulens giver på et optisk link i fri luft.fit_power_law_psder en fuld tilpasning med mindste kvadrater af fem koefficienter efter IEEE-1139h_αtil Allan-variansens kurve (alle fem kanoniske støjprocesser på én gang), hvor den dominerende proces rapporteres for hver τ-dekade.ensemble_timescaledanner en papirtidsskala vægtet med omvendt varians, hvis Allan-deviation falder strengt under det bedste bidragende ur. 31 enhedstests; valideringsmålene er lukkede former og syntetisk reference — en rigtig indlæsning af BIPM Circular-T / IGS SP3 mangler stadig. - IONEX-ionosfærekort: filparser, interpolation i tid og kortlægning af skråstilling.
src/ionex.rsfårparse_ionex, som læser filformatet IONEX (definition af gitter i headeren + blokkeSTART/END OF TEC MAP) ind i en sekvens afIonexMap-kort — og normaliserer filens bredderækkefølge fra nord til syd til etTecGridmed positivt trin og skalerer værdier med10^EXPONENT.interpolate_tec_in_timeblander to på hinanden følgende kort til en forespørgselsepoke, ogobliquity_factor/slant_tecafbilder den lodrette TEC på en skrå stråle via tyndskalsfaktoren for ét lagM(z) = 1/cos z′(sin z′ = (Rₑ/(Rₑ+H))·sin z). Sammen med den leverede gittermodel gør de et målt globalt ionosfærekort fra IGS til en brugbar skrå forsinkelse. - Konstellationsdesign: dimensionering efter streets-of-coverage + sammenligning af flere konstellationer.
src/walker.rsfårmin_satellites_streets_of_coverage, en idealiseret løser for mindste antal satellitter efter streets-of-coverage — ud fra den leverede halvvinkel for dækningλog gadens halvbreddecdimensionerer den den næsten polære konstellation til kontinuert enkelt global dækning somp = ⌈π/(2c)⌉baneplaner (fx kræver et plan med 4 satellitter i GPS-højde 2 planer, 8 satellitter), og rapportererNone, når satellitterne er for spredte til at danne en kontinuert gade.compare_constellationser værktøjet til at sammenligne flere konstellationer: det scorer hvert navngivne Walker-design på den samme station/det samme vindue viapdop_sweepog returnerer deres dækning / PDOP / størrelse side om side. Ærligt omfang: Rider-korrektionen, der er præcis ved sømmen i grænsen mellem modroterende baneplaner, og en 3D-dækningsglobus er fortsat opfølgende arbejde. - Spoof-detektion i flere lag: paritetsdetektor for RAIM-konsistens + fusion af lag.
src/spoof_monitors.rsfår det tredje og sidste detektionslag og fusionstrinnet:parity_raim_testtilpasser med mindste kvadrater løsningen for position/ur til et redundant sæt pseudoafstande og tester den resterende vægtede sum af kvadrater af residualer mod dens tærskel χ²(m−4)— og markerer en forskudt delmængde af satellitter, mens en fælles bias (absorberet af modtagerens ur) korrekt efterlades usynlig for RAIM i stedet for at blive tilsløret.fuse_spoof_layerskombinerer lagene for paritet, AGC og SQM til én vægtet beslutning, der registrerer, hvilke lag der udløste. En Monte Carlo karakteriserer detektoren: empirisk P_fa ≈ 0,068 mod et designpunkt på 0,05 og missede detektioner, der falder fra 0,885 ved en spoof-bias på 2σ til 0,16 ved 8σ. Ærligt omfang: krydsvalidering mod specifikke publicerede testvektorer for spoofing (Spirent / ION GNSS+) kræver disse eksterne datasæt og er fortsat opfølgende arbejde. - Valideringsensemble for koblet mod afkoblet Kalman. En Monte Carlo med 100 forsøg i
src/fusion/coupled.rskvantificerer værdien af at bære krydskovariansen mellem position↔ur: en trofast indlejret afkoblet baseline (valideret bit-for-bit mod den leveredeCoupledPntFilter) behandler de samme data med krydsblokkene nulstillet, og efter næsten degenererede pseudoafstande plus en positionsbestemmelse kun med uret genfinder det koblede filter positionen til 2,97 m RMS mod det afkoblede filters 48,8 m og vinder 97 af 100 forsøg — urets fix skærper kun positionen gennem den korrelation, som den afkoblede bevispakke kasserer. Det fuldender valideringspakken for Kalman-korrekthed (Joseph-form, PSD-sikkerhed, konsistens af NEES/NIS og nu ensemblet for det koblede filter). - Pipeline for banebestemmelse (batch + sekventiel). Nyt
src/orbit_determination.rsgenfinder en satellits banetilstand[r, v]ud fra afstandssporing fra jordstationer og sammensætter tre leverede dele: kraftmodellen med to legemer + J2 (src/forces.rs) og integratoren RK4 (src/integrator.rs) propagerer en kandidattilstand over buen, en målemodel for afstand forudsiger hver stationsafstand, og Gauss–Newton-korrektoren for batch (src/batch_ls.rs) driver kandidaten ind på den bedst tilpassede tilstand (determine_orbit_batch). Den samme dynamik og afstandsmodel driver også en sekventiel rekursiv bestemmelse på det leverede unscented-filter (determine_orbit_sequential). Fire tests validerer den: forudsigelse af afstand over buen; genfinding med batch til under en meter / mm·s⁻¹ ud fra støjfri afstande; genfinding med batch til ~2 m med et residual efter tilpasning ved støjgulvet på 5 m (signaturen for en konsistent tilpasning med mindste kvadrater); og sekventiel genfinding til inden for nogle få titals meter. Ærligt omfang: afstandsrate/Doppler og vinkelmålinger, en analytisk tilstandsovergangsmatrix for J2 og maskering af stationens sigtbarhed er opfølgende arbejde. - Tæt koblet GNSS/INS UKF-navigator. Nyt
src/fusion/tightly_coupled.rskobler den leverede unscented Kalman-kerne (src/fusion/ukf.rs) ind i en fungerende tæt koblet navigator over de otte tilstande[px,py,pz,vx,vy,vz,b,d](ECEF-position/hastighed plus modtagerurets bias og drift i afstandsenheder). Den indlæser de rå satellitmålinger —pseudorange(ρ = |p − sᵢ| + b) ogrange_rate/Doppler (ρ̇ = (p − sᵢ)·(v − ṡᵢ)/|p − sᵢ| + d) — frem for en forudformet positionsbestemmelse, såTightlyCoupled(medpropagate/propagate_orbital/update_gnss) bliver ved med at korrigere med færre end fire satellitter og glider gennem GNSS-udfald på sin propagerede dynamik. Fem tests validerer den ende-til-ende, herunder scenarierne for milepælens accept: geometrien for pseudoafstand/Doppler mod håndværdier; støjfri konvergens til under en meter på fem satellitter; et tilfælde med tre satellitter, der konvergerer fra ~212 m til ~13 m, hvor en øjebliks-PVT ikke engang kan dannes; et udfald på 120 sekunder med konstant hastighed inden for 50 m; og — den afgørende accept — et buet LEO-pas på 30 minutter (rigtig bane med to legemer + J2) med et GNSS-udfald på 120 sekunder, holdt til 0,77 m RMS for passet og 2,9 m i værste tilfælde gennem udfaldet. Den orbitale glidning sammensætter den leverede tyngdekraftsmodel (src/forces.rs) og RK4-integratoren (src/integrator.rs) til procesmodellen for UKF (propagate_orbital), så filteret følger banens krumning — hvilket en glidning med konstant hastighed ikke kan (krumningen alene er ~58 km over 120 s i LEO). Ærligt omfang: den orbitale glidning bruger kraftmodellen med to legemer + J2 frem for rå specifik kraft fra IMU (for en ikke-drevet orbital platform falder de sammen); inddragelse af en fejltilstand for strapdown-IMU og korrektioner af ionosfære/troposfære i sløjfen er fortsat opfølgende arbejde. - Målemodel for kortmatchning (terræn-/tyngdereferenceret navigation). Nyt
src/mapmatch.rsleverer den målemodel, der gør det leverede partikelfilter med sekventiel vigtighedsresampling (src/particle_filter.rs) til en fungerende navigator uden GPS:field_likelihood(en gaussisk sandsynlighed for feltmatch) ogmap_match_likelihood, som sampler et vilkårligt georefereret referencefelt — terrænhøjde (TRN) eller en tyngdeanomali — ved en partikels position og vægter den efter, hvor godt den passer til køretøjets målte værdi. Feltet er en vilkårlig sampler af typenFn(lat, lon) -> value, så det kan sammensættes med det bilineære gitter isrc/ionex.rseller en closure. To tests forankrer den — sandsynligheden topper (=1) ved et perfekt match og falder tile^(−½)ved én sigma, og et partikelfilter over et karakteristisk stykke syntetisk terræn genfinder den sande position inden for 0,1. Ærligt omfang: de rigtige referencekort (SRTM-højde, EGM/EIGEN-tyngdeanomali) og deres indlæsere er fortsat opfølgende arbejde. - Cislunar PNT-integritet (månens ARAIM). Nyt
src/lunar.rsanvender ARAIM-motoren MHSS fra Jordens side på en navigationstjeneste for Månen i stil med LunaNet med månens parametre (σ_URE ≈ 30 mmod GPS 0,6 m,P_sat ≈ 1e-4): månekonstanter, en selenocentrisk basis Øst/Nord/Op og en hjælper for himlens geometri samtlunar_araim(HPL/VPL). Tre tests forankrer den — den ortonormale selenocentriske basis, geometrien for skråafstanden og den præcise lineære skalering af beskyttelsesniveauet medσ_URE(månens 30 m giver et beskyttelsesniveau, der er 50× større end den samme geometri ved GPS' 0,6 m — den kvantitative grund til, at integritet for PNT på Månen er svær). Ærligt omfang: den præcise LANS NRHO-efemeride, fejlbudgettet for signal i rummet og reduktionen af referencesystemet MCI↔MCMF er opfølgende arbejde. - To-delte (højpræcise) Julian-datoer. Nyt
src/jd2.rstilføjerJd2, en Julian-dato delt i et heltalligtdayog et brøkdeltfraci[0,1)(konventionen fra SOFA/hifitime), mednew/from_parts/add_seconds/diff_seconds/total. Forskelle mellem nære epoker forbliver præcise til gulvet forf64, hvor en JD med en enkeltf64mister ~50 µs nær J2000. Fire tests forankrer den: rundtur, normalisering af brøken, præcis genfinding af mikrosekunder (med fejlen for en enkeltf64vist ved siden af) og additiv/reversibel aritmetik med sekunder. - CCSDS OMM-skriver (Orbit Mean-Elements Message). Nyt
src/omm.rssupplerer efemeride-skriverenoemmed meddelelsen om middelelementer:OmmFile::from_tleafbilder SGP4/TLE-middelelementer til OMM-enhederne (middelbevægelse i omdr./døgn, vinkler i grader, plusBSTAR), ogto_omm_kvnserialiserer standardsporets CCSDS 502.0-B-2 KVN-form — så en Kshana-bane kan bruges af ethvert værktøj, der forstår OMM, i stedet for som en skræddersyet TLE. To tests forankrer omregningen af enheder fra TLE til OMM (≈ 15,5 omdr./døgn, inklination 51,6° osv.) og tilstedeværelsen af de krævede KVN-nøgleord. Ærligt omfang: KVN-formen og afbildningen af TLE leveres her; XML-gengivelsen (ndm/omm) og en rundtur med en referenceparser er fortsat opfølgende arbejde. - Partikelfilter med sekventiel vigtighedsresampling. Nyt
src/particle_filter.rstilføjer den ikke-lineære, ikke-gaussiske estimator bag kortstøttet navigation uden GPS (terrænreferenceret eller tyngdekortmatchning):predict(propager partikler gennem dynamikken + gaussisk procesindstøj),update(omvægt efter en sandsynlighed for måling for hver partikel), systematiskresample, monitoren for degenerationeffective_sample_sizeog estimatet som vægtet middel. Seks tests forankrer den deterministiske kerne præcist — ESS fra 1…N, systematisk resampling, der vælger indeks i forhold til vægten, den konvekse kombination ved det vægtede middel, en gaussisk sandsynlighed, der trækker estimatet hen på målingen, adfærden ved resampling til ensartet fordeling og deterministisk predict med sådd. Ærligt omfang: motoren leveres her; referencekortene (SRTM-højde, EGM-tyngdeanomali) og kortets målemodel er fortsat opfølgende arbejde (gitteret med bilineær sampler iionexville tjene et tyngde-/terrænkort lige så godt). - IONEX-lignende TEC-ionosfærekort. Nyt
src/ionex.rstilføjer det målte alternativ til den udsendte Klobuchar-model for ionosfæren: etTecGrid(et regulært bredde/længde-gitter af lodret TEC, et globalt ionosfærekort fra IGS) med bilineær interpolation i et gennemtrængningspunkt (vtec_at, begrænset uden for gitteret) og forsinkelsen af første ordenΔ = 40.3·TEC/f²(vtec_to_delay_m,delay_at). Fire tests forankrer det:1 TECU ≈ 0.162 mved L1 med skaleringen1/f², interpolation præcis i knuder, bilineære midtpunkter, der er gennemsnit af hjørnerne, og forespørgsler uden for gitteret begrænset til kanten. Ærligt omfang: gitteret og interpolationen leveres her; parsing af filformatet IONEX, interpolation i tid mellem kort og kortlægningsfunktionen for skråstilling er fortsat opfølgende arbejde. - Geometriske korrektioner ved tidsoverførsel (Sagnac + GNSS common-view). Nyt
src/timegeo.rstilføjer de to deterministiske effekter, som en rigtig urammenligning skal tage højde for, som supplement til den stokastiske tovejsmodel itimetransfer:sagnac_correction(Δt = (ω_E/c²)·(x₁y₂ − x₂y₁), forsinkelsen fra en roterende Jord — nogle få titals ns for kontinentale baselines) ogcommon_view_offset, GNSS common-view-enkeltdifferensen, der præcist ophæver fejlen i satellittens ur og genfinder forskydningen mellem stationerne. Tre tests forankrer dem på præcise referencer: Sagnac på ≈ 33 ns for et kvart omløb ved ækvator, antisymmetri og tilfældene med nul radialt/polært samt den præcise ophævelse af satellittens ur. Ærligt omfang: et fuldt budget for TWSTFT-transponder/hardwareforsinkelser og en ionosfærefri PPP-løsning til tidsoverførsel er fortsat opfølgende arbejde. - Kraftmodel for banen (to legemer + J2). Nyt
src/forces.rstilføjer den accelerationsmodel, som en numerisk propagator integrerer:two_body_accel(−μ·r/|r|³), forstyrrelsen fra fladtrykningenj2_accel(den lukkede form i ECI) oggravity_accel, der summerer dem — sæt den sammen medsrc/integrator.rssomf(t,[r;v]) = [v; a(r)]. Den udstiller også de analytiske sekulære rater for J2 (j2_secular_rates): regression af knudenΩ̇, rotation af apsiderneω̇og drift i middelanomalienṀ. Seks tests forankrer fysikken på præcise referencer:μ/r²for leddet med to legemer, den lukkede form for J2 ved ækvator (~10⁻³ af størrelsen for to legemer), den kritiske inklination (63,4349°), der fryser perigæum (ω̇ = 0), regressionen af knuden for ISS (Ω̇ ≈ −5°/day) og den østlige drift af en retrograd solsynkron bane. Ærligt omfang: kun to legemer + J2; J3–J6, modstand, SRP og tredjelegemer er opfølgende arbejde. - Permalinks til scenarier, der kan deles. Nyt
src/permalink.rstilføjer en afhængighedsfri Base64-codec efter RFC 4648 (standardalfabetet+/med padding og et URL-sikkert alfabet-_uden padding) og indpakningerneencode_scenario/decode_scenario, så en TOML fra playground kan kodes til en forespørgselsparameter?s=og deles som en URL. Udstillet til browseren som wasm-bindingerencode_permalink/decode_permalink. Fire tests forankrer det på de kanoniske vektorer i RFC 4648 ("foobar"→"Zm9vYmFy"osv.), en URL-sikker rundtur for et scenarie (ingen+///=at escape), afvisning af ugyldige symboler og en rundtur med alle 256 bytes. Ærligt omfang: codec og bindinger leveres her; knappen Del i playground, diagrammet med flere serier i Plotly/D3 og A/B-sammenligningstilstanden er fortsat opfølgende arbejde. - Gauss–Newton batch med mindste kvadrater (den differentielle batch-korrektor). Nyt
src/batch_ls.rstilføjer den estimeringskerne, som en banebestemmelse med batch (eller enhver parametertilpasning) hviler på:gauss_newtonlinearisér en modelh(x)leveret af brugeren med en Jacobi-matrix af centrale finite differenser, danner og løser de vægtede normalligninger(HᵀWH)·Δx = HᵀW·(z − h(x))(genbruger den testede matrixinvers) og itererer til konvergens med vægte for hver måling. Fire tests forankrer det: en lineær linjetilpasning, der når den præcise løsning med vægtede mindste kvadrater, en ikke-lineær tilpasninga·exp(b·t), der genfinder de sande parametre, en 3D-multilateration af afstande, der genfinder en kendt position ud fra støjfri afstande (varianten for banebestemmelse), og afvisning af underbestemte/inkonsistente input. Ærligt omfang: dette er den generiske korrektormotor; målemodellen for bane med afstand/afstandsrate/azimut-elevation, den analytiske tilstandsovergangsmatrix for J2 og validering på publicerede tilfælde er fortsat opfølgende arbejde. - Spoofing-monitorer i RF-laget (AGC-effekt og SQM). Nyt
src/spoof_monitors.rstilføjer to uafhængige spoof-detektorer i modtagerens front end som supplement til den urstøttede monitor for tidsspoofing ispoof: en AGC-effektmonitor (combine_power_dbminkoherent effektsum +AgcMonitor), der markerer den overskydende modtagne effekt, som en spoof-sender tilføjer ud over en konfigurerbar dB-margin, og en signalkvalitetsmonitor (bpsk_autocorrtrekantet kodeautokorrelation +SqmMonitor), der markerer den ubalance mellem Early og Late i korrelatoren, som multipath/meaconing/replay giver. Fire tests forankrer de præcise lukkede former (3,01 dB ved en fordobling af effekten, summen10·log10(N), den trekantedeR(τ)=1−|τ|og alarmtærsklen på 10 % for Early/Late). Ærligt omfang: den fulde paritetsdetektor for spoofing med RAIM-konsistens, fusionen af monitorernes output i flere lag og validering mod publicerede spoofing-vektorer fra Spirent/ION GNSS+ er fortsat opfølgende arbejde. - Adaptiv numerisk ODE-integrator. Nyt
src/integrator.rstilføjer det første stykke af en numerisk propagator (Kshanas banepropagering er ellers analytisk SGP4/SDP4): et generisk Runge–Kutta-trin af fjerde orden (rk4_step) over ethvert system af første ordeny' = f(t, y)og en adaptiv driver (integrate), der styrer den lokale fejl ved trindobling (Richardson-ekstrapolation) med den standardmæssige trinregulator0.9·(tol/err)^(1/5)og logik for accept/afvisning. Seks tests forankrer den på præcise løsninger: eksponentialfunktioneny' = y → etil< 1e-9, reduktionen af fejlen med ~16× for hvert halverede trin, som beviser konvergens af fjerde orden, bevarelse af energi/tilbagevenden for den harmoniske oscillator over en hel periode og den adaptive driver, der klarer en stram tolerance med variable trin. Ærligt omfang: dette er integratorens kerne og dens fejlstyring; de indlejrede tableauer Dormand–Prince RK5(4)/RKF7(8) og den hierarkiske kraftmodel for banen (to legemer + J2–J6 + modstand + SRP + tredjelegeme), der gør den til enNumericalPropagator, er fortsat opfølgende arbejde. - Unscented (sigma-punkt) Kalman-filter. Nyt
src/fusion/ukf.rstilføjer det skalerede unscented Kalman-filter (Julier & Uhlmann; Wan & van der Merwe) som en generel estimator medntilstande over procesfunktioner og målefunktioner leveret af brugeren — den sigma-punkt-estimator, som en tæt koblet GNSS/INS-navigator bruger, når modellen for pseudoafstand/Doppler er stærkt ikke-lineær, og Jacobi-matricen i et EKF forringes. Det omfatter den understøttende tætte lineære algebra (Cholesky-faktor til spredning af sigma-punkter, Gauss–Jordan-invers til innovationens kovarians) og en Joseph-fri opdateringP⁺ = P⁻ − K S Kᵀ. Seks tests fastlåser det, hvor de vigtigste udnytter den præcise egenskab, at den unscented transformation for en lineær model gengiver Kalman-filteret til numerisk præcision (predict, update og en hel cyklus predict+update stemmer alle med et håndkørt lineært KF, plus en analytisk 1D Bayesiansk kontrol af posterior og identiteterne for Cholesky/invers). Ærligt omfang: dette er estimatormotoren; den tæt koblede GNSS/INS-navigator med 17 tilstande, målemodellen for pseudoafstand/Doppler og valideringsscenariet for udfald er fortsat opfølgende arbejde. - Beskyttelsesniveauer i ARAIM med to konstellationer. Nyt
araim_dual_raimudvider Advanced RAIM med enkeltfejl (araim_raim) med fejltilstanden for hele konstellationen fra EU ARAIM / DO-316: ved siden af hypoteserne om ingen fejl og fejl i enkeltsatellitter bidrager hver konstellation (mærket for hver satellit) med én hypotese, der fjerner alle dens satellitter på én gang, med a prioriP_const(en nyDualFaultPriors { p_sat, p_const }). Hver hypotese tilføjer et led til den samme MHSS-integritetssum, så VPL/HPL er de mindste grænser, hvis samledeP_HMIholder sig inden for budgettet over ingen fejl + enkelt-SV + fejl i konstellationer (Bonferroni-fordelingen af falske alarmer er over alleN + Chypoteser). MedP_const = 0er resultatet bit-for-bitaraim_raim; en bruger med en enkelt konstellation returnererNoneved sin egen konstellationsfejl (den kan ikke udelukkes) — hvilket præcis er grunden til, at dækning med to konstellationer betyder noget. Fire tests dækker ækvivalensen, udvidelsen af beskyttelsesniveauet, utilgængeligheden med en enkelt konstellation og validering af input, og genbruger den eksisterende maskineri for delløsninger med løsningsadskillelse. - IAU 2006-præcession (Fukushima–Williams-vinkler og matrix for bias-præcession). Nyt
src/precession.rsimplementerer IAU 2006-præcessionen (P03; Capitaine, Wallace & Chapront 2003): de fire Fukushima–Williams-vinkler(γ̄, φ̄, ψ̄, ε̄_A)som polynomier i Julian-århundreder i TT (fw_angles) og rotationsmatricen for bias-præcession fra GCRS til middel for datoen bygget ud fra dem med konstruktioneniauFw2mi SOFA (precession_matrix, med hjælpernegcrs_to_mod/mod_to_gcrs). Det er det første stykke af inertielt referencesystem oven på den eksisterende GMST-baserede reduktionframes. Otte tests validerer mod lukkede ankre — den middel skråstillingε̄ = 84381.406″ = 23.4392794°i J2000, de publicerede konstante led i vinklerne, akkumuleringen af generel præcessionψ̄ ≈ 5039.998″over et århundrede, ortonormalitet af matricen ogdet = +1, værdien nær identitet (kun bias i referencesystemet) i J2000 og den nettorotationsvinkel≈ 1.40°/århundrede. Ærligt omfang (ROADMAP.md): kun præcession — nutationen IAU 2000A med 678 led, hele kæden TEME→GCRS og et numerisk krydstjek med SOFA/ANISE på µas/<10 m er fortsat opfølgende arbejde. - Fysik for et kold-atom-interferometer-(CAI)-accelerometer fra første principper.
src/inertial/quantum_imu.rsmodellerer et Mach–Zehnder-atominterferometer med tre pulser fra første principper i stedet for efter et datablad: effektiv bølgevektork_eff = 4π/λ, interferometerfaseΦ = k_eff·a·T², kvanteprojektionsstøj (shot noise)σ_Φ = 1/(C·√N), følsomhed over for acceleration for hvert skud, kontrastens henfaldC(t) = C₀·e^(−t/τ)og — det afgørende —CaiAccelerometer::q_va(), som afleder den hvide PSD for acceleration, som den klassiskeAccelModelallerede bruger, ud fra antallet af atomer, afhøringstiden og kontrasten. Modellen dækker nu også vibrationskobling — det dominerende led i en rigtig enhed: overføringsfunktionen fra acceleration til fase i interferometeret|H(ω)| = (4/ω²)sin²(ωT/2)(accel_transfer_function), fasevariansen ved hvid PSDσ_Φ² = k_eff²·S_a·T³/3(vibration_phase_variance_white, med et numerisk krydstjek af båndintegraletvibration_phase_variance_band), den langs strålen projiceredebeam_axis_projectionaf rang 1 ogCaiAccelerometer::vibration_phase_noise/vibration_limited_accel(sidstnævnte reduceres til gulvet√(S_a/(3T)), der er uafhængigt afk_eff). Elleve tests verificerer fysikken i hånden (Rb-87k_eff ≈ 1.61×10⁷,Φ(1 g) ≈ 1.58×10⁴ rad,σ_a ≈ 0.13 µg/skud for gulvet for shot noise mod et vibrationsgulv på ≈ 5,9 µg,1/T²,1/√Nog skaleringslovene forT³). Ærligt omfang idocs/QUANTUM.md: dette spænder over gulvet for projektionsstøj og det vibrationsbegrænsede område over det; laserfasestøj, systematik fra Coriolis og lysskift og valideringsscenarierne for PHARAO/CARIOQA er fortsat opfølgende arbejde. - Kvante-CAI-accelerometer koblet ind i det inertielle scenarie. Et accelerometer i et inertielt scenarie med dødregning løses nu til en ny
ImuKind—Classical(den eksisterende sensor med koefficienter fra datablad) ellerQuantumCai, når det bærer en valgfri blok[cai](CaiCfg: bølgelængde, pulsafstand, antal atomer, kontrast, cyklustid og en valgfrivibration_psdfor platformen). PSD'en for velocity random walkq_vafor en sensorquantum_caier afledt af interferometerets fysik — gulvet for shot noise plus, når en vibrations-PSD er givet, bidraget begrænset af vibration i kvadratur — i stedet for en leveret koefficient, og kørslens proveniens registrerer, at støjen er afledt af fysik. Feltetcaierskip_serializing_if = "Option::is_none", så eksisterende scenarier udelader det og serialiserer byte-identisk (scenariehashen er uændret). Fem tests dækker afledningen, summen af vibration i kvadratur, valget mellemClassical/QuantumCai, serialisering med stabil hash og en ende-til-ende-kørsel drevet af CAI. - Optimering af konstellationsdesign og geometri for streets-of-coverage.
src/walker.rsfåroptimize_walker_design, en gradientfri gitteroptimerer, der søger i designrummet{planes × sats × inclination}og returnerer det bedste Walker-design under et valgtDesignObjective—MinSatellitesForCoverage,MaxCoverageellerMinWorstPdop— over det allerede validerede PDOP-sweep (en test bekræfter, at den returnerer vinderen fundet ved brute force). Plus de analytiske lukkede former for streets-of-coveragecoverage_half_angle_rad(λ = arccos(Re/r·cos ε) − ε) ogstreet_half_width_rad(cos c = cos λ / cos(π/s), Rider/Beste), kontrolleret i hånden mod lærebogsgeometri og med påvisning af hullet ved for få satellitter. Den fulde Rider-løser for mindste antal satellitter til global dækning, en 3D-globus i playground og et krydstjek af DOP med et eksternt værktøj er fortsat opfølgende arbejde. - SP3-eksport af præcis efemeride fra CLI. Et propageret bane-/konstellationsscenarie kan nu skrives til en SP3-c-fil:
kshana <orbit.toml> --export-sp3 out.sp3, ellerexport_sp3 = truei scenariet skriver automatisk<scenario>.sp3(api::export_sp3/auto_export_sp3,OrbitClockScenario::to_sp3_string, valgfriepoch). En rundturstest (tests/sp3_export_roundtrip.rs) propagerer det rigtige øjebliksbilledegps-opsfra Celestrak, eksporterer det, parser det igen og bekræfter, at de genfundne ECEF-positioner stemmer med SGP4-referencen over 24 h til < 0,5 m (godt inden for tolerancen på 10 m for TLE-klassen). README dokumenterer rollen for interoperabilitet (RINEX → RTKLIB/gLAB, SP3 → Ginan/produkter med præcise baner). - Koblet Kalman-filter for ur+position (kovarians på tværs af blokke).
src/fusion/coupled.rsCoupledPntFilterer ét stablet[pos, vel, phase, freq]-filter (opdateringer i Joseph-form), hvis pseudoafstand-målingρ = g·pos + c·phase + noisereelt kobler blokkene for position og ur — i modsætning til den ældre fusionspakkes to uafhængige filtre med to tilstande, der holder krydskovariansen præcis nul. Valideret: en delt pseudoafstand driverP[pos,phase]forskellig fra nul; to forskellige geometrier løser i fællesskab tilførte forskydninger i position+ur, som en enkelt afstand ikke kan adskille; en positionsbestemmelse kun med uret skærper positionen gennem krydskovariansen (gevinsten, som afkoblede filtre ikke kan give); og NEES fra Monte Carlo er konsistent med χ²(4). Det er realiseringen med 1 frihedsgrad (fusionspakkens dimensionalitet); udvidelsen til 3D med 8 tilstande og koblingen ind i den kørbare pakke er registreret som opfølgende arbejde. - Overvågning af Kalman-filterets konsistens (NIS/NEES). Opdateringen af kovariansen i urfilteret med to tilstande er nu i Josephs stabiliserede 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, kontrolleret mod tabel).
- KRKᵀ
docs/PROVENANCE.md— én citerbar tabel over proveniens. Samler hver sensorparameter (ur, inertial, tidsoverførsel), fysisk/algoritmisk model (bane, tidssystemer, referencesystemer, ionosfære/troposfære, integritet, detektion, jamming, Allan) og valideringsdatasæt (AIAA 2006-6753, Celestrakgps-ops) med dens publicerede kilde — datablad, artikel, ICD eller standard — og en ærlig modenhedsmærkning (flyvekvalificeret / jordlaboratorium / rummål på jordhardware). Der linkes til den fra introduktionen i README og dokumentationstabellen; supplerer de strengeprovenancefor hver kørsel, som allerede følger med i resultat-JSON.- Typet scenarie-API. Dispatch sker nu på en typet enum
ScenarioKindi stedet for en match på en rå strengkind(ScenarioKind::classify+ udtømmende dispatch), så tilføjelse af en pakke kontrolleres ved kompilering. Nye typede flader ved siden af den uændrederun_toml, der returnerer streng:run_scenario(src) -> Result<RunOutput, KshanaError>med en struktureret taksonomi for fejl (InvalidInput/NonConvergence/Unsupported/IoError, hver med et stabiltkind_tag()); et traitScenarioog udvidelsespunktetExternalPack(pakkenjamminger koblet gennem det som det gennemarbejdede eksempel); og introspektion medlist_scenario_kinds()(navn, beskrivelse, påkrævede/valgfri felter for hver type). Python- og WebAssembly-bindingerne fårlist_kinds()ogerror_kind(). Dokumenteret idocs/ARCHITECTURE.md. - Rigtig GPS-konstellation + dækning af driftskuverten.
scenarios/orbit-sgp4-gps.tomlleveres nu med et rigtigt øjebliksbilledegps-opsfra Celestrak (2021-07-28, 30 satellitter) i stedet for syntetiske Walker-TLE'er, medstrict_checksum = true, så det kun indlæses, når hver TLE-kontrolsum er gyldig;scripts/fetch_tles.shdokumenterer reproducerbar opdatering, og README krediterer kilden med åbne data. Nytests/scenario_coverage.rsafprøver hver pakke over ≥5 varianter af kuverten og hævder endeligt/afgrænset output, bekræfter, at gulvet for flicker-FM målbart forringer et urs glidning, når det er slået til (nu sat i tre leverede scenarier), og bekræfter, at fusionsfilteret konvergerer med en realistisk bias i accelerometeret forskellig fra nul (inden for 3× tilfældet med nulstillet bias), og lukker realismehullet "fusion virker kun med nulstillede biases".docs/VALIDATION.mdfår en tabel over driftskuverten. - GNSS-simulering i måledomænet (typen
gnss-sim). En fremadrettet model på niveau med pseudoafstande: for hver synlig satellit syntetiserer denρ = geometric range + c·δt_rx − c·δt_sv + I + T + noise + multipathog L1-Doppler, med Klobuchar-ionosfæren for én frekvens (IS-GPS-200 §20.3.3.5.2.5) og Saastamoinen-troposfæren i zenit projiceret med kortlægningsfunktionen Niell (1996) — udstillet som TOML-blokkene[iono]og[tropo]. Residualerne føder snapshot-RAIM for HPL/VPL for hver epoke, og et JSON-arraygnss_measurements[]bærer hver SV's pseudoafstand, Doppler, C/N₀ og korrektioner for ionosfære/troposfære. En kørsel uden støj gengiver geometri + korrektioner til under en millimeter (CI-test). Nysrc/gnss_sim.rsogscenarios/gnss-sim-raim.toml. - Stokastisk detektor for tidsspoofing (typen
spoof). Spoof-pakken kører nu en rigtig detektor i stedet for en deterministisk sammenligning af rampe mod grænse: fire former for injektion (linear_ramp,step_jump,meaconing,replay), en tosidet χ²₁-energitest / Neyman–Pearson på monitorens urstøttede statistik med tærsklen sat ud fra et mål for budgettet for falske alarmertarget_pfaog sandsynligheden for missede detektionerP_mdrapporteret både i lukket form og ved Monte Carlo (mc_runsforsøg for hver hypotese — de to stemmer til nogle få ×1/√N). Kvalitetsmålet for sikkerhed er nu1 − P_mdved den operationelt skadelige (spec) størrelse. Nysrc/detection.rs(gaussiske haleføringer, NP-/energitest, Monte Carlo P_fa/P_md) ogscenarios/spoof-meaconing.toml. Bagudkompatibel: en bar[attack] rate_ns_per_saccepteres stadig som en lineær rampe.
Ændret#
- Definition af kvalitetsmålet for sikkerhed (typen
spoof): fra den analytiske grænse for detekterbarhed1 − min_detectable/thresholdtil den stokastiske detektors1 − P_md. Urpakkens feltsecurityforbliver den hurtigere analytiske proxy.
Tilføjet (fortsat)#
- RF-jammingmodel (typen
jamming). En interferensmodel med linkbudget, der omsætter en jammers effekt og geometri til tab af lås for hver satellit: forholdet mellem jammer og signal ud fra tab i fri luft og antennegevinsten ved modtagelse i hver retning, den effektive C/N₀ via den standardmæssige anti-jam-ligning (processeringsgevinst ved despreading × spektralseparationsfaktorenQ; Kaplan & Hegarty §9,4) og en konfigurerbar tracking-tærskel, scoret over en Walker-konstellation som kvalitetsmåletavailability_under_jamming. Nysrc/jamming.rsogscenarios/jamming-demo.toml. Ærligt omfang (ingen multipath, terrænskygge, AGC eller adaptiv nulning) er dokumenteret idocs/CAPABILITY.md/docs/VALIDATION.md. - Generisk N-D parametersweep over enhver scenarietype (
sweep-nd). Det tidligere N-D-sweep gjaldt kun urpakken.sweep-ndvarierer punkterede TOML-nøgler i et scenarie[base]over det kartesiske produkt af dets akser, sender hver gitterknude videre gennem den normale køresti igen og aflæser ét eller flere mål i resultatet ved en punkteret JSON-sti — så det virker for hver pakke (inertial, gnss-ins, integritet, spoof, …) uden at kobles til hver pakkes Rust-type. Gitterknuder evalueres parallelt over OS-tråde på native mål (ingen ekstra afhængighed); wasm falder tilbage til sekventiel. Deterministisk og rækkevist uanset antallet af tråde. Nyt eksempelscenarios/sweep-nd-inertial.toml. - TOML-konfigurerbar deterministisk fejlmodel for IMU i pakken
gnss-ins. Den treaksede strapdown-fejlkæde (skalafaktor, fejljustering, g-følsomhed, kvantisering, rate-rampe; IEEE Std 952-1997 §A.2, Groves 2013 §4,3) kan nu nås for hver sensor fra en scenariefil via en valgfri blok[imu_*.error_model], lagt oven på de konstante biases ved opstart. Hvis blokken udelades, forbliver hver sensor en ren kilde med konstant bias, så eksisterende kørsler afgnss-inser uændrede. Det kobler den hidtil kun bibliotekbaserede fejlmodel ind i en kørbar pakke og et kvalitetsmål.
0.10.0 - 2026-06-04#
Ændret#
- Validering på reelle data. Parseren for multi-GNSS RINEX-navigation, GLONASS RK4-propagatoren og SP3-læseren afprøves nu mod ægte IGS/DLR-filer (en rigtig blandet RINEX 3-broadcast-navfil og et IGS SP3-c-banprodukt), ikke kun mod selvskrevne eksempler — og hævder ikke-tomme sæt af satellitter og endelige, fysisk dimensionerede ECEF-positioner. Fixturerne er kun til test (udeladt af den publicerede crate); se
tests/fixtures/igs/NOTICE. - RAIM på geometri fra en reel referencebane. Kernerne for snapshot, løsningsadskillelse (MHSS) og beskyttelsesniveauer i ARAIM er nu valideret mod den reelle geometri for den præcise IGS-bane (SP3), ikke kun mod syntetiske konstellationer: geometrien for sigtelinjen bygges ud fra den første SP3-epoke ved en rigtig jordstation, og testene hævder beskyttelsesniveauer på meterniveau, der er tilgængelige for APV-I, at en bias i pseudoafstand på 60 m udløser χ²-monitoren, at løsningsadskillelse identificerer den fejlbehæftede satellit, og at ARAIM's niveauer holder sig inden for den tildelte
P_HMI. Lukker hullet med kun validering på syntetisk geometri (paritet med gLAB i modtagerdomænet over en hel RINEX-bue er fortsat et punkt på køreplanen — det kræver en løsning for pseudoafstand).
Tilføjet#
- Konfidensintervaller for hver knude i N-D-parametersweepet (
sweep::nd_sweep_ensemble). Hver gitterknude i det N-dimensionale sweep med kartesisk produkt kan nu evalueres som et Monte Carlo-ensemble af seeds og rapporterer målets middel, percentiler og et percentil-bootstrap-KI på 95% for hver knude (for begge ure) — et statistisk ærligt sweep frem for ét træk for hver knude. Genbruger maskineriet for ensemble/bootstrap (metric_stat); deterministisk;runs = 1reduceres præcist til det enkelte seednd_sweep. (At generalisere sweepet til alle pakker, hvilket er viklet ind i refaktoreringen af typet Scenario, og parallel udførelse mangler stadig.) - NaveGo-krydsvalidering af IMU-støjkæden (
tests/navego_imu_crossval.rs). Et eksternt krydstjek mod NaveGo (R. Gonzalez' open source INS/GNSS-værktøjskasse): gengiver den syntetiske rundtur inavego_example_allan.mpå dens offentliggjorte Microstrain 3DM-GX3-35-referenceprofil og bekræfter, at vores overlappende ADEV-estimator genfinder NaveGos koefficienter for hastigheds- og vinkel-random-walk (ADEV(1 s) = σ·√dt) til under 5% med den forventede −1/2-hvidstøjshældning. (Den optagede STIM300-log i formatet.matpå 40 MB indlæses ikke, da den er låst bag et binært format.) - Tæt koblet (pseudorange) GNSS/INS-opdatering.
GnssInsEkf::update_tightly_coupled(og indpakningenClosedLoopInsGnss::fuse_tightly_coupled) implementerer den tidligere stubbede måling i afstandsdomænet: innovationen er den forudsagte afstand fra INS-positionen til hver satellit i forhold til den målte pseudorange, med en sigtelinje-Jacobian på positionsfejlen. Fordi hver satellit er en skalar måling, bliver filteret ved med at korrigere med færre end fire satellitter — hvor en løst koblet PVT-positionsbestemmelse ikke findes. Fem tests dækker nulstilling af fejlen med fire satellitter, korrektion med to satellitter (ingen PVT mulig), observerbarhed langs sigtelinjen med en enkelt satellit og inputvalidering. Kun pseudorange; bærebølgefase og en eksplicit tilstand for modtagerens ur er stadig på køreplanen. Cargo-featurentight_coupling, som ikke blev brugt (og som spærrede for den gamle fejlstub), er fjernet. - Løst koblet GNSS/INS-scenariepakke (
kind = "gnss-ins",src/fusion/pack.rs). Forbinder den treaksede strapdown-navigator og den 15-tilstands fejltilstands-EKF (closed_loop/gnss_ins_ekf) til et scenarie, der kan køres, med et kvalitetsmål — EKF'en disciplinerer mekaniseringen mod støjende GNSS-positionsbestemmelser, mens dækningen er oppe, og glider derefter igennem udfaldet; det erstatter den ældre 1-DOF-skalarpakkes nulstilling med snap til reference med ægte fusion. Resultatet rapporterer den fusionerede serie af vandret fejl, det scorede positionskvalitetsmål (tilgængelighed / RMS under udfald / holdover) og den åbne sløjfes frie INS-RMS til sammenligning; et kvante-/klassisk IMU-par adskiller sig kun i den sande bias. Aktiveres fra CLI-, Python- og wasm-indgangen med et eksempel iscenarios/gnss-ins.toml. Ærlig rammesætning: kun løst koblet, én deterministisk bane, og den fusionerede fejl under udfaldet er begrænset af en gulvværdi sat af attitudefejlen ved overdragelsen (derfor påstås den ikke at skalere med bias) — de robuste fund er, at fusion slår ustøttet dødregning for en sensor med bias, og at en sensor med lavere bias har den bedre ustøttede udglidning. - Konstellationsudformning på den validerede SGP4-kerne (
src/walker.rs). Et nyt modulwalkerudsender et udformet Walker-delta-mønster (i: T/P/F) som SGP4-middelelementer, så den syntetiske konstellation propagerer gennem den samme SGP4-vej, som er valideret til 4,12 mm mod AIAA 2006-6753-vektorerne — ikke den analytiske Kepler-generator. Oven på den:pdop_sweeptabulerer dækning og median-/værste-PDOP over et udformningsgitter{planes × sats × inclination}, ogcoverage_revisitrapporterer dækningsandelen og revisit-huller (værste/gennemsnit) i et jordpunkt. Valideret ved de fysiske monotonicitetsrelationer, som en afvejning skal følge (flere satellitter ⇒ højere dækning, lavere PDOP, kortere revisit). Særskilt er et ægte Celestrakgps-opsTLE-snapshot (2021-07-28, 30 operative GPS-satellitter) tilføjet som en fixture kun til test, og vejen fra rigtige TLE'er → SGP4 → ECEF-geometri er valideret mod det (hele MEO-skallen inden for 1%, ni satellitter i sigte på samme tid ved PDOP 1,64), ved siden af de eksisterende SP3- og RINEX-veje med rigtige data. - Støjtype-specifikke effektive frihedsgrader for Allan-konfidensintervallerne.
allan::edf_overlapping_adevimplementerer de lukkede former i NIST SP 1065 tabel 5 (Stable32's enkle sæt) for alle fem kanoniske potenslov-støjtyper — hvid/flicker PM, hvid/flicker FM, random-walk FM — og erstatter det konservative ikke-overlappende antal som χ²-frihedsgrader. En ny enumPowerLawNoiseogclassify_power_lawidentificerer den dominerende type ud fra hældningen af optagelsens modificerede Allan-deviation (MDEV adskiller hvid fra flicker PM, hvor ADEV ikke kan), ogoverlapping_adev_curveknytter nu den identificerede støjtype, dens edf og et konfidensbånd på 95% til hvert punkt på den eksporterede ADEV-kurve (AdevPointfårnoise/edf/ci_lo/ci_hi, additivt med serde-standardværdier). Valideret på to måder: de fem formler stemmer med håndudregnede værdier til 1e-12, og et Monte Carlo-ensemble af 4 000 optagelser med hvid FM bekræfter, at formlen forudsiger estimatorens faktiske chi-i-anden-edf inden for 20% (og at den klart slår det konservative antal). Otte nye tests. - Stokastisk model for tovejs tidsoverførsel.
timetransfer::TwoWayLinkerstatter den rene hvidstøjs-sampler med en fysisk begrundet model: den gensidige (fælles) forsinkelse i signalvejen ophæver sig selv i estimatet(m_AB - m_BA)/2(two_way_offset_estimate, så to uafhængige envejsmålinger gennemsnittes til1/sqrt(2)), og resten er den ikke-gensidige differentielle forsinkelse — modelleret som en farvet hvid-FM + random-walk-FM-proces (den validerede modelClockModel), hvilket giver synkroniseringsfejlserien en realistisk Allan-signatur (sigma_y^2(tau) = q_rw*tau/3) i stedet for flad hvid støj.LinkCfgfårq_wf_s/q_rw_s(serde-standard 0 ⇒ den ældre adfærd med kun hvid støj, bit for bit), link-kvalitetsmålet rapportereradev_tau0(modellens Allan-deviation ved basisskridtet), og scenariet og CLI'entimetransfereksponerer dem. Golden-kvalitetsmålet er pinnet igen. Seks håndafledte tests (ophævelse af fælles mode, tovejsgevinsten på sqrt(2), RWFM-loventau/3via linkets egenstep(), ækvivalens med den ældre adfærd vedq=0, determinisme og ende-til-ende-eksponering af kvalitetsmålet). - Numerisk paritet med Stable32 for Allan-familiens estimatorer (NBS14).
tests/allan_reference.rsvaliderer de overlappende ADEV-, modificerede ADEV-, tidsdeviations- og overlappende Hadamard-estimatorer mod Stable32's referencedeviationer for det kanoniske NBS14-datasæt (W. J. Riley, Handbook of Frequency Stability Analysis, NIST SP 1065, ca. s. 107) ved tau = 1, 2 med en relativ tolerance på 1e-4 — de faktiske afvigelser er ca. 1e-6. Det fastlåser estimatormatematikken mod de facto-referenceimplementeringen og ikke kun mod estimatorernes egen analytiske selvkonsistens. Kun de offentlige referencetal bruges; ingen tredjepartskode. - Lodret Stanford-integritetsdiagram eksporteret af scenariet
integrity. Scenarietypenintegrity, som kan køres, eksporterer nu et lodret Stanford(-ESA)-diagram ved siden af HPL/VPL-tilgængelighedskortet: for hver beskyttet epoke afbildes et seedet, reproducerbart fejlfrit træk af afstandsfejl gennem geometrien til en faktisk lodret positionsfejl og klassificeres i forhold til VPL og den lodrette alarmgrænse (Available / System-Unavailable / Misleading / Hazardously-Misleading). Diagrammet (punkter pr. epoke + antal pr. region) ligger i resultat-JSON'en, og integritetshændelses-/HMI-tællingerne i CLI-oversigten, så Stanford-klassifikatoren — tidligere kun i biblioteket — kan nås fra ende til anden.IntegrityScenariofår et feltseed(standard 0), der styrer fejlrealiseringen; selve tilgængelighedskortet forbliver rent geometrisk og uafhængigt af seed. - ARAIM-integritetsrisikobudget (P_HMI) for beskyttelsesniveauerne.
raim::araim_raimudleder de vandrette og lodrette beskyttelsesniveauer ud fra et eksplicit integritetsrisikobudget i stedet for en fast multiplikatorK_md: for løsningen med alle satellitter i sigte og for hver delløsning med udelukkelse af en enkelt satellit opbygger den pr. akse tripletten(prior, detection threshold, σ)for hver tilstand, hvorefteraraim_protection_levelløser det mindste PL, hvis summerede sandsynlighed for farligt vildledende information (araim_integrity_risk,P_HMI = Σ_k p_fault,k · Q((PL − T_k)/σ_k), Blanch et al. Baseline ARAIM) holder sig inden for den tildelteP_HMI. Resultatet rapporterer den integritetsrisiko, niveauerne faktisk opnår, så en bruger eksplicit kan afveje integritet mod alarmgrænsen. Seks håndafledte tests (lukkede former for fejlfri og tærskelbaseret enkelttilstand, summation/monotoni over flere tilstande, ende-til-ende fejlfri beskyttelse, hvor et budget, der er 10⁵× strammere, hæver PL, fejldetektering/-identifikation og redundansgulvet med seks satellitter). Enkeltfejls-MHSS er ARAIM-baseline; samtidige fejl i delmængder af flere SV'er, konstellationsdækkende fejltilstand og validering mod gLAB-referencedatasæt er dokumenterede udvidelser. - Tohastigheds coning/sculling-kompensation til strapdown-mekaniseringen.
inertial::mechanization::coning_sculling_compensatefolder de højfrekvente coning-led (attitude) og rotation+sculling-led (hastighed) ud af en grov opdaterings ordnede IMU-inkrementer i delintervaller, så enNavState::step_incrementsmed moderat rate gengiver vibrationsensrettet bevægelse, som et groft skridt over de rå summer overser. En valideringstest kører et 10 Hz coning+sculling-miljø i 60 s og sammenligner reference med fin rate, naiv grov integration og foldet grov integration: foldningen skærer positionsfejlen med ca. 18× (fra meter af naiv drift til under en decimeter), hvilket bekræfter, at coning/sculling-leddene er bærende. Et typealiasScalarErrorBudgetkalder den ældre 1-DOF-modelAccelModelved dens rette navn, adskilt fra navigatoren med tre akserNavState. - Parser til RINEX-observationsfiler. Et nyt modul
rinex_obslæser RINEX 3.0x / 4,00 observationsfilen — modtagerens faktiske målinger — og fuldender RINEX-parret ved siden af den eksisterende parser til navigationsbeskeder.parse_obsafkoder headeren (version/type, listerneSYS / # / OBS TYPESpr. system med fortsættelseslinjer, omtrentlig position, interval, tidspunkt for første observation) og hver epokes poster pr. satellit: pseudorange, bærebølgefase, Doppler og signalstyrke, nøglet på deres observationskode i RINEX 3 (C1C,L1C, …) med flagene for tab af lås (LLI) og signalstyrke (SSI), hvor et tomt felt bevares som fraværende frem for nul. Ærligt omfang: dette er indlæsning af standardformatet (en rigtig observationslog fra en RTKLIB-/gLAB-/IGS-station ind, typede målinger ud), ikke en positioneringsmotor — ingen pseudorange-løsning, PPP eller RTK her. - CCSDS OEM-skriver (Orbit Ephemeris Message). Et nyt modul
oemeksporterer en propageret konstellation som en gyldig CCSDS 502.0-B OEM-meddelelse 2,0 — KVN-efemeridefilformatet, som GMAT, Orekit, STK og de fleste flight-dynamics-værktøjer indlæser.OemFile::from_propagatorssampler hver satellits inertielle (TEME) tilstand — position og hastighed, taget direkte fra propagatoren uden jordfast rotation, i modsætning til SP3-eksporten — på et tidsgitter, ogOemFile::to_oem_stringserialiserer headerenCCSDS_OEM_VERS/CREATION_DATE/ORIGINATORplus ét segmentMETA_START … META_STOPpr. satellit (OBJECT_NAME/OBJECT_ID/CENTER_NAME/REF_FRAME = TEME/TIME_SYSTEM = GPS/START_TIME/STOP_TIME) efterfulgt af dets linjerepoch X Y Z X_DOT Y_DOT Z_DOT(km, km/s).CREATION_DATEleveres af kalderen, aldrig fra systemuret, så outputtet er byte-identisk fra kørsel til kørsel (reproducerbarhedskontrakten). Det er rumfartøjs-efemeridens modstykke til GNSS SP3-eksporten: en Kshana-bane kan nu overdrages til et flight-dynamics-værktøj i et standardformat. - Præcis SP3-efemeride som propagationskilde.
Sp3File::interpolatoropbygger enSp3Interpolatorpr. satellit, der udfylder positionen mellem de tabulerede SP3-epoker med et Lagrange-polynomium af 9. orden (standard IGS-praksis) og roterer den ind i det fælles TEME-referencesystem; den udstilles somPropagator::Sp3Precise. En IGS-/analysecenter-fil med præcise baner kan nu drive den samme pipeline for geometri/synlighed/integritet som de udsendte og analytiske propagatorer. Valideret rundtur: en Kepler-bane skrevet til SP3 og læst tilbage gennem interpolatoren stemmer med originalen til under en meter i knudepunkterne og < 100 m midt i intervallet. Urinterpolation er næste skridt. - GLONASS-udsendt efemeride (fuldender multi-GNSS RINEX-nav). Nyt modul
glonass: GLONASS udsender ikke Kepler-elementer, men en jordfast tilstandsvektor i PZ-90 (position, hastighed, måne-sol-acceleration).parse_glonass_navlæser posterneRi RINEX 3, og satellitpositionen til ethvert tidspunkt fås ved Runge–Kutta-integration af 4. orden af GLONASS ICD's bevægelsesligninger (centralt tyngdefelt +J2+ Coriolis-/centrifugalled fra jordens rotation + den udsendte acceleration). Udstillet somPropagator::Glonass, så GLONASS-satellitter flyder gennem pipelinen for konstellation/synlighed/integritet sammen med de keplerske systemer; en enkelt konstellationsblokrinexkan nu blande GPS, Galileo, QZSS, BeiDou og GLONASS. - Multi-GNSS RINEX-navigation (GPS, Galileo, QZSS, BeiDou). Navigationsparseren for RINEX 3 afkoder nu poster for Galileo (
E), QZSS (J) og BeiDou (C, MEO/IGSO) ved siden af GPS (G) — de deler Kepler-layoutet og brugeralgoritmen — hver evalueret med sin egen gravitationskonstant og jordrotationshastighed (Galileo/BeiDou μ, BeiDou Ω̇ₑ). En fil med blandede konstellationer giver dem alle, og de flyder gennem pipelinen for konstellation/synlighed/integritet somPropagator::Rinex. BeiDous geostationære satellitter bruger en anden koordinatrotation og springes over, indtil der findes en referencefixture at validere mod. Postgennemløberen bruger linjetal pr. system, hvilket retter en latent fejl, hvor firelinjers GLONASS-/SBAS-poster blev sprunget over, som om de var otte linjer lange. GLONASS (en tilstandsvektormodel) er næste skridt. - Læser og skriver til SP3-c/d med præcis efemeride. Et nyt modul
sp3parser IGS-/analysecenter-SP3-filer med præcise baner (parse_sp3) — det efterbehandlede ECEF-produkt med position/ur, som PPP-motorer (Ginan, RTKLIB, gLAB) behandler som reference — til en struktureretSp3File(header, epokegitter, position pr. satellit km→m, ur µs og hastighed dm/s→m/s for produkter af typenV), idet SP3's sentinelværdier for ugyldige værdier bevares. Den omvendte retning er også dækket:Sp3File::from_propagatorsopbygger en SP3 fra en propageret konstellation (TEME→ECEF pr. epoke), ogto_sp3_stringserialiserer den, så Kshana-baner kan eksporteres i det format, eksterne PPP-værktøjer indlæser — rundturen læs↔skriv. Epokeinterpolation og en SP3-propagatorkilde er næste skridt. - RINEX-udsendt efemeride som en konstellationskilde, der kan køres. En konstellation accepterer nu en indlejret blok
rinex(RINEX 3 GPS-navigationstekst) ved siden af den eksisterende indstillingtle, så en rigtig udsendt fil driver et scenarie fra ende til anden fra CLI, Python eller playground i browseren — RINEX ind, PNT-geometri ud. Nyt referencescenariescenarios/orbit-rinex.tomlviser GNSS-tilgængelighed og DOP fra otte GPS-satellitter bygget direkte af udsendte poster. (Kun GPS LNAV; multi-GNSS og SP3 er næste skridt.) - RINEX-udsendt efemeride som propagationskilde. En parset
RinexEphemeriskan nu konverteres til enorbit::Propagator(Propagator::Rinex): positionen er IS-GPS-200-banen fra udsendelsen, roteret fra ECEF til det fælles inertielle TEME-system (sv_position_teme, med GPS→UT1-tid korrekt for skudsekunder), hastigheden ved central finitdifferens og den keplerske omløbstid. Rigtige udsendte GPS-data kan nu drive den samme pipeline for geometri, synlighed og integritet (RAIM) som de analytiske SGP4-/Kepler-propagatorer. (Endnu ikke udstillet som scenarietype for en RINEX-fil — det og multi-GNSS/SP3 er næste skridt.)
0.9.2 - 2026-06-03#
Tilføjet#
- Arkiv-DOI. Udgivelser deponeres nu på Zenodo og tildeles en DOI, der kan citeres.
0.9.1 - 2026-06-03#
Ændret#
- Dokumentation. README er opdateret til institutionelt niveau: en funktionsoversigt over hele stakken v0.9.0, et afsnit om versionering og udgivelser, en ren header med det nye mærke og en kortfattet statuslinje. Ingen ændringer i motoren.
0.9.0 - 2026-06-03#
Denne udgivelse tilføjer tre væsentlige funktionsområder oven på SGP4-fundamentet i 0.8.0: en ægte treaksed strapdown-INS, en løst koblet GNSS/INS fejltilstands-EKF med feedback i lukket sløjfe, ægte snapshot- og solution-separation-RAIM (i ARAIM-stil) med HPL/VPL og et scenarie integrity, der kan køres, og det første skridt mod interoperabilitet mellem GNSS-formater (indlæsning af RINEX-3 GPS-efemerider).
Tilføjet#
- Parser til RINEX 3 GPS-navigationsbeskeder (
src/rinex.rs). Første skridt mod interoperabilitet mellem GNSS-formater:parse_navlæser en RINEX 3.x-navigationsfil og afkoder hver GPS-post (G) med udsendt efemeride — blokken med otte linjer SV/epoke +BROADCAST ORBIT— til enRinexEphemerismed Kepler-elementer og urkorrektioner, med feltnavne og enheder efter IS-GPS-200. Håndterer Fortran-flydende tal med eksponentenD(parse_d) og layout med faste kolonnebredder; poster for ikke-GPS-systemer springes over og afvises ikke, så en blandet fil stadig giver sine GPS-efemerider. Fire tests: parsing af eksponentenD(inklusive tomme felter og fejl), en hel post afkodet mod kendte feltværdier med en sundhedskontrol af GPS' store halvakse (√A² ≈ 26.560 km), overspringning af ikke-GPS og tilfældet med tom fil. - GPS-udsendt efemeride → ECEF-position (
src/rinex.rs).RinexEphemeris::sv_position_ecef(t_tow)evaluerer satellittens jordfaste position ud fra den parsede efemeride via brugeralgoritmen i IS-GPS-200 §20.3.3.4.3.1: Newton-løsning af Keplers ligning for den excentriske anomali, andenharmoniske korrektioner af breddeargument / radius / inklination og rotationen ind i ECEF under hensyn til jordens rotation siden referenceepoken (med de af specifikationen foreskrevne GPS-værdierμogΩ̇ₑog en fold aftkved ugeskift). Tre tests: den geocentriske radius forbliver i GPS-båndet (≈ 26.560 km), den jordfaste hastighed er ca. 3,9 km/s, og evaluering en hel uge væk giver samme position. - GPS SV-urbias med den relativistiske korrektion (
src/rinex.rs).RinexEphemeris::sv_clock_bias_s(t_tow)evaluerer det udsendte urpolynomiumaf0 + af1·Δt + af2·Δt²omkringTocplus det relativistiske excentricitetsledF·e·√A·sin Ek(IS-GPS-200 §20.3.3.3.3.1). En nyEpochUtc::gps_time_of_weekkonverterer postens kalenderepoke til GPS-ugetid via juliansk dagsaritmetik fra GPS-epoken (1980-01-06), og Kepler-løsningen deles med positionsevalueringen. Tests: GPS-ugetid for en søndag/tirsdag/lørdag (ugegrænser) og urbiasen, der er domineret af af0 med et til stede, afgrænset relativistisk led. L1-gruppeforsinkelsenTGDudstilles, men indregnes bevidst ikke. Ærligt omfang: en kildePropagator, Galileo/BeiDou/GLONASS og SP3 er stadig næste skridt. (docs/CAPABILITY.mder opdateret, så den passer.) - Scenarietype
integrity, som brugeren kan køre (scenarios/integrity-raim.toml). RAIM-tilgængelighedsfunktionen kan nu nås fra CLI/TOML som alle andre pakker:kind = "integrity"parser etIntegrityScenario(brugerbane, én eller flere GNSS-konstellationer, elevationsmaske og integritetskonfigurationen(sigma, P_fa, P_md, AL_H, AL_V)), kørerconstellation_raim_availabilityog udsender tilgængelighedskortet for HPL/VPL pr. epoke som JSON plus en selvstændig SVG — beskyttelsesniveauer over tid mod alarmgrænserne, med en grøn/rød tilgængelighedsstribe.kshana scenarios/integrity-raim.tomlskriver JSON'en, diagrammet og en HTML-rapport. Det medfølgende scenarie (24-satellit Walker, dobbeltfrekvent afstandsmåling på 1 m, APV-I-grænser) rapporterer ca. 95 % tilgængelighed; det dokumenterer, at RAIM med én frekvens ikke når den lodrette APV-I-grænse med én konstellation, og derfor bruger lodret vejledning SBAS/dobbeltfrekvens/ARAIM. Tests dækker dispatch, tilgængelighedskortets JSON og SVG'en. - RAIM-tilgængelighed over en konstellation, der kan køres (
src/raim.rs). Integritetsmodulet havde ingen kalder —constellation_raim_availabilitygør det til et ægte indgangspunkt fra ende til anden: ved hver epoke på et tidsgitter propagerer den de synlige satellitter (de samme SGP4-/Kepler-propagatorerPropagator, som motoren bruger), beregner beskyttelsesniveauerne uden fejl og vurderer tilgængeligheden mod de vandrette/lodrette alarmgrænser og returnerer enRaimAvailabilityReport, der kan serialiseres medserde(n_visible/HPL/VPL/availablepr. epoke plus tilgængelighedsandelen). EnRaimConfigsamler(sigma, P_fa, P_md, AL_H, AL_V), ograim_availability_epochpr. epoke er udstillet til kaldere, der selv løser deres geometri. Tre tests: en epoke vurderet som tilgængelig under APV-I-grænser på en geometri med ti satellitter, gjort utilgængelig af en umulig stram grænse, ogNonesom niveauer under fem satellitter; og en kørsel fra ende til anden over en Walker-konstellation med 24 satellitter, der giver et endeligt tilgængelighedskort og serialiseres. (Seks satellitter — redundansgulvet for residual-RAIM — når ærligt talt ikke APV-I selv ved 1 m afstandsmåling; APV-I-tilgængelighed kræver den tættere geometri, som testen bruger.) - Akkumulator til Stanford(-ESA)-integritetsdiagram (
src/raim.rs). Standardmåden at opsummere en integritetsmonitor over mange epoker: den afbilder den faktiske positionsfejl (x) mod beskyttelsesniveauet (y) og klassificerer hver epoke ud fra diagonaleny = xog alarmgrænsen somAvailable(PL afgrænser fejlen, inden for AL),SystemUnavailable(PL afgrænser fejlen, men overskrider AL — sikkert, ubrugeligt),MisleadingInformation(PL < fejl ≤ AL) ellerHazardouslyMisleadingInformation(PL < fejl og fejl > AL — den usikre fejl).classify_stanforder den rene klassifikator;StanfordDiagramakkumulerer punkter af formen(error, PL)mod en fast alarmgrænse og udstiller regionstal, tilgængelighed, totaler for integritetshændelser og punkter, der kan serialiseres medserde, til afbildning/JSON-eksport. Fire tests: hver region (inklusive grænsetilfældeterror == PL, hvor PL afgrænser fejlen), akkumulering af antal/tilgængelighed og JSON-rundtur. Dette er rapporteringsfladen for RAIM-beskyttelsesniveauerne; at koble den ind i konstellationsscenariet og validere mod et offentligt datasæt er stadig punkter på køreplanen. - Solution-separation-RAIM (i ARAIM-stil) (
src/raim.rs). En integritetsmonitor med flere hypoteser ved siden af den eksisterende residual-/paritets-χ²-testsnapshot_raim. For mindste kvadraters-løsningen med alle satellitter i sigte og for hver delløsning med udelukkelse af en enkelt satellit danner den separationenΔ_k = x_k − x₀— gaussisk med middelværdi nul uden fejl og med kovariansCov(x_k) − Cov(x₀)(den indlejrede estimatoridentitet, gyldig fordi løsningen med alle satellitter i sigte er BLUE) — og den både detekterer en fejl og identificerer den fejlbehæftede satellit (den, hvis udelukkelse giver den største normaliserede separation). Vandrette/lodrette beskyttelsesniveauer følger den almindelige 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). Nyt afhængighedsfrit parnormal_cdf/normal_quantile, bygget på modulets eksisterende regulariserede ufuldstændige gamma (erf(x) = P(½,x²)). Fire håndafledte tests: normal-CDF / kvantil mod lærebogsværdier (Φ(1,95996)=0,975, halen på 1e-7 = 5,1993, symmetri); en fejlfri geometri, der ikke giver alarm og giver endelig, positiv HPL/VPL; en bias på 60 σ i en enkelt satellit, som både detekteres og identificeres korrekt (excluded_sv == 2); og redundansgulvet med seks satellitter. Lukker revisionens P0-hul om "tautologisk integritet — ingen rigtig RAIM/HPL/VPL" på algoritmesiden; validering mod gLAB-datasæt og Stanford-diagramakkumulatoren er stadig punkter på køreplanen. - Integration af GNSS/INS med lukket sløjfe (
src/fusion/closed_loop.rs).ClosedLoopInsGnssforbinder fejltilstands-EKF-kernen med den treaksede strapdown-mekanisering: hver IMU-måling korrigeres med de løbende bias-estimater, mekaniseres fremad, og EKF-kovariansen tidspropageres med den tilsvarende navigationskontekst; hver GNSS-position/hastighed danner INS−GNSS-innovationen og fører de estimerede fejl i position, hastighed, attitude (ψ, som en kvaternionrotation) og accelerometer-/gyro-bias tilbage i løsningen og nulstiller fejltilstandens middelværdi. At føre attitude tilbage (ikke kun bias) er nødvendigt for stabiliteten — tilt og accelerometerbias er et koblet par, så at korrigere det ene uden det andet divergerer. INS og GNSS sammenlignes i et lokalt tangentplan i NED-systemet ved hjælp af mekaniseringens egne krumningsradier (nytmechanization::radii_of_curvature;NavState::omega_ie_n/omega_en_nudstillet). Dette er den ærlige erstatning for den hybride pakkes nulstilling med snap til reference. Tre tests: en lukket sløjfe, der nulstiller en tilført positionsfejl på 8 m / −5 m til <0,1 m; en støttet løsning, der holder sig afgrænset til meterniveau (<6 m) på en køretrajektorie, mens en frit løbende INS divergerer forbi 100 m; og milepælstesten — den fusionerede løsnings Monte Carlo-positions-RMS over et GNSS-udfald på 60 s slår en ustøttet dødregner med åben sløjfe med >2× (≈4× på tværs af seeds). Ærlig begrænsning dokumenteret i modulet: i løst koblet tilstand kan accelerometerbias og tilt kun svagt adskilles (begge kobler gennem tyngdekraften), så den leverede værdi er den afgrænsede, korrigerede tilstand og en ren indgang til udfaldet — ikke en præcis inertial kalibrering; rigere dynamik og den tæt koblede udvidelse er stadig punkter på køreplanen. - Løst koblet GNSS/INS fejltilstands-EKF-kerne (
src/fusion/gnss_ins_ekf.rs). Et udvidet Kalman-filter med 15 fejltilstande —δx = [δp, δv, ψ, b_a, b_g]— med strapdown-fejldynamikken fra Groves 2013 §14,2 (kobling mellem specifik kraft og tilt, Coriolis, projektion af bias fra krop til nav, Gauss–Markov-biasmodeller), en diskret overgang af første ordenΦ = I + F·dtog en løst koblet opdatering af position+hastighed (H = [I₃ 0 0 0 0; 0 I₃ 0 0 0]) i Joseph-form. Afhængighedsfri tæt lineær algebra (Gauss–Jordan-invers, Joseph-kovariansopdatering). En cargo-featuretight_couplingspærrer for en dokumenteret, endnu ikke implementeret pseudorange-/Doppler-opdatering. 7 tests med håndafledte forventninger: skew-/krydsproduktidentiteten, en verificeret 3×3 invers, kovarians der forbliver symmetrisk/PSD under prædiktion (og positionsusikkerhed, der vokser uden støtte), en positionsbestemmelse der skrumper positionskovariansen, eksakt genfinding af en kendt positionsfejl ved den analytiske Kalman-gainP/(P+R)og mindre korrektioner ved større målestøj. Dette er kernen, der vil erstatte den hybride pakkes nulstilling med snap til reference i åben sløjfe med feedback i lukket sløjfe (pakkekobling + NaveGo-validering følger). - Deterministisk IMU-fejlmodel til den 3-aksede strapdown-navigator (
src/inertial/imu_errors.rs).ImuErrorModelforvrænger et sandt par(ω, f)i kropssystemet til et målt par gennem fem systematiske kategorier (IEEE Std 952-1997 §A.2; Groves 2013 §4,3, tabel 4,1): skalafaktor (forstærkningsfejl pr. akse i ppm), fejljustering / krydskobling (ikke-ortogonalitet i triaden uden for diagonalen), g-følsomhed (en gyro-ratebias proportional med specifik kraft), kvantisering (afrunding til output-LSB) og rate-ramp (en lineær drift i tid — den tredje Allan-region), plus en konstant bias ved opstart. Hvert led er som standard nul, såImuErrorModel::ideal()er en gennemsigtig gennemgang, og eksisterende scenarier er upåvirkede. Hver fejlkilde har en isolationstest (skala lineær til <0,01%, fejljustering på tværs af akser over VRW-gulvet, g-følsomhedsbias, LSB-gitter, lineær ramp), og en test fra ende til anden driver en navigationsfejl gennem mekaniseringen fra en forvrænget IMU. Ikke modelleret: vibrationsensretningsfejl, drift fra temperaturgradient. (Den medfølgende scenariepakkeinertialkører stadig det ældre 1-DOF-skalarbudget; denne model fodrer 3-akse-biblioteket.) - Coning- og sculling-kompensation til strapdown-integratoren. Attitudestien tilføjer to-sample-inkrementet
coning_increment(½ Δθ_prev × Δθ_cur); en integration med grov rate (30 Hz, 5 samples/cyklus) af et 5 Hz coning-miljø er verificeret til at følge reference med fin rate ≥ 3× bedre med korrektionen end med naiv summering af inkrementer. Hastighedsstien tilføjersculling_increment(½ Δθ × Δv, Groves lign. 5,82) og løser kropshastighedsinkrementet gennem en ny inkrementbaseret opdateringNavState::step_incrementsmed den kroprelative rotationΔθ_rel = Δθ_b − C_n^b ζ, så en jordfast platform ikke får falsk sculling, mens en ægte vibration udløser det fulde led. - Fuld treaksed strapdown-mekanisering i NED-systemet (
src/inertial/mechanization.rs).NavState { q, v_ned, p_llh }fremføres afstep(gyro_b, accel_f_b, dt)med de almindelige NED-ligninger for jordfast system (Groves §5,4): attitude fra krop til NED korrigeret for raten fra inertial til navω_in = ω_ie + ω_en(jordrotation + transportrate); specifik kraft opløst fra krop til NED gennem DCM; hastighed, der integrererv̇ = f_n − (2 ω_ie + ω_en) × v + g_n(Coriolis/transport + tyngde); og geodætisk position via meridian- og tværkrumningsradierne. Tyngden er WGS-84's lukkede Somigliana-form for normaltyngde (lodlinjetyngde) med en NIMA-friluftskorrektion for højde — aldrig en hårdkodet konstant. Dette er den ægte treaksede navigator, der afløser den skalare 1-DOF-fejlbudgetsti. Verificeret ved fysiske invarianter: en platform boltet fast til den roterende jord ved 45°N (der registrerer jordrate + 1 g) holder sig inden for 1 mm over 60 s; en vandret specifik kraft mod nord giverv_N ≈ a·tog en forskydning på½ a t²; normaltyngden stemmer med de kendte overfladeværdier ved ækvator/pol/45° og med friluftsgradienten. - Treaksed attitudemodel til strapdown-INS (
src/inertial/attitude.rs). En enhedskvaternion-typeQuaternion(skalar først, Hamilton-konvention), der bærer rotationen fra krop til nav, med en DCM-visning (to_dcm/from_dcmvia Shepperds metode), Hamilton-produkt, konstruktører til akse-vinkel og rotationsvektor (eksakt exp-afbildning) og kvaternionkinematik — både en RK-ratenopdatering af første orden (q̇ = ½ q ⊗ ω) og en rotationsvektoropdatering med coning-korrektion. To-sample-funktionenconing_increment(Savage / Bryan–Lewantowski,½ Δθ_prev × Δθ_cur) leverer det krydskoblingsled for rotationsraten, som skalar dødregning udelader. Dette er attitudefundamentet for den fulde 3-aksede mekanisering, der erstatter den ældre 1-DOF-fejlbudgetsti. Verificeret mod lukkede rotationsformler: propagering med konstant rate stemmer med akse-vinkel-kvaternionen til 1e-6, DCM'er er ortonormale med enhedsdeterminant, og coning forsvinder ved bevægelse om én akse. (src/inertial.rser nu modulmappensrc/inertial/; den offentlige sticrate::inertialer uændret.) - Geodætisk korrekt synlighed fra jordstation (
src/frames.rs).elevation,is_visibleogvisible_countberegner en satellits elevation over en jordstations horisont i forhold til WGS-84-ellipsoidens normal (den sande lokale lodlinje) og ikke den geocentriske radial — de to afviger med op til den geodætiske afvigelse på ca. 0,19°, nok til at få satellitter tæt på horisonten til at skifte ind eller ud af en elevationsmaske. Verificeret fra ende til anden (en Walker-konstellation propageret, roteret TEME→ECEF og talt fra et geodætisk sted) og mod den geocentriske tilnærmelse.
Ændret#
- CI-pålidelighed. Jobbet
test-python-bindingsbygger nu wheel-pakken medPyO3/maturin-action(manylinux-container) i stedet for en råmaturin buildpå værten, hvilket fjerner en intermitterende rustup-konflikt mellemrustfmt-preview/cargo-fmtpå runner-imaget. Jobbetdenyinstallerercargo-denysom en forbygget binær viataiki-e/install-actioni stedet for den Docker-baseredecargo-deny-action, hvilket fjerner en timeout ved pull fra Docker Hub-registret. Ingen af ændringerne påvirker de udførte kontroller.
0.8.0 - 2026-06-02#
Tilføjet#
Inertialhastighed udstilles nedstrøms.
Propagator::velocity_eciogPropagator::state_eci(der returnererStateEci { r_m, v_m_s }) fører den analytiske TEME-hastighed, som SGP4 allerede beregner — tidligere kasseret — videre til kaldere i m/s;Orbit::velocity_ecigiver Kepler-stien en konsistent hastighed. Verifikationstesten for AIAA 2006-6753 kontrollerer nu også hastigheden for hver referencerække (værste hastighedsfejl 1.85e-9 km/s over alle 666 tilstande) og fastlåser antallet af sammenlignede rækker til præcis 666.Strengere TLE-parsing uden panics. Linjer skal være ASCII og skæres sikkert (ikke flere panics ved byteindeks på multibyte-input); elementer områdekontrolleres (inklination, excentricitet, middelbevægelse); kontrolsummen i kolonne 69 kan gennemtvinges via
ParseOpts { strict_checksum }/parse_propagators_optsog det nye flagstrict_checksumpåConstellationCfg(som standard tolerant).Allan-deviationskurve i outputtet. Hver urkørsel rapporterer nu en
adev_curve([{tau_s, adev, n_samples}]), og playground i browseren tegner et log-log-diagram "Urets stabilitet (ADEV)".Validering af tidsgitterets input.
TimeCfg::validateafviser et tidsgitter, der ikke er endeligt, er nul, negativt eller for stort (et skridt større end varigheden eller mere endMAX_TIME_STEPSsamples), før der allokeres noget, så et fejlformet scenarie returnerer en fejl i stedet for at gå ned med en panic eller opbruge hukommelsen.Monte Carlo-ensembler til den inertiale pakke.
runs = Npå et inertialt scenarie kører N seeds og rapporterer hver metriks middelværdi, standardafvigelse, percentiler og et percentil-bootstrap-konfidensinterval på 95% (ensemble). Hver inertial kørsel bærer nu et flagmonte_carlo, så et kvalitetsmål fra én realisering ikke længere forveksles med en fordeling. (CEP/2DRMS rapporteres bevidst ikke — de kræver 3-akse-modellen på køreplanen.)Guidet playground-tilstand. Playground i browseren smider dig ikke længere ud i en rå TOML-mur: en "Start her"-stribe med scenariekort, der indlæser og kører et gennemarbejdet eksempel med ét klik, skydere der giver adgang til de universelle indstillinger (seed, tidstærskel) uden at røre TOML, en note "Sådan læser du dette", der forklarer resultatet, og hele TOML'en er ét klap væk. Hver kørsel kan deles — Kopiér delingslink koder hele scenariet ind i URL-fragmentet (intet uploades), så et link gengiver præcis den samme kørsel ved indlæsning. Kodeken er enhedstestet (
web/share.test.mjs, køres i CI).N-dimensionelle parametersweeps (
src/sweep.rs).nd_sweepevaluerer en metrik over hele det kartesiske produkt af flere intervallerSweepAxis(afvejningsstudiet med flere parametre), i row-major-rækkefølge, deterministisk. Additivt — den eksisterende 1-D-sweep-API er uændret. Bootstrap-konfidensintervaller pr. knudepunkt og generalisering ud over urpakken er stadig på køreplanen.Ægte snapshot-RAIM (
src/raim.rs). Ægte Receiver Autonomous Integrity Monitoring i positionsdomænet: den opbygger sigtelinjegeometrien til de synlige satellitter, danner mindste kvadraters-løsningen og residualerne, kører en χ²-test af residualer til fejldetektering (eksakt tærskel fra en afhængighedsfri ufuldstændig gamma χ²/ikke-central χ²) og beregner hældningsbaserede vandrette og lodrette beskyttelsesniveauer (HPL/VPL) med den bias ved udeblevet detektering, der er udledt for de konfigurerede P_fa/P_md. Dette er noget andet end — og er endnu ikke koblet til — scenariepipelinens integritetskvalitetsmål om filterets selvkonsistens; fejludelukkelse, budgettering af alarmgrænse/P_HMI og ARAIM er stadig på køreplanen.Pakke til frekvensstabilitet: MDEV, TDEV, HDEV + konfidensintervaller (
src/allan.rs). Ved siden af den overlappende ADEV: den modificerede Allan-deviation (adskiller hvid fra flicker-fasestøj), tidsdeviationen (TDEV = tau/sqrt(3) * MDEV) og Hadamard-deviationen (afviser lineær frekvensdrift eksakt og konvergerer for divergente rødstøjstyper). χ²-baserede konfidensintervaller (deviation_ci) bruger et afhængighedsfrit normal-/χ²-kvantilpar (Acklam + Wilson-Hilferty) med en konservativ ikke-overlappende edf; støjtypespecifik edf og numerisk paritet med Stable32 er stadig på køreplanen.Reduktion af referencesystem (
src/frames.rs). GMST-baseret TEME↔ECEF-rotation (med den samme IAU-1982 siderealtid som propagatoren), eksakt geodætisk↔ECEF for WGS-84 med en iterativ invers startet med Bowring (maskinpræcision i alle højder, også MEO/GEO) og en geodætisk jordstationsobservatør, der returnerer azimut / elevation / afstand i det lokale East-North-Up-system. Polbevægelse og nutation under buesekunder anvendes ikke (kun GMST, under en kilometer på jordsporet); en ITRF-præcis CIO-kæde er på køreplanen.Fundament for tidsskalaer (
src/timescales.rs). Et afhængighedsfrit API til juliansk dato (gregoriansk civil ↔ JD, MJD), hele IERS' historik over heltallige skudsekunder (UTC↔TAI, 10 s i 1972 til 37 s siden 2017), den definerede TAI→TT-forskydning, UT1-korrektionen via en leveret DUT1 og IAU-2000-jordrotationsvinklen. Det er tidssubstratet, som jordfast systemreduktion (planlagt) hviler på. Tidspunkter er julianske datoer i én værdi af typenf64(ca. 50 µs opløsning nær den nuværende epoke; en todelt JD er på køreplanen), og æraen med gummisekunder før 1972 er ikke modelleret — begge dele er dokumenteret i modulet.Reproducerbarhed og proveniens. En deterministisk CycloneDX SBOM-generator (
scripts/gen-sbom.sh) og en SLSA-attestering af build-proveniens på release-binæren og SBOM'en; release-værktøjskæden er pinnet, så den passer til CI. Determinismegarantier, forbeholdet omlibmpå tværs af platforme og tilgangen med fastlåste golden-værdier er dokumenteret idocs/REPRODUCIBILITY.md.Egenskabsbaserede tests og fuzz-tests (
tests/property.rs). Deterministiske randomiserede tests (ingen ny afhængighed) kontrollerer invarianter over tusindvis af input: TLE- og scenarieparserne går aldrig ned på affald, ikke-ASCII, muteret eller afkortet input;TimeCfg::validategår aldrig ned på NaN/inf/negative gitre; TLE-kontrolsummen er konsistent og kun kolonne 69; rundture for geodætisk↔ECEF og TEME→ECEF-rotationen bevarer normen over hele kloden og et bredt højdebånd.
Ændret#
- Golden-tests fastlåser nu kvalitetsmålene felt for felt for de fire referencescenarier (med en tolerance, der optager jitter fra
libmpå tværs af platforme), og erstatter de tidligere kontroller, der kun var uligheder, så en tavs numerisk regression opdages med det samme. schema_versioni resultatartefakter er hævet fra0.1til0.7(den var frosset, mens motoren gik videre).cargo-denyafviser nu (advarer ikke om) yankede afhængigheder.- Ny dokumentation:
CAPABILITY.md(ærligt omfangskort),SCHEMA.md(referencen til resultatfelter),INTEGRITY.md,QUANTUM-MODELS.md,REAL_TLE_GUIDE.md. En CI-vagt fejler, hvis README-versionsbadgen driver fraCargo.toml.
0.7.0 - 2026-06-02#
Tilføjet#
- SGP4/SDP4-banepropagering. En fuld, afhængighedsfri implementering af den almindelige simplified-perturbations-propagator — SGP4 for nær jorden sammen med SDP4-udvidelsen for dybt rum (sekulære og periodiske perturbationer fra måne og sol og geopotentialresonans på 12 t / 24 t). Den er valideret mod de officielle verifikationsvektorer fra AIAA 2006-6753 ("Revisiting Spacetrack Report #3"): alle 666 referencetilstande på tværs af tilfældene nær jorden, dybt rum, resonans og fejlkode stemmer med en værste positionsfejl på ca. 4 mm. Det er den model, som elementsæt på to linjer er defineret mod, så den repræsenterer rigtige konstellationer — især GNSS-baner på ca. 12 t, som er dybt rum og resonante, og som den tidligere to-legeme- + J2-sekulære model ikke kan fange.
- En konstellation angivet som fulde elementsæt på to linjer (linje 1 + linje 2) propageres nu med SGP4/SDP4; en konstellation angivet som elementer med kun linje 2 beholder den analytiske keplerske to-legemepropagering, uændret. De to former kan blandes i én blok. Nyt referencescenarie
orbit-sgp4-gps.toml(en GPS-lignende MEO-konstellation i rigtigt format med to linjer, propageret med SGP4) — læg et aktuelt Celestrak "gps-ops"-sæt ind for at studere den levende konstellation.
0.6.0 - 2026-06-02#
Tilføjet#
- Demonstrator af aktivt spoofing-angreb. En ny scenarietype
spoofinjicerer en rampende falsk tids-spoof og kører hvert urs urstøttede integritetsmonitor og rapporterer, om og hvornår spoofen detekteres, og om den når den operationelle specifikation uopdaget — hvilket gør kvalitetsmålet Sikkerhed til en konkret demonstration af angreb/forsvar. Nyt referencescenariespoof-attack.toml. - Tilgængelighed med flere konstellationer. Et orbitscenarie kan kombinere flere konstellationer (en liste
[[constellations]]ved siden af den primære[constellation]) til multi-GNSS-tilgængelighed og præcisionsfortynding — fx GPS plus Galileo. Nyt referencescenarieorbit-multignss.toml.
0.5.0 - 2026-06-02#
Tilføjet#
- HTML-scorecard-rapport. Hver kørsel producerer nu også et selvstændigt scorecard i HTML med brandet udseende — oversigten på én linje, diagrammet (indlejret som et inaktivt data-URI-billede) og hele JSON — skrevet af CLI'en ved siden af JSON og SVG. En delbar enkeltfilsartefakt til en studieleverance eller et bilag.
- Fælles sensorfusionsestimator. En ny scenarietype
fusionkører ét enkelt rekursivt Kalman-filter som navigationsløsning — det fusionerer urtilstanden[phase, frequency]og positionstilstanden[position, velocity], disciplineret af GNSS (der lærer frekvensforskydningen og hastigheden) og støttet af optisk tidsoverførsel under udfaldet — i stedet for at sammensætte uafhængige prædiktorer. Den rapporterer fusioneret holdover for tidssynkronisering/position og en integritet fra den fælles kovarians. Nyt referencescenariefusion-pnt.toml. - Fyldigere IMU-støjmodel. Accelerometeret modellerer nu de resterende Allan-varianstermer ud over den konstante bias og hastigheds-random-walk: biasustabilitet (et 1/f-flickergulv ved den almindelige Allan-koefficient for biasustabilitet, der genbruger urets flickersyntese) og acceleration random walk. Nye valgfrie scenariefelter
bias_instabilityogq_aafor inertial; en ny GNSS-positionsbestemmelse rekalibrerer den resterende biasdrift. - Ægte konstellationsgeometri fra TLE'er. En konstellation kan angives som en blok af elementsæt på to linjer (standardformatet fra NORAD/Celestrak) via et felt
tle, så tilgængelighed og præcisionsfortynding bruger en rigtig konstellations offentliggjorte geometri i stedet for et syntetisk Walker-mønster. Motoren læser hver TLE's middelelementer og propagerer dem som to-legeme — ikke SGP4 — hvilket er forsvarligt for et snapshot-studie fra en fælles epoke. Nyt referencescenarieorbit-real-tle.toml.
0.4.0 - 2026-06-02#
Tilføjet#
- Parametersweeps til afvejningsstudier. En ny scenarietype
sweepvarierer én parameter (threshold_ns,duration_s,quantum_q_wfellerclassical_q_wf) over et lineært eller logaritmisk interval og registrerer et valgt kvalitetsmål i hvert punkt for begge ure, hvilket giver sammenligningsdiagrammet "hvordan skalerer holdover med urets stabilitet?", som en udformningsafvejning har brug for. Nyt referencescenariesweep-clock-stability.toml. - Monte Carlo-konfidensbånd. Urets holdover-scenarie kan køre mange realiseringer (nyt valgfrit felt
runs): hvert kvalitetsmål rapporteres så som en middelværdi med en spredning fra 5. til 95. percentil, og diagrammet skraverer fejlkonvolutten på 5–95% omkring medianen for hvert ur. En enkelt kørsel er stadig standard. Nyt referencescenarieclock-ensemble.toml. - Excentriske baner og J2-drift. Banetypen er nu en fuld keplersk bane (stor halvakse, excentricitet, inklination, RAAN, perigæumsargument, middelanomali), propageret ved at løse Keplers ligning, med valgfri sekulær J2-regression af knuden og apsidepræcession. Nye valgfrie scenariefelter
eccentricity,argp_degogj2og et referencescenarieorbit-molniya.toml(en meget excentrisk bruger med kritisk inklination på 12 t). Cirkulære baner beholder den oprindelige lukkede sti bit for bit. - Den hybride pakke (kombineret PNT) rapporterer nu Integritet og Sikkerhed, så alle fire pakker dækker det fulde sæt af operationelle kvalitetsmål. Integritet er indeslutningen af beskyttelsesgrænsen i tidskanalen fra en Kalman-estimator, der er disciplineret mod reference, mens GNSS er nominelt, og forankres igen (mere løst) ved hver optisk gensynkronisering; dens grænse inkluderer linkets gulv for målestøj, så et ur, der er langt bedre end linket, scores mod den leverede løsnings faktiske støj. Sikkerhed er scoren for urstøttet spoof-detektering mod tidsspecifikationen.
Ændret#
- Udgivelsesnoter genereres nu fra det kuraterede CHANGELOG-afsnit for tagget (
scripts/changelog-extract.sh), så hver GitHub-release fremhæver, hvad der er ændret, i stedet for at opregne rå commits.
0.3.0 - 2026-06-02#
Tilføjet#
- Kvalitetsmålet Sikkerhed (tidligere ikke udfyldt): en score for urstøttet spoof-detektering for pakkerne for urholdover og bane. Det modellerer en integritetsmonitor, der krydstjekker GNSS-afledt tid mod urets egen udglidede forudsigelse over et sammenhængende vindue; detekteringsgulvet kombinerer den midlede målestøj med urets usikkerhed under udglidning, så et roligere ur detekterer mindre, langsommere tids-spoofs. Scoren rapporteres i
[0, 1]relativt til tidsspecifikationen og fuldender de seks operationelle kvalitetsmål. - Geometriafledt positionsnøjagtighed til orbitpakken: ud fra sigtelinjegeometrien til de synlige satellitter danner den designmatricen og dens kovariansfaktor
Q = (HᵀH)⁻¹og giver præcisionsfortyndingsfaktorerne (GDOP/PDOP/HDOP/VDOP/TDOP). Positionsnøjagtigheden er positions-DOP skaleret med en konfigurerbar brugerækvivalent afstandsfejl (nyt valgfrit scenariefeltsigma_uere_m). Et orbitresultat indeholder nu en geometrioversigt (andelen af samples med positionsbestemmelse, bedste og median PDOP og positionssigma). - En playground i browseren (
web/), der kører motoren hos klienten som WebAssembly: vælg et referencescenarie eller redigér TOML, kør det og se oversigten, diagrammet og hele JSON, uden at noget uploades. En arbejdsgangpagesbygger og udgiver den på GitHub Pages, og en ny WebAssembly-eksportsummaryunderstøtter udlæsningen. - Mærkede y-akser på SVG-diagrammerne: gitterlinjer, numeriske tick-labels og en akseoverskrift med enheder (via en fælles hjælper
chart), så størrelser kan læses. - Arbejdsgang til pakkeudgivelse (
publish) for crates.io, PyPI og npm, hver især betinget af sit registry-token og udløst af en udgivet release.
0.2.0 - 2026-06-02#
Tilføjet#
- Flicker (1/f) FM-gulv til urfejlmodellen, syntetiseret som en sum af logaritmisk fordelte Ornstein-Uhlenbeck-processer og kalibreret, så det flade gulv for Allan-deviationen ligger på et konfigurerbart niveau. Slået fra som standard; aktiveres pr. ur via det valgfrie scenariefelt
flicker_floor. - Gyrokanal til den inertiale model: resterende gyrobias og vinkel-random-walk driver en attitudefejl (tilt), der kobler tyngden ind i en vandret fejl i specifik kraft, den dominerende mekanisme for fejlvækst i strapdown. Slået fra som standard; aktiveres pr. sensor via de valgfrie felter
gyro_biasogq_arw. - Kalman-urestimator med to tilstande (fase, frekvens) og eksakt van Loan-diskretisering af processtøj. Udglidning fra en kendt tilstand gengiver den analytiske vækst i holdover-fejl (
q_wf*T + q_rw*T^3/3) eksakt, og filteret giver desuden en online 1-sigma-usikkerhedsgrænse. - Urkørslen rapporterer nu kvalitetsmålet Integritet (tidligere ikke udfyldt): andelen af samples under udfaldet, hvis fejl holder sig inden for filterets beskyttelsesgrænse på 3 sigma, vist i JSON-resultatet og CLI-oversigten.
- Geometriafledt GNSS-tilgængelighed: propagering af cirkulære baner, en generator af Walker-delta-konstellationer og sigtelinjesynlighed (jordens skygge plus elevationsmaske) giver tilgængelighedstidslinjen ud fra reel banegeometri. Ny scenarietype
orbitog referencescenarietorbit-gnss-challenged.toml(et rumfartøj inde i GNSS-skallen med intermitterende dækning). - Valgfri Python-udvidelse (PyO3, abi3), der udstiller
run,run_fullogversion, pakket med maturin (pyproject.toml) og bygget til Linux, macOS og Windows af en arbejdsgangwheelsved release-tag. Bindingen er en valgfri afhængighed bag en feature: standardbygget, testene og afhængighedsrevisionens gate er upåvirkede. - Valgfrit WebAssembly-modul (wasm-bindgen), der udstiller
run,chart_svgogversion, bygget med wasm-pack under featurenwasm;getrandomer målafgrænset til at bruge browserens entropikilde påwasm32. - Delt dispatch
api::run_toml, som bruges af både CLI'en og begge bindinger, så kommandolinjen og bindingerne ikke kan drive fra hinanden.
Ændret#
- Scoring af holdover er nu segmentbevidst: udfaldstidslinjer opdeles i sammenhængende segmenter ved GNSS-genopfangning, og den rapporterede holdover er den værste (korteste) udglidning på tværs af dem. Scenarier med ét udfald er uændrede. Gælder for ur-, inertial- og hybridscorerne.
- Den rapporterede
kindfor den inertiale model er nuinertial(varaccelerometer) og afspejler de kombinerede accelerometer- og gyrokanaler.
0.1.0 - 2026-06-01#
Første udgivelse.
Tilføjet#
- Deterministisk simuleringsmotor til hybrid kvante-/klassisk PNT: en fælles grænseflade for fejlmodeller, deklarative GNSS-tilgængelighedsscenarier, estimatorer for holdover / dødregning og scoring af kvalitetsmål mod de almindelige operationelle PNT-kriterier. Resultater kan gengives ud fra
scenario + seed + engine version(versioneret, selvbeskrivende JSON med en scenariehash) og tegnes som SVG-diagrammer. CLI'en aktiverer scenarier efterkind. - Fire sensorpakker, hver kalibreret til offentliggjorte data og valideret mod den almindelige relation:
- Urholdover — hvid FM, random-walk FM og lineær aldring; valideret ved overlappende Allan-deviation (Riley, NIST SP 1065). Chip-skala atomur mod optisk gitterur med strontium.
- Inertial dødregning — resterende bias + hastigheds-random-walk, dobbeltintegreret til positionsfejl; valideret mod Groves' relationer for fejlvækst. Koldatom- mod navigationsklasse-accelerometer.
- Tidsoverførsel — optisk mod RF-link, tidsjitter → synkroniseringspræcision → envejs afstandsmåling.
- Hybrid fusion (afslutning) — en kombineret PNT-pakke, der skal holde både tid og position, med valgfri urstøtte via optisk tidsoverførsel mellem satellitter.
- Ét citeret referencescenarie pr. pakke under
scenarios/, hvor hver numerisk parameter bærer en fagfællebedømt kilde (provenance). - Værn for reproducerbarhed og repositoriehygiejne; CI (format, clippy, tests, værn, MSRV) og en release-pipeline spærret bag et tag, der kører alle kontroller igen.
- Dokumentation: README med arkitekturdiagrammer, rapport om valideringsstatus, bidragsguide, sikkerhedspolitik og adfærdskodeks; Apache-2.0-licens; skabeloner til issues/PR'er og Dependabot-konfiguration.
- Leverandørneutral hele vejen igennem; fagfællebedømte videnskabelige og metrologiske citater bevaret.
- Licenshygiejne for Apache-2.0: SPDX-headers på alle kilder, en fil
NOTICEmed varemærkemeddelelse, Developer Certificate of Origin (DCO)-underskrift for bidrag og håndhævelse af afhængigheders licenser/advisories i CI viacargo-deny. - Open-core-positionering (README): en gratis Apache-2.0-motor plus tilgængelig kommerciel support, integration og proprietære udvidelser fra Ashforde OÜ — båret af tjenester, ikke licensgebyrer.
CITATION.cffså softwaren kan citeres.