Breaking Changes

  • Rng method renames across all 7 languages: float sampling methods renamed to include the type explicitly — e.g., uniform()uniform_f64() (Rust), UniformDouble() (C#), UniformFloat64() (Go), uniformDouble() (Kotlin), uniform_float() (Python/R), uniformFloat() (TypeScript); range variants renamed accordingly
  • Rng validation tightened: Sample and Resample now reject k=0 (was accepted as "non-negative"); Sample and Shuffle now reject empty input collections
  • AvgSpread is now internal in all languages; it was inconsistently public while all other auxiliary functions were already unexported
  • RelSpread is deprecated in all languages; use Spread(x) / |Center(x)| inline instead
  • Probability.Median removed (C#): was a redundant alias for Probability.Half
  • Uniform distribution PDF fix (C#): Pdf(x) boundary corrected to x >= Max → 0 (half-open interval [min, max) consistent with sampling)

Features

  • DisparityBounds: new distribution-free confidence bounds for Disparity (= Shift / AvgSpread), implemented in all 7 languages using Bonferroni combination of ShiftBounds and AvgSpreadBounds; includes _with_seed variant for deterministic reproducibility; 39 shared JSON reference test cases
  • AvgSpreadBounds: new internal estimator providing confidence bounds for average spread via Bonferroni combination of two SpreadBounds calls; 36 shared JSON reference test cases
  • tests/manifest.json: machine-readable index of all test suites for cross-language tooling

Improvements

  • Go: bounds functions (ShiftBounds, RatioBounds, CenterBounds, SpreadBounds) now validate that the variadic misrate parameter receives at most one value; thread safety documented on Rng; uniformInt64 range calculation simplified
  • Python: added runtime type guard for seed parameter in Rng
  • Resample internals (C#, Go): index selection now uses UniformInt64 instead of UniformInt32/UniformIntN for correctness on large inputs
  • EstimatorInvarianceTests added across all languages: verify algebraic properties such as Disparity ≈ Shift / AvgSpread and Ratio ≈ Center(x) / Center(y) across multiple sample sizes
  • RngInvarianceTests added across all languages: verify that Shuffle preserves multisets, Sample returns correct size and subset, Resample returns correct size from source elements
  • Simulation tooling (pragmastat-sim): added avg-spread-bounds and disparity-bounds coverage simulations; added Power distribution to defaults; changed default sample sizes to sparse representative values (2,3,4,5,10,11,20,50,100)

Documentation

  • Manual restructured from content-type grouping (Toolkit, Algorithms, Notes, Tests) into per-function topic folders (center/, spread/, shift/, disparity/, rng/, etc.), each self-contained with entry point, algorithm, notes, tests, and per-topic references
  • New chapter organization: One-Sample Estimators, Two-Sample Estimators, Randomization, Distributions, Implementations, Auxiliary
  • New content: Synopsis function table with algorithms and complexity; Foundations section (Drift, Misrate, Invariance) consolidated from former Studies; Appendix (Assumptions, Methodology, Bibliography, Colophon); algorithm and test pages for AvgSpreadBounds, DisparityBounds, and many existing functions
  • Removed: Studies chapter (bootstrap-center, breakdown, ci-misrate, drift, efficiency-drift, invariance); standalone RelSpread page
  • Web site: per-function page structure with grouped sidebar (folder icons, section headers); Astro View Transitions for SPA-style navigation with persistent sidebar scroll; scroll spy for sidebar sublink highlighting; Typst parser now supports cite() and preserves inline math in link content

Full Changelog: https://github.com/AndreyAkinshin/pragmastat/compare/v9.0.0...v10.0.0

Release notes generated by herald v1.0.4