Problem
Reported in discussion #950. The double-or-nothing bet currently has zero downside, so a rational player always bets.
scoring.py:apply_bet_multiplier:
- bet + round_score > 0 → score × 2 ("won")
- bet + round_score == 0 → 0 ("lost")
- no bet → unchanged
A round that scores 0 already breaks the streak and already banks 0 points — so a "lost" bet costs nothing you wouldn't have lost anyway. It's "double or same", not "double or nothing". The bet is free upside and the mechanic is meaningless.
Fix — Design A ("Exact or nothing")
A bet should risk the points you'd otherwise have banked:
- A bet wins only on the exact correct year → round score × 3 (was × 2; bumped because the win condition is stricter).
- A bet that is not exact → 0 for the round, even if the guess would otherwise have scored on a ±tolerance band. You forfeit those points.
bet_outcome = "lost".
- A lost bet scores 0 → the streak breaks (unchanged, but now a real consequence).
- No negative scores — the stake is the forfeited round points, the game stays positive-sum.
This makes betting a genuine confidence call: only bet when you're sure you nailed the exact year.
Implementation notes
apply_bet_multiplier needs to know whether the guess was exact, not just round_score > 0 — pass an is_exact flag (or the year delta) from the caller.
- Update the player-facing bet hint / any TTS or docs copy: "Bet: nail the exact year for 3× — miss it and you score nothing that round."
- Update scoring unit tests.
Closes #950 (tracked from discussion #950).
Problem
Reported in discussion #950. The double-or-nothing bet currently has zero downside, so a rational player always bets.
scoring.py:apply_bet_multiplier:A round that scores 0 already breaks the streak and already banks 0 points — so a "lost" bet costs nothing you wouldn't have lost anyway. It's "double or same", not "double or nothing". The bet is free upside and the mechanic is meaningless.
Fix — Design A ("Exact or nothing")
A bet should risk the points you'd otherwise have banked:
bet_outcome = "lost".This makes betting a genuine confidence call: only bet when you're sure you nailed the exact year.
Implementation notes
apply_bet_multiplierneeds to know whether the guess was exact, not justround_score > 0— pass anis_exactflag (or the year delta) from the caller.Closes #950 (tracked from discussion #950).