## 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