Maskinöversättning, inte granskad av en modersmålstalare. Engelska är referensen.

ScenarierRedigera på GitHubKälla: docs/SCHEMA.md

Resultatschema — att läsa en Kshana-*.result.json

Varje körning skriver en versionshanterad, självbeskrivande JSON-artefakt (JavaScript Object Notation) bredvid scenariot. Den här sidan är den handskrivna läsarguiden till utbyteskuvertet och till resultatformerna för klocka och bana: varje fälts enhet, var det beräknas i källkoden och hur det ska läsas. Den kanoniska typen är RunResult i src/report.rs; kvalitetsmåtten är FoMScores i src/fom.rs.

Den är inte den fullständiga fältreferensen. Motorn skickar vidare över många fler typer än dessa två, och var och en ger sitt eget paket. Den fullständiga referensen — enhet, proveniensklass och definition för varje numeriskt fält i varje inbyggd typ — är genererad, inte handskriven: se Enheter och proveniens, per fält, för varje typ nedan.

Utbyteskuvert (KIF, Kshana Interchange Format) — att känna igen och versionskontrollera en artefakt#

Kshana-artefakter kan paketeras i ett neutralt, självbeskrivande utbyteskuvert så att ett tredjepartsverktyg kan känna igen filen och avgöra om det kan läsa den innan det binder sig vid ett nyttolastschema. Den kanoniska typen är Envelope i src/interchange.rs.

Nyckel Typ Betydelse
format sträng Alltid "kshana-interchange" (FORMAT_TAG) — så känner ett främmande verktyg igen en Kshana-artefakt.
schema_version sträng Schemaversionen MAJOR.MINOR (SCHEMA_VERSION, den enda sanningskällan för hela cratet).
kind sträng Artefakttyp, t.ex. "scenario", "run-result", "trade-study" — låter en konsument styra utan att tolka innehållet.
engine_version sträng Crate-version (Cargo.toml) som producerade nyttolasten.
payload objekt Den paketerade artefakten som kanonisk JSON (en Scenario, en RunResult, …).

Kompatibilitetsavtal. Versioner är MAJOR.MINOR. Nya fält läggs till med #[serde(default)] (den additiva disciplinen), så en läsare kan tolka varje artefakt med samma huvudversion och en lika gammal eller äldre delversion (Compatible). En strikt nyare delversion (ForwardIncompatible) kan bära fält som den här läsaren inte kan hantera, och en annan huvudversion (MajorIncompatible) är ett strukturellt brott — båda avvisas av Envelope::parse, som validerar formattaggen och versionen vid gränsen istället för att i tysthet feltolka främmande indata.

Determinism. Kuvertet bär ingen tidsstämpel — Kshanas reproducerbarhetslöfte (scenario + seed + engine_version reproducerar en körning) kräver det. Proveniensen finns i engine_version och nyttolastens egen scenario_hash.

En typad återläsning (Envelope::payload_as::<T>()) fungerar för varje nyttolast som implementerar Deserialize (t.ex. Scenario). Resultatartefakter är avsiktligt enbart serialiserbara och läses som det råa JSON-värdet payload.

Översta nivån (paketen för klocka och bana)#

Nyckel Typ / enhet Betydelse Källa
schema_version sträng Resultatschemats version (oberoende av motorversionen). report.rs
engine_version sträng Crate-version (Cargo.toml) som producerade filen. report.rs
scenario_hash hexsträng SHA-256 (SHA: Secure Hash Algorithm) över det kanoniska scenariots JSON — körningen är reproducerbar utifrån scenario + seed + engine_version. report.rs:hash_scenario
seed u64 Frö för RNG (slumptalsgenerator) för kvantkörningen (den klassiska använder seed + 0x9e3779b97f4a7c15). run.rs
threshold_ns nanosekunder Tidssynkroniseringens specifikation: ett fel inom ±threshold_ns är "in spec". scenario
quantum objekt (ClockRun) Kvantsensorns körning (se nedan). report.rs
classical objekt (ClockRun) Den klassiska sensorns körning, för jämförelse. report.rs
units objekt Karta över enhet/proveniens per fält för det här dokumentet, nycklad på fältsökväg. Se §Enheter och proveniens nedan. field_schema.rs:units_block
evidence objekt (0,40) Körningens evidensetikett: tier (VALIDATED, MODELLED eller PARTNER: den svagaste statusen bland raderna, så den hävdar aldrig mer än sin svagaste rad), matrix (docs/VERIFICATION-MATRIX.md), id_rule och rows, en per rad i verifieringsmatrisen som körningen använde (de rader som dess avancerade rapport listar, från advanced_report::KIND_CAPABILITIES): id (VM- och de första 8 hexsiffrorna i SHA-256 för radens kravtext), requirement och status, alla lästa från matrisen, inga inskrivna. Läggs till av api::run_toml i varje typs resultat, före det avslutande blocket figure_tiers när det finns ett (det blocket förblir den sista nyckeln); evidence_label::strip_json tar bort den byte för byte. Diagrammets SVG och CSV-tabellen från samma körning bär samma etikett (<metadata id="kshana-evidence"> och en synlig rad under diagrammet; kommentarsraderna # evidence: först i CSV). Kampanjmedlemmar som är inbäddade i en annan typs resultat bär ingen: det yttre dokumentet gör det. Bär inga tal. evidence_label.rs
figure_tiers objekt Verifieringsnivån för varje rapporterat kvalitetsmått, och alltid dokumentets sista nyckel. figures listar en post per närvarande värde: path (t.ex. quantum.fom.timing_p95_ns), tier (VALIDATED = kontrollerad mot en oberoende extern referens, MODELLED = utifrån grundprinciper, internt testad), requirement (den rad i verifieringsmatrisen som nivån läses från) och applicable. applicable är false, med ett reason, för security i varje scenario utan konfigurerad attack: gränsen finns kvar i fom.security, men den besvarar ingen fråga som scenariot ställer. untiered listar varje värde som ingen matrisrad äger (positionsvärdena för hybrid och fusion), istället för att ge det en nivå. Ges av typerna clock (enskild körning och Monte Carlo-ensemble), orbit, hybrid och fusion, som bygger det inuti sin körning, och (0,36, RM-04) av varje annan typ för sina huvudvärden, tillagt efter körningen från tabellen per typ fom_label::kind_figures; api::without_figure_tiers tar bort det igen till det onivåindelade dokumentet byte för byte. Ges inte av lunar-station-coverage, vars resultat är en frusen, förhandsregistrerad prediktion (docs/predictions/lunar-reference-station.md): den typen har inget figure_tiers förrän en ny daterad prediktion ersätter den. Ges inte heller av leo-ppp, solar-system, optical-atmosphere (0,37; arrayer per plats), sweep och sweep-nd, som saknar ett skalärt huvudvärde, eller av lunar-attack-surface, vars dokument är kompakt JSON (fom_label::KINDS_EXCLUDED_FROM_FIGURE_TIERS anger skälet för var och en), eller av en kampanjs inbäddade medlemsdokument. Bär inga tal. fom_label.rs:figure_tiers, fom_label.rs:kind_figure_tiers
geometry objekt, valfritt Geometrisammanfattning för banepaketet: samples_total, samples_with_fix, sigma_uere_m (m, det modellerade felbudgeten för avstånd per satellit), best_pdop / median_pdop (dimensionslösa) och best_position_sigma_m / median_position_sigma_m (m, PDOP (position dilution of precision) × sigma_uere_m). Endast banepaketet. orbit.rs
eci_track array av [x, y, z] km, valfri Propagerat jordcentrerat tröghetsspår för användarens rymdfarkost, en post per samplad tidpunkt. Endast banepaketet; utelämnas annars. Endast utdata — hashas inte. report.rs
meta objekt (StudyMeta), valfritt Additiv rapportmetadata (studietitel, genereringsstämpel, författare, friskrivning). Utelämnas när den saknas, så en körning utan meta är byte för byte identisk med äldre utdata. Endast utdata — hashas inte. report.rs

ClockRun (var och en av quantum / classical)#

Nyckel Typ / enhet Betydelse
spec.id sträng Sensoridentifierare (t.ex. optical-sr-lattice).
spec.kind sträng Modelltyp (t.ex. clock).
spec.provenance sträng Citat/källa för sensorns parametrar.
spec.params objekt De råa modellparametrar som användes.
series array av {t, error_ns, gnss} Tidsserie per steg: t sekunder, error_ns tidsfelet i nanosekunder, gnss ett av nominal/degraded/denied.
fom objekt (FoMScores) De bedömda kvalitetsmåtten (nedan).
adev_curve array av {tau_s, adev, n_samples, noise, edf, ci_lo, ci_hi} Överlappande Allan-deviation: tau_s medelvärdestiden (s), adev den dimensionslösa fraktionella frekvensstabiliteten σ_y(τ), n_samples överlappsantalet bakom den punkten, noise den potenslagstyp som identifierats utifrån lutningen för MDEV (modifierad Allan-deviation) (t.ex. WhiteFm), edf de brustypsspecifika effektiva frihetsgraderna, och ci_lo/ci_hi det χ²-baserade 95-procentiga konfidensbandet på adev vid det τ. Beräknas i allan.rs:overlapping_adev_curve.
filter_health objekt, valfritt Bedömning av Kalmanfiltrets konsistens (NIS/NEES (NIS: normaliserat innovationskvadrat; NEES: normaliserat skattningsfelskvadrat) mot deras χ²-band), beräknad i filter_health.rs; utelämnas för körningar som inte bedömer den.

FoMScores (objektet fom)#

Fält Enhet Betydelse Källa Förbehåll
timing_rms_ns ns RMS (kvadratmedelvärde) för klockfasfel (tidssynkronisering) under avbrottet. fom.rs:score ett mått på tidssynkronisering, inte position
timing_p95_ns ns 95:e percentilen av tidsfelet under avbrottet. fom.rs:score
holdover_s s Sämsta (kortaste) glidning inom specifikation över avbrottssegmenten. fom.rs:worst_case_holdover rutnätsbundet — en nedre gräns vid tidstegsupplösningen
resilience_slope_ns_per_s ns/s Tillväxttakt för |fel| under avbrottet enligt minsta kvadrat. fom.rs:score
availability andel [0 1] Andel av hela körningen med en lösning inom specifikation. fom.rs:score
integrity andel [0 1] eller null Filtrets självkonsistens: andel av avbrottets samplingar vars verkliga fel håller sig inom Kalmanfiltrets k-σ-gräns. run.rs INTE integritet enligt HPL/VPL/RAIM (HPL: horisontell skyddsnivå; VPL: vertikal skyddsnivå; RAIM: receiver autonomous integrity monitoring) — se INTEGRITY.md
security andel [0 1] eller null Analytisk gräns för detekterbarhet av spoofing utifrån klockans stabilitet. run.rs + security.rs meningsfull bara med en konfigurerad attack, så paketen för klocka och bana (som inte konfigurerar någon) markerar den applicable: false i figure_tiers och skriver ut den som n/a (no attack) i sammanfattningen; inte en RAIM-detektor för flera satelliter

Hur "bra" ser ut#

  • En tystare klocka (lägre adev_curve) ger en längre holdover_s och en högre gräns för detekterbarhet av security — det är kontrasten mellan kvant och klassisk.
  • availability nära 1,0 betyder att systemet höll sig inom specifikation nästan hela körningen; under ett långt avbrott sjunker det för den brusigare klockan.
  • integrity nära 1,0 betyder att filtrets egen osäkerhetsgräns var ärlig om sitt fel — ett påstående om självkonsistens, inte en garanti för liv och säkerhet.

Andra scenariotyper#

Varje annan typ ger sin egen resultatform. Några av de vanligaste:

  • inertial: kvalitetsmått i positionsdomänen i meter (pos_rms_m, pos_p95_m) — enaxlig (1-DOF (DOF: frihetsgrad)), ett enda frö (se CAPABILITY.md).
  • hybrid / fusion: timing_spec_ns och position_spec_m på översta nivån, och per sida tidssynkroniserings- och positionsvärdena för en sensorsvit (position_p95_m, position_holdover_s och pnt_holdover_s, tiden tills någon specifikation överskrids), med ett block figure_tiers likt klockpaketets där positionsvärdena listas som untiered.
  • spoof: spoofingens offset per steg mot klockans detektionsgräns, plus om spoofingen nådde specifikationen före detektion (src/spoof.rs).
  • skyline (orbit och integrity med user_site, gnss-sim, jamming, leo-pvt, leo-pass; finns bara när scenariot har ett avsnitt [skyline], så ett scenario utan ett är oförändrat): ett objekt skyline på översta nivån med source (sträng: preset:<name>, preset:<name>+overrides eller custom), open_fraction (andel [0 1] av den övre halvsfärens rymdvinkel ovanför max(mask_deg, skyline)) och provenance (sträng); per sampling masked_by_skyline (antal satelliter över masken men bakom skylinen: epochs[] av integrity och jamming, gnss_measurements[] av gnss-sim, joint.epochs[] av leo-pvt); och för leo-pass satellites[].pass.epochs_masked_by_skyline (antal epoker). Deras enheter och proveniensklasser finns i blocket units (src/skyline.rs UNITS; SKYLINE.md).

För den exakta fältuppsättningen för en viss typ, läs dess post i field-units-schema.json (nedan), typens avsnitt i SCENARIOS.md, eller motsvarande struct *Result i src/.

Andra filer som en körning skriver#

Bredvid <scenario>.result.json skriver CLI (kommandoradsgränssnitt) <scenario>.chart.svg, en utskrivbar <scenario>.report.html och samma rapport som <scenario>.report.json, vars block reproducibility registrerar motorversionen, SHA-256 för scenariofilen, fröet, plattformen och det exakta kommandot (se REPORTS.md och REPRODUCIBILITY.md). Typer som publicerar en reproducerbarhetstabell skriver också <scenario>.table.csv (CSV: kommaseparerade värden). --export skriver utbytesfiler (se INTEROP.md) och --animate en animering (se ANIMATION.md).

Enheter och proveniens, per fält, för varje typ#

Den här sidan är handskriven och täcker paketen för klocka och bana. Den maskinläsbara motsvarigheten täcker varje inbyggd typ:

  • I själva resultatet. Varje scenarios resultatdokument bär ett objekt units på översta nivån som kopplar ett utsänt fälts sökväg till {"unit", "provenance", "note"}. Sökvägsgrammatiken (en array bidrar med ett segment med suffixet [] som delas av dess rader; * är ett jokertecken för ett segment för dataindexerade objekt) och det slutna proveniensvokabuläret definieras i src/field_schema.rs.
  • Som en fil. field-units-schema.json är den insamlade unionen: för varje typ, varje numeriskt fält den ger vid en angiven källa, med dess enhet, proveniensklass, evidensnivå och definition — och, namngivet snarare än utelämnat, varje fält som ännu inte har någon. Dess block coverage bär antalen.

Båda upprätthålls av tests/field_units_global.rs, som kör varje registrerad typ och misslyckas om ett utsänt numeriskt fält saknar enhet och proveniensklass. Typer som ännu inte täcks namnges var för sig i filens UNCOVERED_KINDS med skälet till att var och en är öppen, och antalet är fastlåst så att listan bara kan krympa.

Generera om JSON efter varje ändring av en rapports form eller av ett block units:

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