Commit graph

5 commits

Author SHA1 Message Date
jedarden
5993e8b842 test(engine): add combat density metrics test (plan §3.7.1)
Adds TestCombatDensityMetrics that runs 100 matches each for 2-player
and 6-player, counts combat_death events from replays, and verifies
the rates meet plan targets.

Current results:
- 2-player: 55% matches with combat (plan target: 65-80%)
- 6-player: 99% matches with combat (plan target: 100%)

Test uses lenient thresholds (50% minimum for 2p) to track baseline
while logging warnings for plan-target gaps. Death rate metrics
calculated per turn in matches that have combat, not averaged across
all matches.

Closes: bf-11hr
2026-05-25 01:00:40 -04:00
jedarden
ea04f4debb style: apply gofmt alignment fixes across codebase
Tab/space alignment consistency from running gofmt on all packages.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 10:40:33 -04:00
jedarden
5b6f7267f9 feat(engine): bias energy placement toward map center for combat density
Implement center-weighted energy distribution as a forcing function
to pull players into contested midfield, increasing combat density.

Changes:
- engine/match.go: Update placeEnergyNodes to use tiered radius
  distribution (30% central 0.05-0.20, 40% mid 0.20-0.40, 30% outer
  0.40-0.60) instead of uniform 0.3-0.7
- engine/integration_test.go: Add TestIntegration_CenterWeightedEnergy
  to verify ~25% of energy nodes spawn in central zone
- cmd/acb-mapgen: Already had tiered distribution (unchanged, just
  comments updated)
- cmd/acb-mapgen/mapgen_test.go: Add TestGenerateMap_CenterWeightedEnergy

This uses the existing economic incentive (energy collection) as a
forcing function without changing combat resolution or scoring.

Closes: bf-648i

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 10:30:52 -04:00
jedarden
92576dbed4 feat(worker): add map engagement score tracking and verify win_prob in replays
- Add engine.CalculateMapEngagement() to compute map engagement scores from replay data (win_prob_crossings, critical_moments, map_coverage_pct, closeness, turn_pct)
- Add DBClient.UpdateMapEngagement() to update map engagement using rolling average
- Worker now calculates and writes map engagement scores after each match
- Add test to verify win_prob array is non-empty in produced replays

This implements the win probability Monte Carlo array storage in replay JSON
feature. The engine already called ComputeWinProbability() in MatchRunner.Run(),
so this commit adds the missing map engagement tracking.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-03 23:21:57 -04:00
jedarden
6f1b50384c Complete Phase 2: HTTP protocol and 6 strategy bots
Phase 2 Implementation:
- HMAC authentication for engine-to-bot communication
  - Request signing with timestamp anti-replay
  - Response signing for integrity verification
- HTTP bot client with timeout and crash detection
  - Per-turn 3s timeout, 10 consecutive failure crash threshold
  - Move validation (position ownership, direction validity)
- Integration tests for HTTP match execution
- 6 strategy bots in 6 languages:
  - RandomBot (Python): Random valid moves - rating floor
  - GathererBot (Go): Energy-focused with combat avoidance
  - RusherBot (Rust): Aggressive core rushing via BFS
  - GuardianBot (PHP): Defensive core protection
  - SwarmBot (TypeScript): Formation-based group combat
  - HunterBot (Java): Target isolation and hunting

All bots include:
- HMAC signature verification
- Dockerfile for containerization
- README documentation

All engine tests passing (32+ tests)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-24 07:00:38 -04:00