Add personality-driven bots with 8 archetypes (Nit, TAG, LAG, Maniac, Calling Station, Loose Fish, Old Man, Monster TAG) across 5 skill levels. Includes: - Three-layer decision pipeline (base strategy → personality filter → skill noise) - Decision timer system with archetype-specific timeout defaults - Observation tracking engine (VPIP, PFR, Fold-to-CBet, WTSD, bet sizing, timing tells) - Player classification engine with weighted scoring and confidence scaling - Table setup UI with visual seat editor and quick presets - Info display system with 4 visibility levels - Teaching coach with post-hand analysis and real-time suggestions Archives bot-intelligence change and syncs all 8 delta specs to main specs.
3.2 KiB
Observation Tracking
Purpose
Tracks per-player behavioral statistics across hands to feed the classification engine and info display systems.
ADDED Requirements
Requirement: Core statistical tracking per opponent
The system SHALL track the following statistics for each opponent across all hands in a session: VPIP (Voluntary Put Money In Pot), PFR (Pre-Flop Raise), Fold-to-CBet (fold percentage to continuation bets), and WTSD (Went To Showdown percentage). Statistics SHALL update after each completed hand and SHALL be accessible to the classification engine.
Scenario: VPIP tracks hand participation
- WHEN a bot voluntarily puts money in the pot in 35 out of 100 hands
- THEN the bot's VPIP is recorded as 35%
Scenario: PFR tracks pre-flop aggression
- WHEN a bot raises pre-flop in 20 out of 100 hands dealt
- THEN the bot's PFR is recorded as 20%
Requirement: Bet sizing tracking per street
The system SHALL track average bet sizes separately for each betting street (pre-flop, flop, turn, river). For each street, the system SHALL record the average bet as a percentage of the pot and flag notable patterns (e.g., consistently small bets, polarized sizing, frequent overbets).
Scenario: Small bet pattern is detected
- WHEN a bot's average flop bet size is 30% of pot over 20 hands
- THEN the system flags this as "consistently small bets" pattern
Scenario: Polarized river betting is detected
- WHEN a bot's river bets are predominantly either min-bet or full-pot-or-larger
- THEN the system flags this as "polarized river betting" pattern
Requirement: Timing tell tracking
The system SHALL track decision timing statistics per opponent: average decision time, distribution of fast actions (under 3s) vs slow actions (over 7s), and average timing broken down by action type (call, fold, raise, check). The system SHALL compute a timing consistency score indicating how reliably the bot's timing correlates with hand strength.
Scenario: Fast call pattern is identified
- WHEN a bot's average call time is 1.8s and average fold time is 8.4s over 30 decisions
- THEN the system records this as "fast calls, slow folds" timing profile
Scenario: Timing consistency reflects skill level
- WHEN a Medium-skill bot plays 50 hands
- THEN the timing consistency score is approximately 70-80%, reflecting mostly reliable tells with some noise
Requirement: Observation data availability based on info level
The system SHALL make observation data available to the player only according to their chosen info level. At "None" level, no stats are displayed. At "Hints" level, occasional contextual hints reference observed patterns. At "Stats" level, raw VPIP/PFR numbers are visible. At "Full Reveal" level, all tracked statistics and inferred type are shown.
Scenario: Player sees nothing at None level
- WHEN info level is set to "None" and the player views an opponent's seat
- THEN no statistical data or type information is displayed
Scenario: Player sees raw stats at Stats level
- WHEN info level is set to "Stats" and the player views an opponent's seat
- THEN VPIP, PFR, Fold-to-CBet, and WTSD percentages are displayed