paper-dynasty-discord/tests
Cal Corum ebf006e5c6 Fix play lock system to prevent permanent user lockouts
CRITICAL BUG FIX: Play locks were never released on exceptions, causing
permanent user lockouts. Found 13 stuck plays in production.

Changes:
1. Added lock_play parameter to checks_log_interaction() (default True)
2. Removed unnecessary locks from read-only commands:
   - /settings-ingame (game settings, not play state)
   - /show-card defense (read-only display)
   - /substitute commands (just show UI, lock in callback)
3. Added safe_play_lock() context manager for automatic lock release
4. Added play locking to substitution callbacks:
   - SelectBatterSub.callback()
   - SelectReliefPitcher.callback()
5. Global error handler now releases stuck locks automatically

Architecture:
- Commands that display UI or read data: No lock
- Commands that modify play state: Lock at last possible moment
- 3-layer defense: manual release, context manager, global handler

Resolves race condition from concurrent play modifications.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-04 09:21:18 -06:00
..
command_logic Catchup files 2025-11-11 13:22:06 -06:00
gameplay_models Catchup commit 2025-07-22 09:22:19 -05:00
in_game Cogs to Packages Groundwork 2025-08-17 08:46:55 -05:00
other Added AbRoll and JumpRoll 2024-11-17 14:57:54 -06:00
players_refactor Added search functionality to /player command 2025-10-08 14:45:41 -05:00
conftest.py Catchup commit 2025-07-22 09:22:19 -05:00
factory.py Catchup files 2025-11-11 13:22:06 -06:00
test_api_calls.py Add API timeout/retry logic and fix get_team_by_owner for PostgreSQL 2026-01-31 15:52:14 -06:00
test_play_locking.py Fix play lock system to prevent permanent user lockouts 2026-02-04 09:21:18 -06:00