- simulation.rs: RaiseBelowMinimum/InsufficientChips now skip hand
instead of crashing entire simulation. Hands skipped are NOT counted
in total_hands (accurate player stats).
- flock_bot.rs: Premium preflop raise falls back to Call when stack
cannot afford minimum raise, preventing illegal AllIn edge cases.
- Added shutdown(), showdown_event() trait methods to HoldemPlayer.
- Added external_id, table_id to GameInfo/PlayerInfo.
- Strategy trait: added save_state() for graceful profile persistence.
- Rewrite generate_tables() with HashMap-based BFS instead of broken
sentinel-loop sorted array approach. The old generator used a
zero-terminated loop that stopped prematurely when mid-array key
insertions left gaps, producing invalid trie pointers.
- Re-enable auto-generation in load_or_generate() since the generator
now works correctly (verified by exhaustive C(52,5) correctness test).
- Wire HandRunner::showdown() through Evaluator::instance() instead of
calling AlgorithmicEvaluator directly, giving access to the full
3-tier cascade (Supersonic -> Cactus Kev -> Algorithmic).
- Parallelize tournament series loop with rayon for multi-core speedup.
- Remove dead insert_key function and test (unused after generator rewrite).
- Fix tautological benchmark assertion in integration tests.
- Change GameInfo.num_raises to use Meerkat convention where BB counts
as the first raise preflop (subtract 1 for SB only, not 2)
- Add GameInfo::voluntary_raises() for Fixed-Limit cap enforcement
- Update flock_bot, raise_bot, and random_bot to use voluntary_raises()
for can_raise() checks
- Add Evaluator::supersonic() accessor for incremental trie API
- Update documentation across betting.rs, game_info.rs, hand_runner.rs,
and README.md to clarify the two counting conventions
Remove the entire strategy module (StrategyBot, ModularStrategy,
StrategyContext, ActionRecorder, HandAnalyzer, HandHelper) from
holdem_core. Strategy implementations will live in external crates
(e.g., super_marvin) and register via bot_factory::register_bot_type.
- Delete holdem_core/src/game/strategy/ (6 files, ~1900 lines)
- Delete holdem_core/src/game/bots/strategy_bot.rs
- Remove strategy_bot from bots/mod.rs module declarations and re-exports
- Update bot_factory.rs doc example to show generic custom bot pattern
- Add tournament_rake_percentage field to GameConfig (house share of entry fees)
- Convert prize structure from absolute amounts to percentages of prize pool
- Fix finish position calculation for tournament eliminations (was inverted)
- Add batch bustout processing for multi-table tournaments (shared positions)
- Add max_rebuys field and rebuy_count tracking on Seat
- Add PrizeStructure::with_rake() and rake_amount field
- Accumulate stats across tournament series (hands, rake, profit)
- Add best_finish and prize_won fields to PlayerStats
- Replace floating-point prize math with integer arithmetic (chip conservation)
- Add comprehensive tests for prize distribution and finish positions
- Update config examples to use percentage-based prizes with rake
- Add ARCHITECTURE_TOURNAMENT_RAKE.md documentation
- Add RakeConfig with percentage-based rake and per-pot cap
- Add bankroll tracking (reset per hand or auto-refill threshold)
- Add seat randomization with seeded RNG for reproducibility
- Add FlockBot (tight-aggressive) and ChumpBot (loose-passive) bots
- Refactor HandRunner: extract finalize_result, compute_chip_movements, credit_winnings
- Add num_raises to GameInfo for authoritative raise counting
- Record SB/BB as Raise actions (Meerkat convention)
- Update all existing bot tests for new GameInfo fields
- Add ARCHITECTURE_RAKE_BANKROLL_SEATS.md documentation
- Add AlgorithmicEvaluator wrapper for direct hand evaluation without
lookup tables, with proper Result-based error handling
- Replace all println! and #[cfg(debug_assertions)] debug output with
log crate macros (log::info!, log::debug!, log::warn!)
- Fix calculate_flush_value to use base-13 encoding for unique flush
hand values instead of simple linear sum
- Fix is_straight to use cleaner control flow for regular and wheel
straight detection
- Remove jump table HighCard/value=0 guard in evaluate_5_card to
simplify evaluation path
- Add evaluate_n_card_hand_public as pub(crate) for AlgorithmicEvaluator
- Add .gitignore to exclude target/ and .idea/ from version control
- Add comprehensive tests for AlgorithmicEvaluator (14 test cases)
- Update README with new API usage examples
- Add log dependency to Cargo.toml
- Add placeholder modules for future implementations (tables_new,
benchmark_utils, integration_utils, test_utils)