# Changelog All notable changes to this project will be documented in this file. ## 0.4.2 - 2026-09-07 ### Bug Fixes - fix: replace the erfc approximation with libm, for free - fix: route every transcendental through libm, and combine sigmas with hypot ### Testing - test: localise the erfc_inv tail residual to the caller's argument ## 0.4.1 - 2026-09-07 ### Bug Fixes - fix: correct erfc_inv's sign error and keep evidence in log space ### Miscellaneous Tasks - chore: Release trueskill-tt version 0.4.1 ### Testing - test: pin quality()'s N-group closed form, closing the README cross-check ## 0.4.0 - 2026-09-07 ### Breaking Changes - feat!: N-team outcome prediction with draw mass, replacing the 2-team panic - refactor!: close the remaining API gaps from #21 - fix!: apply competitor configuration whenever it is supplied ### Bug Fixes - fix(release): skip the changelog hook during a dry run - fix: stop destroying tail precision in evidence and truncation - fix: reject convergence options that silently disable inference ### Documentation - docs: correct drifted documentation and compile the README in CI ### Features - feat: add expected information gain for active matchup selection - feat: let observers be shared, boxed, or borrowed ### Miscellaneous Tasks - chore: Release trueskill-tt version 0.4.0 ## 0.3.0 - 2026-09-01 ### Breaking Changes - refactor!: make Competitor::message an Option, and compute_elapsed loud - refactor!: replace emptiness-as-sentinel with Option for results and weights - refactor!: remove ConvergenceReport::slices_skipped ### Bug Fixes - fix: enforce EventBuilder weight/team length in release ### Documentation - docs: complete the public API documentation contract ### Features - feat: allow drift to vary per competitor via Member::with_drift_scale ### Miscellaneous Tasks - chore: ignore proptest regression seed files - chore: Release trueskill-tt version 0.3.0 ### Performance - perf: stop cloning inference inputs in OwnedGame and ingestion - perf: make the per-slice SkillStore compact instead of dense ### Testing - test: add property-based tests, a shared finiteness helper, and boundary inputs ## 0.2.0 - 2026-08-27 ### Breaking Changes - refactor!: remove the inert online flag ### Bug Fixes - fix: reject ties without draw probability; never report NaN as converged - fix(quality): support any number of rating groups - fix(evidence): accumulate in log space and floor the per-link value - fix(history): stop reprocessing the slice that was just appended to - fix(rayon): remove the aliasing unsafe from the parallel sweep - fix: close out four small issues and pin #27's repro ### Documentation - docs: refresh README and CLAUDE.md; add ingest benchmark - docs: spec for filtered (forward-only) estimates - docs: implementation plan for filtered estimates - docs: state filtered accessor cost and evidence semantics precisely - docs(cargo): correct the licence note — kellnr does not require one ### Features - feat: add filtered_log_evidence - feat: add filtered learning curves ### Miscellaneous Tasks - chore: add CI, crate metadata, and crate-level documentation - chore: target releases at the private kellnr registry - chore: keep the 48 MB ATP dataset out of the published crate - chore: dual-license MIT OR Apache-2.0 - chore: Release trueskill-tt version 0.2.0 ### Performance - perf(gaussian): drop the sqrt round-trip from variance-space operations ### Refactor - refactor: unify convergence defaults, validate builders, clear dead code ### Styling - style: make NaN rejection explicit in score_sigma validation ### Testing - test: pin the invariants that make filtered estimates trustworthy ## 0.1.2 - 2026-06-12 ### Bug Fixes - fix: release generated CHANGELOG at the wrong location - fix(gaussian): treat non-positive precision as improper in mu()/sigma() ### Documentation - docs: spec for post-T4-MarginFactor tech debt cleanup - docs: implementation plan for post-T4-MarginFactor tech debt cleanup - docs: fix stale numerics in t4-margin-factor plan - docs: spec for game-local Damped EP - docs: implementation plan for game-local Damped EP - docs: spec for History → TimeSlice ConvergenceOptions plumbing - docs: implementation plan for History → TimeSlice plumbing - docs: spec for per-event score_sigma override - docs: implementation plan for per-event score_sigma override ### Features - feat(gaussian): add damp_natural helper for EP damping - feat(convergence): add ConvergenceOptions::alpha damping field - feat(factor): add TruncFactor::propagate_with_alpha for EP damping - feat(factor): add MarginFactor::propagate_with_alpha for EP damping - feat(game): plumb ConvergenceOptions through to run_chain - feat(time_slice): inference callsites read self.convergence - feat(outcome): per-event score_sigma override on Outcome::Scored - feat(event_builder): expose scores_with_sigma fluent method ### Miscellaneous Tasks - chore: Release trueskill-tt version 0.1.2 ### Refactor - refactor: dedupe Game::likelihoods and likelihoods_scored via run_chain - refactor: make BuiltinFactor::log_evidence match exhaustive - refactor(time_slice): add convergence field, rename iterate_to_convergence ### Testing - test(game): integration tests for ConvergenceOptions behavior - test(history): end-to-end ConvergenceOptions propagation tests - test(history): end-to-end per-event score_sigma override tests ## 0.1.1 - 2026-04-27 ### Miscellaneous Tasks - chore: Release trueskill-tt version 0.1.1 ### Other (unconventional) - T0 + T1 + T2: engine redesign through new API surface (#1) - T3: rayon-backed concurrency (opt-in) (#2) - T4 (MarginFactor): scored outcomes via Gaussian-margin EP evidence ## 0.1.0 - 2026-04-23 ### Features - feat: added a Drift trait and a "default" ConstantDrift implementation ### Miscellaneous Tasks - chore: added cliff.toml, release.toml and rustfmt.toml - chore: clean up - chore: make cargo release add CHANGELOG.md before commit - chore: do not publish ### Other (unconventional) - Initial commit. - Begin working on batch. - Passing tests for Batch - Working on History struct. First test is passing. - More test passing for History - Added more functions to History - Remove Display impl, better to use Debug - Use flatten instead of flat_map - Handle case where there is no time - It works, or so it seems - Use PlayerIndex instead of String - Inline a lot of functions - Refactor some code - Refactor some stuff - Port from julia version instead - More things, better things, awesome - More tests, more code - More things, more tests - Fix tests - More tests - More tests - Added builder for History, and start migrating test to use builder instead. - Update test to use builder - Remove unused code - Use and Index struct instead of str and String for player id - Update example so now it works, and thats, well, good - Update test to use assert_ulps_eq - Fixed test - Change time to use i64 instead of u64 - Small change - Clean up example - Update crates and added methods to get a key or all keys in an IndexMap - Added a get function to IndexMap - Agents doens't have to be behind a mutable reference in within_prior - Agents doens't have to be behind a mutable reference in within_priors - Refactor so we can see if there is any way to improve the performance - Fix clippy warning - More refactoring - Remove warnings and refactor some code - Added benchmark for Batch - Added default implementation for TeamMessage - Remove unused mut reference - Make it more rusty - More rustifying - Small refactor - Rename d to diff, and t to team - Added more links to readme - Fix broken link in README - Update crates - Clean up - Dry my eyes - Remove unnecessary allocations - Fix clippy warning - Refactor history - Rename variables - Move stuff around - Added quality function - Make quality a free standing function instead - Improve performance - Change assert to debug_assert - Added todo to readme, and documentation for quality function - Basic test for quality - Ignore temp folder - Update edition - Small changes for new 2024 edition - remove notepad - added benchmark ### Styling - style: cargo fmt