dc136b7ecc
Direct calls were canonicalised last commit, but the two downgrade paths inside the BET/RAISE branch still built Action(CALL, toCall) with the unclamped amount: an illegal raise falling back to a call, and a player barred from re-raising after an incomplete all-in. A short stack there recorded chips that never moved. That path matters more than the direct one — it is where malformed agent output lands, which is precisely what an LLM will produce once the persona layer exists. All three now go through one canonicalCall(seat, toCall). There is exactly one construction of a CALL action left in the file, which is the point: three copies of this rule is how it went wrong twice. Regressions for both paths, each verified to fail with only its own path reverted — recording 90 instead of 30, and 30 instead of 20. Tests: 150 -> 154 (69 engine JVM, 69 Android host, 16 app). Simulation figures unchanged (289.12 / 113.19 / -195.64), chips conserved. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>