Same-title copies become tellable apart; wrong autos become fixable

Three split Wiz-Wars meant three identical "Wiz-War" edition cards —
version cards now carry their copy's photo thumbnails and name the
source photo in the prompt, so each ballot says which box it's about.

And the .dungeon-class failure gets its escape hatch: "wrong match" on
any matched Titles row clears the match and returns the title to
Review's unmatched queue, where re-search and manual-id already live.
Help notes the BGG wrinkle that makes this matter for Wiz-War
specifically: early editions and the FFG remake are SEPARATE games, so
a copy whose edition isn't on the ballot belongs to the sibling entry.

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 19:49:19 -04:00
co-authored by Claude Fable 5
parent 42ef34c3a7
commit c5daad023d
9 changed files with 145 additions and 5 deletions
+7 -4
View File
@@ -33,7 +33,7 @@ Herbaceous,195314,Herbaceous,2017,boardgame,auto,,,version_unknown,"[{""bgg_id""
LABYRINTH,1219,Labyrinth,1986,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 1219, ""name"": ""Labyrinth"", ""year"": 1986, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 35117, ""rank"": 2116}, {""bgg_id"": 6546, ""name"": ""Labyrinth"", ""year"": 1940, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 1078, ""rank"": 31020}, {""bgg_id"": 23074, ""name"": ""Labyrinth"", ""year"": 2000, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 63, ""rank"": null}, {""bgg_id"": 24422, ""name"": ""Labyrinth"", ""year"": 2001, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 121, ""rank"": null}, {""bgg_id"": 65696, ""name"": ""Labyrinth"", ""year"": null, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 46, ""rank"": null}]","[{""version_id"": 488621, ""name"": ""English edition 2017"", ""year"": 2017, ""publishers"": [""Ravensburger AG""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 591493, ""name"": ""English/German edition"", ""year"": 2018, ""publishers"": [""Ravensburger AG""], ""languages"": [""English"", ""German""], ""score"": 3}, {""version_id"": 361899, ""name"": ""Multilingual 30th anniversary edition"", ""year"": 2016, ""publishers"": [""Ravensburger AG""], ""languages"": [""English"", ""French"", ""German"", ""Italian""], ""score"": 3}, {""version_id"": 338520, ""name"": ""Multilingual edition"", ""year"": 2017, ""publishers"": [""Ravensburger AG""], ""languages"": [""English"", ""French"", ""German"", ""Italian"", ""Portuguese"", ""Spanish""], ""score"": 3}, {""version_id"": 440013, ""name"": ""Multilingual edition"", ""year"": 2019, ""publishers"": [""Ravensburger AG""], ""languages"": [""Dutch"", ""English"", ""French"", ""German"", ""Italian""], ""score"": 3}, {""version_id"": 487001, ""name"": ""Multilingual edition"", ""year"": 2019, ""publishers"": [""Ravensburger AG""], ""languages"": [""Dutch"", ""English"", ""French"", ""German"", ""Italian"", ""Spanish""], ""score"": 3}, {""version_id"": 571233, ""name"": ""Multilingual edition"", ""year"": 2021, ""publishers"": [""Ravensburger AG""], ""languages"": [""Dutch"", ""English"", ""French"", ""German"", ""Italian"", ""Portuguese"", ""Spanish""], ""score"": 3}, {""version_id"": 630855, ""name"": ""Multilingual edition"", ""year"": 2022, ""publishers"": [""Ravensburger AG""], ""languages"": [""Dutch"", ""English"", ""French"", ""German"", ""Italian"", ""Portuguese"", ""Spanish""], ""score"": 3}]",IMG_4507.jpeg;IMG_4508.jpeg,, LABYRINTH,1219,Labyrinth,1986,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 1219, ""name"": ""Labyrinth"", ""year"": 1986, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 35117, ""rank"": 2116}, {""bgg_id"": 6546, ""name"": ""Labyrinth"", ""year"": 1940, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 1078, ""rank"": 31020}, {""bgg_id"": 23074, ""name"": ""Labyrinth"", ""year"": 2000, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 63, ""rank"": null}, {""bgg_id"": 24422, ""name"": ""Labyrinth"", ""year"": 2001, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 121, ""rank"": null}, {""bgg_id"": 65696, ""name"": ""Labyrinth"", ""year"": null, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 46, ""rank"": null}]","[{""version_id"": 488621, ""name"": ""English edition 2017"", ""year"": 2017, ""publishers"": [""Ravensburger AG""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 591493, ""name"": ""English/German edition"", ""year"": 2018, ""publishers"": [""Ravensburger AG""], ""languages"": [""English"", ""German""], ""score"": 3}, {""version_id"": 361899, ""name"": ""Multilingual 30th anniversary edition"", ""year"": 2016, ""publishers"": [""Ravensburger AG""], ""languages"": [""English"", ""French"", ""German"", ""Italian""], ""score"": 3}, {""version_id"": 338520, ""name"": ""Multilingual edition"", ""year"": 2017, ""publishers"": [""Ravensburger AG""], ""languages"": [""English"", ""French"", ""German"", ""Italian"", ""Portuguese"", ""Spanish""], ""score"": 3}, {""version_id"": 440013, ""name"": ""Multilingual edition"", ""year"": 2019, ""publishers"": [""Ravensburger AG""], ""languages"": [""Dutch"", ""English"", ""French"", ""German"", ""Italian""], ""score"": 3}, {""version_id"": 487001, ""name"": ""Multilingual edition"", ""year"": 2019, ""publishers"": [""Ravensburger AG""], ""languages"": [""Dutch"", ""English"", ""French"", ""German"", ""Italian"", ""Spanish""], ""score"": 3}, {""version_id"": 571233, ""name"": ""Multilingual edition"", ""year"": 2021, ""publishers"": [""Ravensburger AG""], ""languages"": [""Dutch"", ""English"", ""French"", ""German"", ""Italian"", ""Portuguese"", ""Spanish""], ""score"": 3}, {""version_id"": 630855, ""name"": ""Multilingual edition"", ""year"": 2022, ""publishers"": [""Ravensburger AG""], ""languages"": [""Dutch"", ""English"", ""French"", ""German"", ""Italian"", ""Portuguese"", ""Spanish""], ""score"": 3}]",IMG_4507.jpeg;IMG_4508.jpeg,,
Super Mario Checkers Collector's Edition,,,,,local,,,,[],[],IMG_4508.jpeg,, Super Mario Checkers Collector's Edition,,,,,local,,,,[],[],IMG_4508.jpeg,,
Dragon Land,320202,Dragon Land,2020,boardgame,auto,,,version_unknown,"[{""bgg_id"": 320202, ""name"": ""Dragon Land"", ""year"": 2020, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4508.jpeg;IMG_4542.jpeg,, Dragon Land,320202,Dragon Land,2020,boardgame,auto,,,version_unknown,"[{""bgg_id"": 320202, ""name"": ""Dragon Land"", ""year"": 2020, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4508.jpeg;IMG_4542.jpeg,,
Bugs in the Kitchen,137909,Bugs in the Kitchen,2013,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 137909, ""name"": ""Bugs in the Kitchen"", ""year"": 2013, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 280025, ""name"": ""Chinese/English edition"", ""year"": 2014, ""publishers"": [""Ravensburger AG""], ""languages"": [""Chinese"", ""English""], ""score"": 3}, {""version_id"": 751514, ""name"": ""English edition 2024"", ""year"": 2024, ""publishers"": [""Ravensburger AG""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 216474, ""name"": ""English first edition"", ""year"": 2013, ""publishers"": [""Ravensburger AG""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 435117, ""name"": ""English second edition"", ""year"": 2018, ""publishers"": [""Ravensburger AG""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 212273, ""name"": ""Multilingual EN/FR/DE/IT/NE/SP"", ""year"": 2013, ""publishers"": [""Ravensburger AG""], ""languages"": [""Dutch"", ""English"", ""French"", ""German"", ""Italian"", ""Spanish""], ""score"": 3}, {""version_id"": 260936, ""name"": ""French first edition"", ""year"": 2013, ""publishers"": [""Ravensburger AG""], ""languages"": [""French""], ""score"": 2}, {""version_id"": 726152, ""name"": ""German edition 2024"", ""year"": 2024, ""publishers"": [""Ravensburger AG""], ""languages"": [""German""], ""score"": 2}, {""version_id"": 199002, ""name"": ""German first edition"", ""year"": 2013, ""publishers"": [""Ravensburger AG""], ""languages"": [""German""], ""score"": 2}]",IMG_4508.jpeg;IMG_4545.jpeg,, Bugs in the Kitchen,137909,Bugs in the Kitchen,2013,boardgame,auto,216474,English first edition,version_approved,"[{""bgg_id"": 137909, ""name"": ""Bugs in the Kitchen"", ""year"": 2013, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 280025, ""name"": ""Chinese/English edition"", ""year"": 2014, ""publishers"": [""Ravensburger AG""], ""languages"": [""Chinese"", ""English""], ""score"": 3}, {""version_id"": 751514, ""name"": ""English edition 2024"", ""year"": 2024, ""publishers"": [""Ravensburger AG""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 216474, ""name"": ""English first edition"", ""year"": 2013, ""publishers"": [""Ravensburger AG""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 435117, ""name"": ""English second edition"", ""year"": 2018, ""publishers"": [""Ravensburger AG""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 212273, ""name"": ""Multilingual EN/FR/DE/IT/NE/SP"", ""year"": 2013, ""publishers"": [""Ravensburger AG""], ""languages"": [""Dutch"", ""English"", ""French"", ""German"", ""Italian"", ""Spanish""], ""score"": 3}, {""version_id"": 260936, ""name"": ""French first edition"", ""year"": 2013, ""publishers"": [""Ravensburger AG""], ""languages"": [""French""], ""score"": 2}, {""version_id"": 726152, ""name"": ""German edition 2024"", ""year"": 2024, ""publishers"": [""Ravensburger AG""], ""languages"": [""German""], ""score"": 2}, {""version_id"": 199002, ""name"": ""German first edition"", ""year"": 2013, ""publishers"": [""Ravensburger AG""], ""languages"": [""German""], ""score"": 2}]",IMG_4508.jpeg;IMG_4545.jpeg,,
CATAN DICE GAME,27710,Catan Dice Game,2007,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 27710, ""name"": ""Catan Dice Game"", ""year"": 2007, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 606657, ""name"": ""English edition 2018"", ""year"": 2018, ""publishers"": [""Catan Studio""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 565571, ""name"": ""English edition 2020"", ""year"": 2020, ""publishers"": [""Catan Studio""], ""languages"": [""English""], ""score"": 3}]",IMG_4509.jpeg,, CATAN DICE GAME,27710,Catan Dice Game,2007,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 27710, ""name"": ""Catan Dice Game"", ""year"": 2007, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 606657, ""name"": ""English edition 2018"", ""year"": 2018, ""publishers"": [""Catan Studio""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 565571, ""name"": ""English edition 2020"", ""year"": 2020, ""publishers"": [""Catan Studio""], ""languages"": [""English""], ""score"": 3}]",IMG_4509.jpeg,,
Castle Panic THE DARK TITAN,169784,Castle Panic: The Dark Titan,2015,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 169784, ""name"": ""Castle Panic: The Dark Titan"", ""year"": 2015, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 260454, ""name"": ""English first edition"", ""year"": 2015, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 624505, ""name"": ""English second edition"", ""year"": 2023, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}]",IMG_4509.jpeg,, Castle Panic THE DARK TITAN,169784,Castle Panic: The Dark Titan,2015,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 169784, ""name"": ""Castle Panic: The Dark Titan"", ""year"": 2015, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 260454, ""name"": ""English first edition"", ""year"": 2015, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 624505, ""name"": ""English second edition"", ""year"": 2023, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}]",IMG_4509.jpeg,,
Jenga,2452,Jenga,1983,boardgame,auto,,,version_unknown,"[{""bgg_id"": 2452, ""name"": ""Jenga"", ""year"": 1983, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4509.jpeg,, Jenga,2452,Jenga,1983,boardgame,auto,,,version_unknown,"[{""bgg_id"": 2452, ""name"": ""Jenga"", ""year"": 1983, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4509.jpeg,,
@@ -49,7 +49,7 @@ Kensington,2197,Kensington,1979,boardgame,auto,,,version_unknown,"[{""bgg_id"":
Guillotine,116,Guillotine,1998,boardgame,auto,,,version_unknown,"[{""bgg_id"": 116, ""name"": ""Guillotine"", ""year"": 1998, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 34783, ""rank"": 1630}, {""bgg_id"": 11629, ""name"": ""Guillotine"", ""year"": 1983, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 87, ""rank"": 18073}, {""bgg_id"": 27373, ""name"": ""Guillotine"", ""year"": 1987, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 163, ""rank"": 19576}]",[],IMG_4512.jpeg,, Guillotine,116,Guillotine,1998,boardgame,auto,,,version_unknown,"[{""bgg_id"": 116, ""name"": ""Guillotine"", ""year"": 1998, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 34783, ""rank"": 1630}, {""bgg_id"": 11629, ""name"": ""Guillotine"", ""year"": 1983, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 87, ""rank"": 18073}, {""bgg_id"": 27373, ""name"": ""Guillotine"", ""year"": 1987, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 163, ""rank"": 19576}]",[],IMG_4512.jpeg,,
THE DOOM THAT CAME TO ATLANTIC CITY,124548,The Doom That Came to Atlantic City,2013,boardgame,auto,,,version_unknown,"[{""bgg_id"": 124548, ""name"": ""The Doom That Came to Atlantic City"", ""year"": 2013, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4513.jpeg,, THE DOOM THAT CAME TO ATLANTIC CITY,124548,The Doom That Came to Atlantic City,2013,boardgame,auto,,,version_unknown,"[{""bgg_id"": 124548, ""name"": ""The Doom That Came to Atlantic City"", ""year"": 2013, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4513.jpeg,,
Flick'em UP!,169124,Flick 'em Up!,2015,boardgame,auto,,,version_unknown,"[{""bgg_id"": 169124, ""name"": ""Flick 'em Up!"", ""year"": 2015, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4513.jpeg,, Flick'em UP!,169124,Flick 'em Up!,2015,boardgame,auto,,,version_unknown,"[{""bgg_id"": 169124, ""name"": ""Flick 'em Up!"", ""year"": 2015, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4513.jpeg,,
Castle Panic,43443,Castle Panic,2009,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 43443, ""name"": ""Castle Panic"", ""year"": 2009, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 468123, ""name"": ""English edition, eighteenth printing"", ""year"": 2018, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 222131, ""name"": ""English edition, eighth printing"", ""year"": 2013, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 265959, ""name"": ""English edition, eleventh printing"", ""year"": 2014, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 343185, ""name"": ""English edition, fifteenth printing"", ""year"": 2016, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 169933, ""name"": ""English edition, fifth printing"", ""year"": 2012, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 24624, ""name"": ""English edition, first printing"", ""year"": 2009, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 337551, ""name"": ""English edition, fourteenth printing"", ""year"": 2016, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 103068, ""name"": ""English edition, fourth printing"", ""year"": 2010, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}]",IMG_4513.jpeg,, Castle Panic,43443,Castle Panic,2009,boardgame,auto,103068,"English edition, fourth printing",version_approved,"[{""bgg_id"": 43443, ""name"": ""Castle Panic"", ""year"": 2009, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 468123, ""name"": ""English edition, eighteenth printing"", ""year"": 2018, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 222131, ""name"": ""English edition, eighth printing"", ""year"": 2013, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 265959, ""name"": ""English edition, eleventh printing"", ""year"": 2014, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 343185, ""name"": ""English edition, fifteenth printing"", ""year"": 2016, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 169933, ""name"": ""English edition, fifth printing"", ""year"": 2012, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 24624, ""name"": ""English edition, first printing"", ""year"": 2009, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 337551, ""name"": ""English edition, fourteenth printing"", ""year"": 2016, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 103068, ""name"": ""English edition, fourth printing"", ""year"": 2010, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 3}]",IMG_4513.jpeg,,
The Red Dragon Inn,24310,The Red Dragon Inn,2007,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 24310, ""name"": ""The Red Dragon Inn"", ""year"": 2007, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 16870, ""rank"": 2164}, {""bgg_id"": 33451, ""name"": ""The Red Dragon Inn 2"", ""year"": 2008, ""type"": ""boardgame"", ""exact"": false, ""fuzzy"": 93.3, ""owned"": 8355, ""rank"": 2056}, {""bgg_id"": 66510, ""name"": ""The Red Dragon Inn 3"", ""year"": 2011, ""type"": ""boardgame"", ""exact"": false, ""fuzzy"": 93.3, ""owned"": 6246, ""rank"": 2363}, {""bgg_id"": 142402, ""name"": ""The Red Dragon Inn 4"", ""year"": 2013, ""type"": ""boardgame"", ""exact"": false, ""fuzzy"": 93.3, ""owned"": 4107, ""rank"": 3367}, {""bgg_id"": 455834, ""name"": ""The Red Dragon Inn 10"", ""year"": 2026, ""type"": ""boardgame"", ""exact"": false, ""fuzzy"": 90.3, ""owned"": 162, ""rank"": null}]","[{""version_id"": 400341, ""name"": ""English eighth edition"", ""year"": 2017, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 620786, ""name"": ""English eleventh edition"", ""year"": 2021, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 762888, ""name"": ""English fifteenth edition"", ""year"": 2024, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 374258, ""name"": ""English fifth edition"", ""year"": 2012, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 33932, ""name"": ""English first edition"", ""year"": 2007, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 728027, ""name"": ""English fourteenth edition"", ""year"": 2023, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 312374, ""name"": ""English seventh edition"", ""year"": 2015, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 389768, ""name"": ""English sixth edition"", ""year"": 2014, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 3}]",IMG_4514.jpeg,, The Red Dragon Inn,24310,The Red Dragon Inn,2007,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 24310, ""name"": ""The Red Dragon Inn"", ""year"": 2007, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 16870, ""rank"": 2164}, {""bgg_id"": 33451, ""name"": ""The Red Dragon Inn 2"", ""year"": 2008, ""type"": ""boardgame"", ""exact"": false, ""fuzzy"": 93.3, ""owned"": 8355, ""rank"": 2056}, {""bgg_id"": 66510, ""name"": ""The Red Dragon Inn 3"", ""year"": 2011, ""type"": ""boardgame"", ""exact"": false, ""fuzzy"": 93.3, ""owned"": 6246, ""rank"": 2363}, {""bgg_id"": 142402, ""name"": ""The Red Dragon Inn 4"", ""year"": 2013, ""type"": ""boardgame"", ""exact"": false, ""fuzzy"": 93.3, ""owned"": 4107, ""rank"": 3367}, {""bgg_id"": 455834, ""name"": ""The Red Dragon Inn 10"", ""year"": 2026, ""type"": ""boardgame"", ""exact"": false, ""fuzzy"": 90.3, ""owned"": 162, ""rank"": null}]","[{""version_id"": 400341, ""name"": ""English eighth edition"", ""year"": 2017, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 620786, ""name"": ""English eleventh edition"", ""year"": 2021, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 762888, ""name"": ""English fifteenth edition"", ""year"": 2024, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 374258, ""name"": ""English fifth edition"", ""year"": 2012, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 33932, ""name"": ""English first edition"", ""year"": 2007, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 728027, ""name"": ""English fourteenth edition"", ""year"": 2023, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 312374, ""name"": ""English seventh edition"", ""year"": 2015, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 389768, ""name"": ""English sixth edition"", ""year"": 2014, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 3}]",IMG_4514.jpeg,,
Dixit,39856,Dixit,2008,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 39856, ""name"": ""Dixit"", ""year"": 2008, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 482308, ""name"": ""Afrikaans/English edition"", ""year"": 2019, ""publishers"": [""Libellud""], ""languages"": [""Afrikaans"", ""English""], ""score"": 3}, {""version_id"": 488774, ""name"": ""Arabic/English edition"", ""year"": 2019, ""publishers"": [""Boardgame Space"", ""Libellud""], ""languages"": [""Arabic"", ""English""], ""score"": 3}, {""version_id"": 296529, ""name"": ""Asmodee/Libellud English edition 2015"", ""year"": 2015, ""publishers"": [""Libellud""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 160064, ""name"": ""English edition 2011"", ""year"": 2011, ""publishers"": [""Libellud""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 193872, ""name"": ""English edition 2012"", ""year"": 2012, ""publishers"": [""Libellud""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 241272, ""name"": ""English edition 2013"", ""year"": 2013, ""publishers"": [""Libellud""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 256721, ""name"": ""English edition 2014"", ""year"": 2014, ""publishers"": [""Libellud""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 273210, ""name"": ""English edition 2014"", ""year"": 2014, ""publishers"": [""Libellud""], ""languages"": [""English""], ""score"": 3}]",IMG_4514.jpeg,, Dixit,39856,Dixit,2008,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 39856, ""name"": ""Dixit"", ""year"": 2008, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 482308, ""name"": ""Afrikaans/English edition"", ""year"": 2019, ""publishers"": [""Libellud""], ""languages"": [""Afrikaans"", ""English""], ""score"": 3}, {""version_id"": 488774, ""name"": ""Arabic/English edition"", ""year"": 2019, ""publishers"": [""Boardgame Space"", ""Libellud""], ""languages"": [""Arabic"", ""English""], ""score"": 3}, {""version_id"": 296529, ""name"": ""Asmodee/Libellud English edition 2015"", ""year"": 2015, ""publishers"": [""Libellud""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 160064, ""name"": ""English edition 2011"", ""year"": 2011, ""publishers"": [""Libellud""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 193872, ""name"": ""English edition 2012"", ""year"": 2012, ""publishers"": [""Libellud""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 241272, ""name"": ""English edition 2013"", ""year"": 2013, ""publishers"": [""Libellud""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 256721, ""name"": ""English edition 2014"", ""year"": 2014, ""publishers"": [""Libellud""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 273210, ""name"": ""English edition 2014"", ""year"": 2014, ""publishers"": [""Libellud""], ""languages"": [""English""], ""score"": 3}]",IMG_4514.jpeg,,
Huggermugger,2387,Huggermugger,1989,boardgame,auto,,,version_unknown,"[{""bgg_id"": 2387, ""name"": ""Huggermugger"", ""year"": 1989, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4514.jpeg,, Huggermugger,2387,Huggermugger,1989,boardgame,auto,,,version_unknown,"[{""bgg_id"": 2387, ""name"": ""Huggermugger"", ""year"": 1989, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4514.jpeg,,
@@ -120,7 +120,7 @@ ALICE IS MISSING A SILENT ROLE PLAYING GAME,,,,,local,,,,[],[],IMG_4566.jpeg,,
ETHERFIELDS KITTENBURG EXPANSION,358880,Etherfields: Kittenburg Expansion,2022,boardgame,auto,603694,English edition,version_auto,"[{""bgg_id"": 358880, ""name"": ""Etherfields: Kittenburg Expansion"", ""year"": 2022, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 603694, ""name"": ""English edition"", ""year"": 2022, ""publishers"": [""Awaken Realms""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 709658, ""name"": ""Polish edition"", ""year"": 2022, ""publishers"": [""Awaken Realms""], ""languages"": [""Polish""], ""score"": 2}, {""version_id"": 699892, ""name"": ""Spanish edition"", ""year"": 2022, ""publishers"": [""Awaken Realms""], ""languages"": [""Spanish""], ""score"": 2}]",IMG_4570.jpeg,, ETHERFIELDS KITTENBURG EXPANSION,358880,Etherfields: Kittenburg Expansion,2022,boardgame,auto,603694,English edition,version_auto,"[{""bgg_id"": 358880, ""name"": ""Etherfields: Kittenburg Expansion"", ""year"": 2022, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 603694, ""name"": ""English edition"", ""year"": 2022, ""publishers"": [""Awaken Realms""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 709658, ""name"": ""Polish edition"", ""year"": 2022, ""publishers"": [""Awaken Realms""], ""languages"": [""Polish""], ""score"": 2}, {""version_id"": 699892, ""name"": ""Spanish edition"", ""year"": 2022, ""publishers"": [""Awaken Realms""], ""languages"": [""Spanish""], ""score"": 2}]",IMG_4570.jpeg,,
Parsely,258849,Parsely,2018,rpgitem,auto,,,version_unknown,"[{""bgg_id"": 258849, ""name"": ""Parsely"", ""year"": 2018, ""type"": ""rpgitem"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4573.jpeg,, Parsely,258849,Parsely,2018,rpgitem,auto,,,version_unknown,"[{""bgg_id"": 258849, ""name"": ""Parsely"", ""year"": 2018, ""type"": ""rpgitem"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4573.jpeg,,
"...and then, we held hands.",153999,"...and then, we held hands.",2015,boardgame,auto,280845,English edition,version_auto,"[{""bgg_id"": 153999, ""name"": ""...and then, we held hands."", ""year"": 2015, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 280845, ""name"": ""English edition"", ""year"": 2015, ""publishers"": [""LudiCreations""], ""languages"": [""English""], ""score"": 3}]",image.jpg,, "...and then, we held hands.",153999,"...and then, we held hands.",2015,boardgame,auto,280845,English edition,version_auto,"[{""bgg_id"": 153999, ""name"": ""...and then, we held hands."", ""year"": 2015, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 280845, ""name"": ""English edition"", ""year"": 2015, ""publishers"": [""LudiCreations""], ""languages"": [""English""], ""score"": 3}]",image.jpg,,
Consentacle,166976,Consentacle,2014,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 166976, ""name"": ""Consentacle"", ""year"": 2014, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 410382, ""name"": ""English Kickstarter edition"", ""year"": 2018, ""publishers"": [""(Self-Published)""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 596756, ""name"": ""English Print-and-Play edition"", ""year"": 2018, ""publishers"": [""(Self-Published)""], ""languages"": [""English""], ""score"": 3}]",shelf-20260803-171316.jpg,, Consentacle,166976,Consentacle,2014,boardgame,auto,410382,English Kickstarter edition,version_approved,"[{""bgg_id"": 166976, ""name"": ""Consentacle"", ""year"": 2014, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 410382, ""name"": ""English Kickstarter edition"", ""year"": 2018, ""publishers"": [""(Self-Published)""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 596756, ""name"": ""English Print-and-Play edition"", ""year"": 2018, ""publishers"": [""(Self-Published)""], ""languages"": [""English""], ""score"": 3}]",shelf-20260803-171316.jpg,,
The Simpsons Trivia Game,2980,The Simpsons Trivia Game,2000,boardgame,auto,,,version_unknown,"[{""bgg_id"": 2980, ""name"": ""The Simpsons Trivia Game"", ""year"": 2000, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 786, ""rank"": 30823}, {""bgg_id"": 16343, ""name"": ""The Simpsons 2 Trivia Game"", ""year"": 2001, ""type"": ""boardgame"", ""exact"": false, ""fuzzy"": 95.2, ""owned"": 76, ""rank"": null}]",[],shelf-20260803-213735.jpg,, The Simpsons Trivia Game,2980,The Simpsons Trivia Game,2000,boardgame,auto,,,version_unknown,"[{""bgg_id"": 2980, ""name"": ""The Simpsons Trivia Game"", ""year"": 2000, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 786, ""rank"": 30823}, {""bgg_id"": 16343, ""name"": ""The Simpsons 2 Trivia Game"", ""year"": 2001, ""type"": ""boardgame"", ""exact"": false, ""fuzzy"": 95.2, ""owned"": 76, ""rank"": null}]",[],shelf-20260803-213735.jpg,,
THE CAT GAME,231302,The Cat Game,2017,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 231302, ""name"": ""The Cat Game"", ""year"": 2017, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 361880, ""name"": ""English/French edition"", ""year"": 2017, ""publishers"": [""Spin Master Ltd.""], ""languages"": [""English"", ""French""], ""score"": 2}, {""version_id"": 433263, ""name"": ""German edition"", ""year"": 0, ""publishers"": [""Spin Master Ltd.""], ""languages"": [""German""], ""score"": 2}]",shelf-20260803-213756.jpg,, THE CAT GAME,231302,The Cat Game,2017,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 231302, ""name"": ""The Cat Game"", ""year"": 2017, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 361880, ""name"": ""English/French edition"", ""year"": 2017, ""publishers"": [""Spin Master Ltd.""], ""languages"": [""English"", ""French""], ""score"": 2}, {""version_id"": 433263, ""name"": ""German edition"", ""year"": 0, ""publishers"": [""Spin Master Ltd.""], ""languages"": [""German""], ""score"": 2}]",shelf-20260803-213756.jpg,,
BLINK,1197,Blink,1995,boardgame,auto,,,version_unknown,"[{""bgg_id"": 1197, ""name"": ""Blink"", ""year"": 1995, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 6143, ""rank"": 6149}, {""bgg_id"": 185341, ""name"": ""Blink!"", ""year"": 2015, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 111, ""rank"": null}, {""bgg_id"": 15852, ""name"": ""Blinki"", ""year"": 1910, ""type"": ""boardgame"", ""exact"": false, ""fuzzy"": 90.9, ""owned"": 106, ""rank"": 30046}]",[],shelf-20260803-215650.jpg,, BLINK,1197,Blink,1995,boardgame,auto,,,version_unknown,"[{""bgg_id"": 1197, ""name"": ""Blink"", ""year"": 1995, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 6143, ""rank"": 6149}, {""bgg_id"": 185341, ""name"": ""Blink!"", ""year"": 2015, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 111, ""rank"": null}, {""bgg_id"": 15852, ""name"": ""Blinki"", ""year"": 1910, ""type"": ""boardgame"", ""exact"": false, ""fuzzy"": 90.9, ""owned"": 106, ""rank"": 30046}]",[],shelf-20260803-215650.jpg,,
@@ -128,7 +128,10 @@ The Office Trivia Game,352819,The Office Trivia Game,2019,boardgame,approved,,,v
Patchwork,163412,Patchwork,2014,boardgame,auto,,,version_unknown,"[{""bgg_id"": 163412, ""name"": ""Patchwork"", ""year"": 2014, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 124114, ""rank"": 148}, {""bgg_id"": 41585, ""name"": ""Patchwork"", ""year"": 2009, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 473, ""rank"": 14984}]",[],IMG_4501.jpeg,, Patchwork,163412,Patchwork,2014,boardgame,auto,,,version_unknown,"[{""bgg_id"": 163412, ""name"": ""Patchwork"", ""year"": 2014, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 124114, ""rank"": 148}, {""bgg_id"": 41585, ""name"": ""Patchwork"", ""year"": 2009, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 473, ""rank"": 14984}]",[],IMG_4501.jpeg,,
MANTIS FALLS,291847,Mantis Falls,2021,boardgame,auto,,,version_unknown,"[{""bgg_id"": 291847, ""name"": ""Mantis Falls"", ""year"": 2021, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4505.jpeg,, MANTIS FALLS,291847,Mantis Falls,2021,boardgame,auto,,,version_unknown,"[{""bgg_id"": 291847, ""name"": ""Mantis Falls"", ""year"": 2021, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4505.jpeg,,
SMALL WORLD,40692,Small World,2009,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 40692, ""name"": ""Small World"", ""year"": 2009, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 488854, ""name"": ""English edition 2019"", ""year"": 2019, ""publishers"": [""Days of Wonder""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 23936, ""name"": ""English first edition"", ""year"": 2009, ""publishers"": [""Days of Wonder""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 174280, ""name"": ""English second edition"", ""year"": 2010, ""publishers"": [""Days of Wonder""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 294178, ""name"": ""English third edition"", ""year"": 2012, ""publishers"": [""Days of Wonder""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 478262, ""name"": ""Chinese edition"", ""year"": 2018, ""publishers"": [""Days of Wonder""], ""languages"": [""Chinese""], ""score"": 2}, {""version_id"": 24053, ""name"": ""Dutch edition"", ""year"": 2009, ""publishers"": [""Days of Wonder""], ""languages"": [""Dutch""], ""score"": 2}, {""version_id"": 73633, ""name"": ""French first edition"", ""year"": 2009, ""publishers"": [""Days of Wonder""], ""languages"": [""French""], ""score"": 2}, {""version_id"": 287468, ""name"": ""French second edition"", ""year"": 2010, ""publishers"": [""Days of Wonder""], ""languages"": [""French""], ""score"": 2}]",IMG_4513.jpeg,, SMALL WORLD,40692,Small World,2009,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 40692, ""name"": ""Small World"", ""year"": 2009, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 488854, ""name"": ""English edition 2019"", ""year"": 2019, ""publishers"": [""Days of Wonder""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 23936, ""name"": ""English first edition"", ""year"": 2009, ""publishers"": [""Days of Wonder""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 174280, ""name"": ""English second edition"", ""year"": 2010, ""publishers"": [""Days of Wonder""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 294178, ""name"": ""English third edition"", ""year"": 2012, ""publishers"": [""Days of Wonder""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 478262, ""name"": ""Chinese edition"", ""year"": 2018, ""publishers"": [""Days of Wonder""], ""languages"": [""Chinese""], ""score"": 2}, {""version_id"": 24053, ""name"": ""Dutch edition"", ""year"": 2009, ""publishers"": [""Days of Wonder""], ""languages"": [""Dutch""], ""score"": 2}, {""version_id"": 73633, ""name"": ""French first edition"", ""year"": 2009, ""publishers"": [""Days of Wonder""], ""languages"": [""French""], ""score"": 2}, {""version_id"": 287468, ""name"": ""French second edition"", ""year"": 2010, ""publishers"": [""Days of Wonder""], ""languages"": [""French""], ""score"": 2}]",IMG_4513.jpeg,,
ARTISTRY,432858,Artistry,2025,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 432858, ""name"": ""Artistry"", ""year"": 2025, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 762382, ""name"": ""English Deluxe edition"", ""year"": 2025, ""publishers"": [""Dux Somnium Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 734890, ""name"": ""English edition"", ""year"": 2025, ""publishers"": [""Dux Somnium Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 762383, ""name"": ""English Jewelry Box edition"", ""year"": 2025, ""publishers"": [""Dux Somnium Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 777369, ""name"": ""Russian edition"", ""year"": 2026, ""publishers"": [""Choo Choo Games"", ""Dux Somnium Games""], ""languages"": [""Russian""], ""score"": 2}]",IMG_4515.jpeg,, ARTISTRY,432858,Artistry,2025,boardgame,auto,734890,English edition,version_approved,"[{""bgg_id"": 432858, ""name"": ""Artistry"", ""year"": 2025, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 762382, ""name"": ""English Deluxe edition"", ""year"": 2025, ""publishers"": [""Dux Somnium Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 734890, ""name"": ""English edition"", ""year"": 2025, ""publishers"": [""Dux Somnium Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 762383, ""name"": ""English Jewelry Box edition"", ""year"": 2025, ""publishers"": [""Dux Somnium Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 777369, ""name"": ""Russian edition"", ""year"": 2026, ""publishers"": [""Choo Choo Games"", ""Dux Somnium Games""], ""languages"": [""Russian""], ""score"": 2}]",IMG_4515.jpeg,,
MAGE WARS ACADEMY,172503,Mage Wars Academy,2015,boardgame,auto,265107,English edition,version_auto,"[{""bgg_id"": 172503, ""name"": ""Mage Wars Academy"", ""year"": 2015, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 265107, ""name"": ""English edition"", ""year"": 2015, ""publishers"": [""Arcane Wonders""], ""languages"": [""English""], ""score"": 3}]",IMG_4518.jpeg,, MAGE WARS ACADEMY,172503,Mage Wars Academy,2015,boardgame,auto,265107,English edition,version_auto,"[{""bgg_id"": 172503, ""name"": ""Mage Wars Academy"", ""year"": 2015, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 265107, ""name"": ""English edition"", ""year"": 2015, ""publishers"": [""Arcane Wonders""], ""languages"": [""English""], ""score"": 3}]",IMG_4518.jpeg,,
BOTANY: TANTALIZING TREES,417060,Botany: Tantalizing Trees,2024,boardgameexpansion,auto,706506,English edition,version_auto,"[{""bgg_id"": 417060, ""name"": ""Botany: Tantalizing Trees"", ""year"": 2024, ""type"": ""boardgameexpansion"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 706506, ""name"": ""English edition"", ""year"": 2024, ""publishers"": [""Dux Somnium Games""], ""languages"": [""English""], ""score"": 3}]",IMG_4571.jpeg,, BOTANY: TANTALIZING TREES,417060,Botany: Tantalizing Trees,2024,boardgameexpansion,auto,706506,English edition,version_auto,"[{""bgg_id"": 417060, ""name"": ""Botany: Tantalizing Trees"", ""year"": 2024, ""type"": ""boardgameexpansion"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 706506, ""name"": ""English edition"", ""year"": 2024, ""publishers"": [""Dux Somnium Games""], ""languages"": [""English""], ""score"": 3}]",IMG_4571.jpeg,,
BOTANY: PERILOUS PERFUMES,417064,Botany: Perilous Perfumes,2024,boardgameexpansion,auto,706510,English edition,version_auto,"[{""bgg_id"": 417064, ""name"": ""Botany: Perilous Perfumes"", ""year"": 2024, ""type"": ""boardgameexpansion"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 706510, ""name"": ""English edition"", ""year"": 2024, ""publishers"": [""Dux Somnium Games""], ""languages"": [""English""], ""score"": 3}]",IMG_4571.jpeg,, BOTANY: PERILOUS PERFUMES,417064,Botany: Perilous Perfumes,2024,boardgameexpansion,auto,706510,English edition,version_auto,"[{""bgg_id"": 417064, ""name"": ""Botany: Perilous Perfumes"", ""year"": 2024, ""type"": ""boardgameexpansion"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 706510, ""name"": ""English edition"", ""year"": 2024, ""publishers"": [""Dux Somnium Games""], ""languages"": [""English""], ""score"": 3}]",IMG_4571.jpeg,,
Civilization: West Extension Map,2058,Civilization: West Extension Map,1986,boardgameexpansion,auto,,,version_unknown,"[{""bgg_id"": 2058, ""name"": ""Civilization: West Extension Map"", ""year"": 1986, ""type"": ""boardgameexpansion"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],,,
Artistry: Delightful Doorways Mini Expansion,452833,Artistry: Delightful Doorways Mini Expansion,2025,boardgameexpansion,auto,,,version_unknown,"[{""bgg_id"": 452833, ""name"": ""Artistry: Delightful Doorways Mini Expansion"", ""year"": 2025, ""type"": ""boardgameexpansion"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],,,
castle panic wizard's tower,104590,Castle Panic: The Wizard's Tower,2011,boardgameexpansion,auto,,,version_unknown,"[{""bgg_id"": 104590, ""name"": ""Castle Panic: The Wizard's Tower"", ""year"": 2011, ""type"": ""boardgameexpansion"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],,,
1 title_raw bgg_id bgg_name year type match_status version_id version_name version_status candidates_json version_candidates_json source_photos merged_into dedupe_veto
33 LABYRINTH 1219 Labyrinth 1986 boardgame auto version_ambiguous [{"bgg_id": 1219, "name": "Labyrinth", "year": 1986, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": 35117, "rank": 2116}, {"bgg_id": 6546, "name": "Labyrinth", "year": 1940, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": 1078, "rank": 31020}, {"bgg_id": 23074, "name": "Labyrinth", "year": 2000, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": 63, "rank": null}, {"bgg_id": 24422, "name": "Labyrinth", "year": 2001, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": 121, "rank": null}, {"bgg_id": 65696, "name": "Labyrinth", "year": null, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": 46, "rank": null}] [{"version_id": 488621, "name": "English edition 2017", "year": 2017, "publishers": ["Ravensburger AG"], "languages": ["English"], "score": 3}, {"version_id": 591493, "name": "English/German edition", "year": 2018, "publishers": ["Ravensburger AG"], "languages": ["English", "German"], "score": 3}, {"version_id": 361899, "name": "Multilingual 30th anniversary edition", "year": 2016, "publishers": ["Ravensburger AG"], "languages": ["English", "French", "German", "Italian"], "score": 3}, {"version_id": 338520, "name": "Multilingual edition", "year": 2017, "publishers": ["Ravensburger AG"], "languages": ["English", "French", "German", "Italian", "Portuguese", "Spanish"], "score": 3}, {"version_id": 440013, "name": "Multilingual edition", "year": 2019, "publishers": ["Ravensburger AG"], "languages": ["Dutch", "English", "French", "German", "Italian"], "score": 3}, {"version_id": 487001, "name": "Multilingual edition", "year": 2019, "publishers": ["Ravensburger AG"], "languages": ["Dutch", "English", "French", "German", "Italian", "Spanish"], "score": 3}, {"version_id": 571233, "name": "Multilingual edition", "year": 2021, "publishers": ["Ravensburger AG"], "languages": ["Dutch", "English", "French", "German", "Italian", "Portuguese", "Spanish"], "score": 3}, {"version_id": 630855, "name": "Multilingual edition", "year": 2022, "publishers": ["Ravensburger AG"], "languages": ["Dutch", "English", "French", "German", "Italian", "Portuguese", "Spanish"], "score": 3}] IMG_4507.jpeg;IMG_4508.jpeg
34 Super Mario Checkers Collector's Edition local [] [] IMG_4508.jpeg
35 Dragon Land 320202 Dragon Land 2020 boardgame auto version_unknown [{"bgg_id": 320202, "name": "Dragon Land", "year": 2020, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [] IMG_4508.jpeg;IMG_4542.jpeg
36 Bugs in the Kitchen 137909 Bugs in the Kitchen 2013 boardgame auto 216474 English first edition version_ambiguous version_approved [{"bgg_id": 137909, "name": "Bugs in the Kitchen", "year": 2013, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [{"version_id": 280025, "name": "Chinese/English edition", "year": 2014, "publishers": ["Ravensburger AG"], "languages": ["Chinese", "English"], "score": 3}, {"version_id": 751514, "name": "English edition 2024", "year": 2024, "publishers": ["Ravensburger AG"], "languages": ["English"], "score": 3}, {"version_id": 216474, "name": "English first edition", "year": 2013, "publishers": ["Ravensburger AG"], "languages": ["English"], "score": 3}, {"version_id": 435117, "name": "English second edition", "year": 2018, "publishers": ["Ravensburger AG"], "languages": ["English"], "score": 3}, {"version_id": 212273, "name": "Multilingual EN/FR/DE/IT/NE/SP", "year": 2013, "publishers": ["Ravensburger AG"], "languages": ["Dutch", "English", "French", "German", "Italian", "Spanish"], "score": 3}, {"version_id": 260936, "name": "French first edition", "year": 2013, "publishers": ["Ravensburger AG"], "languages": ["French"], "score": 2}, {"version_id": 726152, "name": "German edition 2024", "year": 2024, "publishers": ["Ravensburger AG"], "languages": ["German"], "score": 2}, {"version_id": 199002, "name": "German first edition", "year": 2013, "publishers": ["Ravensburger AG"], "languages": ["German"], "score": 2}] IMG_4508.jpeg;IMG_4545.jpeg
37 CATAN DICE GAME 27710 Catan Dice Game 2007 boardgame auto version_ambiguous [{"bgg_id": 27710, "name": "Catan Dice Game", "year": 2007, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [{"version_id": 606657, "name": "English edition 2018", "year": 2018, "publishers": ["Catan Studio"], "languages": ["English"], "score": 3}, {"version_id": 565571, "name": "English edition 2020", "year": 2020, "publishers": ["Catan Studio"], "languages": ["English"], "score": 3}] IMG_4509.jpeg
38 Castle Panic THE DARK TITAN 169784 Castle Panic: The Dark Titan 2015 boardgame auto version_ambiguous [{"bgg_id": 169784, "name": "Castle Panic: The Dark Titan", "year": 2015, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [{"version_id": 260454, "name": "English first edition", "year": 2015, "publishers": ["Fireside Games"], "languages": ["English"], "score": 3}, {"version_id": 624505, "name": "English second edition", "year": 2023, "publishers": ["Fireside Games"], "languages": ["English"], "score": 3}] IMG_4509.jpeg
39 Jenga 2452 Jenga 1983 boardgame auto version_unknown [{"bgg_id": 2452, "name": "Jenga", "year": 1983, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [] IMG_4509.jpeg
49 Guillotine 116 Guillotine 1998 boardgame auto version_unknown [{"bgg_id": 116, "name": "Guillotine", "year": 1998, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": 34783, "rank": 1630}, {"bgg_id": 11629, "name": "Guillotine", "year": 1983, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": 87, "rank": 18073}, {"bgg_id": 27373, "name": "Guillotine", "year": 1987, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": 163, "rank": 19576}] [] IMG_4512.jpeg
50 THE DOOM THAT CAME TO ATLANTIC CITY 124548 The Doom That Came to Atlantic City 2013 boardgame auto version_unknown [{"bgg_id": 124548, "name": "The Doom That Came to Atlantic City", "year": 2013, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [] IMG_4513.jpeg
51 Flick'em UP! 169124 Flick 'em Up! 2015 boardgame auto version_unknown [{"bgg_id": 169124, "name": "Flick 'em Up!", "year": 2015, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [] IMG_4513.jpeg
52 Castle Panic 43443 Castle Panic 2009 boardgame auto 103068 English edition, fourth printing version_ambiguous version_approved [{"bgg_id": 43443, "name": "Castle Panic", "year": 2009, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [{"version_id": 468123, "name": "English edition, eighteenth printing", "year": 2018, "publishers": ["Fireside Games"], "languages": ["English"], "score": 3}, {"version_id": 222131, "name": "English edition, eighth printing", "year": 2013, "publishers": ["Fireside Games"], "languages": ["English"], "score": 3}, {"version_id": 265959, "name": "English edition, eleventh printing", "year": 2014, "publishers": ["Fireside Games"], "languages": ["English"], "score": 3}, {"version_id": 343185, "name": "English edition, fifteenth printing", "year": 2016, "publishers": ["Fireside Games"], "languages": ["English"], "score": 3}, {"version_id": 169933, "name": "English edition, fifth printing", "year": 2012, "publishers": ["Fireside Games"], "languages": ["English"], "score": 3}, {"version_id": 24624, "name": "English edition, first printing", "year": 2009, "publishers": ["Fireside Games"], "languages": ["English"], "score": 3}, {"version_id": 337551, "name": "English edition, fourteenth printing", "year": 2016, "publishers": ["Fireside Games"], "languages": ["English"], "score": 3}, {"version_id": 103068, "name": "English edition, fourth printing", "year": 2010, "publishers": ["Fireside Games"], "languages": ["English"], "score": 3}] IMG_4513.jpeg
53 The Red Dragon Inn 24310 The Red Dragon Inn 2007 boardgame auto version_ambiguous [{"bgg_id": 24310, "name": "The Red Dragon Inn", "year": 2007, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": 16870, "rank": 2164}, {"bgg_id": 33451, "name": "The Red Dragon Inn 2", "year": 2008, "type": "boardgame", "exact": false, "fuzzy": 93.3, "owned": 8355, "rank": 2056}, {"bgg_id": 66510, "name": "The Red Dragon Inn 3", "year": 2011, "type": "boardgame", "exact": false, "fuzzy": 93.3, "owned": 6246, "rank": 2363}, {"bgg_id": 142402, "name": "The Red Dragon Inn 4", "year": 2013, "type": "boardgame", "exact": false, "fuzzy": 93.3, "owned": 4107, "rank": 3367}, {"bgg_id": 455834, "name": "The Red Dragon Inn 10", "year": 2026, "type": "boardgame", "exact": false, "fuzzy": 90.3, "owned": 162, "rank": null}] [{"version_id": 400341, "name": "English eighth edition", "year": 2017, "publishers": ["SlugFest Games"], "languages": ["English"], "score": 3}, {"version_id": 620786, "name": "English eleventh edition", "year": 2021, "publishers": ["SlugFest Games"], "languages": ["English"], "score": 3}, {"version_id": 762888, "name": "English fifteenth edition", "year": 2024, "publishers": ["SlugFest Games"], "languages": ["English"], "score": 3}, {"version_id": 374258, "name": "English fifth edition", "year": 2012, "publishers": ["SlugFest Games"], "languages": ["English"], "score": 3}, {"version_id": 33932, "name": "English first edition", "year": 2007, "publishers": ["SlugFest Games"], "languages": ["English"], "score": 3}, {"version_id": 728027, "name": "English fourteenth edition", "year": 2023, "publishers": ["SlugFest Games"], "languages": ["English"], "score": 3}, {"version_id": 312374, "name": "English seventh edition", "year": 2015, "publishers": ["SlugFest Games"], "languages": ["English"], "score": 3}, {"version_id": 389768, "name": "English sixth edition", "year": 2014, "publishers": ["SlugFest Games"], "languages": ["English"], "score": 3}] IMG_4514.jpeg
54 Dixit 39856 Dixit 2008 boardgame auto version_ambiguous [{"bgg_id": 39856, "name": "Dixit", "year": 2008, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [{"version_id": 482308, "name": "Afrikaans/English edition", "year": 2019, "publishers": ["Libellud"], "languages": ["Afrikaans", "English"], "score": 3}, {"version_id": 488774, "name": "Arabic/English edition", "year": 2019, "publishers": ["Boardgame Space", "Libellud"], "languages": ["Arabic", "English"], "score": 3}, {"version_id": 296529, "name": "Asmodee/Libellud English edition 2015", "year": 2015, "publishers": ["Libellud"], "languages": ["English"], "score": 3}, {"version_id": 160064, "name": "English edition 2011", "year": 2011, "publishers": ["Libellud"], "languages": ["English"], "score": 3}, {"version_id": 193872, "name": "English edition 2012", "year": 2012, "publishers": ["Libellud"], "languages": ["English"], "score": 3}, {"version_id": 241272, "name": "English edition 2013", "year": 2013, "publishers": ["Libellud"], "languages": ["English"], "score": 3}, {"version_id": 256721, "name": "English edition 2014", "year": 2014, "publishers": ["Libellud"], "languages": ["English"], "score": 3}, {"version_id": 273210, "name": "English edition 2014", "year": 2014, "publishers": ["Libellud"], "languages": ["English"], "score": 3}] IMG_4514.jpeg
55 Huggermugger 2387 Huggermugger 1989 boardgame auto version_unknown [{"bgg_id": 2387, "name": "Huggermugger", "year": 1989, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [] IMG_4514.jpeg
120 ETHERFIELDS KITTENBURG EXPANSION 358880 Etherfields: Kittenburg Expansion 2022 boardgame auto 603694 English edition version_auto [{"bgg_id": 358880, "name": "Etherfields: Kittenburg Expansion", "year": 2022, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [{"version_id": 603694, "name": "English edition", "year": 2022, "publishers": ["Awaken Realms"], "languages": ["English"], "score": 3}, {"version_id": 709658, "name": "Polish edition", "year": 2022, "publishers": ["Awaken Realms"], "languages": ["Polish"], "score": 2}, {"version_id": 699892, "name": "Spanish edition", "year": 2022, "publishers": ["Awaken Realms"], "languages": ["Spanish"], "score": 2}] IMG_4570.jpeg
121 Parsely 258849 Parsely 2018 rpgitem auto version_unknown [{"bgg_id": 258849, "name": "Parsely", "year": 2018, "type": "rpgitem", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [] IMG_4573.jpeg
122 ...and then, we held hands. 153999 ...and then, we held hands. 2015 boardgame auto 280845 English edition version_auto [{"bgg_id": 153999, "name": "...and then, we held hands.", "year": 2015, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [{"version_id": 280845, "name": "English edition", "year": 2015, "publishers": ["LudiCreations"], "languages": ["English"], "score": 3}] image.jpg
123 Consentacle 166976 Consentacle 2014 boardgame auto 410382 English Kickstarter edition version_ambiguous version_approved [{"bgg_id": 166976, "name": "Consentacle", "year": 2014, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [{"version_id": 410382, "name": "English Kickstarter edition", "year": 2018, "publishers": ["(Self-Published)"], "languages": ["English"], "score": 3}, {"version_id": 596756, "name": "English Print-and-Play edition", "year": 2018, "publishers": ["(Self-Published)"], "languages": ["English"], "score": 3}] shelf-20260803-171316.jpg
124 The Simpsons Trivia Game 2980 The Simpsons Trivia Game 2000 boardgame auto version_unknown [{"bgg_id": 2980, "name": "The Simpsons Trivia Game", "year": 2000, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": 786, "rank": 30823}, {"bgg_id": 16343, "name": "The Simpsons 2 Trivia Game", "year": 2001, "type": "boardgame", "exact": false, "fuzzy": 95.2, "owned": 76, "rank": null}] [] shelf-20260803-213735.jpg
125 THE CAT GAME 231302 The Cat Game 2017 boardgame auto version_ambiguous [{"bgg_id": 231302, "name": "The Cat Game", "year": 2017, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [{"version_id": 361880, "name": "English/French edition", "year": 2017, "publishers": ["Spin Master Ltd."], "languages": ["English", "French"], "score": 2}, {"version_id": 433263, "name": "German edition", "year": 0, "publishers": ["Spin Master Ltd."], "languages": ["German"], "score": 2}] shelf-20260803-213756.jpg
126 BLINK 1197 Blink 1995 boardgame auto version_unknown [{"bgg_id": 1197, "name": "Blink", "year": 1995, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": 6143, "rank": 6149}, {"bgg_id": 185341, "name": "Blink!", "year": 2015, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": 111, "rank": null}, {"bgg_id": 15852, "name": "Blinki", "year": 1910, "type": "boardgame", "exact": false, "fuzzy": 90.9, "owned": 106, "rank": 30046}] [] shelf-20260803-215650.jpg
128 Patchwork 163412 Patchwork 2014 boardgame auto version_unknown [{"bgg_id": 163412, "name": "Patchwork", "year": 2014, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": 124114, "rank": 148}, {"bgg_id": 41585, "name": "Patchwork", "year": 2009, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": 473, "rank": 14984}] [] IMG_4501.jpeg
129 MANTIS FALLS 291847 Mantis Falls 2021 boardgame auto version_unknown [{"bgg_id": 291847, "name": "Mantis Falls", "year": 2021, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [] IMG_4505.jpeg
130 SMALL WORLD 40692 Small World 2009 boardgame auto version_ambiguous [{"bgg_id": 40692, "name": "Small World", "year": 2009, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [{"version_id": 488854, "name": "English edition 2019", "year": 2019, "publishers": ["Days of Wonder"], "languages": ["English"], "score": 3}, {"version_id": 23936, "name": "English first edition", "year": 2009, "publishers": ["Days of Wonder"], "languages": ["English"], "score": 3}, {"version_id": 174280, "name": "English second edition", "year": 2010, "publishers": ["Days of Wonder"], "languages": ["English"], "score": 3}, {"version_id": 294178, "name": "English third edition", "year": 2012, "publishers": ["Days of Wonder"], "languages": ["English"], "score": 3}, {"version_id": 478262, "name": "Chinese edition", "year": 2018, "publishers": ["Days of Wonder"], "languages": ["Chinese"], "score": 2}, {"version_id": 24053, "name": "Dutch edition", "year": 2009, "publishers": ["Days of Wonder"], "languages": ["Dutch"], "score": 2}, {"version_id": 73633, "name": "French first edition", "year": 2009, "publishers": ["Days of Wonder"], "languages": ["French"], "score": 2}, {"version_id": 287468, "name": "French second edition", "year": 2010, "publishers": ["Days of Wonder"], "languages": ["French"], "score": 2}] IMG_4513.jpeg
131 ARTISTRY 432858 Artistry 2025 boardgame auto 734890 English edition version_ambiguous version_approved [{"bgg_id": 432858, "name": "Artistry", "year": 2025, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [{"version_id": 762382, "name": "English Deluxe edition", "year": 2025, "publishers": ["Dux Somnium Games"], "languages": ["English"], "score": 3}, {"version_id": 734890, "name": "English edition", "year": 2025, "publishers": ["Dux Somnium Games"], "languages": ["English"], "score": 3}, {"version_id": 762383, "name": "English Jewelry Box edition", "year": 2025, "publishers": ["Dux Somnium Games"], "languages": ["English"], "score": 3}, {"version_id": 777369, "name": "Russian edition", "year": 2026, "publishers": ["Choo Choo Games", "Dux Somnium Games"], "languages": ["Russian"], "score": 2}] IMG_4515.jpeg
132 MAGE WARS ACADEMY 172503 Mage Wars Academy 2015 boardgame auto 265107 English edition version_auto [{"bgg_id": 172503, "name": "Mage Wars Academy", "year": 2015, "type": "boardgame", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [{"version_id": 265107, "name": "English edition", "year": 2015, "publishers": ["Arcane Wonders"], "languages": ["English"], "score": 3}] IMG_4518.jpeg
133 BOTANY: TANTALIZING TREES 417060 Botany: Tantalizing Trees 2024 boardgameexpansion auto 706506 English edition version_auto [{"bgg_id": 417060, "name": "Botany: Tantalizing Trees", "year": 2024, "type": "boardgameexpansion", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [{"version_id": 706506, "name": "English edition", "year": 2024, "publishers": ["Dux Somnium Games"], "languages": ["English"], "score": 3}] IMG_4571.jpeg
134 BOTANY: PERILOUS PERFUMES 417064 Botany: Perilous Perfumes 2024 boardgameexpansion auto 706510 English edition version_auto [{"bgg_id": 417064, "name": "Botany: Perilous Perfumes", "year": 2024, "type": "boardgameexpansion", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] [{"version_id": 706510, "name": "English edition", "year": 2024, "publishers": ["Dux Somnium Games"], "languages": ["English"], "score": 3}] IMG_4571.jpeg
135 Civilization: West Extension Map 2058 Civilization: West Extension Map 1986 boardgameexpansion auto version_unknown [{"bgg_id": 2058, "name": "Civilization: West Extension Map", "year": 1986, "type": "boardgameexpansion", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] []
136 Artistry: Delightful Doorways Mini Expansion 452833 Artistry: Delightful Doorways Mini Expansion 2025 boardgameexpansion auto version_unknown [{"bgg_id": 452833, "name": "Artistry: Delightful Doorways Mini Expansion", "year": 2025, "type": "boardgameexpansion", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] []
137 castle panic wizard's tower 104590 Castle Panic: The Wizard's Tower 2011 boardgameexpansion auto version_unknown [{"bgg_id": 104590, "name": "Castle Panic: The Wizard's Tower", "year": 2011, "type": "boardgameexpansion", "exact": true, "fuzzy": 100.0, "owned": null, "rank": null}] []
+20
View File
@@ -8,5 +8,25 @@
"language_hint": "", "language_hint": "",
"art_notes": "", "art_notes": "",
"source_photos": [] "source_photos": []
},
{
"title_raw": "Artistry: Delightful Doorways Mini Expansion",
"confidence": "high",
"publisher_hint": "",
"edition_hint": "",
"year_hint": null,
"language_hint": "",
"art_notes": "",
"source_photos": []
},
{
"title_raw": "castle panic wizard's tower",
"confidence": "high",
"publisher_hint": "",
"edition_hint": "",
"year_hint": null,
"language_hint": "",
"art_notes": "",
"source_photos": []
} }
] ]
+22
View File
@@ -1757,5 +1757,27 @@
"art_notes": "", "art_notes": "",
"source_photos": [], "source_photos": [],
"title_normalized": "civilization west extension map" "title_normalized": "civilization west extension map"
},
{
"title_raw": "Artistry: Delightful Doorways Mini Expansion",
"confidence": "high",
"publisher_hint": "",
"edition_hint": "",
"year_hint": null,
"language_hint": "",
"art_notes": "",
"source_photos": [],
"title_normalized": "artistry delightful doorways mini expansion"
},
{
"title_raw": "castle panic wizard's tower",
"confidence": "high",
"publisher_hint": "",
"edition_hint": "",
"year_hint": null,
"language_hint": "",
"art_notes": "",
"source_photos": [],
"title_normalized": "castle panic wizard s tower"
} }
] ]
+17
View File
@@ -368,6 +368,23 @@ class ReviewSession:
row["version_name"] = "" row["version_name"] = ""
self._save(row) self._save(row)
def reopen_match(self, row: dict) -> None:
"""The human says a matched row is the WRONG game: back to the
unmatched queue with a clean slate — manual id and re-search live
there. (The .dungeon case: an exact-normalized impostor wins when
the real game never surfaced in the search.)"""
row["match_status"] = "unmatched"
row["bgg_id"] = ""
row["bgg_name"] = ""
row["year"] = ""
row["type"] = ""
row["candidates_json"] = "[]"
row["version_status"] = ""
row["version_id"] = ""
row["version_name"] = ""
row["version_candidates_json"] = "[]"
self._save(row)
def open_version_ballot(self, row: dict) -> int: def open_version_ballot(self, row: dict) -> int:
"""The human knows which printing a box is even when the photo """The human knows which printing a box is even when the photo
showed no cues: put EVERY published version on the row's ballot showed no cues: put EVERY published version on the row's ballot
+1
View File
@@ -39,6 +39,7 @@
<p><b>edit</b> — fix a misread title or add cues you already know (publisher, edition, year, language). A corrected misspelling automatically merges with a correctly-read sighting of the same game from another photo. If the line already had a BGG match, saving re-queues it so resolve searches again with the corrected data.</p> <p><b>edit</b> — fix a misread title or add cues you already know (publisher, edition, year, language). A corrected misspelling automatically merges with a correctly-read sighting of the same game from another photo. If the line already had a BGG match, saving re-queues it so resolve searches again with the corrected data.</p>
<p><b>split into copies</b> — one line, several physical boxes? Splitting makes each photo its own copy, and each copy picks its own edition afterward. Appears on any line whose title was seen in more than one photo. Splitting one game never affects a same-named different edition.</p> <p><b>split into copies</b> — one line, several physical boxes? Splitting makes each photo its own copy, and each copy picks its own edition afterward. Appears on any line whose title was seen in more than one photo. Splitting one game never affects a same-named different edition.</p>
<p><b>pick edition</b> — a matched game with no legible edition cues stays version-less by design (never guess) — but you know which printing your box is. This fetches the game's complete version list into a Review ballot; pick yours there.</p> <p><b>pick edition</b> — a matched game with no legible edition cues stays version-less by design (never guess) — but you know which printing your box is. This fetches the game's complete version list into a Review ballot; pick yours there.</p>
<p><b>wrong match</b> — an auto-match landed on the wrong game (same-name impostors happen). This clears the match and returns the title to Review's unmatched queue, where re-search and manual-id live. Note BGG sometimes splits one game's lineage across entries — Wiz-War's early editions and its FFG remake are separate games — so a copy whose edition isn't on the ballot may belong to the sibling entry.</p>
<p><b>add a game</b> (top of the Titles page) — a game no photo shows: an expansion stored inside a base box, a game away from the shelves. It joins the list like any read (BGG wants base game and expansion as separate collection entries, so boxes that hold both need this for the hidden half), and if a later photo shows it, the sighting merges instead of duplicating.</p> <p><b>add a game</b> (top of the Titles page) — a game no photo shows: an expansion stored inside a base box, a game away from the shelves. It joins the list like any read (BGG wants base game and expansion as separate collection entries, so boxes that hold both need this for the hidden half), and if a later photo shows it, the sighting merges instead of duplicating.</p>
<p><b>remove</b> (inside the edit panel) — for lines that shouldn't exist at all: a book read as a game, box art misread as a title. The line and its matches are discarded and stay gone. This is different from <i>reject</i> on the Review page, which keeps the line visible as "no BGG match" — right for real games BGG doesn't know.</p> <p><b>remove</b> (inside the edit panel) — for lines that shouldn't exist at all: a book read as a game, box art misread as a title. The line and its matches are discarded and stay gone. This is different from <i>reject</i> on the Review page, which keeps the line visible as "no BGG match" — right for real games BGG doesn't know.</p>
<p>Undo: each decision is one record in <code>data/title_edits.json</code>, <code>data/title_splits.json</code>, or <code>data/title_removals.json</code> — delete the record and the next rebuild restores the old state.</p> <p>Undo: each decision is one record in <code>data/title_edits.json</code>, <code>data/title_splits.json</code>, or <code>data/title_removals.json</code> — delete the record and the next rebuild restores the old state.</p>
+4 -1
View File
@@ -94,9 +94,12 @@ function versionCard(row, idx) {
return ` return `
<section class="card actionable" data-kind="version" data-rowix="${row.row_ix}" <section class="card actionable" data-kind="version" data-rowix="${row.row_ix}"
data-title="${esc(row.title_raw)}" data-photos="${esc(row.source_photos)}"> data-title="${esc(row.title_raw)}" data-photos="${esc(row.source_photos)}">
${shots(row.photos || [])}
<div class="body"> <div class="body">
<p class="title">${esc(row.bgg_name || row.title_raw)}</p> <p class="title">${esc(row.bgg_name || row.title_raw)}</p>
<p class="status">which edition? (skippable — <kbd>u</kbd> records "unknown", or just move on)</p> <p class="status">which edition${row.photos && row.photos.length
? ` is the copy in ${esc(row.photos.join(", "))}`
: ""}? (skippable — <kbd>u</kbd> records "unknown", or just move on)</p>
<ol class="cands">${cands}</ol> <ol class="cands">${cands}</ol>
<div class="rowactions"> <div class="rowactions">
<button class="unknown" title="press u"><kbd>u</kbd> can't tell — leave version unset</button> <button class="unknown" title="press u"><kbd>u</kbd> can't tell — leave version unset</button>
+18
View File
@@ -86,6 +86,12 @@ function render() {
title="one line, several boxes? make each photo its own copy"> title="one line, several boxes? make each photo its own copy">
split into copies</button>` split into copies</button>`
: ""} : ""}
${c.bgg_id && ["auto", "approved"].includes(c.status)
? `<button class="wrongmatch" data-title="${esc(c.title_raw)}"
data-photos="${esc(c.photos.join(";"))}" data-rowix="${c.row_ix ?? ""}"
title="this matched the wrong game — send it back to Review to re-search">
wrong match</button>`
: ""}
${c.bgg_id && ["auto", "approved"].includes(c.status) ${c.bgg_id && ["auto", "approved"].includes(c.status)
&& ["version_unknown", "version_error", ""].includes(c.version_status || "") && ["version_unknown", "version_error", ""].includes(c.version_status || "")
? `<button class="pickedition" data-title="${esc(c.title_raw)}" ? `<button class="pickedition" data-title="${esc(c.title_raw)}"
@@ -115,6 +121,18 @@ async function refresh() {
document.getElementById("catbody").addEventListener("click", async e => { document.getElementById("catbody").addEventListener("click", async e => {
const cancel = e.target.closest("button.canceledit"); const cancel = e.target.closest("button.canceledit");
if (cancel) { EDITING = null; GATE.reset(); render(); refresh().catch(() => {}); return; } if (cancel) { EDITING = null; GATE.reset(); render(); refresh().catch(() => {}); return; }
const wm = e.target.closest("button.wrongmatch");
if (wm) {
if (!confirm(`"${wm.dataset.title}" matched the wrong game? This clears the ` +
`match and sends it back to Review for a re-search.`)) return;
const res = await apiPost("/api/reopen-match", {
title_raw: wm.dataset.title,
source_photos: wm.dataset.photos,
row_ix: wm.dataset.rowix === "" ? null : Number(wm.dataset.rowix),
});
if (res) { GATE.reset(); refresh().catch(() => {}); }
return;
}
const pe = e.target.closest("button.pickedition"); const pe = e.target.closest("button.pickedition");
if (pe) { if (pe) {
const res = await apiPost("/api/open-versions", { const res = await apiPost("/api/open-versions", {
+14
View File
@@ -516,10 +516,13 @@ def create_app(
} }
def version_payload(row: dict) -> dict: def version_payload(row: dict) -> dict:
available = photo_names()
return { return {
"row_ix": _ix_of(session.rows, row), "row_ix": _ix_of(session.rows, row),
"title_raw": row["title_raw"], "title_raw": row["title_raw"],
"source_photos": row["source_photos"], "source_photos": row["source_photos"],
# same-title copies are told apart by their photos
"photos": [p for p in row["source_photos"].split(";") if p in available],
"bgg_name": row["bgg_name"], "bgg_name": row["bgg_name"],
"candidates": json.loads(row["version_candidates_json"] or "[]"), "candidates": json.loads(row["version_candidates_json"] or "[]"),
} }
@@ -1128,6 +1131,17 @@ def create_app(
replay_titles(cfg) replay_titles(cfg)
return state() return state()
@app.post("/api/reopen-match")
def api_reopen_match(body: RowRef) -> dict:
with lock:
revision["n"] += 1
_refuse_if_rewriting()
row = find_row(body.title_raw, body.source_photos, body.row_ix)
if row["match_status"] not in RECOGNIZED_MATCH_STATUSES:
raise HTTPException(400, "only a matched row can be reopened")
session.reopen_match(row)
return state()
@app.post("/api/open-versions") @app.post("/api/open-versions")
def api_open_versions(body: RowRef) -> dict: def api_open_versions(body: RowRef) -> dict:
with lock: with lock:
+42
View File
@@ -1160,3 +1160,45 @@ def test_add_title_by_hand(tmp_path):
web.post("/api/add-title", json={"title": "X", "year": "199Y"}).status_code web.post("/api/add-title", json={"title": "X", "year": "199Y"}).status_code
== 400 == 400
) )
def test_wrong_match_reopens_for_research(tmp_path):
cfg = make_cfg(tmp_path)
rows = read_matches(cfg.matches_path)
rows.append(
_row(
title_raw="Dungeon!",
match_status="auto",
bgg_id="345770",
bgg_name=".dungeon",
version_status="version_unknown",
)
)
write_matches(cfg.matches_path, rows)
web = TestClient(create_app(cfg, client=unauthorized_client(tmp_path)))
res = web.post(
"/api/reopen-match",
json={"title_raw": "Dungeon!", "source_photos": "shelf.jpg"},
)
assert res.status_code == 200
saved = {r["title_raw"]: r for r in read_matches(cfg.matches_path)}
assert saved["Dungeon!"]["match_status"] == "unmatched"
assert saved["Dungeon!"]["bgg_id"] == ""
assert saved["Dungeon!"]["version_candidates_json"] == "[]"
# it's back in the review queue
assert any(p["title_raw"] == "Dungeon!" for p in res.json()["pending"])
# an unmatched row can't be "reopened"
assert (
web.post(
"/api/reopen-match",
json={"title_raw": "Mystery", "source_photos": "shelf.jpg"},
).status_code
== 400
)
def test_version_cards_carry_their_photos(tmp_path):
web, _ = make_client(tmp_path)
(card,) = web.get("/api/state").json()["versions"]
assert card["title_raw"] == "Dungeon!"
assert card["photos"] == ["shelf.jpg"] # same-title copies stay tellable