Repository navigation
culi v0.5.1 — Excelsa hotfix
Accuracy fix from several days of real use. No schema change; no config change.
The noisy bucket was measuring the wrong thing
It had degenerated into "was ever shown as a pointer".
A single unexpanded pointer is a 0.1 penalty — weighted 0.5 — which beat a zero Positive and tripped Negative > Positive && Negative > 0. That is the identical verdict given to a card the user explicitly rejected at weight 5.
Two measurements condemn it:
28 of 45 penalized cards sat at exactly one penalty
1 expand across 107 pointer injections (~1% base rate)
Non-expansion is the base rate, not evidence. The bucket was punishing precisely the silence that ClassifyEffectiveness's own doc comment promises not to punish — bodies and pointers can help without ever being pulled.
Fix: effNoisyFloor — negative evidence must now exceed 1.0 weighted.
| Evidence | Weighted | Verdict |
|---|---|---|
| One explicit downvote | 5.0 | noisy immediately — the user is speaking |
| Three ignored pointers | ~1.4 | noisy |
| Two ignored pointers | ~1.0 | not noisy |
| One ignored pointer | 0.5 | not noisy |
Strictly greater, so two undecayed penalties (exactly 1.0) land on the same side of the line as two decayed ones — a verdict must not depend on when it was read.
On a live store: noisy 35 → 4, uncertain 164 → 195, helpful unchanged at 4. The four survivors carry three to four sustained ignores each plus real token cost, which is what the bucket was always meant to mean.
Usage attribution no longer credits dead cards
Retired and candidate cards are skipped. Observed for real: a lesson retired for being factually wrong still earned credit, because the session that retired it necessarily quoted it — putting a dead card in the helpful list.
The general self-reference case (a session about a card reads as use of that card) is documented in the code, not solved. It mainly affects people editing culi's own knowledge base.
Upgrading
git pull && make installVerdicts are computed on read, so the corrected buckets appear immediately — no reindex, no migration.