ai-code-battle/engine
jedarden e64230b122 fix: resolve universal stalemate — signing format and secret decryption
Two root causes prevented bots from making any moves:

1. SignRequest signing string included timestamp ({match_id}.{turn}.{timestamp}.{hash})
   but all bots implement verifySignature without timestamp ({match_id}.{turn}.{hash}).
   Fixed by dropping timestamp from the signing string; X-ACB-Timestamp header is still
   sent for clock-skew checks but not in the HMAC.

2. The API stores bot secrets AES-GCM encrypted (184 hex chars) in the DB. The worker
   was passing the ciphertext directly as the HMAC key, while bots use their plaintext
   k8s secret (64 hex chars). Fixed by decrypting in the worker using ACB_ENCRYPTION_KEY.

Also tightens the home page winner filter to exclude winner_id="0" stalemates.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 21:48:25 -04:00
..
auth.go fix: resolve universal stalemate — signing format and secret decryption 2026-04-30 21:48:25 -04:00
auth_test.go Complete Phase 2: HTTP protocol and 6 strategy bots 2026-03-24 07:00:38 -04:00
bot_http.go fix(engine): enforce strict HMAC response signature verification per §4.4 2026-04-22 13:18:10 -04:00
bot_http_test.go fix(engine): enforce strict HMAC response signature verification per §4.4 2026-04-22 13:18:10 -04:00
bot_local.go Implement Phase 1 core engine: grid, combat, fog of war, turn execution 2026-03-24 01:48:27 -04:00
bot_strategies.go feat(evolver): complete Phase 7 LLM-driven evolution implementation 2026-04-08 16:38:48 -04:00
bot_strategies_phase13.go fix(engine): repair partitionBots refactor in phase13 strategies 2026-04-22 18:48:46 -04:00
determinism_test.go Complete Phase 1: add connectivity validation and determinism tests 2026-03-24 03:44:44 -04:00
game.go fix(matchmaker): multi-match crash cooldown (3 strikes / 30 min) per §4.5 + §6.1 2026-04-22 15:22:12 -04:00
grid.go Implement Phase 1 core engine: grid, combat, fog of war, turn execution 2026-03-24 01:48:27 -04:00
grid_test.go Implement Phase 1 core engine: grid, combat, fog of war, turn execution 2026-03-24 01:48:27 -04:00
integration_test.go Complete Phase 2: HTTP protocol and 6 strategy bots 2026-03-24 07:00:38 -04:00
match.go fix(matchmaker): multi-match crash cooldown (3 strikes / 30 min) per §4.5 + §6.1 2026-04-22 15:22:12 -04:00
replay.go feat(engine): integrate Monte Carlo win probability computation into match runner 2026-04-21 08:46:39 -04:00
thumbnail.go feat(config): add season_id + rules_version to Config per §4.2 2026-04-22 18:09:26 -04:00
turn.go fix(matchmaker): multi-match crash cooldown (3 strikes / 30 min) per §4.5 + §6.1 2026-04-22 15:22:12 -04:00
turn_test.go fix(engine): use core1 variable in spawn priority tiebreak test 2026-04-22 14:45:06 -04:00
types.go feat(voting): add map voting UI widget to replay viewer (§14.6) 2026-04-22 18:08:55 -04:00
winprob.go feat(engine): integrate Monte Carlo win probability computation into match runner 2026-04-21 08:46:39 -04:00