perfgate-domain 0.15.1

I/O-free statistics, budget policy, and host mismatch logic for perfgate
Documentation

perfgate-domain

Pure business logic with zero I/O -- statistics, budget evaluation, and verdict computation for perfgate.

This crate is intentionally I/O-free. All data arrives via function arguments; there is no filesystem access, no network, no process spawning. This makes every function deterministic and trivially testable.

Core API

Statistics

  • compute_stats(samples, work_units) -> Stats -- aggregate summary statistics from raw samples (excludes warmup iterations)
  • Re-exports from perfgate-stats: summarize_u64, summarize_f64, median_u64_sorted, median_f64_sorted

Budget Evaluation

  • compare_stats(baseline, current, budgets) -> Comparison -- evaluate each metric against budget thresholds, producing deltas and a per-metric verdict
  • compare_runs(baseline, current, budgets, statistics, significance) -> Comparison -- full run-level comparison with per-metric statistic selection (median or p95) and optional Welch's t-test significance gating
  • Re-exports from perfgate-budget: evaluate_budget, evaluate_budgets, calculate_regression, determine_status, aggregate_verdict

Report Derivation

  • derive_report(receipt) -> Report -- extract warn/fail findings from a CompareReceipt, sorted by metric name for deterministic output

Host Mismatch Detection

  • detect_host_mismatch(baseline, current) -> Option<HostMismatchInfo> -- triggers on OS/arch mismatch, CPU count >2x difference, memory >2x difference, or hostname hash mismatch

Significance Testing

  • compute_significance(baseline_samples, current_samples, alpha) -> SignificanceResult -- Welch's t-test with configurable alpha
  • SignificancePolicy -- controls alpha, minimum sample count, and whether non-significant regressions are downgraded to pass

Paired Benchmarking

  • compute_paired_stats(samples) -> PairedStats
  • compare_paired_stats(stats, budgets) -> PairedComparison

Dependency Blame

  • compare_lockfiles(baseline, current) -> BinaryBlame -- diff Cargo.lock files to identify added, removed, and updated dependencies

Key Types

Comparison (deltas + verdict), SignificancePolicy, Report, Finding, FindingData, DomainError (NoSamples, Stats, InvalidAlpha).

Verdict Logic

A metric is Fail if regression exceeds the budget threshold, Warn if it exceeds the warn threshold, Pass otherwise. The aggregate verdict is the worst status across all evaluated metrics. All output uses BTreeMap for deterministic ordering.

Testing

  • Unit tests: median, host mismatch boundaries, significance gating
  • Property tests (proptest): host mismatch symmetry, budget boundary conditions
  • Mutation testing target: 100% kill rate

License

Licensed under either Apache-2.0 or MIT.