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 <cursoragent@cursor.com>
- findAdminByKey returns role from admins.json (defaults to 'admin')
- JWT includes config-defined role instead of hardcoded 'admin'
- PresenceBar split into "who's here?" (page admins) and "connected"
(bot/utility services with icon+color badges)
- Bot/utility roles appear in presence on all pages when connected
- usePresence hook uses refs to avoid WS reconnect on navigation
- WS auth log prints admin name instead of generic 'admin'
- WS connection log reads X-Forwarded-For for real client IP
- AuthContext stores adminRole from login response
- Uncomment admins.json Docker volume mount, add SELinux :z flags
Made-with: Cursor
ADMIN_KEY is now optional (falls back handled by load-admins.js).
Added ADMIN_CONFIG_PATH env var and commented volume mount example.
Made-with: Cursor
JWT_SECRET and ADMIN_KEY no longer fall back to insecure defaults.
The app will throw at startup if these env vars are not set.
docker-compose.yml now uses :? syntax to require them.
Co-authored-by: Cursor <cursoragent@cursor.com>