Commit graph

6 commits

Author SHA1 Message Date
jedarden
db54067f56 fix(engine): add wall awareness to zone escape direction
getZoneEscapeDirection now accepts wallSet parameter and skips directions
that would move into walls. This prevents bots from getting trapped by
walls when trying to escape the shrinking zone, allowing them to survive
longer and actually engage in combat instead of dying to zone.

Testing with RusherBot vs SwarmBot shows 85% combat density (target: 65-80%).

Fixes: RandomBot getting stuck against walls and dying to zone without
engaging in combat.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 19:46:39 -04:00
jedarden
ccdec39c52 feat(engine): add zone escape as Priority 1 to all built-in bots
Per plan §3.7.1, the zone forces bots into contact. This change ensures
all built-in bots escape the zone FIRST when threatened (dist to zone
edge < 5 tiles), before any other action like energy collection or combat.

Changes:
- GuardianBot, SwarmBot, HunterBot: Added zone escape as Priority 1
- Phase 13 bots (Defender, Scout, Farmer, Pacifist, Phalanx, Raider,
  Nomad, Opportunist, Assassin, Kamikaze): Added zone escape as Priority 1
- RandomBot: Added zone escape before random movement

The getZoneEscapeDirection function was already present and correctly
implements toroidal distance calculation with 5-tile safety margin.

Closes: bf-4m78q
2026-05-26 18:47:39 -04:00
jedarden
c81bf1de7d docs: clarify Phase 13 strategies vs §10 evolver pipeline
Add comprehensive file header to bot_strategies_phase13.go explaining:
- These are hand-coded strategy implementations, NOT LLM-evolved
- How they relate to the autonomous evolution system in plan §10
- Key distinction: Phase 13 = human-designed fixed archetypes,
  Evolver = LLM-generated continuously evolving candidates

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:57:50 -04:00
jedarden
17dbef0927 fix(engine): repair partitionBots refactor in phase13 strategies
The partitionBots() return type was changed to a struct but two call
sites still referenced config.Turn inside bestExploreDir (now a
parameter), and RaiderBot had an unused enemySet variable.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 18:48:46 -04:00
jedarden
7978ebbab3 feat(§15.2): generate and stream static meta JSON files to R2
- Add data/meta/rivalries.json to R2 upload list in uploadMetaJSONToR2
- Add attachCommunityHints() to narrative.go to enrich story arcs with
  highest-upvote community tactical hints (upvotes >= 3, idea/mistake types)
- Fix detectRivalryArcs() key separator from "-" to "|" to avoid UUID
  hyphen collisions when parsing bot ID pairs
- Fix partitionBots() call sites in bot_strategies_phase13.go to use
  struct field access (.friendly, .enemy) matching updated return type

generator.go already contains generateArchetypes, generateCommunityHints,
and generateMatchFeedback (all called from generateAllIndexes). main.go
uploads all four outputs to R2 on every build cycle.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-22 18:46:27 -04:00
jedarden
60b83a02d9 feat(§15.3): implement screen reader transcript for replay viewer
- Add transcript panel with turn-by-turn summaries generated from replay events
- Each turn shows: player moves, combat, deaths, captures, energy collection, spawns, win probability
- Add 'T' key shortcut to toggle transcript panel
- Panel supports three view modes: All Turns, ±10 Turns from Current, Recent 20 Turns
- Click on transcript entry to jump to that turn
- Current turn is highlighted in transcript with smooth scroll
- Panel content is selectable/copyable for screen reader users
- Transcript generation logic already existed in replay-viewer.ts; this adds the UI
- Transcript button slides in from right side of screen

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 18:42:49 -04:00