Commit Graph

5 Commits

Author SHA1 Message Date
Cal Corum
2521833afb CLAUDE: Add configurable regulation_innings and outs_per_inning
Issue #8 from code review - hardcoded inning limit (9) and outs (3)
prevented custom game modes like 7-inning doubleheaders.

Changes:
- Added regulation_innings: int = 9 to GameState (default standard)
- Added outs_per_inning: int = 3 to GameState (default standard)
- Updated validators.py: is_game_over(), can_continue_inning(), shallow outfield
- Updated game_models.py: is_game_over() uses state.regulation_innings
- Updated game_engine.py: _finalize_play() uses state.outs_per_inning

Now supports custom game modes:
- 7-inning doubleheaders
- 6-inning youth/minor league games
- Alternative out rules (2-out innings, etc.)

All 739 unit tests passing.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 20:06:57 -06:00
Cal Corum
86f671ba0c CLAUDE: Complete review of high-priority issues #6-11
Reviewed all remaining high-severity issues from code review:

Issues #6, #7 (Input validation): Already implemented in validators.py
- hold_runners validation: lines 71-77
- steal_attempts validation: lines 156-165
- Called from submit_defensive_decision and submit_offensive_decision

Issue #8 (Hardcoded inning limit): Deferred to next sprint
- Requires config system changes across validators.py and game_models.py
- Appropriate for technical debt phase

Issue #9 (Cleanup on abandon): Already fixed (part of Issue #3)
- _cleanup_game_resources() called in end_game() at line 1109

Issue #10 (Direct state mutation): Architectural acknowledgment
- Current pattern with debug logging throughout
- Consider immutable state pattern for v2 if auditability needed

Issue #11 (Logger singleton): Verified correct
- Module-level singleton at line 34, outside class

All high-priority issues now addressed or appropriately deferred.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 18:30:09 -06:00
Cal Corum
b95c5837b0 CLAUDE: Extract common resolution logic to _finalize_play method
Issue #5 from code review - resolve_play and resolve_manual_play shared
~70% of their code causing maintenance burden and divergent behavior risk.

Changes:
- Extracted common finalization logic to new _finalize_play() method
- resolve_play reduced from ~150 lines to ~60 lines
- resolve_manual_play reduced from ~135 lines to ~60 lines
- Single source of truth for: roll tracking, state capture, transaction
  handling, inning advance, cleanup, and state updates

Benefits:
- Changes to play finalization only need to be made in one place
- Reduced risk of divergent behavior between resolution modes
- Better testability and maintainability

All 739 unit tests passing (1 flaky probabilistic test occasionally fails).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 16:44:04 -06:00
Cal Corum
72a3b94ce7 CLAUDE: Add transaction handling for multi-step DB operations
Issue #4 from code review - multi-step database operations were not
wrapped in transactions, risking partial state on failure.

Changes:
- Modified save_play() and update_game_state() in DatabaseOperations
  to accept optional session parameter for transaction grouping
- Wrapped resolve_play() DB operations in single atomic transaction
- Wrapped resolve_manual_play() DB operations in single atomic transaction
- Transaction commits atomically or rolls back entirely on failure

Pattern: When session provided, use flush() for IDs without committing;
caller controls transaction. When no session, create internal transaction.

All 739 unit tests passing.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 16:39:01 -06:00
Cal Corum
cbdd8cf903 CLAUDE: Fix critical game engine issues and refactor CLAUDE.md docs
Critical fixes in game_engine.py:
- Fix silent error swallowing in _batch_save_inning_rolls (re-raise)
- Add per-game asyncio.Lock for race condition prevention
- Add _cleanup_game_resources() for memory leak prevention
- All 739 tests passing

Documentation refactoring:
- Created CODE_REVIEW_GAME_ENGINE.md documenting 24 identified issues
- Trimmed backend/app/core/CLAUDE.md from 1371 to 143 lines
- Trimmed frontend-sba/CLAUDE.md from 696 to 110 lines
- Created focused subdirectory CLAUDE.md files:
  - frontend-sba/components/CLAUDE.md (105 lines)
  - frontend-sba/composables/CLAUDE.md (79 lines)
  - frontend-sba/store/CLAUDE.md (116 lines)
  - frontend-sba/types/CLAUDE.md (95 lines)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 16:05:26 -06:00