Tulosskeema — Kshana-tiedoston *.result.json lukeminen
Jokainen ajo kirjoittaa skenaarion viereen versioidun, itsekuvaavan JSON-artefaktin (JavaScript Object Notation). Tämä sivu on käsin kirjoitettu lukijan opas vaihtokuoreen ja kellon ja radan tulosmuotoihin: kunkin kentän yksikkö, missä se lasketaan lähdekoodissa ja miten se luetaan. Kanoninen tyyppi on RunResult tiedostossa src/report.rs; laatumittarit ovat FoMScores tiedostossa src/fom.rs.
Se ei ole täydellinen kenttäviite. Moottori välittää paljon useampaan tyyppiin kuin nämä kaksi, ja jokainen tuottaa oman tyyppipakettinsa. Täydellinen viite — yksikkö, alkuperäluokka ja määritelmä jokaiselle sisäänrakennetun tyypin numeeriselle kentälle — on generoitu, ei käsin kirjoitettu: katso alla Yksiköt ja alkuperä kenttäkohtaisesti kaikille tyypeille.
Vaihtokuori (KIF, Kshana Interchange Format) — artefaktin tunnistaminen ja version tarkistus#
Kshana-artefaktit voidaan kääriä neutraaliin, itsekuvaavaan vaihtokuoreen, jotta kolmannen osapuolen työkalu voi tunnistaa tiedoston ja päättää, voiko se lukea sen ennen kuin se sitoutuu hyötykuormaskeemaan. Kanoninen tyyppi on Envelope tiedostossa src/interchange.rs.
| Avain | Tyyppi | Merkitys |
|---|---|---|
format |
merkkijono | Aina "kshana-interchange" (FORMAT_TAG) — miten vieras työkalu tunnistaa Kshana-artefaktin. |
schema_version |
merkkijono | Skeemaversio MAJOR.MINOR (SCHEMA_VERSION, koko paketin (crate) ainoa totuuden lähde). |
kind |
merkkijono | Artefaktin tyyppi, esim. "scenario", "run-result", "trade-study" — antaa kuluttajan reitittää jäsentämättä runkoa. |
engine_version |
merkkijono | Hyötykuorman tuottaneen paketin (crate) versio (Cargo.toml). |
payload |
objekti | Kääritty artefakti kanonisena JSON-muotona (Scenario, RunResult, …). |
Yhteensopivuussopimus. Versiot ovat muotoa MAJOR.MINOR. Uudet kentät lisätään määreellä #[serde(default)] (additiivinen kuri), joten lukija voi jäsentää minkä tahansa artefaktin, jolla on sama pääversio ja yhtä vanha tai vanhempi alaversio (Compatible). Tiukasti uudempi alaversio (ForwardIncompatible) voi sisältää kenttiä, joita tämä lukija ei voi noudattaa, ja eri pääversio (MajorIncompatible) on rakenteellinen katkos — molemmat hylkää Envelope::parse, joka tarkistaa muototunnisteen ja version rajalla sen sijaan, että jäsentäisi vierasta syötettä hiljaa väärin.
Determinismi. Kuori ei sisällä aikaleimaa — Kshana-ohjelmiston toistettavuuslupaus (scenario + seed + engine_version toistaa ajon) vaatii sen. Alkuperä on kentässä engine_version ja hyötykuorman omassa kentässä scenario_hash.
Tyypitetty takaisinluku (Envelope::payload_as::<T>()) toimii mille tahansa hyötykuormalle, joka toteuttaa Deserialize (esim. Scenario). Tulosartefaktit ovat suunnitellusti vain serialisoitavia, ja ne luetaan raakana JSON-arvona payload.
Ylätaso (kello- ja ratatyyppipaketit)#
| Avain | Tyyppi / yksikkö | Merkitys | Lähde |
|---|---|---|---|
schema_version |
merkkijono | Tulosskeeman versio (riippumaton moottorin versiosta). | report.rs |
engine_version |
merkkijono | Tiedoston tuottaneen paketin (crate) versio (Cargo.toml). |
report.rs |
scenario_hash |
heksamerkkijono | SHA-256 (SHA: Secure Hash Algorithm) kanonisesta skenaario-JSONista — ajo on toistettavissa kohdasta scenario + seed + engine_version. |
report.rs:hash_scenario |
seed |
u64 | Kvanttiajon satunnaislukugeneraattorin (RNG) siemenluku (klassinen käyttää arvoa seed + 0x9e3779b97f4a7c15). |
run.rs |
threshold_ns |
nanosekuntia | Ajoitusmääritys: virhe, joka on välillä ±threshold_ns, on ”määrityksen sisällä”. |
skenaario |
quantum |
objekti (ClockRun) |
Kvanttianturin ajo (katso alla). | report.rs |
classical |
objekti (ClockRun) |
Klassisen anturin ajo vertailua varten. | report.rs |
units |
objekti | Asiakirjan kenttäkohtainen yksikkö-/alkuperäkartta, avaimena kentän polku. Katso §Yksiköt ja alkuperä alla. | field_schema.rs:units_block |
evidence |
objekti | (0,40) Ajon todistemerkintä: tier (VALIDATED, MODELLED tai PARTNER: rivien heikoin tila, joten se ei koskaan väitä enempää kuin heikoin rivinsä), matrix (docs/VERIFICATION-MATRIX.md), id_rule ja rows, yksi jokaista ajon käyttämää varmennusmatriisin riviä kohti (rivit, jotka sen lisäraportti luettelee, lähteestä advanced_report::KIND_CAPABILITIES): id (VM- ja rivin vaatimustekstin SHA-256:n 8 ensimmäistä heksadesimaalinumeroa), requirement ja status, kaikki luettu matriisista, mitään ei kirjoitettu käsin. Funktio api::run_toml lisää sen jokaisen tyypin tulokseen, ennen loppuosan lohkoa figure_tiers, kun sellainen on (tuo lohko pysyy viimeisenä avaimena); evidence_label::strip_json poistaa sen tavu tavulta. Saman ajon kaavion SVG ja CSV-taulukko kantavat saman merkinnän (<metadata id="kshana-evidence"> ja näkyvä rivi kaavion alla; kommenttirivit # evidence: CSV:n edessä). Toisen tyypin tulokseen upotetut kampanjajäsenet eivät kanna sellaista: ulompi asiakirja kantaa. Ei sisällä lukuja. |
evidence_label.rs |
figure_tiers |
objekti | Kunkin raportoidun laatumittarin varmennustaso, ja aina asiakirjan viimeinen avain. figures luettelee yhden merkinnän kutakin läsnä olevaa lukua kohti: path (esim. quantum.fom.timing_p95_ns), tier (VALIDATED = tarkistettu riippumatonta ulkoista oraakkelia vasten, MODELLED = ensiperiaatteista, sisäisesti testattu), requirement (varmennusmatriisin rivi, josta taso luetaan) ja applicable. applicable on false, ja mukana on reason, kohteelle security jokaisessa skenaariossa, jossa ei ole hyökkäystä konfiguroitu: raja pysyy kohdassa fom.security, mutta se ei vastaa mihinkään kysymykseen, jonka skenaario esittää. untiered luettelee kaikki luvut, joita mikään matriisin rivi ei omista (paikkaluvut hybrid ja fusion), sen sijaan että antaisi niille tason. Sen antavat tyypit clock (yksittäinen ajo ja Monte Carlo -joukko), orbit, hybrid ja fusion, jotka rakentavat sen ajonsa sisällä, ja (0,36, RM-04) jokainen muu tyyppi pääluvuilleen, liitettynä ajon jälkeen tyyppikohtaisesta taulukosta fom_label::kind_figures; api::without_figure_tiers poistaa sen takaisin tasottomaksi asiakirjaksi tavu tavulta. Sitä eivät anna lunar-station-coverage, jonka tulos on jäädytetty ennakkorekisteröity ennuste (docs/predictions/lunar-reference-station.md): kyseisellä tyypillä ei ole kohtaa figure_tiers, ennen kuin uusi päivätty ennuste korvaa sen. Sitä eivät myöskään anna leo-ppp, solar-system, optical-atmosphere (0,37; asemakohtaiset taulukot), sweep ja sweep-nd, joilla ei ole skalaarista pääsuuretta, eikä lunar-attack-surface, jonka asiakirja on kompakti JSON (fom_label::KINDS_EXCLUDED_FROM_FIGURE_TIERS antaa kunkin syyn), eikä kampanjan upotetut jäsenasiakirjat. Ei sisällä lukuarvoja. |
fom_label.rs:figure_tiers, fom_label.rs:kind_figure_tiers |
geometry |
objekti, valinnainen | Ratapaketin geometriayhteenveto: samples_total, samples_with_fix, sigma_uere_m (m, mallinnettu satelliittikohtainen etäisyysvirhebudjetti), best_pdop / median_pdop (dimensioton) ja best_position_sigma_m / median_position_sigma_m (m, PDOP (paikan tarkkuuden heikkenemiskerroin) × sigma_uere_m). Vain ratapaketti. |
orbit.rs |
eci_track |
taulukko [x, y, z] (km), valinnainen |
Käyttäjäavaruusaluksen propagoitu Maan keskipisteen inertiaalinen rata, yksi merkintä kutakin otettua ajanhetkeä kohti. Vain ratapaketti; muuten jätetty pois. Vain tulosteena — ei sisälly tiivisteeseen. | report.rs |
meta |
objekti (StudyMeta), valinnainen |
Additiivinen raportin metatieto (tutkimuksen otsikko, luontileima, tekijä, vastuuvapauslauseke). Jätetään pois, kun sitä ei ole, joten metatiedoton ajo on tavu tavulta sama kuin vanha tuloste. Vain tulosteena — ei sisälly tiivisteeseen. | report.rs |
ClockRun (kukin kohdista quantum / classical)#
| Avain | Tyyppi / yksikkö | Merkitys |
|---|---|---|
spec.id |
merkkijono | Anturin tunniste (esim. optical-sr-lattice). |
spec.kind |
merkkijono | Mallityyppi (esim. clock). |
spec.provenance |
merkkijono | Anturin parametrien lainaus/lähde. |
spec.params |
objekti | Käytetyt mallin raakaparametrit. |
series |
taulukko {t, error_ns, gnss} |
Askelkohtainen aikasarja: t sekunteja, error_ns ajoitusvirhe nanosekunteina, gnss yksi arvoista nominal/degraded/denied. |
fom |
objekti (FoMScores) |
Pisteytetyt laatumittarit (alla). |
adev_curve |
taulukko {tau_s, adev, n_samples, noise, edf, ci_lo, ci_hi} |
Päällekkäinen Allanin poikkeama: tau_s keskiarvoistusaika (s), adev dimensioton suhteellisen taajuuden vakaus σ_y(τ), n_samples kyseisen pisteen takana oleva päällekkäisyyksien lukumäärä, noise MDEV:n (modifioitu Allanin poikkeama) kaltevuudesta tunnistettu potenssilakityyppi (esim. WhiteFm), edf kohinatyyppikohtaiset tehokkaat vapausasteet ja ci_lo/ci_hi χ²-pohjainen luottamuskaista (95%) suureelle adev kyseisellä τ:lla. Laskettu tiedostossa allan.rs:overlapping_adev_curve. |
filter_health |
objekti, valinnainen | Kalman-suodattimen johdonmukaisuusarvio (NIS/NEES (NIS: normalisoitu innovaationeliö; NEES: normalisoitu estimointivirheen neliö) χ²-kaistojaan vasten), laskettu tiedostossa filter_health.rs; jätetään pois ajoilta, jotka eivät arvioi sitä. |
FoMScores (objekti fom)#
| Kenttä | Yksikkö | Merkitys | Lähde | Varauma |
|---|---|---|---|---|
timing_rms_ns |
ns | Kellovaiheen (ajoituksen) virheen RMS (neliökeskiarvo) katkon aikana. | fom.rs:score |
ajoitusmittari, ei paikka |
timing_p95_ns |
ns | Ajoitusvirheen 95. persentiili katkon aikana. | fom.rs:score |
|
holdover_s |
s | Huonoin (lyhin) määrityksen sisällä pysyvä ylläpito katkojaksojen yli. | fom.rs:worst_case_holdover |
ruudukon rajaama — alaraja aika-askeleen tarkkuudella |
resilience_slope_ns_per_s |
ns/s | |virheen| pienimmän neliösumman kasvunopeus katkon aikana. | fom.rs:score |
|
availability |
osuus [0 1] | Koko ajon osuus, jolla on määrityksen sisäinen ratkaisu. | fom.rs:score |
|
integrity |
osuus [0 1] tai null | Suodattimen itseyhdenmukaisuus: niiden katkonäytteiden osuus, joiden todellinen virhe pysyy Kalmanin k-σ-rajan sisällä. | run.rs |
EI HPL/VPL/RAIM (HPL: horisontaalinen suojaustaso; VPL: vertikaalinen suojaustaso; RAIM: vastaanottimen autonominen eheysvalvonta) -eheyttä — katso INTEGRITY.md |
security |
osuus [0 1] tai null | Analyyttinen harhautuksen havaittavuusraja kellon vakaudesta. | run.rs + security.rs |
merkityksellinen vain konfiguroidulla hyökkäyksellä, joten kello- ja ratapaketit (jotka eivät konfiguroi mitään) merkitsevät sen arvolla applicable: false kohdassa figure_tiers ja tulostavat sen yhteenvedossa muodossa n/a (no attack); ei monisatelliittinen RAIM-ilmaisin |
Miltä ”hyvä” näyttää#
- Hiljaisempi kello (pienempi
adev_curve) antaa pidemmän arvonholdover_sja korkeamman havaittavuusrajansecurity— se on kvantti vs. klassinen -vastakohta. - Arvo
availabilitylähellä lukua 1,0 tarkoittaa, että järjestelmä pysyi määrityksen sisällä lähes koko ajon; pitkän katkon aikana se laskee kohinaisemmalle kellolle. - Arvo
integritylähellä lukua 1,0 tarkoittaa, että suodattimen oma epävarmuusraja oli rehellinen virheestään — itseyhdenmukaisuutta koskeva väite, ei ihmishengen turvaamiseen liittyvä takuu.
Muut skenaariotyypit#
Jokainen muu tyyppi tuottaa oman tulosmuotonsa. Muutama yleinen:
- inertial: paikka-alueen laatumittarit metreinä (
pos_rms_m,pos_p95_m) — yksiakselinen (1-DOF (DOF: vapausaste)), yhden siemenluvun (katsoCAPABILITY.md). - hybrid / fusion:
timing_spec_nsjaposition_spec_mylätasolla, ja puolta kohti yhden anturikokonaisuuden ajoitus- ja paikkaluvut (position_p95_m,position_holdover_sjapnt_holdover_s, aika kunnes jompikumpi määritys rikkoutuu), lohkonfigure_tierskanssa kuten kellopaketissa, jossa paikkaluvut on lueteltu merkinnälläuntiered. - spoof: askelkohtainen harhautuspoikkeama vs. kellon havaitsemisraja sekä se, saavuttiko harhautus määrityksen ennen havaitsemista (
src/spoof.rs). - horisonttiprofiili (
orbitjaintegritytyypeilläuser_site,gnss-sim,jamming,leo-pvt,leo-pass; mukana vain, kun skenaariossa on osio[skyline], joten skenaario ilman sitä on ennallaan): ylätason objektiskyline, jossasource(merkkijono:preset:<name>,preset:<name>+overridestaicustom),open_fraction(osuus [0 1] ylemmän puolipallon avaruuskulmasta kohdanmax(mask_deg, skyline)yläpuolella) japrovenance(merkkijono); näytettä kohtimasked_by_skyline(maskin yläpuolella mutta horisonttiprofiilin takana olevien satelliittien lukumäärä:epochs[]tyypeissäintegrityjajamming,gnss_measurements[]tyypissägnss-sim,joint.epochs[]tyypissäleo-pvt); ja tyypilleleo-passkenttäsatellites[].pass.epochs_masked_by_skyline(epookkien lukumäärä). Niiden yksiköt ja alkuperäluokat ovat lohkossaunits(src/skyline.rsUNITS;SKYLINE.md).
Minkä tahansa tyypin tarkan kenttäjoukon löydät sen merkinnästä tiedostossa field-units-schema.json (alla), tyypin osiosta tiedostossa SCENARIOS.md tai vastaavasta rakenteesta *Result hakemistossa src/.
Muut tiedostot, jotka ajo kirjoittaa#
Tiedoston <scenario>.result.json viereen komentorivi (CLI) kirjoittaa tiedoston <scenario>.chart.svg, tulostettavan <scenario>.report.html ja saman raportin tiedostona <scenario>.report.json, jonka lohko reproducibility kirjaa moottorin version, skenaariotiedoston SHA-256-tiivisteen, siemenluvun, alustan ja tarkan komennon (katso REPORTS.md ja REPRODUCIBILITY.md). Tyypit, jotka julkaisevat toistettavuustaulukon, kirjoittavat myös <scenario>.table.csv (CSV: pilkuin erotetut arvot). --export kirjoittaa vaihtotiedostot (katso INTEROP.md) ja --animate animaation (katso ANIMATION.md).
Yksiköt ja alkuperä kenttäkohtaisesti kaikille tyypeille#
Tämä sivu on käsin kirjoitettu ja kattaa kello- ja ratapaketit. Koneluettava vastine kattaa jokaisen sisäänrakennetun tyypin:
- Itse tuloksessa. Jokaisen skenaarion tulosasiakirja sisältää ylätason objektin
units, joka kuvaa annetun kentän polun arvoon{"unit", "provenance", "note"}. Polkukielioppi (taulukko tuottaa yhden segmentin, jonka pääte on[]ja joka on yhteinen sen riveille;*on yhden segmentin jokerimerkki datalla avainnetuille objekteille) ja suljettu alkuperäsanasto on määritelty tiedostossasrc/field_schema.rs. - Yhtenä tiedostona. Tiedosto
field-units-schema.jsonon kerätty yhdiste: jokaiselle tyypille jokainen numeerinen kenttä, jonka se antaa ilmoitetussa lähteessä, yksikön, alkuperäluokan, todistetason ja määritelmän kanssa — ja nimettynä eikä pois jätettynä jokainen kenttä, jolla ei vielä ole niitä. Sen lohkocoveragesisältää lukumäärät.
Molemmat pannaan täytäntöön testillä tests/field_units_global.rs, joka ajaa jokaisen rekisteröidyn tyypin ja epäonnistuu, jos annetulta numeeriselta kentältä puuttuu yksikkö ja alkuperäluokka. Vielä kattamattomat tyypit on nimetty yksitellen kyseisen tiedoston kohdassa UNCOVERED_KINDS kunkin avoimen syyn kanssa, ja lukumäärä on lukittu, jotta luettelo voi vain lyhentyä.
Generoi JSON uudelleen minkä tahansa raportin muodon tai lohkon units muutoksen jälkeen:
cargo test --test field_units_global zzz_emit_field_units_schema -- --ignored