From c24223be5cdefa29cc9fe534f10230f0e3d6097f Mon Sep 17 00:00:00 2001 From: cottongin Date: Wed, 24 Jun 2026 12:45:59 -0400 Subject: [PATCH] feat: add TMP3 support and fix shard probe lifecycle bug MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add Trivia Murder Party 3 (Playtest) ticker and seed data. Bind-mount tickers.json in docker-compose so ticker changes take effect on restart without image rebuilds. Fix shard monitor probe poisoning game lifecycle state — the player-count probe no longer sets gameFinished, which was preventing the main WS from processing room/lock and room/exit for games like TMP3 that don't send entity updates. Co-authored-by: Cursor --- backend/config/tickers.json | 1 + backend/utils/ecast-shard-client.js | 7 +++++-- docker-compose.yml | 1 + frontend/src/config/branding.js | 2 +- games-list.csv | 1 + 5 files changed, 9 insertions(+), 3 deletions(-) diff --git a/backend/config/tickers.json b/backend/config/tickers.json index b7ae607..374efe8 100644 --- a/backend/config/tickers.json +++ b/backend/config/tickers.json @@ -8,6 +8,7 @@ "FBG4": "Fibbage 4", "TMP1": "Trivia Murder Party", "TMP2": "Trivia Murder Party 2", + "TMP3": "Trivia Murder Party 3 (Playtest)", "DRWF": "Drawful", "DRWA": "Drawful Animate", "DD": "Dirty Drawful", diff --git a/backend/utils/ecast-shard-client.js b/backend/utils/ecast-shard-client.js index 8476712..39ccbb8 100644 --- a/backend/utils/ecast-shard-client.js +++ b/backend/utils/ecast-shard-client.js @@ -172,8 +172,9 @@ class EcastShardClient { this.playerCount = playerCount; this.playerNames = playerNames; } - } else if (msg.opcode === 'error' && msg.result?.code === 2027) { - this.gameFinished = true; + } else if (msg.opcode === 'error') { + // Probe errors are transient — lifecycle is managed + // by the main connection and reconnect logic } } catch (_) {} clearTimeout(timeout); @@ -562,6 +563,8 @@ class EcastShardClient { finalPlayerCount: this.playerCount, }); activeShards.delete(`${this.sessionId}-${this.gameId}`); + this.gameFinished = true; + this.disconnect(); return false; } finally { this.reconnecting = false; diff --git a/docker-compose.yml b/docker-compose.yml index 8037196..5765b1f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,6 +17,7 @@ services: - jackbox-data:/app/data - ./games-list.csv:/app/games-list.csv:ro,z - ./backend/config/admins.json:/app/config/admins.json:ro,z + - ./backend/config/tickers.json:/app/config/tickers.json:ro,z ports: - "5000:5000" networks: diff --git a/frontend/src/config/branding.js b/frontend/src/config/branding.js index b60a114..73867c4 100644 --- a/frontend/src/config/branding.js +++ b/frontend/src/config/branding.js @@ -2,7 +2,7 @@ export const branding = { app: { name: 'HSO Jackbox Game Picker', shortName: 'Jackbox Game Picker', - version: '0.7.12 - Pokémon-Go-To-The-Polls Edition', + version: '0.7.13 - Pokémon-Go-To-The-Polls Edition', description: 'Spicing up Hyper Spaceout game nights!', }, meta: { diff --git a/games-list.csv b/games-list.csv index c9f67ec..b3ffa63 100644 --- a/games-list.csv +++ b/games-list.csv @@ -58,3 +58,4 @@ Jackbox Naughty Pack,Fakin’ It All Night Long,3,8,????,?,No,?,? Jackbox Naughty Pack,Dirty Drawful,3,8,????,?,No,?,? Jackbox Naughty Pack,Let Me Finish,3,8,????,?,No,?,? Jackbox Party Pack,Survey Scramble,2,10,????,Yes,Yes,?,? +Jackbox Party Pack Playtests,Trivia Murder Party 3 (Playtest),1,8,????,?,No,Trivia,