Match ledger: 3x MRP blowouts (structural, fixed earlier) -> buffs -> 2x Stream
blowouts (49v0, 44v0) -> half-step walk-back -> close 12-min MRP win with zero
balance_report flags. Outcome now flips with small knob changes, i.e. the
matchup sits near the boundary. bufferbot HP 5000 kept (identity buff; hit-count
math shows it was not the runaway driver — the compounding scraper economy was).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adds tools/gen_sideb.py — one data-driven builder replacing the copy-pasted
gen_missionN.py pattern — and tools/smoketest.sh, which reports
PASS/FAIL/DISPLAY_UNAVAILABLE instead of the process-is-alive check that has
produced false passes twice now.
NOT verified in-game: the display went to sleep mid-session. Static checks all
pass (luac, check-yaml 0 errors, map refresh, check_assets, make) and the
already-verified m03 hangs identically, confirming it is environmental.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Fixes a critical bug: undeployed MCV vans now count for short-game survival —
previously every match ended at tick 1 (all players 'defeated', local player
'won'). The bot-vs-bot shellmap claim from earlier rounds was invalid for the
same reason: shellmaps stall with Bot: players and matches insta-ended. The
arena map + tools/balance_report.py is the real, verified harness.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>