Review cards sort alphabetically within each section
Same reasoning as the Titles page: csv order is extraction order, which reads as random. Matches, Editions, and Merges each sort by title (case-insensitive); the sort is stable within a payload so the keyboard cursor doesn't jump between polls. 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
90e75daf98
commit
42ef34c3a7
+1
-1
@@ -5,7 +5,7 @@ COSMIC ENCOUNTER,40529,Cosmic Encounter,1991,boardgame,approved,,,version_unknow
|
|||||||
SHERIFF OF NOTTINGHAM,157969,Sheriff of Nottingham,2014,boardgame,auto,,,version_unknown,"[{""bgg_id"": 157969, ""name"": ""Sheriff of Nottingham"", ""year"": 2014, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4499.jpeg,,
|
SHERIFF OF NOTTINGHAM,157969,Sheriff of Nottingham,2014,boardgame,auto,,,version_unknown,"[{""bgg_id"": 157969, ""name"": ""Sheriff of Nottingham"", ""year"": 2014, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4499.jpeg,,
|
||||||
5 MINUTE DUNGEON,207830,5-Minute Dungeon,2017,boardgame,auto,,,version_unknown,"[{""bgg_id"": 207830, ""name"": ""5-Minute Dungeon"", ""year"": 2017, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4499.jpeg,,
|
5 MINUTE DUNGEON,207830,5-Minute Dungeon,2017,boardgame,auto,,,version_unknown,"[{""bgg_id"": 207830, ""name"": ""5-Minute Dungeon"", ""year"": 2017, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4499.jpeg,,
|
||||||
Britannia - Game of the Birth of Britain,240,Britannia,1986,boardgame,auto,24621,Avalon Hill second edition,version_auto,"[{""bgg_id"": 240, ""name"": ""Britannia"", ""year"": 1986, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 41.9, ""owned"": null, ""rank"": null}]","[{""version_id"": 24621, ""name"": ""Avalon Hill second edition"", ""year"": 1987, ""publishers"": [""The Avalon Hill Game Co""], ""languages"": [""English""], ""score"": 3}]",IMG_4500.jpeg,,
|
Britannia - Game of the Birth of Britain,240,Britannia,1986,boardgame,auto,24621,Avalon Hill second edition,version_auto,"[{""bgg_id"": 240, ""name"": ""Britannia"", ""year"": 1986, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 41.9, ""owned"": null, ""rank"": null}]","[{""version_id"": 24621, ""name"": ""Avalon Hill second edition"", ""year"": 1987, ""publishers"": [""The Avalon Hill Game Co""], ""languages"": [""English""], ""score"": 3}]",IMG_4500.jpeg,,
|
||||||
Civilization - Game of the Heroic Age - The Dawn of History 8000 BC to 250 BC,71,Civilization,1980,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 71, ""name"": ""Civilization"", ""year"": 1980, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 31.2, ""owned"": null, ""rank"": null}]","[{""version_id"": 24006, ""name"": ""Avalon Hill first edition 1981"", ""year"": 1981, ""publishers"": [""The Avalon Hill Game Co""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 24003, ""name"": ""Avalon Hill second edition 1982"", ""year"": 1982, ""publishers"": [""The Avalon Hill Game Co""], ""languages"": [""English""], ""score"": 3}]",IMG_4500.jpeg,,
|
Civilization - Game of the Heroic Age - The Dawn of History 8000 BC to 250 BC,71,Civilization,1980,boardgame,auto,24006,Avalon Hill first edition 1981,version_approved,"[{""bgg_id"": 71, ""name"": ""Civilization"", ""year"": 1980, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 31.2, ""owned"": null, ""rank"": null}]","[{""version_id"": 24006, ""name"": ""Avalon Hill first edition 1981"", ""year"": 1981, ""publishers"": [""The Avalon Hill Game Co""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 24003, ""name"": ""Avalon Hill second edition 1982"", ""year"": 1982, ""publishers"": [""The Avalon Hill Game Co""], ""languages"": [""English""], ""score"": 3}]",IMG_4500.jpeg,,
|
||||||
Advanced Civilization - Game Expansion of the Heroic Age,177,Advanced Civilization,1991,boardgame,auto,24972,English edition,version_auto,"[{""bgg_id"": 177, ""name"": ""Advanced Civilization"", ""year"": 1991, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 59.2, ""owned"": null, ""rank"": null}]","[{""version_id"": 24972, ""name"": ""English edition"", ""year"": 1991, ""publishers"": [""The Avalon Hill Game Co""], ""languages"": [""English""], ""score"": 3}]",IMG_4500.jpeg,,
|
Advanced Civilization - Game Expansion of the Heroic Age,177,Advanced Civilization,1991,boardgame,auto,24972,English edition,version_auto,"[{""bgg_id"": 177, ""name"": ""Advanced Civilization"", ""year"": 1991, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 59.2, ""owned"": null, ""rank"": null}]","[{""version_id"": 24972, ""name"": ""English edition"", ""year"": 1991, ""publishers"": [""The Avalon Hill Game Co""], ""languages"": [""English""], ""score"": 3}]",IMG_4500.jpeg,,
|
||||||
Doctor Who - The Game of Time & Space,3090,Doctor Who: The Game of Time & Space,1980,boardgame,auto,25782,English edition,version_auto,"[{""bgg_id"": 3090, ""name"": ""Doctor Who: The Game of Time & Space"", ""year"": 1980, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 25782, ""name"": ""English edition"", ""year"": 1980, ""publishers"": [""Games Workshop Ltd.""], ""languages"": [""English""], ""score"": 3}]",IMG_4500.jpeg,,
|
Doctor Who - The Game of Time & Space,3090,Doctor Who: The Game of Time & Space,1980,boardgame,auto,25782,English edition,version_auto,"[{""bgg_id"": 3090, ""name"": ""Doctor Who: The Game of Time & Space"", ""year"": 1980, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 25782, ""name"": ""English edition"", ""year"": 1980, ""publishers"": [""Games Workshop Ltd.""], ""languages"": [""English""], ""score"": 3}]",IMG_4500.jpeg,,
|
||||||
Sorcerer - The Game of Magical Conflict,3585,Sorcerer: The Game of Magical Conflict,1975,boardgame,auto,211154,SPI Designer's Edition,version_auto,"[{""bgg_id"": 3585, ""name"": ""Sorcerer: The Game of Magical Conflict"", ""year"": 1975, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 211154, ""name"": ""SPI Designer's Edition"", ""year"": 1975, ""publishers"": [""SPI (Simulations Publications, Inc.)""], ""languages"": [""English""], ""score"": 5}, {""version_id"": 158145, ""name"": ""SPI boxed edition"", ""year"": 1975, ""publishers"": [""SPI (Simulations Publications, Inc.)""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 249246, ""name"": ""SPI flat-pack edition"", ""year"": 1975, ""publishers"": [""SPI (Simulations Publications, Inc.)""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 33889, ""name"": ""UK flat box edition"", ""year"": 1975, ""publishers"": [""SPI (Simulations Publications, Inc.)""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 158147, ""name"": ""SPI French/Dutch edition"", ""year"": 1975, ""publishers"": [""SPI (Simulations Publications, Inc.)""], ""languages"": [""Dutch"", ""French""], ""score"": 2}]",IMG_4500.jpeg,,
|
Sorcerer - The Game of Magical Conflict,3585,Sorcerer: The Game of Magical Conflict,1975,boardgame,auto,211154,SPI Designer's Edition,version_auto,"[{""bgg_id"": 3585, ""name"": ""Sorcerer: The Game of Magical Conflict"", ""year"": 1975, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 211154, ""name"": ""SPI Designer's Edition"", ""year"": 1975, ""publishers"": [""SPI (Simulations Publications, Inc.)""], ""languages"": [""English""], ""score"": 5}, {""version_id"": 158145, ""name"": ""SPI boxed edition"", ""year"": 1975, ""publishers"": [""SPI (Simulations Publications, Inc.)""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 249246, ""name"": ""SPI flat-pack edition"", ""year"": 1975, ""publishers"": [""SPI (Simulations Publications, Inc.)""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 33889, ""name"": ""UK flat box edition"", ""year"": 1975, ""publishers"": [""SPI (Simulations Publications, Inc.)""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 158147, ""name"": ""SPI French/Dutch edition"", ""year"": 1975, ""publishers"": [""SPI (Simulations Publications, Inc.)""], ""languages"": [""Dutch"", ""French""], ""score"": 2}]",IMG_4500.jpeg,,
|
||||||
|
|||||||
|
@@ -0,0 +1,12 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"title_raw": "Civilization: West Extension Map",
|
||||||
|
"confidence": "high",
|
||||||
|
"publisher_hint": "",
|
||||||
|
"edition_hint": "",
|
||||||
|
"year_hint": null,
|
||||||
|
"language_hint": "",
|
||||||
|
"art_notes": "",
|
||||||
|
"source_photos": []
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -1746,5 +1746,16 @@
|
|||||||
"shelf-20260803-215703.jpg"
|
"shelf-20260803-215703.jpg"
|
||||||
],
|
],
|
||||||
"title_normalized": "office trivia game"
|
"title_normalized": "office trivia game"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title_raw": "Civilization: West Extension Map",
|
||||||
|
"confidence": "high",
|
||||||
|
"publisher_hint": "",
|
||||||
|
"edition_hint": "",
|
||||||
|
"year_hint": null,
|
||||||
|
"language_hint": "",
|
||||||
|
"art_notes": "",
|
||||||
|
"source_photos": [],
|
||||||
|
"title_normalized": "civilization west extension map"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -141,17 +141,22 @@ function render() {
|
|||||||
: `<p class="next">Next: run <b>diff</b> from the <a href="/">pipeline</a>, then check the <a href="/queue">queue</a>.</p>`}
|
: `<p class="next">Next: run <b>diff</b> from the <a href="/">pipeline</a>, then check the <a href="/queue">queue</a>.</p>`}
|
||||||
</div>`;
|
</div>`;
|
||||||
}
|
}
|
||||||
|
// csv order is extraction order — alphabetize so a long session has a
|
||||||
|
// findable, predictable shape (stable within a payload, so the keyboard
|
||||||
|
// cursor stays put between polls)
|
||||||
|
const byTitle = (a, b) =>
|
||||||
|
a.title_raw.localeCompare(b.title_raw, undefined, { sensitivity: "base" });
|
||||||
if (s.pending.length) {
|
if (s.pending.length) {
|
||||||
html += `<h2 id="matches">Matches <span class="count">— pick the game each photo shows</span></h2>`;
|
html += `<h2 id="matches">Matches <span class="count">— pick the game each photo shows</span></h2>`;
|
||||||
html += s.pending.map(matchCard).join("");
|
html += [...s.pending].sort(byTitle).map(matchCard).join("");
|
||||||
}
|
}
|
||||||
if (s.versions.length) {
|
if (s.versions.length) {
|
||||||
html += `<h2 id="editions">Editions <span class="count">— optional pass, never blocks uploads</span></h2>`;
|
html += `<h2 id="editions">Editions <span class="count">— optional pass, never blocks uploads</span></h2>`;
|
||||||
html += s.versions.map(versionCard).join("");
|
html += [...s.versions].sort(byTitle).map(versionCard).join("");
|
||||||
}
|
}
|
||||||
if (s.merges.length) {
|
if (s.merges.length) {
|
||||||
html += `<h2 id="merges">Merges <span class="count">— duplicate reads folded into one game; veto if wrong</span></h2>`;
|
html += `<h2 id="merges">Merges <span class="count">— duplicate reads folded into one game; veto if wrong</span></h2>`;
|
||||||
html += s.merges.map(mg => `
|
html += [...s.merges].sort(byTitle).map(mg => `
|
||||||
<section class="card merge actionable" data-kind="merge"
|
<section class="card merge actionable" data-kind="merge"
|
||||||
data-rowix="${mg.row_ix}"
|
data-rowix="${mg.row_ix}"
|
||||||
data-title="${esc(mg.title_raw)}" data-photos="${esc(mg.source_photos)}">
|
data-title="${esc(mg.title_raw)}" data-photos="${esc(mg.source_photos)}">
|
||||||
|
|||||||
Reference in New Issue
Block a user