389 lines
10 KiB
Markdown
389 lines
10 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to this project will be documented in this file.
|
|
|
|
## 0.8.0 - 2026-09-08
|
|
|
|
### Breaking Changes
|
|
|
|
- feat!: make a short fit an error and raise the default iteration cap
|
|
- feat!: validate mu, sigma and beta on HistoryBuilder
|
|
- feat!: add History::register and History::rating, and reject config conflicts across batches
|
|
- fix!: reject non-finite weights at ingestion
|
|
- fix!: reject malformed games at the Game boundary too
|
|
|
|
### Bug Fixes
|
|
|
|
- fix: reject malformed events at the ingestion boundary
|
|
|
|
### Documentation
|
|
|
|
- docs: record the rayon opt-in deviation in spec section 6
|
|
- docs: state what the joint's cost actually scales in
|
|
|
|
### Features
|
|
|
|
- feat: add EventBuilder::members for per-member configuration
|
|
|
|
### Other (unconventional)
|
|
|
|
- Merge branch 'fix/ingestion-shape'
|
|
- Merge branch 'feat/convergence-strictness'
|
|
- Merge branch 'fix/non-finite-weights'
|
|
- Merge branch 'test/close-coverage-gaps'
|
|
- Merge branch 'fix/game-boundary'
|
|
|
|
### Testing
|
|
|
|
- test: cover non-finite results and color-group disjointness
|
|
|
|
## 0.7.0 - 2026-09-08
|
|
|
|
### Features
|
|
|
|
- feat: factorise the joint once with History::joint
|
|
|
|
### Miscellaneous Tasks
|
|
|
|
- chore: Release trueskill-tt version 0.7.0
|
|
|
|
### Other (unconventional)
|
|
|
|
- Merge branch 'feat/joint-handle'
|
|
|
|
## 0.6.0 - 2026-09-08
|
|
|
|
### Breaking Changes
|
|
|
|
- fix!: make the joint span slices, not just the latest one
|
|
|
|
### Miscellaneous Tasks
|
|
|
|
- chore: Release trueskill-tt version 0.6.0
|
|
|
|
## 0.5.0 - 2026-09-08
|
|
|
|
### Breaking Changes
|
|
|
|
- feat!: name the unknown key, expose tail probabilities, flag short fits
|
|
- refactor!: remove the factor-graph surface nothing used, add try_winner
|
|
|
|
### Bug Fixes
|
|
|
|
- fix(test): the ingestion-order property was comparing two truncated fits
|
|
|
|
### Documentation
|
|
|
|
- docs: record that the event log is the source of truth, and why
|
|
|
|
### Features
|
|
|
|
- feat: add UnknownKeys::Prior, and explain why there is no Skip
|
|
- feat: add History::posterior_of for a linear combination of competitors
|
|
- feat: add History::predict_margin for scored matchups
|
|
- feat: add expected_variance_reduction for scored active learning
|
|
|
|
### Miscellaneous Tasks
|
|
|
|
- chore: Release trueskill-tt version 0.5.0
|
|
|
|
### Styling
|
|
|
|
- style: factor the event-pair type out of the reconvergence fixture
|
|
- style: use arrays rather than vec! in the calibration fixture
|
|
|
|
### Testing
|
|
|
|
- test: pin that re-convergence is path-independent
|
|
- test: calibrate the marginals against the exact posterior
|
|
- test: pin what an additive model does to combined uncertainty
|
|
|
|
## 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
|
|
|
|
### Miscellaneous Tasks
|
|
|
|
- chore: Release trueskill-tt version 0.4.2
|
|
|
|
### 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
|
|
|
|
<!-- generated by git-cliff -->
|