pragmastat v10.0.6 22 Feb 2026

Bug Fixes

  • C#: Fixed GetSampleY() passing wrong subject (Subject.X instead of Subject.Y), causing error-empty-y test cases to report the incorrect subject
  • Rust: Prevented potential usize overflow in center_bounds by casting n to i64 before multiplication
  • Go: parseBoundsConfig now panics on API misuse (multiple BoundsConfig arguments) instead of returning a DomainError, correctly distinguishing programming errors from domain violations
  • Tools: Fixed pyproject.toml version regex to anchor at line start, preventing accidental overwrite of ruff's target-version during version sync
  • Tools: Fixed Typst #import parser to handle comma-separated imports (e.g., version, major); previously, all names after the first comma were silently dropped, producing malformed Go install URLs

Improvements

  • Python: Removed unnecessary .tolist() conversions in estimators.py; C extension and sorted() both handle numpy arrays directly
  • Build: Added check:fix aggregate task running auto-fix for all 7 language implementations in parallel
  • Build: Added rs:restore (cargo fetch) task included in the Rust CI pipeline; added ktlint Gradle plugin with kt:check and kt:check:fix tasks
  • Linting: Added go/.golangci.yml with strict v2 settings; added [tool.ruff] config with select=["ALL"] and documented ignores; removed obsolete py/.flake8
  • Kotlin: Added .editorconfig configuring ktlint (wildcard imports allowed, uppercase math constants permitted) and applied initial ktlint formatting across all Kotlin sources

Testing

  • Added 13 error fixture JSON files for basic estimators (center, spread, rel-spread, shift, ratio, disparity, avg-spread)
  • Added subject field to all 21 existing bounds error fixtures
  • Updated reference test loaders in all 7 languages (Go, TypeScript, Python, Kotlin, R, Rust, C#) to verify expected_error.id and expected_error.subject fields instead of silently skipping error cases

Documentation

  • Updated architecture trees in all 7 AGENTS.md files to reflect current source layout; removed nonexistent utils.ts from TypeScript tree
  • Added XML doc comments to all public members in C# Toolkit.cs

Full Changelog: https://github.com/AndreyAkinshin/pragmastat/compare/v10.0.5...v10.0.6

Release notes generated by herald v1.0.4

avatarka v2.0.0 21 Feb 2026

Breaking Changes

  • PRNG replaced: Mulberry32 (32-bit state, djb2 hash) is replaced with pragmastat's Rng class (xoshiro256++, 256-bit state, FNV-1a hash) for cross-language reproducibility. All seeded outputs produce different avatars. mulberry32 and stringToSeed are no longer exported; use Rng from pragmastat instead.

Features

  • 9 new themes: gems (diamonds, rubies, crystals), weather (sun, rain, snow, lightning), food (sushi, pizza, cupcakes), plants (cacti, sunflowers, mushrooms), birds (parrot, owl, penguin, flamingo), insects (butterfly, beetle, ladybug, bee), mythical creatures, ocean (octopus, jellyfish, crab, whale), and dinosaurs (T-Rex, Triceratops, Brachiosaurus, and more)
  • Constraint-based gallery generation: generateGallery() now distributes themes round-robin and tracks used field values to maximize visual diversity across gallery items; fully schema-driven with no per-theme configuration needed
  • Lock buttons in picker: Each editor control and theme dropdown can be individually locked to preserve its value when clicking Randomize; locks clear automatically on theme change
  • alwaysTransparentBackground prop: New AvatarPicker prop forces transparent avatar backgrounds and hides the background color control
  • shapeParam on Theme interface: Each theme declares its primary shape parameter, enabling programmatic shape enumeration for diverse gallery generation
  • Shuffle picks a random theme: The randomize button now picks a random theme in addition to random params

Improvements

  • People theme: Scaled-down eyes for more natural proportions, eyebrows derived from hair color, skin-derived mouth color, softer expression curves, and redesigned hair styles (bob, long, curly, bald, mohawk, ponytail)
  • Animals theme: Eye color support for bear/koala/panda, eye ellipses behind sleepy eyelids, refined cat ears, fox face mask, dog/penguin iris layers
  • Monsters theme: Four distinct horn types (none, spikes, curved, antlers) with highlight shading, replacing the old binary yes/no toggle
  • Picker header redesign: Spinning dice icon replaces Randomize text button; SVG/PNG save actions added as text buttons via onSaveSvg/onSavePng callback props; flat design without box-shadow
  • Demo app: Dynamic favicon matching current avatar, transparent background checkerboard toggle, GitHub/npm footer links, random initial theme on page load, improved dark theme gradient

Internal

  • Migrated to mise as task runner with a VERSION file as single source of truth for package versions
  • Consolidated CI into ci.yml (all branches) and publish.yml (manual dispatch), replacing the previous build.yml, deploy.yml, and release.yml workflows
  • Removed geometric theme

Documentation

  • Updated all READMEs and AGENTS.md to accurately reflect 14 themes, pragmastat PRNG, complete AvatarEditor/AvatarPicker props, generateGallery API, styles.css import requirement, and corrected file tree

Full Changelog: https://github.com/AndreyAkinshin/avatarka/compare/v1.1.0...v2.0.0

Release notes generated by herald v1.0.4

pragmastat v10.0.5 21 Feb 2026 119

v10.0.5 fixes integer overflow and precision issues in TypeScript, replaces panics with proper error returns in Rust and Go, and refactors the Go bounds API to use a config struct.

Breaking Changes

  • go: Replace variadic misrate ...float64 parameter with BoundsConfig struct in all five bounds estimators, enabling seed configuration without separate *WithSeed functions. Remove SpreadBoundsWithSeed, DisparityBoundsWithSeed, and avgSpreadBoundsWithSeed.

Bug Fixes

  • ts: Use BigInt for pairwise count arithmetic in fastShift, fastCenter, fastSpread, shiftBounds, and centerBounds to prevent 53-bit overflow when sample sizes exceed ~67M elements.
  • ts: Return bigint from deriveSeed and accept bigint in Rng constructor to preserve full 64-bit seed precision.
  • rs: Return Err instead of panicking in select_kth_pairwise_diff for k-out-of-range, NaN inputs, and convergence failure.
  • rs: Use u64 for pairwise products in pairwise_margin and shift_bounds to prevent overflow on 32-bit targets.
  • rs: Preserve original error messages from fast algorithms instead of replacing them with misleading validity errors.
  • go: Return errors instead of panicking in selectKthPairwiseDiff for idiomatic error handling.
  • docs: Compute Go major version from VERSION instead of hardcoding v4 in the manual.

Improvements

  • cs: Remove dead Assertion.Validity calls across 12 estimator files — the Sample constructor already guarantees non-empty finite input.

Internal

  • ci: Run CI on dev branch.
  • go: Realign trailing comments in README and demo after the BoundsConfig refactor.

Full Changelog: https://github.com/AndreyAkinshin/pragmastat/compare/v10.0.4...v10.0.5

Release notes generated by herald v1.0.4

pragmastat v10.0.4 20 Feb 2026 71

Patch release with deterministic pivot selection in Python/R C extensions, API contract fixes in Go and TypeScript, and documentation corrections.

Breaking Changes

  • TypeScript: avgSpread and avgSpreadBounds are no longer public exports; they were internal functions mistakenly exported. Use _avgSpread / _avgSpreadBounds if you need internal access.

Bug Fixes

  • Python, R: Replace non-deterministic RNG with deterministic middle-element pivot in C extensions (fast_center_c.c, fast_spread.c), fixing non-reproducible results and thread-safety issues.
  • Go: Bounds functions now return *AssumptionError instead of fmt.Errorf for invalid misrate arguments, matching the documented API contract. Reference tests now handle error test cases for basic estimators.
  • Rust: Reference tests now report errors instead of silently skipping failed non-error test cases.

Documentation

  • Fix Go badge link in root README (go/v4 → go/v10).
  • Update install/dependency version references in R and Rust READMEs.
  • Correct tolerance from 1e-10 to 1e-9 across all 7 language AGENTS.md files.

Full Changelog: https://github.com/AndreyAkinshin/pragmastat/compare/v10.0.3...v10.0.4

Release notes generated by herald v1.0.4

pragmastat v10.0.3 20 Feb 2026 68

Performance optimization release: eliminates redundant fast_spread computations in all sparity-dependent estimators across all 7 languages, halving the O(n log n) cost for spread, avg_spread, disparity, and their bounds variants.

Improvements

  • Remove redundant fast_spread calls in sparity-dependent estimators: check_sparity/checkSparity/Assertion.Sparity previously computed fast_spread internally, only for the caller to compute it again — doubling the O(n log n) cost. Point estimators (spread, avg_spread, disparity) now compute fast_spread once and post-check the result. Bounds estimators (spread_bounds, avg_spread_bounds, disparity_bounds) inline the check directly. Applies to all 7 languages (C#, Go, Kotlin, Python, R, Rust, TypeScript).

Full Changelog: https://github.com/AndreyAkinshin/pragmastat/compare/v10.0.2...v10.0.3

Release notes generated by herald v1.0.4

perfolizer v0.6.7 19 Feb 2026 371

Breaking Changes

  • Upgraded Pragmastat dependency from 8.0.0 to 10.0.0 with the following migration changes:
    • Rng.Uniform() and Rng.Uniform(a,b) renamed to UniformDouble() and UniformDouble(a,b)
    • Probability.Median replaced with Probability.Half (alias removed)

Internal

  • Removed a Measurement-level round-trip test case for "16x" values due to an undocumented breaking change in Pragmastat v10.0.0 where RatioUnit.Abbreviation changed from "x" to ""

Full Changelog: https://github.com/AndreyAkinshin/perfolizer/compare/v0.6.6...v0.6.7

Release notes generated by herald v1.0.4

pragmastat v10.0.0 19 Feb 2026 436

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

pragmastat v9.0.0 16 Feb 2026 755

Now I have enough context to write the release notes.

Features

  • SpreadBounds estimator: Distribution-free confidence bounds on sample spread (median of absolute pairwise differences). Uses disjoint-pair sign-test inversion with randomized cutoffs for exact misclassification rate control. Implemented across all 7 languages (C#, Go, Kotlin, Python, R, Rust, TypeScript).
  • SignMargin toolkit function: Computes randomized exclusion margins for one-sample sign-test bounds using log-space Binomial CDF evaluation for numerical stability.

Bug Fixes

  • Fixed precision in erf and erf_inverse C# test approximation data (~1e-17 magnitude corrections)
  • Fixed precision in ratio-bounds/multiplic-10-30.json reference test data

Documentation

  • Added mathematical study for SpreadBounds with design rationale, theoretical constraints, and algorithm derivation
  • Added SpreadBounds and SignMargin function specifications to the manual toolkit
  • Added SpreadBounds test suite documentation
  • Updated assumptions chapter with SpreadBounds sparity requirement and distribution-free bounds description

Internal

  • Added SpreadBounds Monte Carlo simulation to pragmastat-sim for validating observed vs. requested misrate
  • Added pragmastat-sim spread-bounds CLI subcommand
  • Updated reference test suite with 46 new JSON test files covering success cases, error handling, edge cases, algebraic properties, and unsorted input verification
  • Fixed fraction conversion and subscript handling in tools/src/math_conv.rs for Typst compatibility
  • Fixed table.header() syntax handling in tools/src/typst_parser.rs

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

Release notes generated by herald v1.0.4

pragmastat v8.0.0 12 Feb 2026 4K

Breaking Changes

  • Remove median, pairwise_margin, and signed_rank_margin from public API across all 7 languages. These auxiliary functions are now internal. Callers must remove direct imports/calls to these functions.
    • Rust: removed from pub use re-exports; pairwise_margin and signed_rank_margin modules are now pub(crate)
    • Go: Median removed; PairwiseMargin/SignedRankMargin renamed to unexported
    • C#: Toolkit.Median(), Toolkit.SignedRankMargin(), Toolkit.PairwiseMargin() removed
    • Kotlin: median, pairwiseMargin, signedRankMargin marked internal
    • Python: removed from __init__.py exports and __all__
    • TypeScript: removed from index.ts exports
    • R: removed from NAMESPACE exports
  • Remove Pragmastat.Simulations and Pragmastat.Extended C# projects. Simulations have been fully migrated to Rust (pragmastat-sim). The Extended package (Mean, MAD, StdDev estimators) was only used by Simulations and is no longer available.
  • misrate parameter is now optional in shift_bounds, ratio_bounds, and center_bounds across all languages, defaulting to 1e-3. In Go this changes the signature from a required float64 to a variadic ...float64.

Features

  • Default misrate for bounds functions. All bounds functions (shift_bounds, ratio_bounds, center_bounds) now accept an optional misrate parameter defaulting to 1e-3 (DEFAULT_MISRATE constant). This reduces boilerplate for the most common use case.
  • Toolkit synopsis section in manual. New concise function overview at the start of the Toolkit chapter, grouped by One-Sample Estimators, Two-Sample Estimators, and Randomization.
  • Active section highlighting in web sidebar. Scroll-based tracking highlights the current section heading in the sidebar navigation.
  • HSpace support in web output. The Typst-to-MDX converter now handles #h(...) as inline spacing, preserving indentation in generated documentation.

Bug Fixes

  • Restrict TypeScript package exports to public entry point. Added exports field to package.json so consumers cannot deep-import internal modules like pairwiseMargin or signedRankMargin.

Documentation

  • Remove internal functions (median, pairwise_margin, signed_rank_margin) from all README demos, AGENTS.md listings, and example programs across all 7 languages.
  • Remove broken \link{} cross-references to internal functions in R .Rd files.
  • Reorder misrate recommendations in manual: 1e-3 for everyday analysis (primary), 1e-6 for critical decisions (secondary).

Internal

  • Rust: move median from pragmastat to pragmastat-sim crate, where it is actually used.
  • Rust: move pairwise_margin and signed_rank_margin reference/error tests from integration test files into #[cfg(test)] blocks within each module.
  • C#: remove dead MedianEstimator after Pragmastat.Extended removal.
  • Manual: reorganize toolkit sections (One-Sample, Two-Sample, Randomization, Auxiliary) and study sections (Summary Estimator Properties, Reframings, Notes) under group headings.

Full Changelog: https://github.com/AndreyAkinshin/pragmastat/compare/v7.0.1...v8.0.0

Release notes generated by herald v1.0.4

pragmastat v7.0.1 11 Feb 2026 159

Patch release that removes an unused dependency from the Rust crate and adds version format validation to the build tooling.

Features

  • Version validation: The version task now rejects version strings containing letters or non-numeric characters, accepting only digits and dots. The publish task inherits this validation.

Internal

  • Rust: Removed unused rand dependency from pragmastat crate, which uses its own RNG implementation (Xoshiro256 + SplitMix64).

Full Changelog: https://github.com/AndreyAkinshin/pragmastat/compare/v7.0.0...v7.0.1

Release notes generated by herald v1.0.4

perfolizer v0.6.5 9 Feb 2026 583

Modernize build infrastructure: migrate from Cake Frosting to mise, replace CI/CD workflows with tiered pipelines, and bump Pragmastat to 7.0.0.

Breaking Changes

  • Pragmastat dependency upgraded from 6.0.1 to 7.0.0 (major version bump)

Improvements

  • Migrate build system from Cake Frosting to mise tasks (build, test, check, clean, restore, pack, ci)
  • Version now read from a single VERSION file instead of hardcoded MSBuild properties in Directory.Build.props
  • Replace GitHub Actions workflows (build.yml, publish-nightly.yml, publish-release.yml) with tiered ci.yml (format check, cross-platform test matrix, pack, gate) and manual publish.yml (test, pack, tag, GitHub release, NuGet push)
  • Remove nightly MyGet publishing
  • Apply dotnet format whitespace fixes across 121 files
  • Remove deprecated PackageIconUrl from package metadata (icon already embedded via PackageIcon)

Documentation

  • Rewrite README project description with three paragraphs covering Perfolizer's purpose, BenchmarkDotNet origins, and Pragmastat migration
  • Update README badges: remove MyGet and CI badge, update build badge URL

Internal

  • Delete Cake Frosting build project (build/), shell scripts (build.sh, build.ps1, build.bat)
  • Clean up .gitignore: remove Mercurial directives, BenchmarkDotNet leftovers, Cake entries, and legacy C++ patterns; add nupkg/
  • Update branch references from master to main in CI workflow and package metadata

Full Changelog: https://github.com/AndreyAkinshin/perfolizer/compare/v0.6.4...v0.6.5

Release notes generated by herald v1.0.3

herald v1.0.4 9 Feb 2026

Improved reliability of GitHub API interactions and cleaner LLM output by adding rate-limit retries and stripping conversational preamble from generated release notes.

Features

  • Strip conversational preamble (e.g. "Here are the release notes:") from Claude-generated output, including optional thematic breaks following preamble lines

Bug Fixes

  • Retry GitHub API calls up to 3 times with exponential backoff on HTTP 429 rate limiting
  • Surface stderr output in error messages for both gh and claude CLI calls, replacing previously discarded diagnostic information

Internal

  • Refactor all gh CLI calls through a centralized runGH helper with stdout/stderr capture and retry logic
  • Remove redundant GetRelease function — FindPreviousRelease already validates tag existence
  • Update prompt template to explicitly instruct the LLM not to include preamble text

Full Changelog: https://github.com/AndreyAkinshin/herald/compare/v1.0.3...v1.0.4

Release notes generated by herald v1.0.4

KdlSharp v1.1.0 9 Feb 2026 91

KdlSharp v1.1.0 adds node mutation APIs (RemoveChild, RemoveProperty, RemoveArgument) and fixes child reparenting in AddChild, alongside CI/build infrastructure modernization.

Features

  • Add RemoveChild(KdlNode), RemoveProperty(string), RemoveProperty(KdlProperty), and RemoveArgument(KdlValue) methods to KdlNode (#2)

Bug Fixes

  • AddChild now detaches the child from its previous parent before reparenting, preventing a node from appearing in multiple parents simultaneously (#2)
  • AddChild throws InvalidOperationException when attempting to add a node as its own child (#2)
  • Handle missing specs submodule in OfficialTestRunner so local test runs without the submodule pass gracefully

Internal

  • Update target framework from net9.0 to net10.0
  • Add mise.toml task runner with standard tasks (build, test, check, clean, restore, ci)
  • Replace CI/CD workflows with mise-based tiered pipeline and NuGet publish workflow
  • Add Dependabot configuration for NuGet and GitHub Actions
  • Add VERSION file as single source of truth for version management
  • Bump coverlet.collector from 6.0.2 to 6.0.4

Full Changelog: https://github.com/AndreyAkinshin/KdlSharp/compare/v1.0.0...v1.1.0

Release notes generated by herald v1.0.3

herald v1.0.3 9 Feb 2026

This release fixes a version display bug and adds version format validation in the build tooling.

Features

  • Version format validation: The version task now rejects version strings containing letters or non-numeric characters — only digits and dots are accepted. The publish task inherits this validation.

Bug Fixes

  • Fix duplicate "v" prefix in version output: herald --version was printing herald vv1.0.2 when installed via go install, because debug.ReadBuildInfo returns versions with a v prefix that was not being stripped.

Full Changelog: https://github.com/AndreyAkinshin/herald/compare/v1.0.2...v1.0.3

Release notes generated by herald v1.0.3

herald v1.0.1 9 Feb 2026

This release improves prompt handling, fixes output parsing issues, and adds CI tag support.

Features

  • Fetch tags from remote before processing, ensuring CI-created tags are available locally for release note generation
  • Add optional instructions parameter to release-notes mise task for customizing generation
  • Improve prompt structure: move custom instructions to top for higher priority, enforce ## section headings in output

Bug Fixes

  • Preserve introductory paragraphs in Claude output that appear before ## sections — previously all content before the first heading was stripped
  • Remove stale release notes file before invoking Claude so a previous result is never mistaken for a fresh one
  • Fix multiline usage spec in release-notes task to prevent "unexpected word" errors with multi-word instructions

Documentation

  • Update per-project mise example in README with correct multiline syntax and optional instructions arg

Full Changelog: https://github.com/AndreyAkinshin/herald/compare/v1.0.0...v1.0.1

Release notes generated by herald v1.0.1

herald v1.0.0 9 Feb 2026

Initial release of herald — a CLI tool that automates GitHub release note generation using Claude AI. It analyzes git commits between releases, constructs a detailed prompt, and produces well-structured Markdown release notes.

Features

  • AI-powered release note generation via the claude CLI with customizable model selection (--model)
  • Smart release detection: automatically resolves the previous release by publication date to compute commit diffs
  • Flexible tag resolution with support for explicit tags or last keyword for the latest release
  • Custom instructions support to guide Claude's output for specific release emphasis
  • Interactive confirmation prompt before updating GitHub releases
  • Dry-run mode (--dry-run) to preview generated notes without modifying releases
  • Verbose mode (--verbose) for detailed intermediate output
  • Automatic remote tag fetching to handle CI-created releases
  • File output with configurable path (--output) and default temp directory storage
  • Optional attribution footer (--no-footer to omit)

Internal

  • Clean modular architecture: cli, git, github, claude, prompt, errors, term packages
  • Embedded Go template for prompt construction with full commit context
  • Typed error system with distinct exit codes: runtime (1), configuration (2), environment (3), user abort (4)
  • ANSI terminal color utilities with NO_COLOR environment variable support
  • Preamble stripping to remove unwanted headings from Claude output
  • CI workflow for linting, testing, and cross-platform builds
  • Automated publish workflow for GitHub releases with goreleaser-style multi-platform binaries
  • Comprehensive test suite across all packages

Release notes generated by herald v1.0.0

pragmastat v7.0.0 9 Feb 2026 783

Breaking Changes

AssumptionError API Redesign

The AssumptionError / AssumptionException type has been redesigned across all 7 languages:

  • Removed functionName parameter from all factory methods. Violations are now identified solely by (id, subject) pairs, simplifying the error model.
  • New Domain assumption ID (priority 1, between Validity and Positivity). Used for parameter-level domain violations (e.g., misrate out of range, sample too small for requested precision).
  • New Misrate subject added alongside X and Y. Allows violations to report which specific parameter was invalid.
  • Priority order changed: Validity (0) > Domain (1) > Positivity (2) > Sparity (3). Previously Positivity was 1, Sparity was 2.

Migration: Update any code that constructs or pattern-matches on AssumptionError factory methods (e.g., Validity(functionName, subject) becomes Validity(subject)).

Removed Deprecated Rng.UniformInt (C#)

The Rng.UniformInt(long, long) method deprecated in v6 has been removed. Use Rng.UniformInt64 instead.

Two-Sample Bounds: Min-Misrate Domain Guard

ShiftBounds and RatioBounds now reject misrate values below the minimum achievable misrate for the given sample sizes. Previously, impossible misrate values would silently produce degenerate bounds. This will surface as a Domain error for callers passing very small misrate with small samples.

RatioBounds: Domain Check Before Positivity

RatioBounds now checks the Domain assumption (misrate validity) before checking Positivity. This changes which error is reported first when both violations are present.

Go Number Constraint Expanded

The Number generic constraint now includes unsigned integer types (uint, uint8, ..., uint64). This is technically additive but may affect type inference in edge cases.

Test Data Overhaul

Cross-language reference test data has been substantially reorganized:

  • Removed: tests/assumptions/ directory and all assumption-specific test suites. Error cases are now co-located with each estimator's test data using expected_error fields.
  • Regenerated: shift-bounds/ and ratio-bounds/ test files with larger minimum sample sizes (5 instead of 1-3) and new error test cases.
  • Renamed: Many test files to follow the new naming taxonomy (natural-5-5 instead of natural-3-2, etc.).

New Features

CenterBounds Estimator

Exact distribution-free confidence bounds for the Hodges-Lehmann pseudomedian (Center). One-sample analog of ShiftBounds/RatioBounds, based on Wilcoxon signed-rank theory. Uses the FastCenterQuantiles algorithm to extract order statistics from the implicit pairwise average matrix without materializing all N(N+1)/2 pairs.

from pragmastat import center_bounds
bounds = center_bounds([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 0.05)
# Bounds(lower=3.5, upper=7.5)

Available in all 7 languages: CenterBounds (C#), center_bounds (Python/Rust/R), centerBounds (TypeScript/Kotlin/Go).

SignedRankMargin Function

Computes the critical margin for one-sample signed-rank bounds, analogous to PairwiseMargin for two-sample bounds. Uses exact Wilcoxon signed-rank distribution via dynamic programming for n <= 63 and Edgeworth approximation for larger n.

from pragmastat import signed_rank_margin
margin = signed_rank_margin(10, 0.05)  # 18

Available in all 7 languages.

Rng.resample (Bootstrap Sampling)

New method for sampling with replacement (bootstrap resampling):

from pragmastat import Rng
rng = Rng("demo-resample")
rng.resample([1, 2, 3, 4, 5], 7)  # [5, 1, 1, 3, 3, 4, 5]

Available in all 7 languages. Cross-language reproducibility verified via reference test data in tests/resample/.

GaussCdf Shared Module

Extracted standard normal CDF implementation (ACM Algorithm 209) into a shared internal module, replacing code previously inlined in PairwiseMargin. Now shared between PairwiseMargin and SignedRankMargin.

Bug Fixes

  • fast_spread bounds corruption under parallel load (Rust): Changed internal index types from usize to u32/u64 to prevent overflow with large inputs. Added bounds-checking guards and fixed accumulator types for count variables.
  • Multiplic quantile guards (C#): Removed overly aggressive epsilon guards (1e-9) in the quantile function. Now only returns boundary values at exact 0 and 1.
  • Go Median overflow: Now computes (float64(a) + float64(b)) / 2 instead of float64(a + b) / 2, preventing integer overflow with large values.

Infrastructure

Version Management

  • Version is now managed via a single VERSION file at the repository root, replacing the previous manual/version.typ approach.
  • New mise run version <ver> task propagates the version to all language manifests.
  • New mise run publish <ver> task bumps version, pushes, and triggers the publish workflow.

CI Improvements

  • Added ci-success gate job aggregating all language CI results for branch protection.
  • Added cs:check step to C# CI pipeline.
  • Go CI now uses mise tasks (go:check, go:test) instead of raw commands.
  • Dev branch excluded from push-triggered CI.

Publish Workflow

  • Publish is now triggered via workflow_dispatch instead of tag push.
  • Tags are created programmatically during the publish job.
  • Version is read from VERSION file instead of parsed from Typst source.

TypeScript: ESLint 8 to 9 Migration

Migrated from .eslintrc.js (legacy config) to eslint.config.js (flat config). ESLint upgraded from v8 to v9, @typescript-eslint packages upgraded from v6 to v8.

Tooling

  • Replaced deprecated serde_yaml with serde_yml in the tools crate.
  • Removed deprecated UniformInt methods from Rust RNG internals.
  • Added typst to mise-managed tools.
  • Downgraded Java toolchain from Temurin 23 to Temurin 11 (Kotlin compatibility).
  • Added ts:restore as dependency for ts:build.
  • Fixed cs:clean to not run dotnet clean (which requires restore).
  • Added r:restore as dependency for r:check and r:ci.

Simulation Infrastructure

  • New Rust simulation crate (rs/pragmastat-sim): Parallel simulation runner with indicatif progress bars, supporting avg-drift, disp-drift, center-bounds, shift-bounds, and ratio-bounds simulations.
  • C# simulation improvements: Split monolithic coverage simulation into 4 dedicated commands, migrated to Rng-based sampling with string seeds for reproducibility, switched to Release builds, added AssumptionException recording in output, 10x default sample count.
  • New mise tasks: rs:sim, rs:sim:all, cs:sim:all.

Documentation

  • New manual sections: one-sample bounds methodology, CenterBounds toolkit reference, SignedRankMargin toolkit reference, resample toolkit reference.
  • New algorithm documentation: FastCenterQuantiles, FastSignedRankMargin.
  • New study: bootstrap vs signed-rank approaches for center bounds.
  • New study: median bounds efficiency analysis.
  • Test suite documentation added for center-bounds and signed-rank-margin.
  • Comprehensive tests/README.md documenting test file format, naming taxonomy, and tolerance values.
  • Updated AGENTS.md API list to reflect new one-sample bounds and margin functions.

Test Data

New test suites:

  • tests/center-bounds/ (40 files): natural, symmetric, asymmetric, additive, uniform, edge cases, properties, error cases
  • tests/signed-rank-margin/ (40 files): exact, medium-n approximation, boundary, demo, error cases
  • tests/resample/ (16 files): cross-language bootstrap reproducibility

Removed:

  • tests/assumptions/ (4 files): assumption error tests moved inline to each estimator's test suite using expected_error fields

Regenerated with larger minimum sample sizes:

  • tests/shift-bounds/ and tests/ratio-bounds/: minimum sample size increased from 1-3 to 5, new error test cases for min-misrate domain guard

Full Changelog: https://github.com/AndreyAkinshin/pragmastat/compare/v6.0.1...v7.0.0

perfolizer v0.6.4 4 Feb 2026 657

A maintenance release that updates the Pragmastat dependency to v6.0.1 and removes redundant code.

Internal

  • Dependency update: Bumped Pragmastat from 5.2.0 to 6.0.1, which includes a redesigned ratio estimator using geometric interpolation and a new RatioBounds estimator
  • Code cleanup: Removed redundant RngExtensions class as Pragmastat.Randomization.Rng now provides the Uniform(double min, double max) method directly

Full Changelog: https://github.com/AndreyAkinshin/perfolizer/compare/v0.6.3...v0.6.4

pragmastat v6.0.1 3 Feb 2026 1K

This release improves documentation quality by replacing numeric RNG seeds with descriptive string seeds across all code examples, and refines manual writing style for consistency.

Documentation

  • Replace numeric RNG seeds with descriptive string seeds (e.g., "demo-uniform", "demo-sample") in all code examples across README files, docstrings, and manual pages for all language implementations
  • Update toolkit manual pages (rng, sample, shuffle) to use string seeds in examples

Internal

  • Replace second-person pronouns with impersonal constructions throughout the manual for consistent technical writing style
  • Update demo programs in all languages to use descriptive string seeds
  • Update validation tests to use test-* prefixed string seeds where numeric seed determinism is not explicitly tested

Full Changelog: https://github.com/AndreyAkinshin/pragmastat/compare/v6.0.0...v6.0.1

pragmastat v6.0.0 3 Feb 2026 127

Redesigns the Ratio estimator using log-space aggregation to achieve exact multiplicative antisymmetry, and introduces the new RatioBounds estimator for confidence bounds on sample ratios.

Breaking Changes

  • Ratio estimator redesign: Ratio now uses geometric interpolation instead of arithmetic interpolation for even m×n cases. This ensures exact multiplicative antisymmetry (Ratio(x,y) × Ratio(y,x) = 1) but changes return values when the two middle pairwise ratios differ. For example, Ratio([1,2], [1]) changes from 1.5 to √2 ≈ 1.414.

Features

  • RatioBounds estimator: New estimator providing confidence bounds on Ratio via log-space delegation to ShiftBounds. Available in all 7 languages (C#, Go, Kotlin, Python, R, Rust, TypeScript).
  • Ratio as multiplicative dual of Shift: Ratio is now defined as exp(Shift(log(x), log(y))), providing exact multiplicative antisymmetry and O((m+n) log L) complexity via FastShift delegation.

Bug Fixes

  • KaTeX definitions: Add missing RatioBounds entry for proper \operatorname{} rendering in web documentation.
  • Cross-reference mapping: Add sec-fast-ratio xref mapping to resolve warning during web generation.

Documentation

  • Add comprehensive manual documentation for Ratio redesign and RatioBounds estimator, including algorithm descriptions (FastRatio), methodology updates, and test documentation.
  • Update demo examples in all 7 languages to use consecutive odd numbers [1,3,5,7,9] instead of even numbers, ensuring compatibility with RelSpread and Ratio/RatioBounds positivity requirements.
  • Add RatioBounds examples to all language READMEs and demo programs.
  • Remove sparity-violating test cases (n=1, zero spread) from Spread and AvgSpread documentation.

Internal

  • Add 61 reference test fixtures for RatioBounds covering demos, natural sequences, property validation, edge cases, distribution tests, and misrate variations.
  • Regenerate test fixtures with updated seeds and remove edge cases with zero values.
  • Update Ratio test fixtures to reflect geometric interpolation for even m×n cases.
  • Reduce CI artifact retention to 1 day and disable release discussions.

Full Changelog: https://github.com/AndreyAkinshin/pragmastat/compare/v5.2.1...v6.0.0

pragmastat v5.2.1 2 Feb 2026 159

This patch release fixes deployment issues affecting the website's image assets and improves Greek letter conversion in mathematical expressions.

Bug Fixes

  • Web: Fixed 404 errors for images on pragmastat.dev by removing nested .gitignore in web/public/ that was being copied to the build output and causing the deployment action to exclude the img/ folder
  • Tools: Fixed Greek letter conversion in math expressions when followed by subscripts or superscripts (e.g., sigma_(n,m), epsilon_k now correctly convert to σ_(n,m), ε_k)

Full Changelog: https://github.com/AndreyAkinshin/pragmastat/compare/v5.2.0...v5.2.1

perfolizer v0.6.3 2 Feb 2026 349

This release updates the Pragmastat dependency to version 5.2.0 and migrates internal random number generation to use UniformInt32 for improved type safety.

Internal

  • Update Pragmastat dependency from 5.1.0 to 5.2.0
  • Migrate from deprecated UniformInt (returns long) to UniformInt32 (returns int) across test code and LimitedRandomGenerator, eliminating unnecessary casts

Full Changelog: https://github.com/AndreyAkinshin/perfolizer/compare/v0.6.2...v0.6.3

pragmastat v5.2.0 2 Feb 2026 396

This release significantly expands the RNG uniform API across all language implementations with comprehensive type-specific random number generation methods, and migrates the TypeScript toolchain from npm to pnpm.

Breaking Changes

  • All languages: Removed uniformBoolWithProb/uniform_bool_with_prob methods — Bernoulli distribution belongs in a dedicated distributions module
  • Rust: uniform_int renamed to uniform_i64 (deprecated alias available)
  • C#: UniformInt renamed to UniformInt64 (deprecated alias available)
  • Go: UniformInt deprecated in favor of UniformInt64

Features

  • Rng uniform API expansion (all languages):
    • uniform_range/UniformRange/uniformRange — generate floats in a specified [min, max) range
    • uniform_bool/UniformBool/uniformBool — generate random booleans with P(true) = 0.5
    • 32-bit float methods: uniform_f32/UniformSingle/UniformFloat32/uniformFloat32
    • Comprehensive integer type coverage:
      • Rust: uniform_i64/i32/i16/i8/isize and uniform_u64/u32/u16/u8/usize
      • C#: UniformInt64/Int32/Int16/Int8 and UniformUInt64/UInt32/UInt16/Byte
      • Go: UniformInt64/Int32/Int16/Int8/IntN and UniformUint64/Uint32/Uint16/Uint8/UintN
      • Kotlin: uniformLong/Int/Short/Byte and uniformULong/UInt/UShort/UByte
      • TypeScript/Python/R: uniformRange and uniformBool

Bug Fixes

  • CI: Fixed TypeScript job to use pnpm caching after npm→pnpm migration

Internal

  • TypeScript: Migrated from npm to pnpm
  • Rust: Replaced deprecated uniform_int with uniform_i64 in examples and tests
  • Go: Removed unused math import
  • Tests: Added cross-language reference test data for uniform_bool, uniform_f32, uniform_i32, and uniform_range

Full Changelog: https://github.com/AndreyAkinshin/pragmastat/compare/v5.1.0...v5.2.0

perfolizer v0.6.2 1 Feb 2026 208

This release migrates the random number generation infrastructure from System.Random to Pragmastat's deterministic Rng system (xoshiro256++), enabling cross-platform reproducible random number generation and fixing a bias in the shuffle algorithm.

Breaking Changes

  • IContinuousDistribution.Random(Random? random) signature changed to Random(Rng? rng) — all 17 distribution implementations now accept Pragmastat.Randomization.Rng instead of System.Random
  • RandomGenerator and LimitedRandomGenerator now use Rng internally
  • Removed Shuffler class — use Rng.Shuffle() instead

Bug Fixes

  • Fix biased shuffle algorithm that picked from full range [0, count) instead of shrinking range [0, i+1) (#22)

Internal

  • Upgrade Pragmastat dependency 3.2.4 → 5.1.0
  • Migrate demos, simulations, and all tests to use Rng

Full Changelog: https://github.com/AndreyAkinshin/perfolizer/compare/v0.6.1...v0.6.2

pragmastat v5.1.0 1 Feb 2026 254

This release introduces a comprehensive assumption validation framework across all language implementations, ensuring consistent error handling when estimators receive invalid inputs.

Features

  • Assumption validation framework — All estimators now validate input assumptions and throw structured errors with assumption ID (validity, positivity, sparity) and subject (x, y) when violations occur
    • C#: AssumptionViolationException with AssumptionId enum
    • Go: AssumptionError type with AssumptionID and Subject fields
    • Kotlin: AssumptionViolationException with assumptionId/subject properties
    • Python: AssumptionViolationError with assumption_id/subject properties
    • R: assumption_error condition class with cli_abort integration
    • Rust: Result<T, AssumptionViolation> return type for all estimators
    • TypeScript: AssumptionError class with typed violation property

Documentation

  • Add new assumptions chapter to manual documenting validity, positivity, and sparity assumptions
  • Add assumption requirement tables to each toolkit function page
  • Add cross-reference labels for hyperlinks between manual sections
  • Fix assumptions chapter ordering (moved between algorithms and studies)

Internal

  • Add shared assumption test data (tests/assumptions/) for cross-language conformance testing
  • Add assumptions chapter support to web generation tooling
  • Update .gitignore with common patterns
  • Add project instructions for Claude Code (.claude/rules/project.md)
  • Remove obsolete .cursor command files

Full Changelog: https://github.com/AndreyAkinshin/pragmastat/compare/v5.0.0...v5.1.0

pragmastat v5.0.0 29 Jan 2026 156

Pragmastat v5.0.0 introduces a deterministic RNG system with xoshiro256++ for reproducible cross-language results, adds five probability distributions, and improves API safety by replacing panics with Result types.

Breaking Changes

  • Rust: pairwise_margin now returns Result<usize, &'static str> instead of panicking on invalid input
  • Rust: fast_center, fast_shift, and fast_spread modules are now private (internal implementation details)
  • Go: PairwiseMargin now returns (int, error) instead of panicking

Features

  • Deterministic RNG: All fast algorithms now use seeded RNG with FNV-1a hashing of input values, ensuring identical results across runs and platforms
  • Rng class: New public API across all 7 languages with uniform(), uniformInt(), shuffle(), and sample() operations
  • xoshiro256++ PRNG: High-quality pseudorandom number generator with SplitMix64 seeding
  • Probability distributions: Added Uniform, Exp, Additive, Multiplic, and Power distributions with inverse CDF sampling

Improvements

  • Rust: NaN and infinite values now return proper errors instead of causing panics
  • Rust: Uses total_cmp instead of partial_cmp().unwrap() for safer floating-point sorting
  • Build system: PDF tasks now depend on img:build to ensure images are compiled first
  • Logo: Updated with brighter cyan and violet gradient colors for better visibility

Bug Fixes

  • Manual: Removed non-existent .md artifact from artifacts table
  • Image generation: logo.svg is now preserved when regenerating figures

Documentation

  • Added AGENTS.md development guides for all 7 language implementations (Rust, Go, Python, TypeScript, C#, Kotlin, R)
  • Added comprehensive docstrings to Python estimator functions
  • Updated all demos and READMEs to showcase RNG and distribution features
  • Expanded manual with randomization algorithms (xoshiro256++, SplitMix64, FNV-1a, Fisher-Yates, reservoir sampling)
  • Restructured manual: replaced estimators chapter with toolkit chapter, consolidated properties into studies chapter

Internal

  • Added cross-language reference test fixtures for deterministic RNG verification
  • Added comprehensive error handling tests for Rust implementation
  • Removed obsolete prompts/ and .claude/commands/ directories
  • Removed separate Pragmastat.Distributions C# project (consolidated into main library)
  • Updated tooling for new manual structure with xref module and improved math conversion

Full Changelog: https://github.com/AndreyAkinshin/pragmastat/compare/v4.0.3...v5.0.0

pragmastat v4.0.3 27 Jan 2026 218

Maintenance release focused on CI performance improvements and build simplification.

Internal

  • CI optimization: Consolidated separate build jobs into single ci-manual job, added Rust caching for tools compilation, and concurrency control—reducing CI wall-clock time from ~9m to ~2m
  • Web build simplification: Switched to SVG favicon and committed logo.png directly, eliminating image generation during CI

Full Changelog: https://github.com/AndreyAkinshin/pragmastat/compare/v4.0.2...v4.0.3

zesven v1.1.0 27 Jan 2026 39

This release adds support for decoding LZ4 and Brotli archives created with 7-Zip forks (7-Zip-zstd, NanaZip) that use zstdmt skippable frames internally.

Features

  • Zstdmt skippable frame support for LZ4 and Brotli codecs - Auto-detect and decode archives wrapped in zstd skippable frames, enabling compatibility with 7-Zip-zstd and NanaZip (#4)

Documentation

  • Document evict_m complexity in S3-FIFO cache implementation

Full Changelog: https://github.com/AndreyAkinshin/zesven/compare/v1.0.1...v1.1.0

zesven v1.0.1 26 Jan 2026 13

This release replaces the LRU cache with a custom S3-FIFO implementation, removing the lru dependency and improving cache eviction performance with O(1) lookups.

Improvements

  • Replace LRU cache strategy with S3-FIFO algorithm based on "FIFO queues are all you need for cache eviction" (Yang et al., 2023)
  • Remove lru crate dependency in favor of ~250 lines of pure, safe Rust
  • Use O(1) HashMap lookup in pop() instead of O(n) VecDeque scan

Bug Fixes

  • Fix infinite loop when cache capacity is 1 by routing all insertions directly to the main queue
  • Fix CI issues with feature flags and #[must_use] warnings on cache operations

Internal

  • Add #[must_use] attribute to len(), capacity(), and is_empty() query methods
  • Add comprehensive edge case tests for capacity=1, capacity=2, clear/reinsert, tombstone handling, and ghost promotion
  • Remove unnecessary #[allow(unused)] attribute from s3fifo module

Full Changelog: https://github.com/AndreyAkinshin/zesven/compare/v1.0.0...v1.0.1

pragmastat v4.0.2 25 Jan 2026 165

Major documentation platform migration: replaced Hugo with Astro for the web documentation and R Markdown with Typst for PDF generation. Consolidated Python build scripts into a new Rust tools/ module.

Internal

  • Documentation platform: Migrated from Hugo to custom Astro site with MDX support

    • Added interactive citation popovers with BibTeX integration
    • Implemented Ayu-themed design with responsive sidebar
    • Added themed image support (light/dark mode) and improved code blocks with Shiki
    • Created bibliography page with automatic citation extraction
    • Configured KaTeX for math rendering with custom macros
  • PDF generation: Migrated from R Markdown to Typst

    • Added clickable citations linked to bibliography
    • Created new Typst template with improved metadata and styling
    • Converted all manual chapters from .md to .typ format
  • Build tooling: Consolidated Python gen/ scripts into Rust tools/ module

    • Added BibTeX parser and citation rendering
    • Implemented version sync across project manifests (C#, Kotlin, Python, TypeScript, R, Rust)
    • Added favicon generation from SVG logo
    • New Typst parser and evaluator for content extraction
  • Legacy cleanup: Removed old Python-based documentation generation, R Markdown PDF pipeline, and Hugo layouts

Full Changelog: https://github.com/AndreyAkinshin/pragmastat/compare/v4.0.1...v4.0.2

structyl nightly 22 Jan 2026

Automated nightly build from main branch.

Version: nightly-SNAPSHOT-b7b2266 Commit: b7b2266 Built: 2026-01-22 11:46 UTC

⚠️ This is an unstable development build. Use for testing only.

Install

curl -fsSL https://get.structyl.akinshin.dev/install.sh | sh -s -- --version nightly
pragmastat v4.0.1 21 Jan 2026 247

Major build system modernization: migrated from shell scripts to mise task runner, providing a unified, cross-platform build experience across all 7 language implementations.

Breaking Changes

  • Go module path changed: Module path updated from v3 to v4 — update your imports accordingly

Improvements

  • Build system migration: Replaced all build.sh scripts with centralized mise.toml configuration
  • Task naming convention: Adopted target:action:variant pattern (e.g., cs:build:release, go:test)
  • C# upgraded to .NET 10.0: Updated all C# projects to target .NET 10.0
  • CI workflow renamed: build.ymlci.yml for clarity

Bug Fixes

  • CI: Removed redundant actions/setup-go to let mise manage Go toolchain consistently

Documentation

  • R package: Added documentation for pairwise_margin and shift_bounds functions
  • AGENTS.md: Added comprehensive development guide for the repository

Internal

  • Migrated release task to file-based publish task (.mise/tasks/publish)
  • Pinned action-gh-release to v2.4.1 for reproducible releases
  • Reformatted Python code with ruff
  • Release commits now use semantic commit format
structyl v0.1.0 21 Jan 2026

Release Notes v0.1.0

Initial release of Structyl - a multi-language project orchestrator that provides unified task execution across polyglot codebases using mise as the underlying task runner.

Features

  • Multi-language project support: Unified task execution for Go, Rust, Python, TypeScript, C#, Kotlin, PHP, and Deno projects
  • Toolchain management: Automatic detection and configuration of language toolchains with customizable toolchains.json
  • Standard command set: Consistent build, test, check, clean, restore, and ci commands across all supported languages
  • Docker integration: Built-in Docker and Docker Compose support with per-target Dockerfiles and multi-service configurations
  • Version management: Centralized VERSION file with automatic propagation to language-specific manifests (Cargo.toml, pyproject.toml, package.json, etc.)
  • Test output parsing: Unified test result parsing for Go, Cargo, pytest, dotnet, Deno, and Bun with summary output
  • CI pipeline orchestration: Configurable CI steps with dependency ordering and parallel execution
  • Shell completions: Tab completion support for Bash, Zsh, and Fish shells
  • Upgrade command: Self-update capability with nightly build support
  • JSON Schema validation: Configuration validation with published schemas at structyl.akinshin.dev

Improvements

  • mise integration: Direct task delegation to mise for reliable cross-platform execution
  • Verbosity control: -q/--quiet and -v/--verbose flags for output control
  • Command availability checking: Graceful handling of missing npm/pnpm/yarn/bun scripts
  • Parallel execution: Configurable worker pool for parallel target execution
  • Test helper library: Public pkg/testhelper package for cross-language test data comparison with float tolerance support

Documentation

  • Comprehensive VitePress documentation site with guides, specifications, and reference material
  • Formal specifications using RFC 2119 terminology
  • JSON schemas for configuration and toolchain files
  • Installation scripts for Unix and Windows platforms

Internal

  • Extensive test coverage with parallel test execution
  • Structured error handling with semantic exit codes (0: success, 1: runtime error, 2: configuration error, 3: environment error)
  • Topological sorting for dependency resolution
  • Mock infrastructure for testable command execution
pragmastat v4.0.0 20 Jan 2026 144

v4.0.0 Release Notes

This release introduces confidence bounds estimation for the Hodges-Lehmann shift estimator, enabling statistically valid interval estimates for location shifts between two samples across all supported languages.

Breaking Changes

  • Removed Interval class (C#): Replaced by the new Bounds class with Lower/Upper properties and measurement unit support. Code using Interval.Left/Interval.Right must migrate to Bounds.Lower/Bounds.Upper.

Features

  • ShiftBounds estimator: Computes confidence bounds for the location shift between two samples. Given samples X and Y and a misrate α, returns an interval where the true shift lies with probability 1-α.
  • PairwiseMargin function: Computes the symmetric margin for Mann-Whitney U distribution at a target misrate. Uses exact computation (Loeffler 1982 recurrence) for small samples (n+m ≤ 400) and Edgeworth expansion with 6th-order correction for large samples.
  • Multi-language support: ShiftBounds and PairwiseMargin implemented in C#, Go, Kotlin, Python, R, Rust, and TypeScript.

Improvements

  • New Bounds class (C#): Represents intervals with lower/upper bounds and measurement unit, replacing the deprecated Interval class.
  • Helper functions: Added BinomialCoefficientFunction (Pascal's triangle with log-gamma fallback) and FactorialFunction (direct computation with gamma fallback).
  • Coverage simulation: New CoverageSimulation validates empirical coverage matches target misrate.
  • Refactored simulation infrastructure: Extracted SimulationBase from DriftSimulationBase with parallel execution, progress tracking, and incremental persistence.

Documentation

  • Added methodology guides: confidence interval misrate interpretation, Mann-Whitney margin theory.
  • Added algorithm description: fast pairwise margin computation.
  • Added estimator references: ShiftBounds user guide, PairwiseMargin function reference.
  • Added academic references: Loeffler (1982), Fix & Hodges (1955).
  • Added test documentation: 346 pairwise-margin test cases, 61 shift-bounds test cases.
  • Updated all language-specific README files with new API examples.

Internal

  • Upgraded to .NET 10.0.
  • Migrated build tasks to target:action naming convention.
  • Added 407 cross-language reference test cases for pairwise-margin and shift-bounds.
  • Minor refactoring in FastSpread, CollectionExtensions, MathExtensions.

Full Changelog: https://github.com/AndreyAkinshin/pragmastat/compare/v3.2.4...v4.0.0

zesven v1.0.0 19 Jan 2026 12

Initial release of zesven, a comprehensive pure Rust implementation of the 7z archive format with full read/write support, multiple compression codecs, encryption, and cross-platform compatibility including WebAssembly.

Features

Archive Operations

  • Full read, write, and edit support for 7z archives
  • Append, update, delete, and rename entries in existing archives
  • Archive integrity testing with CRC validation
  • Selective extraction with glob and regex patterns

Compression Codecs (11 total)

  • LZMA/LZMA2 - Native implementation with parallel compression variant
  • Deflate - Via flate2 with zlib-rs backend
  • BZip2 - Full encode/decode support
  • PPMd - Prediction by Partial Matching
  • Zstd - Modern compression (optional feature)
  • Brotli - Google's compression algorithm (optional feature)
  • LZ4 - Fast compression (optional feature)
  • LZ5/Lizard - Pure Rust implementations (always available)
  • Fast-LZMA2 - Radix match-finder encoder (experimental)

BCJ Filters (10 total)

  • Delta - Byte-level delta encoding
  • x86 - 32-bit x86 filter
  • BCJ2 - Complex 4-stream x86 filter
  • ARM/ARM-T/ARM64 - ARM architecture filters
  • PowerPC/SPARC/IA-64/RISC-V - Additional architecture support

Encryption

  • AES-256-CBC with SHA-256 key derivation
  • Header encryption - Encrypt filenames and metadata
  • Configurable key derivation iteration count

Archive Features

  • Solid archives - Read and write with configurable block sizes
  • Multi-volume archives - Support for split archives (.7z.001, .7z.002, etc.)
  • Self-extracting archives - Detection and handling for Windows PE, Linux ELF, macOS Mach-O stubs
  • Archive recovery - Signature scanning and partial recovery from corrupted archives
  • Random access - Direct entry access for non-solid archives
  • Hardlink tracking - Preserve and restore hardlinks
  • NTFS alternate streams - Support for Windows alternate data streams
  • Unix ownership - Preserve UID/GID on Unix systems

APIs

  • Synchronous API - Standard blocking operations
  • Streaming API - Memory-bounded processing with StreamingArchive
  • Async API - Tokio-based async operations (optional async feature)
  • Parallel compression - Rayon-based multi-threaded processing (optional parallel feature)
  • WebAssembly - Browser-compatible builds (optional wasm feature)
  • Progress callbacks - Track extraction and compression progress

Security

  • Path traversal protection - Blocks ../, absolute paths, symlink escapes
  • Resource limits - Configurable header size, entry count, and unpacked size limits
  • CRC verification - Automatic validation of all entries
  • Zip bomb prevention - Compression ratio limits

CLI Tool

  • Full-featured command-line interface (optional cli feature)
  • Commands: list, extract, create, test, info
  • Progress display with indicatif
  • Interactive password prompt support
  • Shell completion generation

Platform Support

  • Linux - Full support (x86_64, aarch64)
  • macOS - Full support (x86_64, aarch64)
  • Windows - Full support (x86_64)
  • WebAssembly - Browser and Node.js support

Documentation

  • Comprehensive user manual at zesven.akinshin.dev
  • Complete 7z format specification documentation
  • Cookbook with common usage patterns
  • API reference via docs.rs

Internal

  • MSRV: Rust 1.85
  • Dual-licensed under MIT and Apache-2.0
  • Extensive test suite including property-based testing and fuzz targets
  • CI with cross-platform testing and WASM validation
avatarka v1.1.0 11 Dec 2025

Avatarka v1.1.0 adds a compact layout mode for the avatar picker and flexible grid dimensions for the gallery.

Features

  • Add compact layout mode for AvatarPicker — new layout prop accepts 'default' or 'compact', with side-by-side editor arrangement and reduced spacing
  • Add gridWidth and gridHeight props to AvatarPicker for non-square gallery grids (fall back to gridSize when not specified)
  • Export AvatarPickerLayout type from avatarka-react

Full Changelog: https://github.com/AndreyAkinshin/avatarka/compare/v1.0.1...v1.1.0

Release notes generated by herald v1.0.4

avatarka v1.0.0 9 Dec 2025

Summary

Initial release of Avatarka — a zero-dependency TypeScript library for generating unique, customizable SVG avatars with seed-based determinism, multiple themes, and ready-to-use React components.

Features

  • Core avatar generation with seed-based deterministic output from any string (email, user ID, etc.)
  • 6 built-in themes: people, animals, monsters, robots, aliens, and ocean (10 sea creatures)
  • React components: <Avatar /> for display, <AvatarEditor /> for interactive customization, and <AvatarPicker /> for gallery-based selection
  • AvatarPicker layouts: support for both standard and compact layout modes with configurable gridWidth and gridHeight
  • alwaysTransparentBackground prop on AvatarPicker to force transparent backgrounds and hide the background color control
  • Gallery diversity: generateGallery() ensures unique (theme, shape) pairs with no duplicates across generated avatars
  • shapeParam on Theme interface for programmatic discovery of each theme's primary shape options
  • PNG export via svgToPng() and svgToPngDataUrl() using the Canvas API (browser environments)
  • Full TypeScript support with exported types and strongly-typed theme parameters

Improvements

  • Redesigned people theme hair styles and refined facial feature proportions
  • Improved animal theme eye rendering and proportions
  • Expanded monster theme horn types with spikes, curved, and antlers variants

Internal

  • Monorepo setup with pnpm workspaces and Turborepo
  • Two packages: avatarka (core, zero dependencies) and avatarka-react
  • Interactive demo app with live preview
  • Snapshot tests for all theme renderers
  • CI/CD workflows for build, deploy, and release
  • Migrated task runner to mise with VERSION-based publishing

Release notes generated by herald v1.0.4

BenchmarkDotNet v0.15.8 30 Nov 2025 3M

This release adds OpenMetrics exporter support for Prometheus-compatible metrics export, improves the Roslyn analyzers with multi-target support and better type checking, and fixes several bugs including process deadlocks and WASM trimming issues.

Features

  • Add OpenMetrics exporter for Prometheus-compatible metrics output (#2801)
  • Add Job info to DisassemblyDiagnoser report headers to distinguish assemblies when using multiple coreruns (#2884, fixes #2573)
  • Add NO_COLOR environment variable support for disabling console colors (#2870)

Improvements

  • Multi-target analyzers with improved type assignability checking using semantic model (#2866)
  • Add new analyzer diagnostic BDN1503 for better argument/params validation (#2865, fixes #2864)
  • Use PolySharp for [DynamicallyAccessedMembers] attribute polyfill (#2883)
  • Refactor to use AsyncProcessOutputReader for cleaner process output handling (#2878)

Bug Fixes

  • Fix process deadlock issue when reading process output (#2877)
  • Fix WASM generated project being trimmed out (#2872)
  • Allow filters to filter out every benchmark from a type without errors (#2879, fixes #2860)
  • Fix unhandled exception when running BenchmarkRunner.Run<T>() with arguments on invalid benchmark type (#2880, fixes #2724)

Internal

  • Update release workflow for analyzers (#2882)
  • Improve docs building workflow
  • Cleanup #if-#endif preprocessor directives using PolySharp polyfills (#2881)

Full Changelog: https://github.com/dotnet/BenchmarkDotNet/compare/v0.15.7...v0.15.8

BenchmarkDotNet v0.15.7 12 Nov 2025

This release introduces Roslyn analyzers to catch incorrect BenchmarkDotNet usage at compile time, improves .NET Framework version detection, and updates OS detection support.

Features

  • Add Roslyn analyzers to detect incorrect usage of BenchmarkDotNet at compile-time (#2837)
    • Validates benchmark class structure (public, non-sealed, generic constraints)
    • Checks [Arguments], [Params], and [ParamsAllValues] attribute usage
    • Verifies [GenericTypeArguments] requirements
    • Ensures only one baseline method per category
    • Validates BenchmarkRunner.Run invocations

Improvements

  • Improve .NET Framework version detection by retrieving version from TargetFrameworkAttribute (#2682)
  • Bump Perfolizer 0.6.0 → 0.6.1, bringing updated Windows and macOS version detection in OsBrandHelper

Bug Fixes

  • Fix null reference handling and exception logging in TestCaseFilter for the test adapter
  • Fix flaky CI tests by increasing build timeout values (#2854)

Internal

  • Improve release workflow in release.yaml

Full Changelog: https://github.com/dotnet/BenchmarkDotNet/compare/v0.15.6...v0.15.7

BenchmarkDotNet v0.15.6 5 Nov 2025 812K

v0.15.6

This release adds ref struct parameter support for [ArgumentsSource], fixes Native AOT runtime moniker resolution, and upgrades to Perfolizer 0.6.0 with the new Pragmastat statistical engine.

Features

  • Add ref struct parameter support for [ArgumentsSource] attribute, enabling Span<T> and ReadOnlySpan<char> parameters (#2849)

Bug Fixes

  • Fix runtime moniker normalization for Native AOT targets (#2852)

Improvements

  • Upgrade to Perfolizer 0.6.0 with Pragmastat statistical engine integration

Documentation

  • Add documentation for breaking changes related to disassembler native dependencies (#2836)

Internal

  • Introduce GitHub Actions release workflow

Full Changelog: https://github.com/dotnet/BenchmarkDotNet/compare/v0.15.5...v0.15.6

BenchmarkDotNet v0.15.5 30 Oct 2025 255K

This release fixes job naming consistency when using --runtimes, clamps histogram bin bounds to avoid confusing negative values, and reduces output directory clutter by filtering unnecessary runtime and satellite assembly files.

Features

  • Add custom MSBuild targets to remove unnecessary files from the bin directory (#2737)
    • Filters out Capstone native binaries for non-target platforms
    • Removes satellite assemblies from Microsoft.CodeAnalysis packages

Bug Fixes

  • Fix job names consistency between SimpleJobAttribute and --runtimes CLI option (#2841)
    • Jobs now use runtime names as IDs consistently across all runtime monikers
  • Clamp histogram bin lower bounds to non-negative values (#1821)
    • Prevents confusing negative values in histogram output for non-negative measurements

Internal

  • Bump Perfolizer: 0.5.3 → 0.5.4 (#2773)
  • Update changelog and GitHub Pages generation workflows
  • Enable workflow_dispatch for test workflow (#2835)

Full Changelog: https://github.com/dotnet/BenchmarkDotNet/compare/v0.15.4...v0.15.5

pragmastat v3.1.0 1 Oct 2025
  • add fast center and spread for go, kotlin, python, r, rust, ts
  • unify demos and include them in the manual manuscript
  • add prompts/
  • add doi
  • keep all pdf versions on website
pragmastat v3.0.0 30 Sep 2025
  • Introduced Breaking changes section and renamed several core concepts for clarity.
  • Renamed distributions: Additive (Normal), Multiplic (Log-Normal), Power (Pareto).
  • Changed primary measures: Center replaces Mean, Spread replaces StdDev, Disparity replaces Cohen’s d.
  • Added new section on Distributions (Additive, Multiplic, Exponential, Power, Uniform).
  • Added new section on Properties (Breakdown, Drift, Invariance).
  • Reworked statistical efficiency into new Drift framework.
  • Added new Methodology section (assumptions → conditions, efficiency → drift).
  • Added Algorithms section with O(n log n) implementations of Center and Spread.
  • Expanded Studies with updated proofs and examples, including new Drift-based analysis.
  • Revised Introductory material (Desiderata, Primer, Definitions) for consistency and clarity.
  • Updated estimator definitions with complexity notes, asymptotic behavior, and improved domain clarifications.
  • Marked Disparity explicitly as “robust effect size” throughout.
BenchmarkDotNet v0.15.4 24 Sep 2025 1M

This release fixes issues with ParamsSource attribute resolution in inheritance scenarios and corrects a MSBuild syntax error in the TestAdapter.

Bug Fixes

  • Allow [ParamsSource] to resolve overridden methods and properties in derived classes (#2832)
  • Fix MSBuild condition syntax for TestTfmsInParallel property that prevented Visual Studio from loading projects (#2831)

Full Changelog: https://github.com/dotnet/BenchmarkDotNet/compare/v0.15.3...v0.15.4

BenchmarkDotNet v0.15.3 17 Sep 2025 255K

This release brings .NET 10 NativeAOT instruction set support, improved CPU detection on Windows when WMIC is unavailable, test adapter filtering, and numerous bug fixes.

Breaking Changes

  • Deprecated .WithNuget() job extension in favor of .WithMsBuildArguments() (#2812)

Features

  • Add VS Test Adapter filter support for running specific benchmarks (#2788)
  • Update NativeAOT instruction set support for .NET 10+ (#2828)

Improvements

  • Add PowerShell-based CPU detection fallback for Windows when WMIC is unavailable (#2749)
  • Improve IsNetCore and IsNativeAOT detection for single-file apps without AOT (#2799)
  • Use --nodeReuse:false for dotnet CLI commands to improve build isolation (#2814)
  • Enable assembly signing for debug builds (#2774)

Bug Fixes

  • Fix ArgumentsSource on external types not working if the argument type is not primitive (#2820)
  • Fix workload warmup mode not working correctly
  • Fix EtwProfiler for file paths slightly under 260 characters (#2808)
  • Fix console logs being output twice when using TestAdapter (#2790)
  • Fix EventProcessor.OnEndValidationStage not being called when critical validation errors occur (#2816)
  • Fix XmlException thrown when TextReader.Null is passed to AppConfigGenerator (#2817)
  • Fix case sensitivity issue in NativeMemoryLogParser program name matching (#2795)
  • Fix typo in BuildPlots.R

Internal

  • Replace StyleCop.Analyzers with unstable version for improved analysis (#2796)
  • Add workflow to run selected tests (#2797)
  • Fix flaky MemoryDiagnoser tests on macOS (#2813)
  • Fix x86 disassembler tests for net462 (#2792)
  • Split TimeConsumingBenchmark class to reduce test time
  • Update BenchmarkDotNetDiagnosers package version (#2805)
  • Fix comment in package props about GenerateProgramFile (#2802)

Full Changelog: https://github.com/dotnet/BenchmarkDotNet/compare/v0.15.2...v0.15.3

BenchmarkDotNet v0.15.2 16 Jun 2025 3M

This release improves memory allocation measurement accuracy and adds new features for job ordering and runtime validation.

Features

  • Add JobOrderPolicy option to sort jobs in numeric order instead of ordinal order (#2770)
  • Add RuntimeValidator to detect benchmarks with null runtime configuration (#2771)

Improvements

  • Improve memory diagnoser accuracy with better allocation measurement isolation, warm-up phase, and handling of tiered JIT (#2562)

Bug Fixes

  • Auto-generate unique job IDs between benchmark runs to prevent ID collisions
  • Skip null runtime validation for in-process toolchain (#2780)
  • Fix flaky memory allocation test (#2782)
  • Fix benchmark test adapter enumeration issues (#2766)

Internal

  • Modify macOS runner image for CI (#2775)
  • Add setting to skip test reports when original workflow is cancelled (#2772)
  • Suppress xunit non-serializable data warnings (#2769)
  • Enable --force-clone for docs-fetch in generate-gh-pages workflow
  • Allow workflow_dispatch for publish-nightly workflow
  • Enhance docs-fetch command with additional options
  • Remove docs/_changelog folder from main branch (migrated to docs-changelog branch)

Full Changelog: https://github.com/dotnet/BenchmarkDotNet/compare/v0.15.1...v0.15.2

BenchmarkDotNet v0.15.1 9 Jun 2025 516K

A maintenance release with improved cross-platform compatibility, a new feature for referencing external types in source attributes, and several bug fixes for ARM CPUs and unsupported operating systems.

Features

  • Allow [ArgumentsSource] and [ParamsSource] to reference methods in other types via new constructor overload: [ArgumentsSource(typeof(MyClass), nameof(MyClass.Values))] (#2748)

Bug Fixes

  • Fix WakeLock P/Invoke compatibility with ARM CPUs by refactoring REASON_CONTEXT to use proper union structure (#2745, #2756)
  • Fix Console.CancelKeyPress crash on platforms that don't support it (Android, iOS, tvOS, WASM) (#2739, #2741)
  • Fix CPU detection crash on unsupported operating systems by returning CpuInfo.Unknown (#2740)
  • Support .slnx solution file format when searching for solution files (#2764)

Improvements

  • Bump Perfolizer: 0.5.2 → 0.5.3
  • Make ExporterBase.GetArtifactFullName accessibility modifier more permissive

Internal

  • Update .NET SDK version to 8.0.410 (#2762)
  • Update Microsoft.NET.Test.Sdk and other package dependencies (#2750, #2755)
  • Rework changelog generation to use docs-changelog branch (#93d12c42)
  • Fix line-endings to LF in several files
  • Update GitHub Actions workflows

Full Changelog: https://github.com/dotnet/BenchmarkDotNet/compare/v0.15.0...v0.15.1

BenchmarkDotNet v0.15.0 22 May 2025 675K

BenchmarkDotNet v0.15.0 brings .NET 10 support, a new WakeLock feature to prevent system sleep during benchmarks, improved engine internals for more consistent measurements, and numerous bug fixes and improvements.

Features

  • WakeLock support: New [WakeLock] attribute and --wakeLock CLI option to prevent the system from entering sleep mode while benchmarks are running (#2670)
  • .NET 10 support: Added RuntimeMoniker.Net10, NativeAot10, and Mono10 with full toolchain support (#2642)
  • Box plots in ScottPlotExporter: New box plot visualization for benchmark results with improved font sizing
  • RiscV64 platform support: Added Platform.RiscV64 for RISC-V 64-bit architecture (#2644, #2647)
  • Required properties support: Benchmark classes can now use C# 11 required properties (#2579)
  • HostSignal.AfterProcessStart: New signal allows diagnosers to obtain the process ID of a benchmark process started in suspended state (#2674)
  • Parallel build control: New ConfigOptions.DisableParallelBuild option to force sequential builds (#2725)
  • Auto-hide empty metric columns: ThreadingDiagnoser and ExceptionDiagnoser now support configuration to hide columns when metrics have no values (#2673)
  • Measurements in DiagnoserResults: Custom diagnosers can now access measurements for calculations (#2731)

Improvements

  • Constant stack size engine refactoring: Engine stages refactored to use IEngineStageEvaluator for more consistent instruction location and simpler code (#2688)
  • Use ArtifactsPath instead of IntermediateOutputPath: Improved build artifact handling for SDK 8+ (#2676)
  • InProcessNoEmitRunner NativeAOT support: Basic support for running InProcessNoEmitRunner with NativeAOT (#2702)
  • Allow ParamsAttribute values from derived classes: ParamsAttribute.Values setter is now protected instead of private (#2716)
  • Updated clrmd to 3.1: Disassembler now uses ClrMdV3Disassembler (#2488)
  • Updated ScottPlot to 5.0.54: Plotting exporter updated to latest ScottPlot version (#2709)
  • Perfolizer upgraded to 0.5.2: CPU/OS detection logic moved to Perfolizer with new Perfonar exporters replacing Phd exporters
  • Log warnings for empty benchmarks: Clear warning messages when running benchmarks that match no methods (#2718)
  • Validation for sealed benchmark classes: Compiler now warns when benchmark classes are sealed (#2660)
  • Improved baseline warning message: More descriptive warning when baseline benchmarks are misconfigured (#2650)

Bug Fixes

  • Fix async GlobalSetup/GlobalCleanup with InProcessEmit: Async setup and cleanup methods are now properly awaited (#2109)
  • Fix Windows path too long: Handle Windows MAX_PATH limitations in build paths (#2681)
  • Fix builds with --keepFiles: Include auto-incremented ID in build artifacts directory to avoid conflicts (#2423)
  • Fix Ctrl-C handling: System state (power management, console title) is now properly reverted on process termination (#2483, #2661)
  • Fix dotnet command failure detection: Commands now always fail when dotnet returns non-zero exit code (#2535)
  • Fix deadlock in GetDotNetSdkVersion: Resolved potential deadlock in SDK version detection (#2622)
  • Fix lscpu CPU frequency parsing: Corrected frequency parsing from lscpu output
  • Make lscpu call language-invariant: CPU detection now works correctly regardless of system locale (#2577)
  • Clean up unsupported Native AOT flags: Removed obsolete IlcGenerateCompleteTypeMetadata and updated flag names (#2616)
  • Native AOT projects copy SettingsWeWantToCopy: Build settings are now properly propagated (#2665)

Breaking Changes

  • Removed ConfigCompatibilityValidator: No longer validates config compatibility between runs (#2599)
  • Phd exporters renamed to Perfonar: [PhdExporter][PerfonarExporter], PhdJsonExporterPerfonarJsonExporter, PhdMdExporterPerfonarMdExporter
  • Removed netstandard1.0 target from Annotations package: Minimum target is now netstandard2.0

Documentation

  • Added Visual Studio Profiler documentation with samples (#2672)
  • Added WakeLock documentation and samples (#2670)
  • Fixed URLs in documentation (#2705)
  • Removed obsolete API usage from articles (#2667)
  • Updated console-args.md to use ilcPackages instead of deprecated ilcPath (#2657)
  • Updated good-practices.md (#2618)

Internal

  • Bumped BenchmarkDotNet.Build dependencies
  • Updated dawidd6/action-download-artifact to v6
  • Fixed GitHub workflow for failed test reporting (#2653)
  • Fixed publish-nightly workflow failures (#2695)
  • Removed unnecessary output path properties from csproj templates (#2680)
  • Refactored dotTrace and dotMemory diagnosers into SnapshotProfilerBase
  • Fixed known high severity vulnerabilities in dependencies (#2613)
  • Updated Microsoft.CodeAnalysis.CSharp to 4.12.0 (#2686)
  • Added tests for required properties in InProcess toolchains (#2713)

Full Changelog: https://github.com/dotnet/BenchmarkDotNet/compare/v0.14.0...v0.15.0

BenchmarkDotNet v0.14.0 6 Aug 2024 21M

Full changelog: https://benchmarkdotnet.org/changelog/v0.14.0.html

Highlights

  • Introduce BenchmarkDotNet.Diagnostics.dotMemory #2549: memory allocation profile of your benchmarks using dotMemory, see @BenchmarkDotNet.Samples.IntroDotMemoryDiagnoser
  • Introduce BenchmarkDotNet.Exporters.Plotting #2560: plotting via ScottPlot (initial version)
  • Multiple bugfixes
  • The default build toolchains have been updated to pass IntermediateOutputPath, OutputPath, and OutDir properties to the dotnet build command. This change forces all build outputs to be placed in a new directory generated by BenchmarkDotNet, and fixes many issues that have been reported with builds. You can also access these paths in your own .csproj and .props from those properties if you need to copy custom files to the output.

Bug fixes

  • Fixed multiple build-related bugs including passing MsBuildArguments and .Net 8's UseArtifactsOutput.

Breaking Changes

  • DotNetCliBuilder removed retryFailedBuildWithNoDeps constructor option.
  • DotNetCliCommand removed RetryFailedBuildWithNoDeps property and BuildNoRestoreNoDependencies() and PublishNoBuildAndNoRestore() methods (replaced with PublishNoRestore()).
BenchmarkDotNet v0.13.12 5 Jan 2024 14M

Full changelog: https://benchmarkdotnet.org/changelog/v0.13.12.html

Highlights

The biggest highlight of this release if our new VSTest Adapter, which allows to run benchmarks as unit tests in your favorite IDE! The detailed guide can be found here.

This release also includes to a minor bug fix that caused incorrect job id generation: fixed job id generation (#2491).

Also, the target framework in the BenchmarkDotNet templates was bumped to .NET 8.0.

BenchmarkDotNet v0.13.11 6 Dec 2023 990K

Full changelog: https://benchmarkdotnet.org/changelog/v0.13.11.html

In the v0.13.11 scope, 4 issues were resolved and 8 pull requests were merged. This release includes 28 commits by 7 contributors.

Resolved issues (4)

  • #2060 NativeAOT benchmark started from .Net Framework host doesn't have all intrinsics enabled (assignee: @adamsitnik)
  • #2233 Q: Include hardware counters in XML output (assignee: @nazulg)
  • #2388 Include AVX512 in listed HardwareIntrinsics
  • #2463 Bug. Native AOT .NET 7.0 doesn't work. System.NotSupportedException: X86Serialize (assignee: @adamsitnik)

Merged pull requests (8)

Commits (28)

Contributors (7)

Thank you very much!

BenchmarkDotNet v0.13.10 1 Nov 2023 3M

Full changelog: https://benchmarkdotnet.org/changelog/v0.13.10.html

Highlights

Initial support of .NET 9 and minor bug fixes.

Details

In the v0.13.10 scope, 2 issues were resolved and 3 pull requests were merged. This release includes 10 commits by 4 contributors.

Resolved issues (2)

Merged pull requests (3)

Commits (10)

Contributors (4)

Thank you very much!

BenchmarkDotNet v0.13.9 5 Oct 2023 1M

Full changelog: https://benchmarkdotnet.org/changelog/v0.13.9.html

In the v0.13.9 scope, 3 issues were resolved and 7 pull requests were merged. This release includes 26 commits by 5 contributors.

Resolved issues (3)

Merged pull requests (7)

Commits (26)

Contributors (5)

Thank you very much!

BenchmarkDotNet v0.13.8 8 Sep 2023 2M

Full changelog: https://benchmarkdotnet.org/changelog/v0.13.8.html

Highlights

This release contains important bug fixes.

What's Changed

New Contributors

Full Changelog: https://github.com/dotnet/BenchmarkDotNet/compare/v0.13.7...v0.13.8

BenchmarkDotNet v0.13.7 4 Aug 2023 2M

This release contains a bunch of important bug fixes.

Full changelog: https://benchmarkdotnet.org/changelog/v0.13.7.html

What's Changed

New Contributors

Full Changelog: https://github.com/dotnet/BenchmarkDotNet/compare/v0.13.6...v0.13.7

BenchmarkDotNet v0.13.6 11 Jul 2023 1M

Highlights

  • New BenchmarkDotNet.Diagnostics.dotTrace NuGet package. Once this package is installed, you can annotate your benchmarks with the [DotTraceDiagnoser] and get a dotTrace performance snapshot at the end of the benchmark run. #2328
  • Updated documentation website. We migrated to docfx 2.67 and got the refreshed modern template based on bootstrap 5 with dark/light theme switcher.
  • Updated BenchmarkDotNet.Templates. Multiple issues were resolved, now you can create new benchmark projects from terminal or your favorite IDE. #1658 #1881 #2149 #2338
  • Response file support. Now it's possible to pass additional arguments to BenchmarkDotNet using @filename syntax. #2320 #2348
  • Custom runtime support. #2285
  • Introduce CategoryDiscoverer, see IntroCategoryDiscoverer. #2306 #2307
  • Multiple bug fixes.

Full changelog: https://benchmarkdotnet.org/changelog/v0.13.6.html