2026-03-11 - 2026-09-11

Overview

2 Active Pull Requests
76 Active Issues
Excluding merges, 1 author has pushed 108 commits to main and 155 commits to all branches. On main, 106 files have changed and there have been 34007 additions and 3881 deletions.

13 Releases published by 1 user

Published v0.9.0 2026-09-10 05:50:45 +00:00

Published v0.8.0 2026-09-08 19:18:56 +00:00

Published v0.7.0 2026-09-08 08:27:24 +00:00

Published v0.6.0 2026-09-08 04:46:37 +00:00

Published v0.5.0 2026-09-08 00:16:56 +00:00

Published v0.4.2 2026-09-07 20:46:56 +00:00

Published v0.4.1 2026-09-07 19:49:07 +00:00

Published v0.4.0 2026-09-07 13:49:14 +00:00

Published v0.3.0 2026-09-01 04:34:33 +00:00

Published v0.2.0 2026-08-27 15:37:32 +00:00

Published v0.1.2 2026-06-12 20:24:11 +00:00

Published v0.1.1 2026-04-27 07:01:46 +00:00

Published v0.1.0 2026-04-23 18:27:06 +00:00

2 Pull requests merged by 1 user

Merged #2 T3: rayon-backed concurrency (opt-in) 2026-04-24 13:01:01 +00:00

Merged #1 T0 + T1 + T2: engine redesign through new API surface 2026-04-24 11:20:04 +00:00

75 Issues closed from 1 user

Closed #74 InferenceError: stringly-typed discriminators, and #[non_exhaustive] on the enum buys nothing while the variants lack it 2026-09-10 05:31:35 +00:00

Closed #53 Declarative competitor configuration: HistoryBuilder::default_rating_for 2026-09-10 05:17:18 +00:00

Closed #52 The joint precision matrix is 0.19% dense and we factorise it densely 2026-09-10 05:08:22 +00:00

Closed #72 Ergonomics: the first program a new user writes does not compile, and the fix is not discoverable 2026-09-10 04:49:47 +00:00

Closed #78 predict_* returns Ok on a NaN-poisoned fit, and eight # Errors sections do not match the code 2026-09-10 04:40:36 +00:00

Closed #75 Vocabulary: "rating" means three things, "sigma" means three things, and "agent" is a fourth word for competitor 2026-09-09 21:23:17 +00:00

Closed #73 Six exported types are unreachable from History — removing them shrinks the API for free 2026-09-09 21:18:59 +00:00

Closed #71 Gaussian's operators are EP internals wearing arithmetic's clothes, and / can return a confident wrong number 2026-09-09 21:13:14 +00:00

Closed #69 Game has no public constructor — every Game::* returns OwnedGame 2026-09-09 20:55:10 +00:00

Closed #77 Docs: no README quickstart, 112 missing_docs warnings, and the only Joint example does not compile downstream 2026-09-09 19:53:56 +00:00

Closed #76 History has no Debug, and trait impls are inconsistent across the public value types 2026-09-09 19:29:20 +00:00

Closed #67 A dropped EventBuilder silently ingests nothing — no #[must_use] 2026-09-09 19:24:40 +00:00

Closed #70 Accessors disagree on how they report an unknown key, and learning_curve cannot distinguish a typo from a registered competitor 2026-09-09 19:13:42 +00:00

Closed #66 log_evidence_for silently returns whole-history evidence for an unknown key 2026-09-09 19:13:42 +00:00

Closed #68 The Time generic is unreachable downstream — Untimed and custom timestamps cannot be used at all 2026-09-09 18:21:58 +00:00

Closed #65 ConstantDrift(-x) is bit-identical to ConstantDrift(x) — seal the field 2026-09-09 17:14:39 +00:00

Closed #62 posterior_of is nondeterministic across processes: float sums over a HashMap 2026-09-09 16:10:52 +00:00

Closed #63 Three production sites use std transcendentals, and hypot diverges more than the exp case the rule cites 2026-09-09 16:10:52 +00:00

Closed #64 tests/determinism.rs never exercises the parallel sweep it exists to prove 2026-09-09 16:10:52 +00:00

Closed #56 expected_information_gain returns 4.67x its own ln k ceiling 2026-09-09 16:10:51 +00:00

Closed #59 quality() returns 0 then NaN past ~150 groups: a determinant ratio in linear space 2026-09-09 16:10:51 +00:00

Closed #60 Truncation 1 - w cancellation gives NaN skills from plausible parameters 2026-09-09 16:10:51 +00:00

Closed #61 Gaussian::from_ms overflows for tiny sigma, and three constructors still absorb a negative sign silently 2026-09-09 16:10:51 +00:00

Closed #55 predict_outcome returns probabilities greater than 1: the grid clamps with no detection 2026-09-09 16:10:51 +00:00

Closed #57 A tiny non-zero drift returns a posterior variance 12 000x too small, as Ok 2026-09-09 16:10:51 +00:00

Closed #58 tuple_max erases NaN, so "NaN is never convergence" is a coin flip across processes 2026-09-09 16:10:51 +00:00

Closed #38 No way to configure a competitor before their first event, and getting it wrong is silent and permanent 2026-09-08 19:15:49 +00:00

Closed #26 Test suite has no coverage for degenerate inputs, release-mode behaviour, or non-finite results 2026-09-08 19:15:46 +00:00

Closed #18 Input validation is debug-only, and the History ingestion path bypasses InferenceError entirely 2026-09-08 19:15:43 +00:00

Closed #50 ITERATIONS = 30 is far too low for a dense history, and overrunning it fails quietly 2026-09-08 19:01:23 +00:00

Closed #47 A node's reported sigma is ~10x wider than the estimate's measured reproducibility 2026-09-08 17:46:28 +00:00

Closed #5 Decide whether rayon becomes a default-on feature 2026-09-08 13:53:48 +00:00

Closed #37 EventBuilder and record_winner/record_draw cannot set prior or drift_scale 2026-09-08 13:53:48 +00:00

Closed #51 Cache the joint factorisation: repeat posterior_of queries re-pay the full O(n^3) solve 2026-09-08 08:24:46 +00:00

Closed #46 No joint posterior: anything derived from two or more competitors has to add marginals and overstate its width 2026-09-08 04:49:07 +00:00

Closed #6 Opt-in synchronous-EP Schedule with snapshot + barrier merge 2026-09-08 00:18:14 +00:00

Closed #42 The Schedule trait is public API that the engine never uses — wire it into run_chain or make it private 2026-09-08 00:14:48 +00:00

Closed #20 Error API: two variants are never constructed, converge() never returns Err, and MismatchedShape is misused for type errors 2026-09-08 00:14:48 +00:00

Closed #49 expected_information_gain is discrete-outcome only, so scored consumers cannot ask "which matchup next?" 2026-09-08 00:08:36 +00:00

Closed #48 Every predict_* is a ranked outcome — there is no predictive distribution for a SCORE 2026-09-08 00:02:21 +00:00

Closed #44 UnknownKey reports indices, not the key — and rejecting the whole matchup is easy to swallow into a plausible constant 2026-09-07 23:28:54 +00:00

Closed #45 Design question: can a fitted History be persisted, or must every consumer replay its whole event log? 2026-09-07 23:22:33 +00:00

Closed #43 No public way to ask "what is P(skill below x)?" — cdf is pub(crate), so callers approximate it with a z-multiplier 2026-09-07 21:41:11 +00:00

Closed #41 erfc is a 1.2e-7 approximation and sets the accuracy floor for the whole crate 2026-09-07 20:25:11 +00:00

Closed #10 Member::with_prior is silently ignored for competitors the history already knows 2026-09-07 13:42:41 +00:00

Closed #40 History consumes its Observer with no way to read it back, so every observer needs interior mutability 2026-09-07 13:13:35 +00:00

Closed #39 No way to ask "which comparison should I run next?" — active-learning / information-gain primitives are absent 2026-09-07 13:10:54 +00:00

Closed #21 Public API gaps: predict_outcome panics and is 2-team-only, HistoryBuilder isn't exported, Rating/Index are write-only 2026-09-07 12:59:46 +00:00

Closed #35 Documentation has drifted from the code: four README examples no longer compile 2026-09-01 17:32:19 +00:00

Closed #36 just release-plan leaves the tree dirty, so just release always aborts 2026-09-01 17:32:19 +00:00

Closed #34 Allow drift to vary per competitor: Member::with_drift_scale 2026-09-01 04:34:38 +00:00

Closed #33 ConvergenceReport.slices_skipped is public, always zero, and nothing will ever populate it 2026-08-28 06:27:25 +00:00

Closed #32 Ingestion discards all convergence state, so appending one event costs a full re-converge 2026-08-28 06:01:55 +00:00

Closed #4 Cross-slice parallelism: per-slice dirty bits to skip clean slices 2026-08-27 21:50:46 +00:00

Closed #17 Per-slice SkillStore is dense over the global index space — memory scales with the largest competitor index, not slice size 2026-08-27 16:02:16 +00:00

Closed #23 Dead and duplicated code: a stale iterate_to_convergence, a copy-pasted sweep, and #[allow(dead_code)] used as a mute button 2026-08-27 15:50:58 +00:00

Closed #25 cargo publish would fail: no description, license, or repository — and the crate has no top-level docs 2026-08-27 15:43:54 +00:00

Closed #28 log_evidence_internal's forward flag is only a filtering quantity before convergence 2026-08-27 15:22:14 +00:00

Closed #31 Skill's compile-time divergence tripwire is only half-enforced 2026-08-27 15:22:09 +00:00

Closed #30 Spec's tolerance-not-bit-identity caveat for filtered estimates is conservative 2026-08-27 15:22:05 +00:00

Closed #29 log_evidence takes &mut self but mutates nothing 2026-08-27 15:22:02 +00:00

Closed #27 converge() panics on a History with no events (usize underflow in iteration()) 2026-08-27 15:21:59 +00:00

Closed #19 HistoryBuilder::online(true) is non-functional — Skill.online is never written 2026-08-27 15:12:51 +00:00

Closed #7 README Todo list and CLAUDE.md architecture section are stale post-redesign 2026-08-04 20:13:51 +00:00

Closed #24 No CI — nothing verifies builds, tests, feature combinations, or determinism 2026-08-04 20:13:50 +00:00

Closed #16 learning_curves() is O(n²) because KeyTable::key is a linear scan 2026-08-04 20:13:43 +00:00

Closed #22 Convergence configuration is inconsistent: two different iteration defaults, and converged: false for trivially-converged graphs 2026-08-04 20:13:43 +00:00

Closed #15 Hot-path Gaussian arithmetic round-trips through sqrt; convergence deltas computed in moment space 2026-08-04 20:13:42 +00:00

Closed #14 Adding events one at a time is quadratic — 130× slower than batching at n=2000 2026-08-04 20:13:40 +00:00

Closed #13 rayon path creates multiple aliasing &mut SkillStore through a usize-laundered pointer (UB) 2026-08-04 20:13:35 +00:00

Closed #12 Evidence accumulates as a linear product, so log-evidence underflows to -inf on large games 2026-08-04 20:13:34 +00:00

Closed #11 History::converge() panics on an empty history (usize underflow) 2026-08-04 20:13:33 +00:00

Closed #9 quality() and predict_quality() panic for anything other than exactly 2 rating groups 2026-08-04 20:13:32 +00:00

Closed #8 Draws with the default p_draw = 0.0 silently produce NaN skills and report converged: true 2026-08-04 20:13:31 +00:00

Closed #3 converge() returns all-NaN once a time slice exceeds ~75 competitors (regression vs 0.1.0) 2026-06-12 20:26:27 +00:00

76 Issues created by 1 user

Opened #3 converge() returns all-NaN once a time slice exceeds ~75 competitors (regression vs 0.1.0) 2026-06-12 20:26:21 +00:00

Opened #4 Cross-slice parallelism: per-slice dirty bits to skip clean slices 2026-08-04 18:54:08 +00:00

Opened #5 Decide whether rayon becomes a default-on feature 2026-08-04 18:54:20 +00:00

Opened #6 Opt-in synchronous-EP Schedule with snapshot + barrier merge 2026-08-04 18:54:37 +00:00

Opened #7 README Todo list and CLAUDE.md architecture section are stale post-redesign 2026-08-04 18:54:59 +00:00

Opened #8 Draws with the default p_draw = 0.0 silently produce NaN skills and report converged: true 2026-08-04 19:14:12 +00:00

Opened #9 quality() and predict_quality() panic for anything other than exactly 2 rating groups 2026-08-04 19:14:46 +00:00

Opened #10 Member::with_prior is silently ignored for competitors the history already knows 2026-08-04 19:15:05 +00:00

Opened #11 History::converge() panics on an empty history (usize underflow) 2026-08-04 19:15:17 +00:00

Opened #12 Evidence accumulates as a linear product, so log-evidence underflows to -inf on large games 2026-08-04 19:15:38 +00:00

Opened #13 rayon path creates multiple aliasing &mut SkillStore through a usize-laundered pointer (UB) 2026-08-04 19:16:03 +00:00

Opened #14 Adding events one at a time is quadratic — 130× slower than batching at n=2000 2026-08-04 19:16:29 +00:00

Opened #15 Hot-path Gaussian arithmetic round-trips through sqrt; convergence deltas computed in moment space 2026-08-04 19:16:54 +00:00

Opened #16 learning_curves() is O(n²) because KeyTable::key is a linear scan 2026-08-04 19:17:10 +00:00

Opened #17 Per-slice SkillStore is dense over the global index space — memory scales with the largest competitor index, not slice size 2026-08-04 19:18:00 +00:00

Opened #18 Input validation is debug-only, and the History ingestion path bypasses InferenceError entirely 2026-08-04 19:18:55 +00:00

Opened #19 HistoryBuilder::online(true) is non-functional — Skill.online is never written 2026-08-04 19:19:10 +00:00

Opened #20 Error API: two variants are never constructed, converge() never returns Err, and MismatchedShape is misused for type errors 2026-08-04 19:19:30 +00:00

Opened #21 Public API gaps: predict_outcome panics and is 2-team-only, HistoryBuilder isn't exported, Rating/Index are write-only 2026-08-04 19:19:55 +00:00

Opened #22 Convergence configuration is inconsistent: two different iteration defaults, and converged: false for trivially-converged graphs 2026-08-04 19:20:15 +00:00

Opened #23 Dead and duplicated code: a stale iterate_to_convergence, a copy-pasted sweep, and #[allow(dead_code)] used as a mute button 2026-08-04 19:20:44 +00:00

Opened #24 No CI — nothing verifies builds, tests, feature combinations, or determinism 2026-08-04 19:21:02 +00:00

Opened #25 cargo publish would fail: no description, license, or repository — and the crate has no top-level docs 2026-08-04 19:21:19 +00:00

Opened #26 Test suite has no coverage for degenerate inputs, release-mode behaviour, or non-finite results 2026-08-04 19:21:40 +00:00

Opened #27 converge() panics on a History with no events (usize underflow in iteration()) 2026-08-27 13:20:41 +00:00

Opened #28 log_evidence_internal's forward flag is only a filtering quantity before convergence 2026-08-27 14:48:53 +00:00

Opened #29 log_evidence takes &mut self but mutates nothing 2026-08-27 14:48:55 +00:00

Opened #30 Spec's tolerance-not-bit-identity caveat for filtered estimates is conservative 2026-08-27 14:48:59 +00:00

Opened #31 Skill's compile-time divergence tripwire is only half-enforced 2026-08-27 14:59:47 +00:00

Opened #32 Ingestion discards all convergence state, so appending one event costs a full re-converge 2026-08-27 21:50:42 +00:00

Opened #33 ConvergenceReport.slices_skipped is public, always zero, and nothing will ever populate it 2026-08-28 06:02:10 +00:00

Opened #34 Allow drift to vary per competitor: Member::with_drift_scale 2026-09-01 04:11:11 +00:00

Opened #35 Documentation has drifted from the code: four README examples no longer compile 2026-09-01 04:39:07 +00:00

Opened #36 just release-plan leaves the tree dirty, so just release always aborts 2026-09-01 04:39:24 +00:00

Opened #37 EventBuilder and record_winner/record_draw cannot set prior or drift_scale 2026-09-01 17:35:22 +00:00

Opened #38 No way to configure a competitor before their first event, and getting it wrong is silent and permanent 2026-09-01 17:35:46 +00:00

Opened #39 No way to ask "which comparison should I run next?" — active-learning / information-gain primitives are absent 2026-09-07 12:21:22 +00:00

Opened #40 History consumes its Observer with no way to read it back, so every observer needs interior mutability 2026-09-07 13:00:11 +00:00

Opened #41 erfc is a 1.2e-7 approximation and sets the accuracy floor for the whole crate 2026-09-07 13:29:12 +00:00

Opened #42 The Schedule trait is public API that the engine never uses — wire it into run_chain or make it private 2026-09-07 14:02:28 +00:00

Opened #43 No public way to ask "what is P(skill below x)?" — cdf is pub(crate), so callers approximate it with a z-multiplier 2026-09-07 21:20:04 +00:00

Opened #44 UnknownKey reports indices, not the key — and rejecting the whole matchup is easy to swallow into a plausible constant 2026-09-07 21:20:27 +00:00

Opened #45 Design question: can a fitted History be persisted, or must every consumer replay its whole event log? 2026-09-07 21:20:47 +00:00

Opened #46 No joint posterior: anything derived from two or more competitors has to add marginals and overstate its width 2026-09-07 21:26:12 +00:00

Opened #47 A node's reported sigma is ~10x wider than the estimate's measured reproducibility 2026-09-07 21:26:32 +00:00

Opened #48 Every predict_* is a ranked outcome — there is no predictive distribution for a SCORE 2026-09-07 21:26:50 +00:00

Opened #49 expected_information_gain is discrete-outcome only, so scored consumers cannot ask "which matchup next?" 2026-09-07 21:27:06 +00:00

Opened #50 ITERATIONS = 30 is far too low for a dense history, and overrunning it fails quietly 2026-09-07 21:27:19 +00:00

Opened #51 Cache the joint factorisation: repeat posterior_of queries re-pay the full O(n^3) solve 2026-09-08 05:41:29 +00:00

Opened #52 The joint precision matrix is 0.19% dense and we factorise it densely 2026-09-08 05:54:35 +00:00

Opened #53 Declarative competitor configuration: HistoryBuilder::default_rating_for 2026-09-08 19:14:14 +00:00

Opened #54 Benchmark regressions are not gated — baselines are compared by hand 2026-09-08 19:14:31 +00:00

Opened #55 predict_outcome returns probabilities greater than 1: the grid clamps with no detection 2026-09-09 14:50:24 +00:00

Opened #56 expected_information_gain returns 4.67x its own ln k ceiling 2026-09-09 14:50:43 +00:00

Opened #57 A tiny non-zero drift returns a posterior variance 12 000x too small, as Ok 2026-09-09 14:51:05 +00:00

Opened #58 tuple_max erases NaN, so "NaN is never convergence" is a coin flip across processes 2026-09-09 14:51:22 +00:00

Opened #59 quality() returns 0 then NaN past ~150 groups: a determinant ratio in linear space 2026-09-09 14:51:42 +00:00

Opened #60 Truncation 1 - w cancellation gives NaN skills from plausible parameters 2026-09-09 14:52:04 +00:00

Opened #61 Gaussian::from_ms overflows for tiny sigma, and three constructors still absorb a negative sign silently 2026-09-09 14:52:28 +00:00

Opened #62 posterior_of is nondeterministic across processes: float sums over a HashMap 2026-09-09 14:52:50 +00:00

Opened #63 Three production sites use std transcendentals, and hypot diverges more than the exp case the rule cites 2026-09-09 14:53:07 +00:00

Opened #64 tests/determinism.rs never exercises the parallel sweep it exists to prove 2026-09-09 14:53:27 +00:00

Opened #65 ConstantDrift(-x) is bit-identical to ConstantDrift(x) — seal the field 2026-09-09 15:51:36 +00:00

Opened #66 log_evidence_for silently returns whole-history evidence for an unknown key 2026-09-09 17:52:35 +00:00

Opened #67 A dropped EventBuilder silently ingests nothing — no #[must_use] 2026-09-09 17:52:53 +00:00

Opened #68 The Time generic is unreachable downstream — Untimed and custom timestamps cannot be used at all 2026-09-09 17:53:12 +00:00

Opened #69 Game has no public constructor — every Game::* returns OwnedGame 2026-09-09 17:53:30 +00:00

Opened #70 Accessors disagree on how they report an unknown key, and learning_curve cannot distinguish a typo from a registered competitor 2026-09-09 17:53:50 +00:00

Opened #71 Gaussian's operators are EP internals wearing arithmetic's clothes, and / can return a confident wrong number 2026-09-09 17:54:58 +00:00

Opened #72 Ergonomics: the first program a new user writes does not compile, and the fix is not discoverable 2026-09-09 17:55:27 +00:00

Opened #73 Six exported types are unreachable from History — removing them shrinks the API for free 2026-09-09 17:55:48 +00:00

Opened #74 InferenceError: stringly-typed discriminators, and #[non_exhaustive] on the enum buys nothing while the variants lack it 2026-09-09 17:56:14 +00:00

Opened #75 Vocabulary: "rating" means three things, "sigma" means three things, and "agent" is a fourth word for competitor 2026-09-09 17:56:36 +00:00

Opened #76 History has no Debug, and trait impls are inconsistent across the public value types 2026-09-09 17:56:50 +00:00

Opened #77 Docs: no README quickstart, 112 missing_docs warnings, and the only Joint example does not compile downstream 2026-09-09 17:57:17 +00:00

Opened #78 predict_* returns Ok on a NaN-poisoned fit, and eight # Errors sections do not match the code 2026-09-09 17:57:41 +00:00