Version ballots drop the silent eight-candidate cap

resolve_version truncated the plausible list to eight — a version
ranked ninth was silently unreachable, distinguishable from absent
only by API spelunking. Every plausible version now ships (the ballot
sorts by score, so the tail costs nothing), and version cards gain
"list every printing", wired to the existing open-versions endpoint,
for when even the plausible set doesn't hold the right box — cues can
mislead as well as shortlist.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016jXZFSTZQKzAC8fqpWSz9g
This commit is contained in:
Eric Wagoner
2026-08-05 20:40:05 -04:00
co-authored by Claude Fable 5
parent d4c2bdf92d
commit ab28476741
3 changed files with 17 additions and 8 deletions
+1 -1
View File
@@ -380,7 +380,7 @@ def resolve_version(client: BGGClient, entry: TitleEntry, row: MatchRow) -> None
"languages": list(v.languages),
"score": s,
}
for v, s in plausible[:8]
for v, s in plausible # every plausible version: no silent cap
]
if len(plausible) == 1 or plausible[0][1] > plausible[1][1]:
winner = plausible[0][0]
+9
View File
@@ -103,6 +103,9 @@ function versionCard(row, idx) {
<ol class="cands">${cands}</ol>
<div class="rowactions">
<button class="unknown" title="press u"><kbd>u</kbd> can't tell — leave version unset</button>
<button class="allversions"
title="the cues shortlisted these — fetch every published printing instead">
list every printing</button>
</div>
</div>
</section>`;
@@ -190,6 +193,12 @@ function render() {
decide(b.closest(".card"), "reject"));
m.querySelectorAll(".golocal").forEach(b => b.onclick = () =>
decide(b.closest(".card"), "local"));
m.querySelectorAll(".allversions").forEach(b => b.onclick = () =>
post("/api/open-versions", {
title_raw: b.closest(".card").dataset.title,
source_photos: b.closest(".card").dataset.photos,
row_ix: rowIx(b.closest(".card")),
}));
m.querySelectorAll(".unknown").forEach(b => b.onclick = () =>
version(b.closest(".card"), "unknown"));
m.querySelectorAll(".veto").forEach(b => b.onclick = () =>