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

ScenarioerRediger på GitHubKilde: docs/SCHEMA.md

Resultatskjema — slik leser du en Kshana *.result.json

Hver kjøring skriver en versjonert, selvbeskrivende JSON-artefakt (JavaScript Object Notation) ved siden av scenarioet. Denne siden er den håndskrevne leserveiledningen til utvekslingskonvolutten og til resultatformene for klokke og bane: hvert felts enhet, hvor det beregnes i kildekoden og hvordan det leses. Den kanoniske typen er RunResult i src/report.rs; kvalitetsmålene er FoMScores i src/fom.rs.

Den er ikke den fullstendige feltreferansen. Motoren fordeler over langt flere kind-er enn disse to, og hver gir ut sin egen pakke. Den fullstendige referansen — enhet, proveniensklasse og definisjon for hvert numeriske felt i hver innebygde kind — er generert, ikke håndskrevet: se Enheter og proveniens, per felt, for hver kind nedenfor.

Utvekslingskonvolutt (KIF, Kshana Interchange Format) — gjenkjenne og versjonskontrollere en artefakt#

Kshana-artefakter kan pakkes inn i en nøytral, selvbeskrivende utvekslingskonvolutt slik at et tredjepartsverktøy kan gjenkjenne filen og avgjøre om det kan lese den før det forplikter seg til et nyttelastskjema. Den kanoniske typen er Envelope i src/interchange.rs.

Nøkkel Type Betydning
format streng Alltid "kshana-interchange" (FORMAT_TAG) — slik gjenkjenner et fremmed verktøy en Kshana-artefakt.
schema_version streng Skjemaversjonen MAJOR.MINOR (SCHEMA_VERSION, den eneste kilden til sannhet for hele craten).
kind streng Artefakttype, for eksempel "scenario", "run-result", "trade-study" — lar en forbruker rute uten å tolke innholdet.
engine_version streng Crate-versjonen (Cargo.toml) som laget nyttelasten.
payload objekt Den innpakkede artefakten som kanonisk JSON (en Scenario, en RunResult, …).

Kompatibilitetskontrakt. Versjoner er MAJOR.MINOR. Nye felt legges til med #[serde(default)] (den additive disiplinen), slik at en leser kan tolke enhver artefakt med samme hovedversjon og lik eller eldre underversjon (Compatible). En strengt nyere underversjon (ForwardIncompatible) kan ha felt denne leseren ikke kan ta hensyn til, og en annen hovedversjon (MajorIncompatible) er et strukturelt brudd — begge avvises av Envelope::parse, som kontrollerer formattaggen og versjonen ved grensen i stedet for å feiltolke fremmed inndata i det stille.

Determinisme. Konvolutten har ingen tidsstempel — det kreves av Kshanas reproduserbarhetsløfte (scenario + seed + engine_version reproduserer en kjøring). Proveniens ligger i engine_version og i nyttelastens egen scenario_hash.

En typet tilbakelesing (Envelope::payload_as::<T>()) fungerer for enhver nyttelast som implementerer Deserialize (for eksempel Scenario). Resultatartefakter kan bare serialiseres, etter utforming, og leses som den rå JSON-verdien payload.

Toppnivå (pakkene for klokke og bane)#

Nøkkel Type / enhet Betydning Kilde
schema_version streng Resultatskjemaets versjon (uavhengig av motorversjonen). report.rs
engine_version streng Crate-versjonen (Cargo.toml) som laget filen. report.rs
scenario_hash heksadesimal streng SHA-256 (SHA: Secure Hash Algorithm) over den kanoniske scenario-JSON-en — kjøringen kan reproduseres fra scenario + seed + engine_version. report.rs:hash_scenario
seed u64 Seed for RNG (tilfeldighetsgenerator) for kvantekjøringen (den klassiske bruker seed + 0x9e3779b97f4a7c15). run.rs
threshold_ns nanosekunder Tidsspesifikasjonen: en feil innenfor ±threshold_ns er «innenfor spesifikasjonen». scenario
quantum objekt (ClockRun) Kvantesensorens kjøring (se nedenfor). report.rs
classical objekt (ClockRun) Den klassiske sensorens kjøring, til sammenligning. report.rs
units objekt Kart over enhet og proveniens per felt for dette dokumentet, med feltsti som nøkkel. Se §Enheter og proveniens nedenfor. field_schema.rs:units_block
evidence objekt (0,40) Bevismerkelappen for kjøringen: tier (VALIDATED, MODELLED eller PARTNER: den svakeste statusen blant radene, så den aldri hevder mer enn sin svakeste rad), matrix (docs/VERIFICATION-MATRIX.md), id_rule og rows, én per verifikasjonsmatriserad kjøringen brukte (radene den avanserte rapporten lister, fra advanced_report::KIND_CAPABILITIES): id (VM- og de første 8 heksadesimale sifrene av SHA-256 for radens kravtekst), requirement og status, alt lest fra matrisen, ingenting skrevet for hånd. Legges til av api::run_toml i resultatet for hver type, før den avsluttende figure_tiers-blokken når det finnes en (den blokken forblir siste nøkkel); evidence_label::strip_json fjerner den byte for byte. Diagram-SVG-en og CSV-tabellen fra samme kjøring bærer den samme merkelappen (<metadata id="kshana-evidence"> og en synlig linje under diagrammet; # evidence:-kommentarlinjer foran CSV-en). Kampanjemedlemmer innebygd i resultatet til en annen type bærer ingen: det ytre dokumentet gjør det. Inneholder ingen tall. evidence_label.rs
figure_tiers objekt Verifikasjonsnivået til hvert oppgitte kvalitetsmål, og alltid dokumentets siste nøkkel. figures lister én oppføring per mål som er til stede: path (for eksempel quantum.fom.timing_p95_ns), tier (VALIDATED = kontrollert mot en uavhengig ekstern referanse, MODELLED = fra første prinsipper, internt testet), requirement (raden i verifikasjonsmatrisen nivået leses fra) og applicable. applicable er false, med en reason, for security i hvert scenario uten angrep konfigurert: grensen blir stående i fom.security, men den svarer ikke på et spørsmål scenarioet stiller. untiered lister ethvert mål som ingen matriserad eier (posisjonsmålene for hybrid og fusion), i stedet for å gi det et nivå. Gis ut av kind-ene clock (enkeltkjøring og Monte Carlo-ensemble), orbit, hybrid og fusion, som bygger det inne i kjøringen, og (0,36, RM-04) av alle andre kind-er for hovedmålene sine, lagt til etter kjøringen fra tabellen per kind fom_label::kind_figures; api::without_figure_tiers fjerner det igjen til det ikke-nivåinndelte dokumentet byte for byte. Gis ikke ut av lunar-station-coverage, hvis resultat er en frosset forhåndsregistrert prediksjon (docs/predictions/lunar-reference-station.md): den kind-en har ingen figure_tiers før en ny datert prediksjon erstatter den. Gis heller ikke ut av leo-ppp, solar-system, optical-atmosphere (0,37; matriser per sted), sweep og sweep-nd, som ikke har noe skalart hovedmål, eller av lunar-attack-surface, hvis dokument er kompakt JSON (fom_label::KINDS_EXCLUDED_FROM_FIGURE_TIERS gir hver begrunnelse), eller av de innebygde medlemsdokumentene i en kampanje. Inneholder ingen tall. fom_label.rs:figure_tiers, fom_label.rs:kind_figure_tiers
geometry objekt, valgfritt Geometrisammendrag for banepakken: samples_total, samples_with_fix, sigma_uere_m (m, det modellerte avstandsfeilbudsjettet per satellitt), best_pdop / median_pdop (dimensjonsløse) og best_position_sigma_m / median_position_sigma_m (m, PDOP (presisjonsfortynning i posisjon) × sigma_uere_m). Bare banepakken. orbit.rs
eci_track matrise med [x, y, z] km, valgfri Propagert jordsentrert-inertielt spor for brukerens romfartøy, én oppføring per samplet tidspunkt. Bare banepakken; utelatt ellers. Bare utdata — ikke hashet. report.rs
meta objekt (StudyMeta), valgfritt Additive rapportmetadata (studietittel, genereringsstempel, forfatter, ansvarsfraskrivelse). Utelatt når de mangler, slik at en kjøring uten metadata er byte-identisk med eldre utdata. Bare utdata — ikke hashet. report.rs

ClockRun (hver av quantum / classical)#

Nøkkel Type / enhet Betydning
spec.id streng Sensoridentifikator (for eksempel optical-sr-lattice).
spec.kind streng Modelltype (for eksempel clock).
spec.provenance streng Sitat/kilde for sensorens parametere.
spec.params objekt De rå modellparametrene som ble brukt.
series matrise med {t, error_ns, gnss} Tidsserie per steg: t sekunder, error_ns tidsfeilen i nanosekunder, gnss én av nominal/degraded/denied.
fom objekt (FoMScores) De vurderte kvalitetsmålene (nedenfor).
adev_curve matrise med {tau_s, adev, n_samples, noise, edf, ci_lo, ci_hi} Overlappende Allan-avvik: tau_s midlingstiden (s), adev den dimensjonsløse stabiliteten i brøkfrekvens σ_y(τ), n_samples antall overlapp bak det punktet, noise potenslovtypen identifisert fra MDEV-stigningen (modifisert Allan-avvik) (for eksempel WhiteFm), edf de støytypespesifikke effektive frihetsgradene og ci_lo/ci_hi det χ²-baserte 95%-konfidensbåndet på adev ved den τ. Beregnet i allan.rs:overlapping_adev_curve.
filter_health objekt, valgfritt Vurdering av Kalman-filterets konsistens (NIS/NEES (NIS: normalisert innovasjonskvadrat; NEES: normalisert estimeringsfeilkvadrat) mot χ²-båndene sine), beregnet i filter_health.rs; utelatt for kjøringer som ikke vurderer det.

FoMScores (objektet fom)#

Felt Enhet Betydning Kilde Forbehold
timing_rms_ns ns RMS (kvadratisk middelverdi) for klokkefasefeil (tidssynkronisering) over bortfallet. fom.rs:score et tidssynkroniseringsmål, ikke posisjon
timing_p95_ns ns 95-persentilen av tidsfeilen over bortfallet. fom.rs:score
holdover_s s Verste (korteste) coasting innenfor spesifikasjonen over bortfallssegmentene. fom.rs:worst_case_holdover rutenettbegrenset — en nedre grense ved tidstrinnets oppløsning
resilience_slope_ns_per_s ns/s Vekstrate for |feil| under bortfallet etter minste kvadraters metode. fom.rs:score
availability brøk [0 1] Andelen av hele kjøringen med en løsning innenfor spesifikasjonen. fom.rs:score
integrity brøk [0 1] eller null Filterets selvkonsistens: andelen av bortfallssamplene der den sanne feilen holder seg innenfor Kalman-grensen k-σ. run.rs IKKE integritet etter HPL/VPL/RAIM (HPL: horisontalt beskyttelsesnivå; VPL: vertikalt beskyttelsesnivå; RAIM: mottakerens autonome integritetsovervåking) — se INTEGRITY.md
security brøk [0 1] eller null Analytisk grense for påviselighet av spoofing fra klokkestabilitet. run.rs + security.rs bare meningsfullt med et konfigurert angrep, så pakkene for klokke og bane (som ikke konfigurerer noe) merker det applicable: false i figure_tiers og skriver det som n/a (no attack) i sammendraget; ikke en RAIM-detektor for flere satellitter

Hvordan «bra» ser ut#

  • En roligere klokke (lavere adev_curve) gir en lengre holdover_s og en høyere grense for påviselighet for security — det er kontrasten mellom kvante og klassisk.
  • availability nær 1,0 betyr at systemet holdt seg innenfor spesifikasjonen nesten hele kjøringen; under et langt bortfall synker den for den mer støyende klokken.
  • integrity nær 1,0 betyr at filterets egen usikkerhetsgrense var ærlig om feilen sin — en utsagn om selvkonsistens, ikke en garanti for liv og sikkerhet.

Andre scenario-kind-er#

Hver av de andre kind-ene gir ut sin egen resultatform. Noen av de vanligste:

  • inertial: kvalitetsmål i posisjonsdomenet i meter (pos_rms_m, pos_p95_m) — enkeltakset, enkelt seed (1-DOF (DOF: frihetsgrad)) (se CAPABILITY.md).
  • hybrid / fusion: timing_spec_ns og position_spec_m på toppnivå, og per side tids- og posisjonsmålene for én sensorsuite (position_p95_m, position_holdover_s og pnt_holdover_s, tiden til en av spesifikasjonene brytes), med en blokk figure_tiers som i klokkepakken, der posisjonsmålene er oppført som untiered.
  • spoof: spoofingavvik per steg mot klokkens deteksjonsgrense, pluss om spoofingen nådde spesifikasjonen før deteksjon (src/spoof.rs).
  • skyline (orbit og integrity med user_site, gnss-sim, jamming, leo-pvt, leo-pass; bare til stede når scenarioet har en seksjon [skyline], så et scenario uten den er uendret): et toppnivåobjekt skyline med source (streng: preset:<name>, preset:<name>+overrides eller custom), open_fraction (brøk [0 1] av den øvre halvkulens romvinkel over max(mask_deg, skyline)) og provenance (streng); per sample masked_by_skyline (antall satellitter over masken men bak horisontlinjen: epochs[] for integrity og jamming, gnss_measurements[] for gnss-sim, joint.epochs[] for leo-pvt); og for leo-pass satellites[].pass.epochs_masked_by_skyline (antall epoker). Enhetene og proveniensklassene deres står i blokken units (src/skyline.rs UNITS; SKYLINE.md).

For det nøyaktige feltsettet til en hvilken som helst kind, les oppføringen i field-units-schema.json (nedenfor), kind-ens avsnitt i SCENARIOS.md, eller den tilsvarende structen *Result i src/.

Andre filer en kjøring skriver#

Ved siden av <scenario>.result.json skriver CLI (kommandolinjegrensesnittet) <scenario>.chart.svg, en utskriftsvennlig <scenario>.report.html og den samme rapporten som <scenario>.report.json, hvis blokk reproducibility registrerer motorversjonen, SHA-256 for scenariofilen, seed, plattformen og den nøyaktige kommandoen (se REPORTS.md og REPRODUCIBILITY.md). Kind-er som publiserer en reproduserbarhetstabell skriver også <scenario>.table.csv (CSV: kommaseparerte verdier). --export skriver utvekslingsfiler (se INTEROP.md) og --animate en animasjon (se ANIMATION.md).

Enheter og proveniens, per felt, for hver kind#

Denne siden er håndskrevet og dekker pakkene for klokke og bane. Den maskinlesbare motparten dekker hver innebygde kind:

  • I selve resultatet. Hvert scenarios resultatdokument har et toppnivåobjekt units som kobler et utgitt felts sti til {"unit", "provenance", "note"}. Stigrammatikken (en matrise bidrar med ett segment med suffikset [] som deles av radene; * er et jokertegn for ett segment for datanøklede objekter) og det lukkede proveniensvokabularet er definert i src/field_schema.rs.
  • Som én fil. field-units-schema.json er den innhøstede unionen: for hver kind, hvert numeriske felt den gir ut ved en oppgitt kilde, med enhet, proveniensklasse, evidensnivå og definisjon — og, navngitt i stedet for utelatt, hvert felt som ennå ikke har det. Blokken coverage bærer antallene.

Begge håndheves av tests/field_units_global.rs, som kjører hver registrerte kind og feiler hvis et utgitt numerisk felt mangler enhet og proveniensklasse. Kind-er som ennå ikke er dekket nevnes enkeltvis i UNCOVERED_KINDS i den filen med begrunnelsen for hver åpne, og antallet er festet slik at listen bare kan bli kortere.

Generer JSON-en på nytt etter enhver endring av en rapports form eller av en blokk units:

cargo test --test field_units_global zzz_emit_field_units_schema -- --ignored