logaritmisk
  • Joined on 2023-10-06
logaritmisk commented on issue logaritmisk/trueskill-tt#26 2026-08-04 20:13:26 +00:00
Test suite has no coverage for degenerate inputs, release-mode behaviour, or non-finite results

Partly done — staying open for property tests and the remaining boundary cases.

Added three integration files, all of which fail against the pre-fix code:

  • tests/degenerate_inputs.rs
logaritmisk commented on issue logaritmisk/trueskill-tt#23 2026-08-04 20:13:12 +00:00
Dead and duplicated code: a stale iterate_to_convergence, a copy-pasted sweep, and #[allow(dead_code)] used as a mute button

Mostly done — staying open for the remainder.

Done:

  1. iterate_to_convergence reads self.convergence instead of its hard-coded epsilon and 20-iteration cap, and is #[cfg(test)] —…
logaritmisk commented on issue logaritmisk/trueskill-tt#21 2026-08-04 20:13:02 +00:00
Public API gaps: predict_outcome panics and is 2-team-only, HistoryBuilder isn't exported, Rating/Index are write-only

Partly done — staying open for the items that are breaking or need a design call.

Done (all additive, no breakage):

  • 2. HistoryBuilder is exported. It was pub but unreachable —…
logaritmisk commented on issue logaritmisk/trueskill-tt#20 2026-08-04 20:12:51 +00:00
Error API: two variants are never constructed, converge() never returns Err, and MismatchedShape is misused for type errors

Partly done — staying open.

Done:

  • WrongOutcomeKind { context, expected, got } added and used at both sites, so the nonsense "expected length 0, got 0" message is gone
  • InferenceError
logaritmisk commented on issue logaritmisk/trueskill-tt#18 2026-08-04 20:12:45 +00:00
Input validation is debug-only, and the History ingestion path bypasses InferenceError entirely

Partly done — staying open.

Now enforced in release, returning InferenceError from the public API:

  • ties with p_draw == 0.0TieWithoutDrawProbability, checked in `add_events_with_p…
logaritmisk commented on issue logaritmisk/trueskill-tt#25 2026-08-04 20:12:32 +00:00
cargo publish would fail: no description, license, or repository — and the crate has no top-level docs

Partly done in 9506fed — staying open for the licence, which is yours to choose.

Added: description, repository, readme, keywords, categories, exclude, and `rust-version =…

logaritmisk commented on issue logaritmisk/trueskill-tt#7 2026-08-04 20:12:26 +00:00
README Todo list and CLAUDE.md architecture section are stale post-redesign

Done in 9e8515b.

CLAUDE.md's architecture section is rewritten against the current src/ layout — the data flow, the modules that replaced Batch/Agent/Player/message.rs, the…

logaritmisk commented on issue logaritmisk/trueskill-tt#24 2026-08-04 20:12:16 +00:00
No CI — nothing verifies builds, tests, feature combinations, or determinism

Added in 9506fed: .gitea/workflows/ci.yml, covering the matrix above — default / approx / approx,rayon / --release, plus clippy with warnings denied, nightly fmt --check, doc tests,…

logaritmisk commented on issue logaritmisk/trueskill-tt#22 2026-08-04 20:12:07 +00:00
Convergence configuration is inconsistent: two different iteration defaults, and converged: false for trivially-converged graphs

Fixed in 6030dc7 — all three.

  1. EpsilonOrMax::default() derives from ConvergenceOptions::default(), so there is one source of truth. Pinned by default_matches_convergence_options.
  2. A…
logaritmisk commented on issue logaritmisk/trueskill-tt#16 2026-08-04 20:11:56 +00:00
learning_curves() is O(n²) because KeyTable::key is a linear scan

Fixed in c088214 and 9e8515b.

KeyTable now keeps a Vec<K> reverse map alongside the HashMap, so key() is an O(1) index rather than a scan over every entry — indices are dense and…

logaritmisk commented on issue logaritmisk/trueskill-tt#15 2026-08-04 20:11:51 +00:00
Hot-path Gaussian arithmetic round-trips through sqrt; convergence deltas computed in moment space

Fixed in 355cdb7 — all three items.

  1. Add, Sub, exclude and forget go through new from_mv(mu, var) and variance(), both pure divisions. No square roots remain in the variance…
logaritmisk commented on issue logaritmisk/trueskill-tt#12 2026-08-04 20:11:38 +00:00
Evidence accumulates as a linear product, so log-evidence underflows to -inf on large games

Fixed in 0f1a1b8. Game, OwnedGame and time_slice::Event carry log_evidence directly, summed over links rather than multiplied then logged.

The per-link value is also floored at `f64::MIN_P…

logaritmisk commented on issue logaritmisk/trueskill-tt#11 2026-08-04 20:11:34 +00:00
History::converge() panics on an empty history (usize underflow)

Fixed in f4e2922. History::iteration returns early when there are no slices, and converge() short-circuits to a zero-iteration converged: true report.

log_evidence(), learning_curves(),…

logaritmisk commented on issue logaritmisk/trueskill-tt#13 2026-08-04 20:11:28 +00:00
rayon path creates multiple aliasing &mut SkillStore through a usize-laundered pointer (UB)

Fixed in 06b6a68 — by removing the unsafe rather than tightening it.

The safety argument was about disjoint elements, which was a hint that the operation is separable rather than merely…

logaritmisk commented on issue logaritmisk/trueskill-tt#9 2026-08-04 20:11:20 +00:00
quality() and predict_quality() panic for anything other than exactly 2 rating groups

Fixed in 0d32690.

All three defects addressed:

  1. The contrast-matrix column counter is gone — the negative block always starts immediately after the positive one, so the second counter was…
logaritmisk commented on issue logaritmisk/trueskill-tt#14 2026-08-04 20:11:08 +00:00
Adding events one at a time is quadratic — 130× slower than batching at n=2000

Fixed in c088214 — but my root-cause analysis above was wrong, and the real cause was a correctness bug, not just a slow path.

Making the coloring lazy changed nothing. Profiling showed 1.5…

logaritmisk commented on issue logaritmisk/trueskill-tt#8 2026-08-04 20:10:59 +00:00
Draws with the default p_draw = 0.0 silently produce NaN skills and report converged: true

Fixed in f4e2922 (merged to main).

Took option 1 — reject — since it implements the intent the debug_assert! already stated. Validation sits in add_events_with_prior, the chokepoint every…

logaritmisk deleted branch refactor from logaritmisk/trueskill-tt 2026-08-04 20:10:43 +00:00
logaritmisk deleted branch v0.2 from logaritmisk/trueskill-tt 2026-08-04 20:10:43 +00:00
logaritmisk pushed to main at logaritmisk/trueskill-tt 2026-08-04 20:10:33 +00:00
9e8515b7cd docs: refresh README and CLAUDE.md; add ingest benchmark
9506fed4b3 chore: add CI, crate metadata, and crate-level documentation
6030dc78de refactor: unify convergence defaults, validate builders, clear dead code
355cdb7e05 perf(gaussian): drop the sqrt round-trip from variance-space operations
06b6a68499 fix(rayon): remove the aliasing unsafe from the parallel sweep
Compare 10 commits »