The next step is not to remove the all-in button. It is to teach and test the distinction between justified and unjustified shoves. Start with a fixed tight/exploitative heuristic opponent: fold weak hands against early shoves, call when strength and pot odds support it, use small bets early, and still make legitimate late-street all-ins when hand and stack-to-pot ratio warrant them.

Experimental redesign from opponent to metrics
Experimental redesign from opponent to metrics

The existing code contains a guard:

src/model.cppcpp · 2 lines
const bool earlyShove = learned == ActType::AllIn &&
    (observation.street < 4 || strength < prior_.allInAbove);

This detects risky behavior and can redirect it. It is useful containment for reducing visible failures, but it does not repair the model's value estimates or credit assignment. Results observed only with the guard enabled cannot establish that the learned policy improved.

Fixed heuristic opponent cycling through train and regression tests
Fixed heuristic opponent cycling through train and regression tests

Training should not use only that opponent. Build a population from tight, balanced, and loose heuristics plus historical model snapshots, then randomize seats and matchups. Keep the fixed exploitative player as a regression test. This separates a policy that memorizes one counterparty from one that survives varied styles.

Redesign reward around stack growth or log return rather than a clipped win/loss endpoint. Add a distinct ruin penalty and a gradual early-risk penalty when the whole stack is exposed without sufficient evidence. Do not penalize a legitimate late shove with a strong hand. Action- or street-level advantages and intermediate value estimates can allocate credit more precisely than copying one terminal reward everywhere.

Evaluate at least 1,000 hands across multiple random seeds. Record all-in rate by street, average hand strength at shove, bust and fold rates, and median stack through the 1,000-hand horizon. Means alone can conceal rare ruin, so retain distributions and uncertainty intervals.

Dashboard of street-level shove quality and stack survival
Dashboard of street-level shove quality and stack survival

Success does not mean driving all-in frequency to zero. Weak early shoves should fall, sound late shoves should remain, and median stack and survival should improve as the opponent mix changes. Only when those gains survive with containment removed can we claim that the learned policy—not merely its safety wrapper—has improved.