v0.22.0
ALMa v0.22.0
One ranker, one truthful score breakdown. Discovery had two scorers stacked on top of each other; the paper card was drawing the wrong one. This release deletes the dead one, puts every surface on the survivor, and rebuilds the Why panel so what you read is what ranked the paper.
Fixed¶
- The score breakdown now explains the score. The card drew nine bars
decomposing a composite the ranker had already discarded, beside a final
score computed from a different feature set with different weights — the bar
and the number were never the same quantity. The panel now renders the
ranker's own decomposition, and the rows sum to the score beside them
exactly. A backend invariant (
Σ family points + Σ adjustments + clipping == final_score) is enforced by tests, so the two can never drift apart again. - The same paper scored differently on different pages. Feed and Online Search used the discarded composite as their real score while Discovery used the family prior. All three now rank through one entry point.
- Explore / Balanced / Exploit did nothing to Discovery ranking. The mode's weight multipliers lived in the dead stage. They now reweight the ranking families, as the control has always claimed.
- Thin metadata no longer counts against a paper. A family with nothing to measure was silently credited a neutral half-weight — so a paper with no journal collected half the venue weight for free, and one with no embedding was scored as though its similarity were mediocre rather than unknown. Unmeasured families are now dropped and the rest rescaled; the panel says which ones were not measured.
- A second, stale score leaked into the UI. Discovery's provenance carried
a
score_pctcomputed before ranking, rendered beside the real one. Removed. - The Discovery table's Score column rendered a 0–100 score as
0.71under a comment claiming the engine normalises to[0,1]. It now matches the meters on the cards. - Illegible breakdown arithmetic. The
(86% × 0.18w)annotation rendered atslate-300on cream — present in the DOM, invisible on screen. - Expanding a breakdown row opened the paper. The click bubbled into the card.
Changed¶
- The Why panel is family-shaped. Ten rows — Semantic, Topic, Retrieval,
Author, Lexical, Recency, Citation, Feedback, Preference, Venue — each
expandable to the raw measurements underneath, with competing measurements
marked
used/lostso a family's value is never unexplained. Colour is identity (which family), never valence. usefulness_boostis deleted. Three of its four atoms were literally the same values the model already read; the fourth,metadata_quality, measured our own hydration completeness rather than the paper — weighting it would have ranked pipeline artifacts.- Multi-source agreement and citation-fabric strength now count. Both were additive bonuses bolted onto the discarded composite, so on Discovery they moved nothing. They are now atoms inside the retrieval and citation families.
- Negative preference moved inside the families. The free-standing 30-point dismissal cluster penalty is retired; rejection now enters as bounded penalty atoms on the semantic and lexical families.
- Settings → Discovery names the families it tunes, so a slider is findable from the row it changed. One slider drives two families (Semantic + Lexical, 70/30) — now stated rather than left to infer.
- One score vocabulary. Five drifted label maps (three frontend, one backend route, one settings card) collapsed into the ranker's own family table; labels and descriptions travel with the payload, so a family cannot be called three different things on three pages.
Docs¶
docs/reference/scoring.mdrewritten around the ten families, their combinators, and the closure invariant.- README refreshed: the surface list matches the real navigation (Insights retired into Library → Analytics some releases ago), a new section explains how ranking works, and all screenshots are current.
Connector¶
alma-connector-0.22.0.xpiattached below (unchanged behavior; version tracks the release).
Upgrading¶
Existing recommendations keep their stored scores until the next refresh, and rows ranked by an older ranker show "no breakdown stored" instead of a wrong one. Feed items rescore on the next Feed refresh. Absolute scores shift with the availability rescaling — ordering is what matters, but the numbers you have seen will move.