The matcher stops trusting what the user can't see
Eric's question cut to the bone: "How would a user know? It matched
wiz-war and that IS the game." The auto looked unanimous because the
matcher discarded the evidence of doubt before anyone saw it — and
worse, BGG's search hides evidence of its own: results truncate
unordered in the several-hundreds (the game named "Dungeon!" appears
in NEITHER the "Dungeon!" nor the "Dungeon" search), and punctuation
can bury matches.
Three matcher changes: every title is searched raw AND depuncted,
merged by id; a name that becomes exact once its trailing
parenthetical is stripped ("Wiz-War (Eighth Edition)") is a sibling
edition — BGG files new editions as separate games — and enters the
candidate set at exact grade, so same-named lineages land in review as
a visible choice; and a LONE candidate must now earn trust (stats
fetched, sibling-grade never autos alone, true exacts must clear the
dominance ownership floor) — closing the fast path both impostors
(.dungeon at 31 owners, then Dungeon (ICP)) walked through.
Recorded outcomes: WIZ-WAR → ambiguous with all three lineages on the
ballot; Dungeon! → ambiguous (its true match is beyond BGG's search
horizon — that's what manual id is for); every legitimate auto in the
fixture set held. And the answer to Eric's second question is now
structural: re-match never re-decides — it demotes to unmatched and
the HUMAN picks from re-search or manual id; the machine only chooses
on first resolve, and it now chooses more humbly.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016jXZFSTZQKzAC8fqpWSz9g
This commit is contained in:
co-authored by
Claude Fable 5
parent
8db69685c4
commit
1dd72d2688
@@ -51,7 +51,20 @@ The first `/collection` call typically returns **HTTP 202** with a "please retry
|
||||
|
||||
## Search & matching heuristics
|
||||
|
||||
1. Exact normalized-name match → strong candidate.
|
||||
0. BGG's search is UNRELIABLE for generic and punctuated queries: results
|
||||
truncate in the several-hundreds unordered (the game named "Dungeon!"
|
||||
appears in neither the "Dungeon!" nor the "Dungeon" search), and
|
||||
punctuation can hide matches. Every title is searched raw AND with
|
||||
punctuation stripped, merged by id. A LONE surviving candidate never
|
||||
auto-matches unless it's a true exact match whose owned-count clears
|
||||
the dominance floor — the sole survivor may be an impostor standing
|
||||
where a famous game should be, and the real match may need review's
|
||||
manual-id entry.
|
||||
1. Exact normalized-name match → strong candidate. A name that becomes
|
||||
exact once its trailing parenthetical is stripped ("Wiz-War (Eighth
|
||||
Edition)") is a SIBLING EDITION — BGG files new editions as separate
|
||||
games — and counts as exact-grade so the choice between lineages
|
||||
reaches review instead of hiding behind a confident auto.
|
||||
2. Fuzzy match: `rapidfuzz` `token_sort_ratio ≥ 90` → good candidate.
|
||||
3. Ties: fetch `/thing?stats=1` for top ~5 candidates; prefer higher owned-count / better BGG rank (well-known game beats obscure duplicate of the same name).
|
||||
- Search results include `boardgameexpansion` as a distinct `type` — keep expansions but tag them so review catches base/expansion confusion.
|
||||
|
||||
Reference in New Issue
Block a user