claude-memory/graph/problems/play-lock-never-released-on-exception-causes-permanent-user-9b70e3.md
Cal Corum b140d4d82a migrate: 313 memories from MemoryGraph
- 313 new markdown files created
- 30 relationships embedded
- 313 entries indexed
- State initialized with usage data
2026-02-13 11:11:48 -06:00

1.3 KiB

id type title tags importance confidence created updated relations
9b70e3d5-d0b6-48c5-88d0-2fbc36f4fd4d problem Play lock never released on exception - causes permanent user lockout
paper-dynasty
python
discord-bot
sqlalchemy
concurrency
critical-bug
play-lock
database
0.95 0.8 2026-02-04T15:02:48.444623+00:00 2026-02-04T15:02:48.444623+00:00
target type direction strength
5d8e1ff5-3354-4cfa-ab63-bf96b5ce1e01 SOLVES outgoing 0.5
target type direction strength
638ac861-2c7b-462c-9d82-672e4536688e REQUIRES outgoing 0.5

The play locking system in checks_log_interaction() sets play.locked=True and commits it (logic_gameplay.py:1262-1264), but if an exception occurs during command processing, the lock is NEVER released. The only unlock is in complete_play() (line 1015) which only runs on successful completion. This caused 13 plays to be permanently locked across multiple games, completely blocking users. Production incident on 2026-02-04: play 103546 in game 1346 was stuck locked, blocking active user. Error message claims 'auto-unlock will trigger' but that functionality doesn't exist. Root cause: no try/finally block or exception handling to release lock on failure. Manual fix: UPDATE play SET locked=false WHERE locked=true AND complete=false.