2026-08-11 - 2026-09-11
Overview
10 Releases published by 1 user
Published
v0.9.0
Published
v0.8.0
Published
v0.7.0
Published
v0.6.0
Published
v0.5.0
Published
v0.4.2
Published
v0.4.1
Published
v0.4.0
Published
v0.3.0
Published
v0.2.0
63 Issues closed from 1 user
Closed
#74 InferenceError: stringly-typed discriminators, and #[non_exhaustive] on the enum buys nothing while the variants lack it
Closed
#53 Declarative competitor configuration: HistoryBuilder::default_rating_for
Closed
#52 The joint precision matrix is 0.19% dense and we factorise it densely
Closed
#72 Ergonomics: the first program a new user writes does not compile, and the fix is not discoverable
Closed
#78 predict_* returns Ok on a NaN-poisoned fit, and eight # Errors sections do not match the code
Closed
#75 Vocabulary: "rating" means three things, "sigma" means three things, and "agent" is a fourth word for competitor
Closed
#73 Six exported types are unreachable from History — removing them shrinks the API for free
Closed
#71 Gaussian's operators are EP internals wearing arithmetic's clothes, and / can return a confident wrong number
Closed
#69 Game has no public constructor — every Game::* returns OwnedGame
Closed
#77 Docs: no README quickstart, 112 missing_docs warnings, and the only Joint example does not compile downstream
Closed
#76 History has no Debug, and trait impls are inconsistent across the public value types
Closed
#67 A dropped EventBuilder silently ingests nothing — no #[must_use]
Closed
#70 Accessors disagree on how they report an unknown key, and learning_curve cannot distinguish a typo from a registered competitor
Closed
#66 log_evidence_for silently returns whole-history evidence for an unknown key
Closed
#68 The Time generic is unreachable downstream — Untimed and custom timestamps cannot be used at all
Closed
#65 ConstantDrift(-x) is bit-identical to ConstantDrift(x) — seal the field
Closed
#64 tests/determinism.rs never exercises the parallel sweep it exists to prove
Closed
#62 posterior_of is nondeterministic across processes: float sums over a HashMap
Closed
#63 Three production sites use std transcendentals, and hypot diverges more than the exp case the rule cites
Closed
#60 Truncation 1 - w cancellation gives NaN skills from plausible parameters
Closed
#59 quality() returns 0 then NaN past ~150 groups: a determinant ratio in linear space
Closed
#61 Gaussian::from_ms overflows for tiny sigma, and three constructors still absorb a negative sign silently
Closed
#55 predict_outcome returns probabilities greater than 1: the grid clamps with no detection
Closed
#56 expected_information_gain returns 4.67x its own ln k ceiling
Closed
#57 A tiny non-zero drift returns a posterior variance 12 000x too small, as Ok
Closed
#58 tuple_max erases NaN, so "NaN is never convergence" is a coin flip across processes
Closed
#38 No way to configure a competitor before their first event, and getting it wrong is silent and permanent
Closed
#26 Test suite has no coverage for degenerate inputs, release-mode behaviour, or non-finite results
Closed
#18 Input validation is debug-only, and the History ingestion path bypasses InferenceError entirely
Closed
#50 ITERATIONS = 30 is far too low for a dense history, and overrunning it fails quietly
Closed
#47 A node's reported sigma is ~10x wider than the estimate's measured reproducibility
Closed
#5 Decide whether rayon becomes a default-on feature
Closed
#37 EventBuilder and record_winner/record_draw cannot set prior or drift_scale
Closed
#51 Cache the joint factorisation: repeat posterior_of queries re-pay the full O(n^3) solve
Closed
#46 No joint posterior: anything derived from two or more competitors has to add marginals and overstate its width
Closed
#6 Opt-in synchronous-EP Schedule with snapshot + barrier merge
Closed
#42 The Schedule trait is public API that the engine never uses — wire it into run_chain or make it private
Closed
#20 Error API: two variants are never constructed, converge() never returns Err, and MismatchedShape is misused for type errors
Closed
#49 expected_information_gain is discrete-outcome only, so scored consumers cannot ask "which matchup next?"
Closed
#48 Every predict_* is a ranked outcome — there is no predictive distribution for a SCORE
Closed
#44 UnknownKey reports indices, not the key — and rejecting the whole matchup is easy to swallow into a plausible constant
Closed
#45 Design question: can a fitted History be persisted, or must every consumer replay its whole event log?
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
Closed
#41 erfc is a 1.2e-7 approximation and sets the accuracy floor for the whole crate
Closed
#10 Member::with_prior is silently ignored for competitors the history already knows
Closed
#40 History consumes its Observer with no way to read it back, so every observer needs interior mutability
Closed
#39 No way to ask "which comparison should I run next?" — active-learning / information-gain primitives are absent
Closed
#21 Public API gaps: predict_outcome panics and is 2-team-only, HistoryBuilder isn't exported, Rating/Index are write-only
Closed
#35 Documentation has drifted from the code: four README examples no longer compile
Closed
#36 just release-plan leaves the tree dirty, so just release always aborts
Closed
#34 Allow drift to vary per competitor: Member::with_drift_scale
Closed
#33 ConvergenceReport.slices_skipped is public, always zero, and nothing will ever populate it
Closed
#32 Ingestion discards all convergence state, so appending one event costs a full re-converge
Closed
#4 Cross-slice parallelism: per-slice dirty bits to skip clean slices
Closed
#17 Per-slice SkillStore is dense over the global index space — memory scales with the largest competitor index, not slice size
Closed
#23 Dead and duplicated code: a stale iterate_to_convergence, a copy-pasted sweep, and #[allow(dead_code)] used as a mute button
Closed
#25 cargo publish would fail: no description, license, or repository — and the crate has no top-level docs
Closed
#28 log_evidence_internal's forward flag is only a filtering quantity before convergence
Closed
#31 Skill's compile-time divergence tripwire is only half-enforced
Closed
#30 Spec's tolerance-not-bit-identity caveat for filtered estimates is conservative
Closed
#29 log_evidence takes &mut self but mutates nothing
Closed
#27 converge() panics on a History with no events (usize underflow in iteration())
Closed
#19 HistoryBuilder::online(true) is non-functional — Skill.online is never written
52 Issues created by 1 user
Opened
#27 converge() panics on a History with no events (usize underflow in iteration())
Opened
#28 log_evidence_internal's forward flag is only a filtering quantity before convergence
Opened
#29 log_evidence takes &mut self but mutates nothing
Opened
#30 Spec's tolerance-not-bit-identity caveat for filtered estimates is conservative
Opened
#31 Skill's compile-time divergence tripwire is only half-enforced
Opened
#32 Ingestion discards all convergence state, so appending one event costs a full re-converge
Opened
#33 ConvergenceReport.slices_skipped is public, always zero, and nothing will ever populate it
Opened
#34 Allow drift to vary per competitor: Member::with_drift_scale
Opened
#35 Documentation has drifted from the code: four README examples no longer compile
Opened
#36 just release-plan leaves the tree dirty, so just release always aborts
Opened
#37 EventBuilder and record_winner/record_draw cannot set prior or drift_scale
Opened
#38 No way to configure a competitor before their first event, and getting it wrong is silent and permanent
Opened
#39 No way to ask "which comparison should I run next?" — active-learning / information-gain primitives are absent
Opened
#40 History consumes its Observer with no way to read it back, so every observer needs interior mutability
Opened
#41 erfc is a 1.2e-7 approximation and sets the accuracy floor for the whole crate
Opened
#42 The Schedule trait is public API that the engine never uses — wire it into run_chain or make it private
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
Opened
#44 UnknownKey reports indices, not the key — and rejecting the whole matchup is easy to swallow into a plausible constant
Opened
#45 Design question: can a fitted History be persisted, or must every consumer replay its whole event log?
Opened
#46 No joint posterior: anything derived from two or more competitors has to add marginals and overstate its width
Opened
#47 A node's reported sigma is ~10x wider than the estimate's measured reproducibility
Opened
#48 Every predict_* is a ranked outcome — there is no predictive distribution for a SCORE
Opened
#49 expected_information_gain is discrete-outcome only, so scored consumers cannot ask "which matchup next?"
Opened
#50 ITERATIONS = 30 is far too low for a dense history, and overrunning it fails quietly
Opened
#51 Cache the joint factorisation: repeat posterior_of queries re-pay the full O(n^3) solve
Opened
#52 The joint precision matrix is 0.19% dense and we factorise it densely
Opened
#53 Declarative competitor configuration: HistoryBuilder::default_rating_for
Opened
#54 Benchmark regressions are not gated — baselines are compared by hand
Opened
#55 predict_outcome returns probabilities greater than 1: the grid clamps with no detection
Opened
#56 expected_information_gain returns 4.67x its own ln k ceiling
Opened
#57 A tiny non-zero drift returns a posterior variance 12 000x too small, as Ok
Opened
#58 tuple_max erases NaN, so "NaN is never convergence" is a coin flip across processes
Opened
#59 quality() returns 0 then NaN past ~150 groups: a determinant ratio in linear space
Opened
#60 Truncation 1 - w cancellation gives NaN skills from plausible parameters
Opened
#61 Gaussian::from_ms overflows for tiny sigma, and three constructors still absorb a negative sign silently
Opened
#62 posterior_of is nondeterministic across processes: float sums over a HashMap
Opened
#63 Three production sites use std transcendentals, and hypot diverges more than the exp case the rule cites
Opened
#64 tests/determinism.rs never exercises the parallel sweep it exists to prove
Opened
#65 ConstantDrift(-x) is bit-identical to ConstantDrift(x) — seal the field
Opened
#66 log_evidence_for silently returns whole-history evidence for an unknown key
Opened
#67 A dropped EventBuilder silently ingests nothing — no #[must_use]
Opened
#68 The Time generic is unreachable downstream — Untimed and custom timestamps cannot be used at all
Opened
#69 Game has no public constructor — every Game::* returns OwnedGame
Opened
#70 Accessors disagree on how they report an unknown key, and learning_curve cannot distinguish a typo from a registered competitor
Opened
#71 Gaussian's operators are EP internals wearing arithmetic's clothes, and / can return a confident wrong number
Opened
#72 Ergonomics: the first program a new user writes does not compile, and the fix is not discoverable
Opened
#73 Six exported types are unreachable from History — removing them shrinks the API for free
Opened
#74 InferenceError: stringly-typed discriminators, and #[non_exhaustive] on the enum buys nothing while the variants lack it
Opened
#75 Vocabulary: "rating" means three things, "sigma" means three things, and "agent" is a fourth word for competitor
Opened
#76 History has no Debug, and trait impls are inconsistent across the public value types
Opened
#77 Docs: no README quickstart, 112 missing_docs warnings, and the only Joint example does not compile downstream
Opened
#78 predict_* returns Ok on a NaN-poisoned fit, and eight # Errors sections do not match the code