Regole (API-001 … API-004):
schema_versionè sempre presente. I consumatori devono ignorare i campi che non conoscono all’interno della stessa versione major; una modifica incompatibile incrementa la major.nullsignifica non disponibile, mai zero. Il motivo si trova nell’oggettounavailabledi livello superiore (indicizzato per percorso del campo) o in un oggettounavailableaccanto al campo.- Le durate sono in nanosecondi (
*_ns), le dimensioni in byte (*_bytes); gli istanti dell’orologio di sistema sono stringhe RFC 3339 in UTC (*_at) con il valore grezzo in*_wall_ns. - I documenti esportati contengono percorsi tokenizzati (
$WORKSPACE,$HOME,$CARGO_HOME,$QRUST_HOME). - Un report memorizzato è immutabile.
Livello superiore
| Campo | Contenuto |
|---|---|
schema_version |
"1.0" |
run |
identità, comando, risultato |
workspace |
membri, digest, directory, stato dei sorgenti |
toolchain |
identità di Cargo e rustc, host, funzionalità |
environment |
machine (sistema operativo, CPU, memoria, filesystem, class) e variables (in allowlist, oscurate) |
policy |
modalità, le impostazioni fast applicate e quelle lasciate stare, classe di carico di lavoro, decisione sull’incrementale, stato della cache |
metrics |
misurazioni scalari |
cache |
statistiche di sccache per l’esecuzione, e che cosa ha fatto la cache degli artefatti di QuickRust (artifacts) |
critical_path, critical_path_model |
la catena di dipendenze più lunga e quanto è affidabile |
units, edges |
il DAG di build osservato |
rebuilds |
perché è stata eseguita ogni unità compilata |
duplication |
versioni multiple (versions[]: state necessary per versioni incompatibili secondo SemVer, separate-sources per quelle compatibili, che Cargo tiene separate solo perché provengono da sorgenti diverse) e varianti di build |
build_scripts, proc_macros, codegen |
analisi per singolo aspetto |
artifacts |
inventario delle directory di build e piano di GC, una voce per directory |
recommendations |
risultati ordinati per rilevanza |
budget |
valutazione della politica, quando ne è stata eseguita una |
unavailable |
percorso del campo → motivo |
run
id (26 caratteri, ordinabile nel tempo), parent_session_id, state
(completed | failed | cancelled), started_at, started_wall_ns,
duration_ns, command { family, entry (cargo-shim | qrust),
argv_redacted, cwd_token, profile, targets }, result
{ cargo_exit_code, signal, policy (not-evaluated a meno che i budget non siano stati
applicati a questa build) }, scenario (solo benchmark),
upstream { path, canonical, rule }, wrappers { qrust, inner,
inner_source, workspace_wrapper, order }, overhead
{ preflight_ns, post_ns }, notes.
metrics
wall_time_ns, critical_path_ns, sum_unit_time_ns,
build_script_run_time_ns, average_parallelism, max_concurrent_compilers,
cpu_time_ns, peak_rss_bytes, units_observed, units_compiled,
units_restored, units_failed, units_fresh, units_fresh_referenced, build_scripts_run,
probe_invocations, build_script_compiler_invocations,
build_script_compiler_time_ns, output_bytes_written, artifact_logical_bytes,
artifact_allocated_bytes.
cache.artifacts fornisce restored, stored, missed, not_cacheable, restore_time_ns e
restored_with_foreign_out_dir: le unità ripristinate il cui codice generato dallo script di build
è stato compilato sotto un’altra directory di target, che le loro posizioni di panic e le loro
informazioni di debug nominano.
units_compiled conta le unità compilate da rustc; units_restored le unità che la cache degli
artefatti di QuickRust ha invece ripristinato (Cargo le ha richieste; non è stato compilato nulla).
Il tempo di compilazione e le metriche di CPU riguardano solo le unità compilate.
units_fresh è null a meno che non sia stato osservato lo stream dei messaggi JSON di Cargo (lo è
quando QuickRust ha presentato l’output della build, o quando l’utente ha richiesto JSON su una pipe).
units_fresh_referenced conta gli artefatti con cui le unità compilate hanno effettuato il link
senza che venissero ricompilati. build_script_compiler_* riguarda i processi rustc
che gli script di build avviano da sé per sondare la toolchain; sono un costo reale
ma non unità di build, e si distinguono per l’assenza del -C metadata
di Cargo.
units[]
id (unit:<crate>-<cargo hash>), stem, package, version, source
(path | registry | git | unknown), crate_name, kind (lib, bin,
test, example, proc-macro, build-script, build-script-run, cdylib,
…), mode (check | build | test | run), target, role (host |
target | unknown), primary, features, freshness (compiled |
restored | failed | fresh | ran), start_wall_ns, duration_ns,
rmeta_ready_ns, cpu_ns, max_rss_bytes, output_bytes, incremental,
links, codegen (le opzioni -C ricevute da rustc), linker, cacheability (le classi
di sccache), artifact_cache (che cosa ha fatto la cache degli artefatti di QuickRust: hit, stored, miss, off; null
per le unità aggiornate),
on_critical_path, fingerprint (digest dei componenti: compiler, target,
profile, features, rustflags, environment, source, generated,
dependencies), exact_id, portable_id, logical_key.
Le unità fresh non hanno tempi: non sono state compilate in questa esecuzione. La durata di
un’unità restored è il tempo impiegato per ripristinarla.
edges[]
from, to (id delle unità, produttore → consumatore), kind (metadata | link),
confidence, evidence.
| Confidenza | Significato |
|---|---|
observed |
un argomento --extern effettivamente ricevuto da rustc |
inferred |
una relazione con uno script di build ricostruita dall’identità del pacchetto e da OUT_DIR |
modeled |
(solo percorso critico) un’unità che esegue il link in attesa di una dipendenza transitiva |
critical_path[], critical_path_model
Ogni passo: unit_id, package, kind, freshness, duration_ns,
edge_confidence. Il modello ha completeness (observed | partial),
partial_reasons, method.
rebuilds
summary { units_compiled, previously_known, known_units_in_index,
invalidated_ratio, rebuild_time_of_known_units_ns, by_reason } e
units[] { unit_id, package, kind, mode, reason, detail,
differing, evidence, confidence, cost_ns }.
reason è uno tra source, dependency, compiler, profile,
feature-set, target, rustflags, build-script-input, environment,
generated-input, cache-miss, unknown, oppure new (prima osservazione; non è una
ricompilazione).
cache
provider, state (disabled | local | degraded | conflict),
requests, cacheable_requests, hits, misses, non_cacheable,
non_cacheable_reasons, errors, timeouts, writes, read_bytes (sempre
null: sccache non lo riporta), write_bytes, lookup_time_ns,
write_time_ns, units { cacheable, non_cacheable_linking,
non_cacheable_incremental }, scope — tutti relativi a sccache, null con un motivo quando
non ce n’è uno attivo.
artifacts descrive la cache degli artefatti di QuickRust in questa esecuzione: state (on, off oppure
off: a rustc wrapper is configured), restored, stored, missed (cercate e non
trovate, poi compilate senza essere memorizzate, per esempio un binario del workspace collegato rapidamente),
not_cacheable (unità che la cache non accetta: quelle che collegano librerie native, quelle a cui
viene passato un file di argomenti, o i binari delle dipendenze diversi dagli script di build), restore_time_ns.
policy
fast{mode(fast|compat),applied[ {key,value,why} ]: le impostazioni di profilo che QuickRust ha passato a Cargo, il frontend parallelo (rustc -Zthreads) e il linker (linker, quando viene usato wild),yielded[ {key,because} ]: le impostazioni che QuickRust ha lasciato stare perché le ha fatte l’utente, indicando dove }workload(local-dev|ci)incremental: impostazione, decisione, motivazione, unità incrementali osservate, conflitto con sccachecache: politica e stato del provider
artifacts[]
root, files, logical_bytes, allocated_bytes,
hardlink_duplicate_bytes_excluded, shared_outside_bytes (byte allocati di file che hanno anche
nomi al di fuori della directory, come la cache degli artefatti di QuickRust: eliminarli qui non libera
nulla, e candidate_bytes li esclude), symlinks_not_followed, complete,
errors, categories (per final, dependency, metadata, incremental,
debug, relink (ciò che il driver del compilatore di QuickRust conserva di un binario per ricollegarlo: il suo
.rlink, gli oggetti e il record), build-script-binary, build-script-output, proc-macro,
fingerprint, documentation, package-output, unknown-generated),
reclaimability (per required, reusable, rebuildable, uncertain),
active, gc_plan { mode (dry-run), stale_days, candidate_groups,
candidate_bytes, reclaimable_now_bytes, blocked_by,
regeneration_estimate, size_budget, candidates[] (ciascuno con i suoi
shared_outside_bytes) }.
recommendations[]
id, rule, category, title, status, evidence[],
impacted_scenarios[], confidence, risk, effort, impact
{ kind (measured | modeled | unknown), avoidable_time_ns?,
reclaimable_bytes?, basis }, verification, compatibility,
remediation (safe | review_required | none), alternatives[]
(opzioni mutuamente esclusive), score.
Un guadagno numerico è presente solo quando impact.kind è measured o modeled.
budget
result (pass | warn | fail | incomparable | not-evaluated |
error), mode, baseline, comparability { state, differences[] },
evaluations[] { metric, unit, scenario, result, checks[] }.
Altri documenti
qrust compare --format json, qrust benchmark --format json,
qrust experiment --format json, qrust inventory --format json,
qrust gc --dry-run --format json, qrust analyze worktrees --format json e
qrust fix --dry-run --format json seguono le stesse convenzioni e contengono
schema_version dove vengono memorizzati.