Editions become changeable — losslessly
Eric hit a diff version-disagreement and found there was no way to revisit a set edition: the Titles pick-edition button only appeared while the version was UNSET. It now shows as "change edition" on version_auto/version_approved rows — and reopening the ballot no longer clears the current pick, because change must be lossless: abandoning the ballot keeps the approved edition, the lingering id is inert while ambiguous (is_confident_version gates diff and upload), and the next decision overwrites or clears it. Help documents the other half of the disagreement story: the pipeline NEVER edits a version already set on a BGG collection entry (the additive-only rule), so a diff disagreement is resolved either by changing the pipeline's pick here or by fixing the entry by hand on BGG. 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
fb9f654cd8
commit
f825a91ea4
@@ -136,3 +136,17 @@ Artistry: Delightful Doorways Mini Expansion,452833,Artistry: Delightful Doorway
|
||||
castle panic wizard's tower,104590,Castle Panic: The Wizard's Tower,2011,boardgameexpansion,auto,117256,"English first edition, first printing",version_approved,"[{""bgg_id"": 104590, ""name"": ""Castle Panic: The Wizard's Tower"", ""year"": 2011, ""type"": ""boardgameexpansion"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 117256, ""name"": ""English first edition, first printing"", ""year"": 2011, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 193172, ""name"": ""First edition, second printing"", ""year"": 2012, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 228207, ""name"": ""First edition, fourth printing"", ""year"": 2013, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 208993, ""name"": ""First edition, third printing"", ""year"": 2013, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 280403, ""name"": ""First edition, fifth printing"", ""year"": 2014, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 302898, ""name"": ""First edition, sixth printing"", ""year"": 2015, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 371339, ""name"": ""First edition, seventh printing"", ""year"": 2016, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 476666, ""name"": ""First edition, ninth printing"", ""year"": 2019, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 553422, ""name"": ""First edition, first printing"", ""year"": 2021, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 624504, ""name"": ""English second edition"", ""year"": 2023, ""publishers"": [""Fireside Games""], ""languages"": [""English""], ""score"": 0}]",,,,
|
||||
WIZ-WAR,104710,Wiz-War (Eighth Edition),2012,boardgame,approved,117685,English first edition,version_auto,"[{""bgg_id"": 589, ""name"": ""Wiz-War"", ""year"": 1983, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 2076, ""rank"": 3049}, {""bgg_id"": 324937, ""name"": ""Wiz-War (9th Edition)"", ""year"": 2023, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 53.8, ""owned"": 482, ""rank"": 11443}, {""bgg_id"": 104710, ""name"": ""Wiz-War (Eighth Edition)"", ""year"": 2012, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 48.3, ""owned"": 7742, ""rank"": 1266}]","[{""version_id"": 117685, ""name"": ""English first edition"", ""year"": 2012, ""publishers"": [""Fantasy Flight Games""], ""languages"": [""English""], ""score"": 5}, {""version_id"": 244745, ""name"": ""English second edition"", ""year"": 2013, ""publishers"": [""Fantasy Flight Games""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 185192, ""name"": ""French edition"", ""year"": 2012, ""publishers"": [""Edge Entertainment""], ""languages"": [""French""], ""score"": 2}, {""version_id"": 188887, ""name"": ""Italian edition"", ""year"": 2012, ""publishers"": [""Giochi Uniti""], ""languages"": [""Italian""], ""score"": 2}, {""version_id"": 164985, ""name"": ""Spanish edition"", ""year"": 2012, ""publishers"": [""Edge Entertainment""], ""languages"": [""Spanish""], ""score"": 2}, {""version_id"": 166902, ""name"": ""Wargames Club Traditional Chinese edition"", ""year"": 2012, ""publishers"": [""Wargames Club Publishing""], ""languages"": [""Chinese""], ""score"": 2}]",IMG_4504.jpeg,,,
|
||||
The Red Dragon Inn 5: The Character Trove,173634,The Red Dragon Inn 5: The Character Trove,2015,boardgame,approved,266954,English first edition,version_approved,[],"[{""version_id"": 266954, ""name"": ""English first edition"", ""year"": 2015, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 418968, ""name"": ""English second edition"", ""year"": 2016, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 501467, ""name"": ""Russian edition"", ""year"": 2020, ""publishers"": [""Hobby World"", ""SlugFest Games""], ""languages"": [""Russian""], ""score"": 0}, {""version_id"": 728048, ""name"": ""English fifth edition"", ""year"": 2021, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 629264, ""name"": ""English sixth edition"", ""year"": 2021, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 807834, ""name"": ""English edition 2025"", ""year"": 2025, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}]",,,,
|
||||
The Red Dragon Inn 10,455834,The Red Dragon Inn 10,2026,boardgame,approved,791302,English Eco-Kickstarter edition,version_approved,[],"[{""version_id"": 791303, ""name"": ""English Collector's edition"", ""year"": 2026, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 791299, ""name"": ""English Eco-Collector's edition"", ""year"": 2026, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 791302, ""name"": ""English Eco-Kickstarter edition"", ""year"": 2026, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 791301, ""name"": ""English Kickstarter edition"", ""year"": 2026, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 775937, ""name"": ""English retail edition"", ""year"": 2026, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}]",,,,173634
|
||||
The Red Dragon Inn 2,33451,The Red Dragon Inn 2,2008,boardgame,approved,629314,English eighth edition,version_approved,[],"[{""version_id"": 66639, ""name"": ""English first edition"", ""year"": 2008, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 276585, ""name"": ""English second edition"", ""year"": 2011, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 83468, ""name"": ""German edition"", ""year"": 2011, ""publishers"": [""Pegasus Spiele""], ""languages"": [""German""], ""score"": 0}, {""version_id"": 279092, ""name"": ""English third edition"", ""year"": 2012, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 312373, ""name"": ""English fourth edition"", ""year"": 2014, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 400349, ""name"": ""English fifth edition"", ""year"": 2016, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 368753, ""name"": ""Japanese edition"", ""year"": 2017, ""publishers"": [""Arclight Games""], ""languages"": [""Japanese""], ""score"": 0}, {""version_id"": 348123, ""name"": ""Russian edition"", ""year"": 2017, ""publishers"": [""Hobby World"", ""SlugFest Games""], ""languages"": [""Russian""], ""score"": 0}, {""version_id"": 629314, ""name"": ""English eighth edition"", ""year"": 2021, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 739213, ""name"": ""English tenth edition"", ""year"": 2024, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}]",,,,173634
|
||||
The Red Dragon Inn 3,66510,The Red Dragon Inn 3,2011,boardgame,approved,629315,English sixth edition,version_approved,[],"[{""version_id"": 109972, ""name"": ""English first edition"", ""year"": 2011, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 279093, ""name"": ""English third edition"", ""year"": 2014, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 400350, ""name"": ""English fourth edition"", ""year"": 2016, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 465251, ""name"": ""Japanese edition"", ""year"": 2018, ""publishers"": [""Arclight Games""], ""languages"": [""Japanese""], ""score"": 0}, {""version_id"": 408003, ""name"": ""Russian edition"", ""year"": 2018, ""publishers"": [""Hobby World"", ""SlugFest Games""], ""languages"": [""Russian""], ""score"": 0}, {""version_id"": 629315, ""name"": ""English sixth edition"", ""year"": 2021, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}]",,,,173634
|
||||
The Red Dragon Inn 4,142402,The Red Dragon Inn 4,2013,boardgame,approved,657689,English fourth edition,version_approved,[],"[{""version_id"": 208593, ""name"": ""English first edition"", ""year"": 2013, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 312372, ""name"": ""English second edition"", ""year"": 2015, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 459458, ""name"": ""Russian edition"", ""year"": 2019, ""publishers"": [""Hobby World"", ""SlugFest Games""], ""languages"": [""Russian""], ""score"": 0}, {""version_id"": 657689, ""name"": ""English fourth edition"", ""year"": 2021, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 789018, ""name"": ""English fifth edition"", ""year"": 2025, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}]",,,,173634
|
||||
The Red Dragon Inn 6: Villains,212662,The Red Dragon Inn 6: Villains,2017,boardgame,approved,367695,Eco-Collector's edition,version_approved,[],"[{""version_id"": 384606, ""name"": ""Boxed Collector's edition"", ""year"": 2017, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 331916, ""name"": ""Boxed edition"", ""year"": 2017, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 367688, ""name"": ""Eco edition"", ""year"": 2017, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 367695, ""name"": ""Eco-Collector's edition"", ""year"": 2017, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 659333, ""name"": ""English second edition"", ""year"": 2019, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 569335, ""name"": ""Russian edition"", ""year"": 2021, ""publishers"": [""Hobby World"", ""SlugFest Games""], ""languages"": [""Russian""], ""score"": 0}]",,,,173634
|
||||
The Red Dragon Inn 7: The Tavern Crew,244258,The Red Dragon Inn 7: The Tavern Crew,2018,boardgame,approved,421810,Eco edition,version_approved,[],"[{""version_id"": 421810, ""name"": ""Eco edition"", ""year"": 2018, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 390857, ""name"": ""English first edition"", ""year"": 2018, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 657663, ""name"": ""English third edition"", ""year"": 2021, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 631227, ""name"": ""Russian edition"", ""year"": 2022, ""publishers"": [""Hobby World"", ""SlugFest Games""], ""languages"": [""Russian""], ""score"": 0}]",,,,173634
|
||||
The Red Dragon Inn 8: Pub Crawl,330097,The Red Dragon Inn 8: Pub Crawl,2022,boardgame,approved,557415,English Eco-Kickstarter edition,version_approved,[],"[{""version_id"": 549201, ""name"": ""English retail edition"", ""year"": 2022, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 557416, ""name"": ""English Collector's edition"", ""year"": 2021, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 557417, ""name"": ""English Eco-Collector's edition"", ""year"": 2021, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 557415, ""name"": ""English Eco-Kickstarter edition"", ""year"": 2021, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 557414, ""name"": ""English kickstarter edition"", ""year"": 2021, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}]",,,,173634
|
||||
The Red Dragon Inn 9: The Undercity,380868,The Red Dragon Inn 9: The Undercity,2023,boardgame,approved,800879,English Eco-Kickstarter edition,version_approved,[],"[{""version_id"": 682408, ""name"": ""English Eco-Collector's edition"", ""year"": 2023, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 800879, ""name"": ""English Eco-Kickstarter edition"", ""year"": 2023, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 650623, ""name"": ""English edition"", ""year"": 2023, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}]",,,,173634
|
||||
The Red Dragon Inn: Allies – Evil Pooky,302181,The Red Dragon Inn: Allies – Evil Pooky,2021,boardgameexpansion,approved,629307,Retail second edition,version_approved,[],"[{""version_id"": 495007, ""name"": ""Retail first edition"", ""year"": 2021, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 629307, ""name"": ""Retail second edition"", ""year"": 2021, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 496223, ""name"": ""Collector's edition"", ""year"": 2020, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}]",,,,173634
|
||||
The Red Dragon Inn: Allies – Halden the Unhinged,174922,The Red Dragon Inn: Allies – Halden the Unhinged,2015,boardgameexpansion,approved,657858,English third edition,version_approved,[],"[{""version_id"": 269075, ""name"": ""English first edition"", ""year"": 2015, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 657858, ""name"": ""English third edition"", ""year"": 2021, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}]",,,,173634
|
||||
The Red Dragon Inn: Allies – Jin vs Greppa,442637,The Red Dragon Inn: Allies – Jin vs Greppa,2025,boardgameexpansion,approved,752778,English Kickstarter edition,version_approved,[],"[{""version_id"": 752778, ""name"": ""English Kickstarter edition"", ""year"": 2025, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 752670, ""name"": ""English retail edition"", ""year"": 2025, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}]",,,,173634
|
||||
The Red Dragon Inn: Allies – Melvyn vs. Marah,403503,The Red Dragon Inn: Allies – Melvyn vs. Marah,2024,boardgameexpansion,approved,712612,English Kickstarter edition,version_approved,[],"[{""version_id"": 685052, ""name"": ""English edition"", ""year"": 2024, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 712612, ""name"": ""English Kickstarter edition"", ""year"": 2024, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}]",,,,173634
|
||||
The Red Dragon Inn: Allies – Pooky,125472,The Red Dragon Inn: Allies – Pooky,2012,boardgameexpansion,approved,629302,English fourth edition,version_approved,[],"[{""version_id"": 167237, ""name"": ""English first edition"", ""year"": 2012, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 401403, ""name"": ""English second edition"", ""year"": 2015, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 580866, ""name"": ""English third edition"", ""year"": 2018, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 629302, ""name"": ""English fourth edition"", ""year"": 2021, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}, {""version_id"": 781893, ""name"": ""English fifth edition"", ""year"": 2025, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}]",,,,173634
|
||||
The Red Dragon Inn: Allies – Wrench,168857,The Red Dragon Inn: Allies – Wrench,2015,boardgameexpansion,approved,657857,English third edition,version_approved,[],"[{""version_id"": 258498, ""name"": ""English first edition"", ""year"": 2015, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 2}, {""version_id"": 657857, ""name"": ""English third edition"", ""year"": 2020, ""publishers"": [""SlugFest Games""], ""languages"": [""English""], ""score"": 0}]",,,,173634
|
||||
|
||||
|
@@ -38,5 +38,145 @@
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": []
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn 10",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2026,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": []
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn 2",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2008,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": []
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn 3",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2011,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": []
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn 4",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2013,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": []
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn 6: Villains",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2017,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": []
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn 7: The Tavern Crew",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2018,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": []
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn 8: Pub Crawl",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2022,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": []
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn 9: The Undercity",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2023,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": []
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn: Allies – Evil Pooky",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2021,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": []
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn: Allies – Halden the Unhinged",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2015,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": []
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn: Allies – Jin vs Greppa",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2025,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": []
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn: Allies – Melvyn vs. Marah",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2024,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": []
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn: Allies – Pooky",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2012,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": []
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn: Allies – Wrench",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2015,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": []
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1790,5 +1790,159 @@
|
||||
"art_notes": "",
|
||||
"source_photos": [],
|
||||
"title_normalized": "red dragon inn 5 character trove"
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn 10",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2026,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": [],
|
||||
"title_normalized": "red dragon inn 10"
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn 2",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2008,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": [],
|
||||
"title_normalized": "red dragon inn 2"
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn 3",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2011,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": [],
|
||||
"title_normalized": "red dragon inn 3"
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn 4",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2013,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": [],
|
||||
"title_normalized": "red dragon inn 4"
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn 6: Villains",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2017,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": [],
|
||||
"title_normalized": "red dragon inn 6 villains"
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn 7: The Tavern Crew",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2018,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": [],
|
||||
"title_normalized": "red dragon inn 7 tavern crew"
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn 8: Pub Crawl",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2022,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": [],
|
||||
"title_normalized": "red dragon inn 8 pub crawl"
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn 9: The Undercity",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2023,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": [],
|
||||
"title_normalized": "red dragon inn 9 undercity"
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn: Allies – Evil Pooky",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2021,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": [],
|
||||
"title_normalized": "red dragon inn allies evil pooky"
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn: Allies – Halden the Unhinged",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2015,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": [],
|
||||
"title_normalized": "red dragon inn allies halden unhinged"
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn: Allies – Jin vs Greppa",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2025,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": [],
|
||||
"title_normalized": "red dragon inn allies jin vs greppa"
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn: Allies – Melvyn vs. Marah",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2024,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": [],
|
||||
"title_normalized": "red dragon inn allies melvyn vs marah"
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn: Allies – Pooky",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2012,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": [],
|
||||
"title_normalized": "red dragon inn allies pooky"
|
||||
},
|
||||
{
|
||||
"title_raw": "The Red Dragon Inn: Allies – Wrench",
|
||||
"confidence": "high",
|
||||
"publisher_hint": "",
|
||||
"edition_hint": "",
|
||||
"year_hint": 2015,
|
||||
"language_hint": "",
|
||||
"art_notes": "",
|
||||
"source_photos": [],
|
||||
"title_normalized": "red dragon inn allies wrench"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -179,3 +179,18 @@ update,291847,148198878,Mantis Falls,476820,,updated,2026-08-09T15:49:29+00:00,
|
||||
update,2058,148198880,Civilization: West Extension Map,28041,,updated,2026-08-09T15:49:34+00:00,
|
||||
update,452833,148198886,Artistry: Delightful Doorways Mini Expansion,770724,,updated,2026-08-09T15:49:39+00:00,
|
||||
update,104590,53430550,Castle Panic: The Wizard's Tower,117256,,updated,2026-08-09T15:49:45+00:00,
|
||||
add,173634,,The Red Dragon Inn 5: The Character Trove,266954,,added,2026-08-09T16:24:23+00:00,
|
||||
add,455834,,The Red Dragon Inn 10,791302,,added,2026-08-09T16:24:28+00:00,
|
||||
add,33451,,The Red Dragon Inn 2,629314,,added,2026-08-09T16:24:35+00:00,
|
||||
add,66510,,The Red Dragon Inn 3,629315,,added,2026-08-09T16:24:41+00:00,
|
||||
add,142402,,The Red Dragon Inn 4,657689,,added,2026-08-09T16:24:48+00:00,
|
||||
add,212662,,The Red Dragon Inn 6: Villains,367695,,added,2026-08-09T16:24:54+00:00,
|
||||
add,244258,,The Red Dragon Inn 7: The Tavern Crew,421810,,added,2026-08-09T16:25:02+00:00,
|
||||
add,330097,,The Red Dragon Inn 8: Pub Crawl,557415,,added,2026-08-09T16:25:08+00:00,
|
||||
add,380868,,The Red Dragon Inn 9: The Undercity,800879,,added,2026-08-09T16:25:14+00:00,
|
||||
add,302181,,The Red Dragon Inn: Allies – Evil Pooky,629307,,added,2026-08-09T16:25:20+00:00,
|
||||
add,174922,,The Red Dragon Inn: Allies – Halden the Unhinged,657858,,added,2026-08-09T16:25:27+00:00,
|
||||
add,442637,,The Red Dragon Inn: Allies – Jin vs Greppa,752778,,added,2026-08-09T16:25:32+00:00,
|
||||
add,403503,,The Red Dragon Inn: Allies – Melvyn vs. Marah,712612,,added,2026-08-09T16:25:40+00:00,
|
||||
add,125472,,The Red Dragon Inn: Allies – Pooky,629302,,added,2026-08-09T16:25:47+00:00,
|
||||
add,168857,,The Red Dragon Inn: Allies – Wrench,657857,,added,2026-08-09T16:25:54+00:00,
|
||||
|
||||
|
@@ -514,8 +514,10 @@ class ReviewSession:
|
||||
ensure_ascii=False,
|
||||
)
|
||||
row["version_status"] = "version_ambiguous"
|
||||
row["version_id"] = ""
|
||||
row["version_name"] = ""
|
||||
# a CURRENT pick survives the reopen: abandoning the ballot must
|
||||
# not lose an approved edition. The lingering id is inert while
|
||||
# ambiguous (is_confident_version gates diff and upload), and the
|
||||
# next decide_version overwrites or clears it.
|
||||
self._save(row)
|
||||
return len(scored)
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
<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> (inside the edit panel) — an auto-match landed on the wrong game (same-name impostors happen). This clears the match, re-searches immediately, and returns the title to Review as a fresh ballot of candidates (including same-named sibling editions); manual-id entry is there too for games BGG's search can't find. 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>change edition</b> (on any matched line whose printing is set) — reopens the full edition list in Review; the current pick stays until you choose, so backing out loses nothing. Note the pipeline never edits a version already set on your BGG collection entry (strictly additive): if diff reports a "version disagreement", either fix the pipeline's pick here, or fix the entry by hand on BGG — the pipeline won't overwrite it.</p>
|
||||
<p><b>search BGG and tick them off</b> (inside the add panel) — for a box holding many games at once, like a compilation of two dozen expansions: search BGG once, tick every one that's in your box, and optionally name the container they all live inside. Each tick lands <i>already matched</i> — you picked it off BGG's own list, so resolve has nothing to re-derive; a pick whose name matches an undecided photo line decides that line instead of duplicating it. Contained games show "where it lives" in the Library, the container lists what's in it, and the shelf-space report knows they take no shelf of their own.</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, or a <i>duplicate read</i> — the same physical copy read differently from two photos, leaving two lines for one box (remove the worse read; the survivor keeps its own photos). 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. And the mirror case — ONE line that's really several physical copies — wants <b>split</b>, not remove.</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>
|
||||
|
||||
@@ -119,11 +119,16 @@ function render() {
|
||||
title="this copy's edition ballot is open">ballot in Review →</a>`
|
||||
: ""}
|
||||
${c.bgg_id && ["auto", "approved"].includes(c.status)
|
||||
&& ["version_unknown", "version_error", ""].includes(c.version_status || "")
|
||||
? `<button class="pickedition" data-title="${esc(c.title_raw)}"
|
||||
data-photos="${esc(c.photos.join(";"))}" data-rowix="${c.row_ix ?? ""}"
|
||||
title="you know which printing this box is — fetch the full edition list into Review">
|
||||
pick edition</button>`
|
||||
&& c.version_status !== "version_ambiguous"
|
||||
? ["version_auto", "version_approved"].includes(c.version_status)
|
||||
? `<button class="pickedition" data-title="${esc(c.title_raw)}"
|
||||
data-photos="${esc(c.photos.join(";"))}" data-rowix="${c.row_ix ?? ""}"
|
||||
title="wrong printing? reopen the full edition list — the current pick stays until you choose">
|
||||
change edition</button>`
|
||||
: `<button class="pickedition" data-title="${esc(c.title_raw)}"
|
||||
data-photos="${esc(c.photos.join(";"))}" data-rowix="${c.row_ix ?? ""}"
|
||||
title="you know which printing this box is — fetch the full edition list into Review">
|
||||
pick edition</button>`
|
||||
: ""}
|
||||
${c.shaky ? `<button class="confirmread" data-title="${esc(c.title_raw)}"
|
||||
data-photos="${esc(c.photos.join(";"))}"
|
||||
|
||||
@@ -761,3 +761,34 @@ def test_research_clears_the_previous_games_version(tmp_path):
|
||||
assert row["version_status"] == ""
|
||||
assert row["version_id"] == "" and row["version_name"] == ""
|
||||
assert row["version_candidates_json"] == "[]"
|
||||
|
||||
|
||||
def test_reopening_a_version_ballot_keeps_the_current_pick(tmp_path):
|
||||
"""Change-edition must be lossless: opening the full printing list on
|
||||
an approved row keeps the pick until a new decision, and the lingering
|
||||
id is inert while ambiguous."""
|
||||
from bggpipe.models import is_confident_version
|
||||
|
||||
cfg = _setup(
|
||||
tmp_path,
|
||||
[
|
||||
_row(
|
||||
title_raw="Wingspan",
|
||||
match_status="approved",
|
||||
bgg_id="266192",
|
||||
version_status="version_approved",
|
||||
version_id="465063",
|
||||
version_name="English first edition",
|
||||
)
|
||||
],
|
||||
)
|
||||
session = ReviewSession(
|
||||
cfg, console=quiet_console(), input_fn=scripted(), client=fixture_client()
|
||||
)
|
||||
row = session.rows[0]
|
||||
assert session.open_version_ballot(row) > 1
|
||||
assert row["version_status"] == "version_ambiguous"
|
||||
assert row["version_id"] == "465063" # survives until a new choice
|
||||
assert not is_confident_version(row) # but inert for diff/upload
|
||||
session.decide_version(row, None) # "can't tell" clears it properly
|
||||
assert row["version_id"] == ""
|
||||
|
||||
Reference in New Issue
Block a user