Job status classes get an s- prefix: .done was the celebration card

"resolve: done" rendered <span class="done"> — which is the review
page's all-done celebration card class, so the status line became a
floating bordered card squatting on the Activity heading. Status
spans are now s-idle/s-running/s-done/s-failed, scoped under
#jobstate, and done earns its green.

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:02:39 -04:00
co-authored by Claude Fable 5
parent e187ed4f3f
commit 7b6ea90934
5 changed files with 20 additions and 9 deletions
-2
View File
@@ -118,8 +118,6 @@ KILL DOCTOR LUCKY,257,Kill Doctor Lucky,1996,boardgame,auto,520364,"Cheapass env
ALICE IS MISSING SILENT FALLS EXPANSION,,,,,unmatched,,,,[],[],IMG_4566.jpeg,, ALICE IS MISSING SILENT FALLS EXPANSION,,,,,unmatched,,,,[],[],IMG_4566.jpeg,,
ALICE IS MISSING A SILENT ROLE PLAYING GAME,,,,,unmatched,,,,[],[],IMG_4566.jpeg,, ALICE IS MISSING A SILENT ROLE PLAYING GAME,,,,,unmatched,,,,[],[],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,,
BOTANY EXPANSION TANTALIZING TREES,,,,,unmatched,,,,[],[],IMG_4571.jpeg,,
"BOTANY EXPANSION PERILOUS PERFUMES POISONOUS, CARNIVOROUS, PARASITIC AND BIZARRE PLANTS",,,,,unmatched,,,,[],[],IMG_4571.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,,,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,,
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
118 ALICE IS MISSING SILENT FALLS EXPANSION unmatched [] [] IMG_4566.jpeg
119 ALICE IS MISSING A SILENT ROLE PLAYING GAME unmatched [] [] IMG_4566.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
BOTANY EXPANSION TANTALIZING TREES unmatched [] [] IMG_4571.jpeg
BOTANY EXPANSION PERILOUS PERFUMES POISONOUS, CARNIVOROUS, PARASITIC AND BIZARRE PLANTS unmatched [] [] IMG_4571.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 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
+10
View File
@@ -77,5 +77,15 @@
"match": "MANTIS FALLS (a game of trust)", "match": "MANTIS FALLS (a game of trust)",
"title_raw": "MANTIS FALLS", "title_raw": "MANTIS FALLS",
"confidence": "high" "confidence": "high"
},
{
"match": "BOTANY EXPANSION TANTALIZING TREES",
"title_raw": "BOTANY: TANTALIZING TREES",
"confidence": "high"
},
{
"match": "BOTANY EXPANSION PERILOUS PERFUMES POISONOUS, CARNIVOROUS, PARASITIC AND BIZARRE PLANTS",
"title_raw": "BOTANY: PERILOUS PERFUMES",
"confidence": "high"
} }
] ]
+4 -4
View File
@@ -1631,7 +1631,7 @@
"title_normalized": "etherfields kittenburg expansion" "title_normalized": "etherfields kittenburg expansion"
}, },
{ {
"title_raw": "BOTANY EXPANSION TANTALIZING TREES", "title_raw": "BOTANY: TANTALIZING TREES",
"confidence": "high", "confidence": "high",
"publisher_hint": "Dux Somnium", "publisher_hint": "Dux Somnium",
"edition_hint": "Expansion", "edition_hint": "Expansion",
@@ -1641,10 +1641,10 @@
"source_photos": [ "source_photos": [
"IMG_4571.jpeg" "IMG_4571.jpeg"
], ],
"title_normalized": "botany expansion tantalizing trees" "title_normalized": "botany tantalizing trees"
}, },
{ {
"title_raw": "BOTANY EXPANSION PERILOUS PERFUMES POISONOUS, CARNIVOROUS, PARASITIC AND BIZARRE PLANTS", "title_raw": "BOTANY: PERILOUS PERFUMES",
"confidence": "high", "confidence": "high",
"publisher_hint": "Dux Somnium", "publisher_hint": "Dux Somnium",
"edition_hint": "Expansion", "edition_hint": "Expansion",
@@ -1654,7 +1654,7 @@
"source_photos": [ "source_photos": [
"IMG_4571.jpeg" "IMG_4571.jpeg"
], ],
"title_normalized": "botany expansion perilous perfumes poisonous carnivorous parasitic and bizarre plants" "title_normalized": "botany perilous perfumes"
}, },
{ {
"title_raw": "Parsely", "title_raw": "Parsely",
+3 -2
View File
@@ -411,8 +411,9 @@ button.danger { color: var(--stop-ink); border-color: var(--stop); background: #
max-height: 20rem; overflow-y: auto; white-space: pre-wrap; max-height: 20rem; overflow-y: auto; white-space: pre-wrap;
} }
#jobstate { font-size: .85rem; color: var(--ink); margin-bottom: .4rem; } #jobstate { font-size: .85rem; color: var(--ink); margin-bottom: .4rem; }
#jobstate .running { color: var(--accent-ink); font-weight: 600; } #jobstate .s-running { color: var(--accent-ink); font-weight: 600; }
#jobstate .failed { color: var(--stop-ink); font-weight: 600; } #jobstate .s-done { color: var(--go-ink); font-weight: 600; }
#jobstate .s-failed { color: var(--stop-ink); font-weight: 600; }
/* (phone-width rules live in the responsive section at the end) */ /* (phone-width rules live in the responsive section at the end) */
+3 -1
View File
@@ -75,7 +75,9 @@ function render() {
const job = P.job; const job = P.job;
const state = document.getElementById("jobstate"); const state = document.getElementById("jobstate");
if (job.status === "idle") state.textContent = "idle"; if (job.status === "idle") state.textContent = "idle";
else state.innerHTML = `<span class="${esc(job.status)}">${esc(job.stage)}: ${esc(job.status)}</span>` + // s- prefix: a bare status class collides with page classes (.done is
// the review celebration card)
else state.innerHTML = `<span class="s-${esc(job.status)}">${esc(job.stage)}: ${esc(job.status)}</span>` +
(job.error ? `${esc(job.error)}` : ""); (job.error ? `${esc(job.error)}` : "");
const logEl = document.getElementById("joblog"); const logEl = document.getElementById("joblog");
const atBottom = logEl.scrollTop + logEl.clientHeight >= logEl.scrollHeight - 4; const atBottom = logEl.scrollTop + logEl.clientHeight >= logEl.scrollHeight - 4;