The real-data era: token live, stubs retired, editions on demand
BGG application approved. The migration the stub markers guarded for weeks: both synthetic caches deleted; tests/fixtures/bgg_cache re-recorded from the live API (recording list extended to every scenario the suite exercises — Civilization truncation, the Sorcerer SPI tiebreak, StarForce, Flat Top's thematic year, Alice Is Missing's rpgitem fallback); resolve --force re-matched all 133 titles for real (109 auto, 6 ambiguous, 18 unmatched, 30 edition ballots); data/STUB_DATA.marker deleted with its exit condition met — the guard mechanism stays armed should stubs ever regenerate. Reality fixed one bug and taught one lesson. The bug: a multi-type search lists an expansion twice (once per matched type) and the parser kept the generic boardgame entry — parse_search now dedupes by id preferring the specific type, which is what keeps expansion tagging (the base-vs-expansion review guard) alive on real data. The lesson: hand-built ambiguity is tidier than the real thing — Wingspan has 46 versions with three plausible English Stonemaier printings, so the suite's synthetic version ids and version_auto expectations became real ballots (assertions updated to recorded reality; the cue-plumbing test keeps its crafted two-version scenario via an injected transport). New: pick edition. A cue-less matched row is version_unknown by design (never guess) — but the owner knows which printing the box is. open_version_ballot() fetches the game's complete version list, cue-scores it when cues exist, and marks the row version_ambiguous so the normal Review edition pass presents it; the Titles page grows the button (Eric's three Wiz-Wars: two cue-less copies can now each claim their edition). 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
15d3120029
commit
59f4b8c43c
+108
-38
@@ -1,40 +1,110 @@
|
||||
[
|
||||
{
|
||||
"title_raw": "Catan",
|
||||
"confidence": "high",
|
||||
"source_photos": ["hand-typed-test-list"]
|
||||
},
|
||||
{
|
||||
"title_raw": "Wingspan",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "Stonemaier Games",
|
||||
"year_hint": 2019,
|
||||
"language_hint": "English",
|
||||
"source_photos": ["hand-typed-test-list"]
|
||||
},
|
||||
{
|
||||
"title_raw": "Wingspan: European Expansion",
|
||||
"confidence": "high",
|
||||
"source_photos": ["hand-typed-test-list"]
|
||||
},
|
||||
{
|
||||
"title_raw": "Wingspan Europe",
|
||||
"confidence": "medium",
|
||||
"source_photos": ["hand-typed-test-list"]
|
||||
},
|
||||
{
|
||||
"title_raw": "Café International",
|
||||
"confidence": "high",
|
||||
"source_photos": ["hand-typed-test-list"]
|
||||
},
|
||||
{
|
||||
"title_raw": "Citadels",
|
||||
"confidence": "high",
|
||||
"source_photos": ["hand-typed-test-list"]
|
||||
},
|
||||
{
|
||||
"title_raw": "Blorvath: Quest of the Zzyzx",
|
||||
"confidence": "low",
|
||||
"source_photos": ["hand-typed-test-list"]
|
||||
}
|
||||
{
|
||||
"title_raw": "Catan",
|
||||
"confidence": "high",
|
||||
"source_photos": [
|
||||
"hand-typed-test-list"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title_raw": "Wingspan",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "Stonemaier Games",
|
||||
"year_hint": 2019,
|
||||
"language_hint": "English",
|
||||
"source_photos": [
|
||||
"hand-typed-test-list"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title_raw": "Wingspan: European Expansion",
|
||||
"confidence": "high",
|
||||
"source_photos": [
|
||||
"hand-typed-test-list"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title_raw": "Wingspan Europe",
|
||||
"confidence": "medium",
|
||||
"source_photos": [
|
||||
"hand-typed-test-list"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title_raw": "Café International",
|
||||
"confidence": "high",
|
||||
"source_photos": [
|
||||
"hand-typed-test-list"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title_raw": "Citadels",
|
||||
"confidence": "high",
|
||||
"source_photos": [
|
||||
"hand-typed-test-list"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title_raw": "Blorvath: Quest of the Zzyzx",
|
||||
"confidence": "low",
|
||||
"source_photos": [
|
||||
"hand-typed-test-list"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title_raw": "CIVILIZATION Game of the Heroic Age - The Dawn of History 8000 BC to 250 BC",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "The Avalon Hill Game Company, Baltimore, Maryland",
|
||||
"edition_hint": "Bookcase Game",
|
||||
"language_hint": "English",
|
||||
"source_photos": [
|
||||
"hand-typed-test-list"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title_raw": "ADVANCED CIVILIZATION Game Expansion of the Heroic Age - Featuring New Civilization, Commodity, and Calamity Cards",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "The Avalon Hill Game Company, Baltimore, Maryland",
|
||||
"edition_hint": "Bookcase Game",
|
||||
"language_hint": "English",
|
||||
"source_photos": [
|
||||
"hand-typed-test-list"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title_raw": "SORCERER The Game of Magical Conflict",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "Simulations Publications Incorporated (SPI)",
|
||||
"edition_hint": "Designer's Edition",
|
||||
"language_hint": "English",
|
||||
"source_photos": [
|
||||
"hand-typed-test-list"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title_raw": "STARFORCE ALPHA CENTAURI Interstellar Conflict in the 25th Century",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "Simulations Publications Incorporated (SPI)",
|
||||
"edition_hint": "Designer's Edition",
|
||||
"language_hint": "English",
|
||||
"source_photos": [
|
||||
"hand-typed-test-list"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title_raw": "FLAT TOP",
|
||||
"confidence": "high",
|
||||
"year_hint": 1942,
|
||||
"language_hint": "English",
|
||||
"source_photos": [
|
||||
"hand-typed-test-list"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title_raw": "ALICE IS MISSING: A SILENT ROLE PLAYING GAME",
|
||||
"confidence": "high",
|
||||
"source_photos": [
|
||||
"hand-typed-test-list"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user