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>
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
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>
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>
- 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>
- 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>