Quality metrics

Termivar publishes measurements as CI artifacts instead of embedding hand-maintained numbers in the README.

Evidence-backed release baselines are committed under docs/reports/benchmarks/. The latest published record is commit f7d5120, with raw values in JSON.

That record is the historical Criterion microbaseline. The separate initial endpoint-assessment evidence is pinned to source commit 27321ef, with its exact schema-v1 JSON. It has no accepted speed threshold and does not replace the Criterion record.

Every push and pull request

The Quality Metrics workflow records:

  • release compile wall time;
  • release binary size;
  • build peak resident memory;
  • Criterion suite wall time and peak resident memory;
  • detailed Cargo timing and Criterion reports;
  • commit SHA and Rust compiler version.

Results are runner-local regression signals. They are not comparable across arbitrary hardware and are not endpoint-capacity claims.

Endpoint-scale assessment evidence is a separate manual surface. The Endpoint Performance Evidence workflow path-checks a small deterministic contract fixture. A manual dispatch may run the fixed 100-endpoint, 1,000-endpoint, and 10,000-request workloads once the workflow is on the default branch; an explicit maintainer label provides the fixed full workload on a same-repository PR before merge. Those runs use only a harness-owned 127.0.0.1 fixture and emit schema venom.endpoint-performance/v1 as validated JSON plus Markdown. The harness records real WebAssessmentRuntime broker receipts and the Linux wrapper adds GNU time CPU/RSS evidence. See Benchmarks.

Coverage is produced by the Tests workflow with measurement Rust 1.88.0, its llvm-tools-preview component, and the explicit LLVM backend of cargo-tarpaulin 0.37.2, compiled by pinned installer Rust 1.91.0. The workflow uploads Cobertura plus deterministic JSON and Markdown summaries as a retained artifact. Evidence schema venom.coverage.v2 records a normalized line-state digest in addition to aggregate and per-file counts, so a same-count covered-line swap cannot pass the baseline-acceptance seal. It attempts a best-effort advisory Codecov upload, but tokenless availability is not required or enforced. The fixed scope is tracked Rust files under crates/*/src/** plus xtask/src/**; Tarpaulin is instructed to ignore test functions with --ignore-tests. Unit, integration, compatibility, and security results remain separate checks.

The accepted LLVM coverage record establishes an exact aggregate and changed-line floor of 21,439/24,842 observed coverable source lines. The repository checker validates safe paths, integer counts, report structure, and base-to-head diff structure, and it emits an explicit patch row for every changed in-scope file. The accepted omission inventory is the reviewed nine-path list. An omission is excluded from the patch denominator only while its path and source blob remain frozen to the applicable floor record; changed content must become measured. New omissions fail closed, as does disappearance from Cobertura of a source measured in the applicable accepted baseline and still present at HEAD. The checker also rejects production-source tarpaulin/tarpaulin_* cfg, coverage(off), and legacy no_coverage instrumentation exclusions. The exact command ignores Tarpaulin config and fixes the LLVM backend, while architecture pins workflow env and Cargo config and forbids custom build targets. It emits the evidence needed to review a replacement baseline. Calibration cannot run while the accepted pointer exists. See Coverage evidence for the accepted record, replacement procedure, and exact floor and patch policy.

scripts/generate-metrics.sh derives package roots from locked Cargo metadata, then reports only Rust files that Git identifies as tracked below those roots. The architecture gate separately rejects loose top-level Rust files in the examples package that are not declared Cargo targets. These repository-size counts are not a coverage or quality score. Running the script requires Bash, Git, Cargo, and Python 3 for decoding Cargo's JSON output.

Scoped mutation evidence

Mutation testing is used as a review technique for selected semantic contracts, not as a permanent repository-wide score. Recent hardening work used pinned cargo-mutants campaigns around declarative policy, planner/runtime authority, and HTML extraction boundaries in PR #53, PR #54, and PR #55. Viable survivors were classified by behavior; serious semantic gaps became focused deterministic regressions and were rerun in narrowed campaigns.

Those pull-request records are scoped evidence for their exact revisions. Termivar does not have a committed mutation workflow, an aggregate workspace score, or a claim that every mutation-relevant function has been exercised.

Not measured yet

Metric State Exit criterion
Project-wide mutation baseline Missing Commit a repeatable scope, exclusions, survivor policy, and comparable baseline
Accepted endpoint throughput/latency baseline Initial controlled evidence available; repeatable baseline missing Repeat comparable 100/1,000/10,000 local-fixture runs on a pinned hardware class and review inter-run variance
Accepted scanner peak RAM/CPU baseline Initial controlled GNU time evidence available; repeatable baseline missing Review repeated process evidence on the same pinned hardware class
External audit findings Missing Independent scope, report, and remediation record

If a permanent mutation job is introduced, it should normally run on a schedule rather than every push because it executes many modified test builds. Scoped campaign evidence must not be represented as complete mutation coverage.

Reproduce microbenchmarks

cargo bench -p termivar-scanner --bench scanner_benchmarks

See Benchmarks for the controlled release-baseline schema and Profiling for flamegraph guidance.