Ajoraportit
Jokainen komentorivin (CLI) ajo kirjoittaa tuloksensa viereen raportin: tulostettavan HyperText Markup Language (HTML) -sivun <scenario>.report.html ja koneluettavan JavaScript Object Notation (JSON) -asiakirjan <scenario>.report.json, joilla on sama sisältö. Raportti toimii mille tahansa skenaariotyypille ja kampanjoille.
kshana scenarios/clock-holdover.toml
# wrote scenarios/clock-holdover.result.json, scenarios/clock-holdover.chart.svg,
# scenarios/clock-holdover.report.html, and scenarios/clock-holdover.report.json
Tulosasiakirja vastaa kysymykseen mitä moottori laski. Raportti lisää sen, mitä lukija tarvitsee ennen kuin toimii sen perusteella: mitä meni sisään, mihin luvut nojaavat, mitä jätettiin pois ja miten saman tavusisällön saa uudelleen. Se ei keksi mitään tästä. Jokainen osio luetaan lähteestä, jonka moottori jo säilyttää, ja nimeää lähteen siteeraamansa vierelle.
Rakentaja on kshana::advanced_report (src/advanced_report.rs). Se on puhdas funktio ajon tulosteesta, skenaariotiedoston tavuista ja komentoriviltä: se ei lue kelloa, tiedostoa eikä verkkoa, ja se rakentuu WebAssemblylle.
Osiot#
| # | Osio | Mitä se sisältää | Luetaan lähteestä |
|---|---|---|---|
| 1 | Tiivistelmä johdolle | mitä tyyppi tekee, ajon yksirivinen yhteenveto, pääluvut, ajotason rehellisyysmerkintä, käytettyjen VALIDATED / MODELLED / PARTNER -ominaisuuksien lukumäärä | tyyppiluettelo (kshana kinds --json), tuloksen label, sen lohko figure_tiers tai laatumittarilohko, Monte Carlo -kampanjan prosenttipisteet |
| 2 | Syötteet | jokainen skenaariotiedoston asettama kenttä litistettynä polkuunsa, yksikköineen ja tietona siitä, mistä yksikkö tuli | skenaariotiedosto; yksiköt tuloksen lohkosta units (kenttäyksikköskeema, docs/field-units-schema.json), muuten kentän nimen pääte (_s, _ns, _m, _deg, _dbw, …); yksikkö, jota kumpikaan ei ilmoita, tulostetaan muodossa ei ilmoitettu |
| 3 | Tulokset | ajon kaavio, tulosasiakirjan jokainen skalaari yksikköineen sekä lukumäärä / minimi / maksimi / ensimmäinen / viimeinen -yhteenveto jokaisesta numeerisesta sarakkeesta | tulosasiakirja ja sen lohko units |
| 3a | Yhdistäminen (kampanjat ja pyyhkäisyt) | pyyhkäisyn solmutaulukko; Monte Carlo -ajon keskiarvo, keskihajonta, 5. / 50. / 95. persentiili ja keskiarvon luottamusväli (95 %) sekä histogrammi mittaria kohti; ketjun vaihetaulukko; koosteen yhteiset ehdot, jäsenet ja yhdistetty yhteenveto | kampanjan tuloksen osio sweep, monte_carlo, timeline tai compose; tuloksen (sweep tai sweep-nd) ruudukko |
| 3b | Animaatio ja viennit | ajon animoitu piirros (tuloste --animate svg) upotettuna passiivisena kuvana tai syy, miksi sitä ei ole; linkit animaatio- ja yhteentoimivuustiedostoihin, jotka sama komento kirjoitti raportin viereen; jokainen vientimuoto sekä tieto siitä, soveltuuko se skenaarioon, miksi ei, ja mikä on sen määrittely |
animaatioviejä (src/animation.rs), interop::plan ja komentorivin kirjoittamat tiedostot (--animate, --export) |
| 4 | Tapahtuma-aikajana | ajoitetut ikkunat ja pistemäiset tapahtumat piirrettyinä ja taulukoituina ajon aika-akselille | skenaariotaulut, joissa t0/t1, on_s/off_s, start_s/end_s tai alkamisaika; ajon kesto time.duration_s; tuloksen taulukko events; kampanjan vaiheet ja luovutukset |
| 5 | Varmennusmerkinnät | jokainen varmennusmatriisin rivi, jota ajon tyypit käyttävät, merkintöineen, oraakkeleineen ja testitodisteineen, sekä tuloksen ilmoittamat lukukohtaiset tasot | varmennusmatriisi (src/verification.rs, docs/VERIFICATION-MATRIX.md) tyypistä riveihin johtavan vastaavuustaulukon advanced_report::KIND_CAPABILITIES kautta |
| 6 | Mallintamatta jätetyt asiat ja oletukset | jokainen rajoitus lainattuna | tuloksen lohkot not_modelled, not_implemented ja honesty; tyyppiluettelon lausekkeet, joiden taso on MODELLED; skenaarion kommentit ja syöteteksti, joissa lukee ”not modelled”; matriisin syy siihen, miksi kukin rivi, jonka taso on MODELLED, pysyy mallinnettuna (docs/MODELLED-RATIONALE.md) |
| 7 | Toistettavuustiedot | moottorin versio, lähdekoodin commit, skenaariotiedoston ja tulosasiakirjan Secure Hash Algorithm 256-bit (SHA-256) -tiivisteet, siemenluku, alusta, tarkka komento, työhakemistosääntö, jokaisen muun syötetiedoston tiiviste | käännös, tiedostot, komentorivi |
Osio, jossa ei ole mitään lueteltavaa, kertoo syyn yhdellä lauseella (esimerkiksi ”Ei ajoitettua tapahtumaa: skenaario ei määrittele ikkunaa tai alkamisaikaa, eikä tulos ilmoita tapahtumaa”). Yksikään osio ei ole koskaan tyhjä ja hiljainen.
Mitä raportin merkintä tarkoittaa#
Varmennusmerkintä arvioi matriisin rivillä nimetyn ominaisuuden sellaisena kuin matriisi sen kirjaa. Se ei arvioi skenaarion kokoonpanoa, eikä VALIDATED-rivi tee ajon syötteistä mitattuja. PARTNER-rivi on osa-alue, johon ajo luottaa ja jota Kshana ei tarjoa (antennilaitteisto radiotaajuustyypeille, kvanttikuorma kvanttityypeille, avaruusalusväylä asennonhallinnan budjetille); raportti esittää sen merkinnällä luotettu, ei tarjottu.
Vastaavuustaulukko tyypeistä riveihin on taulukko matriisin merkkijonoista requirement. Merkintä, oraakkeli ja todisteet luetaan takaisin matriisista raporttia rakennettaessa, joten rivin siirtäminen tasolta VALIDATED tasolle MODELLED siirtää mukanaan jokaisen raportin. Kampanja kantaa moodinsa rivin (ketju, pyyhkäisy tai Monte Carlo, koostaminen) sekä jokaisen ajamansa jäsentyypin kaikki rivit; sweep-nd kantaa pyyhkäisemänsä tyypin rivit. Jokaisessa ajossa on myös rivi ”Reproducibility & software assurance”, johon toistettavuustiedot perustuvat.
Rivi, joka arvioi vain yhtä tyypin syötepolkua, luetellaan vain, jos ajo kulki sitä polkua (advanced_report::PATH_GATED_CAPABILITIES): orbit ja ephemeris kantavat rivin ”Orbit propagation & determination” vain, kun mukana on tle (Simplified General Perturbations 4 (SGP4) -polku; analyyttinen rata on kahden kappaleen propagointi), ja slot-timing kantaa mitatun tallenteen rivin vain, kun mukana on oscillator.record. Sama taulukko rajaa monikaistarivin spectrum vain ajoihin, jotka piirtävät [[panels]], sekä matalan Maan kiertoradan (LEO) tyyppien rivit sen mukaan, minkä polun kukin ajo kulki: tyypin leo-pass tai leo-pnt-chain sade-, rakennukseen tulo-, matalaenergia- tai harhauttajarivi vain, kun skenaario asettaa kyseisen termin, tuikintarivi, ellei skenaario kytke sitä pois, tyypin leo-navmsg, leo-pvt tai ketjun tarkan pistepaikannuksen rivi vain tuloksen kantaman analyysin tai moodin osalta, ja LEO-järjestelmän esiasetusrivi vain, kun käytetään nimettyä esiasetusta. Shuttle Radar Topography Mission (SRTM) -lukijan rivi ei kuulu millekään tyypille: terrain-nav ja terrain-slam toimivat synteettisellä korkeusmallilla (DEM), eikä mikään skenaariokenttä lue SRTM-ruutua. VALIDATED-rivi, jota ajo ei koskaan käyttänyt, väittäisi muuten todisteita, joita ajolla ei ole.
Ajon toistaminen sen raportista#
report.json → reproducibility sisältää kaiken tarvittavan:
"command": "kshana clock-holdover.toml",
"argv": ["kshana", "clock-holdover.toml"],
"scenario_sha256": "430c364d…",
"result_sha256": "ee5ebb0a…",
"seed": 42,
- Tarkista skenaariotiedosto tiivistettä
scenario_sha256vasten ja jokainen kohdassainput_filesoleva tiedosto (Maan orientaatiotiedosto--eop) oman tiivisteensä vasten. - Suorita
commandsiitä hakemistosta, jossa alkuperäinen ajo käynnistettiin. Skenaarion polku ja kaikki skenaarion sisäiset suhteelliset datapolut ratkeavat sen suhteen. - Uuden tulostiedoston
result.jsonSHA-256 vastaa kohdassaresult_sha256olevaa arvoa, ja uudetreport.jsonjareport.htmlovat tavu tavulta samat kuin vanhat.
tests/advanced_report_cli.rs tekee täsmälleen tämän kellon skenaariolle, ketjutetulle kampanjalle, pyyhkäisykampanjalle ja ratalaskennalle, jossa on tiedosto --eop: se lukee komennon raportista, ajaa sen tuoreessa hakemistossa, jossa on vain tallennetut syötteet, ja vertaa tavuja.
scenario_sha256 on tiedoston tarkkojen tavujen tiiviste. Tuloksen oma scenario_hash on eri asia: tyypin oma sormenjälki skenaariosta (usein sen kanonisesta muodosta), ja raportti tulostaa molemmat nimettyinä.
Siemenluku. Siemenluku on skenaarion arvo seed tai muuten se, jonka tulos ilmoittaa. Tyypille, joka ei käytä siemenlukua, raportti sanoo niin ja sen, että skenaariotiedosto ja moottorin käännös yksin määräävät tuloksen.
Lähdekoodin commit. Moottori tallentaa commitin vain, jos se on käännetty ympäristömuuttujan KSHANA_GIT_COMMIT ollessa asetettuna, luettuna käännösaikana:
KSHANA_GIT_COMMIT=$(git rev-parse HEAD) cargo build --release
Käännös ilman sitä ilmoittaa commitin tallentamattomaksi, ja moottorin versio tunnistaa julkaisun. Mitään ei arvata.
Alusta. Käännöksen käyttöjärjestelmä, arkkitehtuuri ja perhe. Tulokset ovat tavu tavulta samat yhdellä alustalla; alustojen välillä liukulukutulokset voivat poiketa viimeisissä numeroissa (katso REPRODUCIBILITY.md).
Determinismi ja ainoa aikaleima#
Samat skenaariotavut, siemenluku ja moottorin käännös tuottavat tavu tavulta saman tiedoston report.json ja report.html. Raportti ei sisällä aikaleimaa. Ainoa kellonluku koko paketissa (crate) on se, jonka tekee --study-name ja joka leimaa kentän meta.generated_utc tulosasiakirjaan; raportti näyttää sen leiman ja kertoo sen olevan ainoa kenttä, jota toisto ei vastaa. Sen välttämiseksi aja ilman --study-name. tests/advanced_report.rs rakentaa jokaisen hakemiston scenarios/ skenaariotiedoston raportin (sarjan manifestia lukuun ottamatta) kahdesti ja ajaa kuusi skenaariota uudelleen (niiden joukossa yksi kampanja kustakin ketju-, pyyhkäisy- ja koostamismoodista) tämän tarkistamiseksi päästä päähän.
Tulostus PDF-muotoon#
Moottori ei kirjoita Portable Document Format (PDF) -tiedostoja. PDF-kirjoittaja, joka piirtäisi kaaviot, toisi mukanaan uuden, raskaan riippuvuuden, joten vaihtoehtoa --report pdf ei ole. Sen sijaan report.html sisältää tulostustyylitiedoston: avaa se selaimessa, tulosta ja valitse ”Tallenna PDF-tiedostona”.
Tyylitiedosto on kirjoitettu sekä A4- että US Letter -koolle. Se ei aseta paperikokoa (tulostusikkunan valinta pätee), pitää 15 mm / 14 mm marginaalit, jotka sopivat kumpaankin arkkiin, vaihtaa mustaan valkoisella, toistaa taulukon otsikot joka sivulla, estää taulukon rivejä, kuvia ja kortteja katkeamasta sivujen välillä, pitää otsikot seuraavan tekstin kanssa ja aloittaa syötteiden, tulosten, varmennusmerkintöjen ja toistettavuuden osiot uudelta sivulta. Siirtymispalkki piilotetaan tulostuksessa.
JSON-asiakirja#
Tiedostossa report.json ovat report_schema = "kshana-report" ja report_schema_version = "1.0", sitten kind ja title sekä yksi avain kutakin osiota kohti: executive_summary, inputs, results, aggregation (vain kampanjat ja pyyhkäisyt), events, capabilities, not_modelled, companions (osio 3b: animation, exports ja export_command) ja reproducibility. Luetteloosiossa on items, omitted (rivit, jotka sivun yläraja jätti pois; tulosasiakirja sisältää kaikki arvot) ja, kun items on tyhjä, statement, joka kertoo syyn. Arvo säilyttää raa'an JSON-muotonsa kentässä value ja sivun näyttämän tekstin kentässä display; puuttuva arvo on null kentässä value ja ”no value” kentässä display.
Rajoitukset, ilmaistuna selvästi#
- Yksiköt. Kun kenttäyksikköskeema tai kentän nimi ei anna yksikköä, raportti sanoo ”not stated” eikä arvaa. Kampanjan jäsenskenaarioiden sisäiset syötteet ratkaistaan vain kampanjan oman yksikkölohkon ja kentän nimen päätteen perusteella, joten useammat niistä saavat arvon ”not stated” kuin erillisessä ajossa.
- Vastaavuustaulukon harkinta. Mitä matriisin rivejä tyyppi käyttää, on kuratoitu taulukko, jonka testi tarkistaa nimeävän täsmälleen yhden olemassa olevan rivin kutakin merkintää kohti ja kattavan jokaisen sisäänrakennetun tyypin. Se, onko kukin vastaavuus oikea, on ihmisen harkinta, kuten matriisin oma oraakkelin valinta.
- Ylärajat. Sivu luettelee enintään 400 syötettä, 150 skalaaritulosta, 60 numeerista saraketta ja 200 tapahtumaa;
omittedlaskee loput. Yli 24 rivin taulukko skenaarion sisällä (sisään luettu sarja) tiivistetään sarakkeittain. - Suites.
kshana --study <suite.toml>pitää yllä omia tiedostojaan<suite>.study.jsonja<suite>.study.html; se ei kirjoita tätä raporttia. - Sidokset. Python- ja WebAssembly-sidokset säilyttävät kohdan
RunOutput::html_report(), yhden sivun tuloskortin; leikkikentän ladattava raportti on oma sivunsa (web/studio/lib/report.mjs). Tämän raportin kirjoittaa komentorivi, ja Rust-kutsujat voivat rakentaa sen kutsullakshana::advanced_report::build. Model Context Protocol (MCP) -palvelin palauttaa sen työkalustaanreport_scenarioJSON-muodossa tai HTML-sivuna; skenaariotiedoston nimi sen toistokomennossa on se, jonka kutsuja antaa (oletusscenario.toml), eikä se luettele liitetiedostoa, koska palvelin ei kirjoita sellaista.