Claude
040ca3f332
Fix two latent bugs surfaced by static analysis
...
Both are code paths that never run in a green test today but crash or
misbehave the moment a mod or a link failure exercises them.
1. Music.lua: applyVolume built its `music.volume` hook context from the
private `state` table, but was defined *above* `local state = {...}`, so
those reads bound to the nil global `state`. Any mod registering the
music.volume hook crashed with "attempt to index a nil value (global
'state')" the first time a volume was applied. Forward-declare `state`
above applyVolume. Regression test drives a file-backed song through the
hook and asserts the context resolves.
2. Tournament.lua: `local battle, why = isHost and newHost() or newGuest()`
had two defects. The and/or idiom truncates a call to its first result,
so `why` (the specific failure reason) was always dropped and every link
failure showed the generic "Link battle can't start" instead of e.g.
"same mods on both games". Worse, when a host's newHost() returned nil,
the `or` fell through and wrongly called newGuest() as the host. Split
into an explicit if/else so the reason is preserved and each role calls
its own constructor.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01Q6bFAiQyZ5jDmewsbB4LG9
2026-07-31 14:34:58 +00:00
..
2026-07-25 15:21:49 -04:00
2026-07-30 07:41:41 -04:00
2026-07-19 16:18:18 -04:00
2026-07-19 16:18:18 -04:00
2026-07-19 16:18:18 -04:00
2026-07-19 16:18:18 -04:00
2026-07-30 11:44:16 -04:00
2026-07-19 16:18:18 -04:00
2026-07-27 13:37:05 -04:00
2026-07-30 07:41:41 -04:00
CLOSES #339 , CLOSES #354 , CLOSES #360 , CLOSES #372 , CLOSES #373 , CLOSES #374 , CLOSES #375 , CLOSES #378 , CLOSES #379 , CLOSES #383 , CLOSES #384 , CLOSES #385 , CLOSES #391 , CLOSES #392 , CLOSES #393 , CLOSES #394 , CLOSES #395 , CLOSES #396 , CLOSES #397 , CLOSES #398 , CLOSES #413 , CLOSES #420 , CLOSES #423 , CLOSES #424 , CLOSES #425 , CLOSES #426 , CLOSES #427 , CLOSES #429 , CLOSES #430 , CLOSES #431 , CLOSES #433 , CLOSES #435 , CLOSES #436 , CLOSES #438 , CLOSES #439 , CLOSES #441 , CLOSES #442 , CLOSES #444
2026-07-30 11:14:51 -04:00
2026-07-30 11:35:57 -04:00
CLOSES #339 , CLOSES #354 , CLOSES #360 , CLOSES #372 , CLOSES #373 , CLOSES #374 , CLOSES #375 , CLOSES #378 , CLOSES #379 , CLOSES #383 , CLOSES #384 , CLOSES #385 , CLOSES #391 , CLOSES #392 , CLOSES #393 , CLOSES #394 , CLOSES #395 , CLOSES #396 , CLOSES #397 , CLOSES #398 , CLOSES #413 , CLOSES #420 , CLOSES #423 , CLOSES #424 , CLOSES #425 , CLOSES #426 , CLOSES #427 , CLOSES #429 , CLOSES #430 , CLOSES #431 , CLOSES #433 , CLOSES #435 , CLOSES #436 , CLOSES #438 , CLOSES #439 , CLOSES #441 , CLOSES #442 , CLOSES #444
2026-07-30 11:14:51 -04:00
2026-07-28 21:34:09 -04:00
2026-07-29 12:53:24 -03:00
CLOSES #339 , CLOSES #354 , CLOSES #360 , CLOSES #372 , CLOSES #373 , CLOSES #374 , CLOSES #375 , CLOSES #378 , CLOSES #379 , CLOSES #383 , CLOSES #384 , CLOSES #385 , CLOSES #391 , CLOSES #392 , CLOSES #393 , CLOSES #394 , CLOSES #395 , CLOSES #396 , CLOSES #397 , CLOSES #398 , CLOSES #413 , CLOSES #420 , CLOSES #423 , CLOSES #424 , CLOSES #425 , CLOSES #426 , CLOSES #427 , CLOSES #429 , CLOSES #430 , CLOSES #431 , CLOSES #433 , CLOSES #435 , CLOSES #436 , CLOSES #438 , CLOSES #439 , CLOSES #441 , CLOSES #442 , CLOSES #444
2026-07-30 11:14:51 -04:00
2026-07-30 07:41:41 -04:00
2026-07-31 14:34:58 +00:00
2026-07-25 15:21:49 -04:00
2026-07-25 15:21:49 -04:00
2026-07-31 01:44:17 +00:00
2026-07-30 07:41:41 -04:00
CLOSES #339 , CLOSES #354 , CLOSES #360 , CLOSES #372 , CLOSES #373 , CLOSES #374 , CLOSES #375 , CLOSES #378 , CLOSES #379 , CLOSES #383 , CLOSES #384 , CLOSES #385 , CLOSES #391 , CLOSES #392 , CLOSES #393 , CLOSES #394 , CLOSES #395 , CLOSES #396 , CLOSES #397 , CLOSES #398 , CLOSES #413 , CLOSES #420 , CLOSES #423 , CLOSES #424 , CLOSES #425 , CLOSES #426 , CLOSES #427 , CLOSES #429 , CLOSES #430 , CLOSES #431 , CLOSES #433 , CLOSES #435 , CLOSES #436 , CLOSES #438 , CLOSES #439 , CLOSES #441 , CLOSES #442 , CLOSES #444
2026-07-30 11:14:51 -04:00
2026-07-30 07:41:41 -04:00
2026-07-29 14:01:19 -04:00
CLOSES #339 , CLOSES #354 , CLOSES #360 , CLOSES #372 , CLOSES #373 , CLOSES #374 , CLOSES #375 , CLOSES #378 , CLOSES #379 , CLOSES #383 , CLOSES #384 , CLOSES #385 , CLOSES #391 , CLOSES #392 , CLOSES #393 , CLOSES #394 , CLOSES #395 , CLOSES #396 , CLOSES #397 , CLOSES #398 , CLOSES #413 , CLOSES #420 , CLOSES #423 , CLOSES #424 , CLOSES #425 , CLOSES #426 , CLOSES #427 , CLOSES #429 , CLOSES #430 , CLOSES #431 , CLOSES #433 , CLOSES #435 , CLOSES #436 , CLOSES #438 , CLOSES #439 , CLOSES #441 , CLOSES #442 , CLOSES #444
2026-07-30 11:14:51 -04:00
2026-07-28 09:25:55 -04:00
CLOSES #339 , CLOSES #354 , CLOSES #360 , CLOSES #372 , CLOSES #373 , CLOSES #374 , CLOSES #375 , CLOSES #378 , CLOSES #379 , CLOSES #383 , CLOSES #384 , CLOSES #385 , CLOSES #391 , CLOSES #392 , CLOSES #393 , CLOSES #394 , CLOSES #395 , CLOSES #396 , CLOSES #397 , CLOSES #398 , CLOSES #413 , CLOSES #420 , CLOSES #423 , CLOSES #424 , CLOSES #425 , CLOSES #426 , CLOSES #427 , CLOSES #429 , CLOSES #430 , CLOSES #431 , CLOSES #433 , CLOSES #435 , CLOSES #436 , CLOSES #438 , CLOSES #439 , CLOSES #441 , CLOSES #442 , CLOSES #444
2026-07-30 11:14:51 -04:00
CLOSES #339 , CLOSES #354 , CLOSES #360 , CLOSES #372 , CLOSES #373 , CLOSES #374 , CLOSES #375 , CLOSES #378 , CLOSES #379 , CLOSES #383 , CLOSES #384 , CLOSES #385 , CLOSES #391 , CLOSES #392 , CLOSES #393 , CLOSES #394 , CLOSES #395 , CLOSES #396 , CLOSES #397 , CLOSES #398 , CLOSES #413 , CLOSES #420 , CLOSES #423 , CLOSES #424 , CLOSES #425 , CLOSES #426 , CLOSES #427 , CLOSES #429 , CLOSES #430 , CLOSES #431 , CLOSES #433 , CLOSES #435 , CLOSES #436 , CLOSES #438 , CLOSES #439 , CLOSES #441 , CLOSES #442 , CLOSES #444
2026-07-30 11:14:51 -04:00
2026-07-30 07:41:41 -04:00
2026-07-25 15:21:49 -04:00
2026-07-28 06:16:21 -04:00
2026-07-28 06:16:21 -04:00
CLOSES #339 , CLOSES #354 , CLOSES #360 , CLOSES #372 , CLOSES #373 , CLOSES #374 , CLOSES #375 , CLOSES #378 , CLOSES #379 , CLOSES #383 , CLOSES #384 , CLOSES #385 , CLOSES #391 , CLOSES #392 , CLOSES #393 , CLOSES #394 , CLOSES #395 , CLOSES #396 , CLOSES #397 , CLOSES #398 , CLOSES #413 , CLOSES #420 , CLOSES #423 , CLOSES #424 , CLOSES #425 , CLOSES #426 , CLOSES #427 , CLOSES #429 , CLOSES #430 , CLOSES #431 , CLOSES #433 , CLOSES #435 , CLOSES #436 , CLOSES #438 , CLOSES #439 , CLOSES #441 , CLOSES #442 , CLOSES #444
2026-07-30 11:14:51 -04:00
2026-07-29 13:14:56 -04:00