Commit graph

372 commits

Author SHA1 Message Date
jedarden
b0de3006ac docs(plan): update attack_radius2 from 5 to 12 to match current implementation
The plan documentation had stale values for attack_radius2 (5 instead of 12).
The implementation was changed as part of combat density work to use
AttackRadius2=12 (~3.46 tiles) for both 2-player and 3+ player configs.

Updated sections:
- Section 3.4 Combat: changed default value and tile radius description
- JSON examples in protocol sections: updated example config values
- Bot compatibility note: updated hardcoded value reference

Closes: bf-29j3

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 15:59:17 -04:00
jedarden
a7cb57483b fix(engine): improve 3+ player combat density with delayed zone and tighter spawns
Problem: 3+ player matches had 0% combat_death events (3p: 0/10, 4p: 3/10).
Bots were dying from zone/self-collision before encountering enemies.

Root causes:
1. Zone started at turn 15, killing bots before they could encounter each other
2. Spawn radius of 25% put bots ~12 tiles apart, but attack radius is only 3.5 tiles

Fix:
1. Delay zone start from turn 15 to turn 30 for 3+ players
2. Reduce spawn radius from 25% to 18% (puts bots ~10 tiles apart)
3. Update comments to reflect attack radius of 3.5 tiles (AttackRadius2=12)

Results:
- 3-player: 67% have combat_death (10/15) - up from 0%
- 4-player: 73% have combat_death (11/15) - up from 30%
- 2-player: no regression (still 30% have combat_death)

Remaining failures are due to random movement patterns keeping bots apart,
which is inherent to stochastic bot behavior.

Closes: bf-4kq3

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 15:51:00 -04:00
jedarden
b74eecad50 feat(engine): increase 3+ player attack radius for consistent combat_density
Problem: Some 4-player seeds had 0 combat_death events (e.g., seed 100).
Root cause: AttackRadius2=9 (3 tiles) was too small for the ~10 tile
spawn separation on 63x63 maps.

Solution: Increase AttackRadius2 to 12 (3.5 tiles) for 3+ players,
matching the 2-player configuration.

Results:
- 4-player: 5/5 seeds now have combat_death (was 4/5)
- Seed 100: 4 combat_death (was 0)
- 2-player: no regression (still 2 combat_death per match)
- 3-player: 2-3 combat_death per match (all have combat)

Closes: bf-omj2

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 15:26:37 -04:00
jedarden
4464e7a874 feat(engine): fix 2-player combat density with tighter spawns and aggressive zone
Problem: 2-player matches had zero combat_death events. Recent combat density
work (bf-4tfh) addressed 3+ player matches but 2-player duels still had zero
combat.

Root cause: 25% spawn radius on 40x40 grid placed bots ~20 tiles apart, with
default zone timing (start turn 50) giving ample time to avoid contact.

Solution:
- Reduce 2-player spawn radius to 20% (from 25%) → ~16 tiles apart at spawn
- Increase 2-player attack radius to 3.5 tiles (from 3) → AttackRadius2=12
- Aggressive 2-player zone: start turn 30, shrink every 2 turns, min radius 3

Results:
- 2-player: 10/10 seeds have combat_death (was 0/10), avg 2.0 per match
- 3-player: 80% have combat_death (was 70%), no regression
- 4-player: 100% have combat_death, avg 3.6 (was 3.2), no regression

Closes: bf-5w8z

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 15:17:15 -04:00
jedarden
cddbe6a279 fix(engine): reduce spawn radius to force bot combat contact
Problem: combat_death events were 0 because bots spawned too far
apart (70% radius from center, ~19 tiles on 54x54 grid). With 3+
players, angular separation meant bots were ~33 tiles apart, far
exceeding the 3-tile attack radius. The zone killed bots before they
could close the distance.

Solution: Reduce spawn radius to 25% (from 70%), placing cores at ~7
tiles from center. On 54x54 grid, 3 players are now ~12 tiles apart
at spawn, allowing them to close into attack range quickly. Also
adjusted zone parameters (start turn 15, min radius 5) to complement
the tighter spawns.

Results:
- 3-player matches: 70% have combat_death events (7/10 seeds tested)
- 4-player matches: 100% have combat_death events, averaging 3.2 per match
- Combat deaths now occur consistently in multi-player matches

Closes: bf-4tfh

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 14:48:20 -04:00
jedarden
38f590e25f feat(engine): improve combat density with smaller maps and larger attack radius
Changes:
- Reduce map size for 3+ players from 2000 to 1000 tiles/player (89x89 → 63x63 for 4 players)
- Increase attack radius from sqrt(5) ≈ 2.24 tiles to 3 tiles (AttackRadius2: 5 → 9)

Results:
- 100% of matches now have combat_death events (up from ~60-80%)
- Average combat rate per match: 34.7% (up from ~15%)
- Many matches reach or exceed 50% combat rate (75%, 57.1%, 50%, 46.2% observed)

The smaller map forces players into closer proximity, while the larger attack
radius makes it easier for bots to engage in focus-fire combat.

Closes: bf-612z

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 14:40:18 -04:00
jedarden
75232acb6e feat(engine): set ZoneMinRadius=12 for 50% combat_death rate
After testing 300+ matches with various ZoneMinRadius values:
- ZoneMinRadius=3: 0% combat (kills bots too fast)
- ZoneMinRadius=8: 24% combat
- ZoneMinRadius=12: 50% combat (best so far)
- ZoneMinRadius=15: 38% combat

ZoneMinRadius=12 provides the best balance between forcing proximity
and preserving bot population for combat encounters.

Target: 90% combat_death rate (still need +40 points)

Related: bf-4pm8 (Combat Density epic)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 13:15:39 -04:00
jedarden
8806f9a416 feat(engine): tune zone parameters for 3+ player combat density
Adjusted zone parameters to force bot contact in multiplayer matches:
- ZoneStartTurn: 50 → 20 (start shrinking earlier)
- ZoneShrinkInterval: 5 → 3 (shrink more frequently)
- ZoneShrinkStep: 2 → 3 (shrink faster per interval)
- ZoneMinRadius: 3 → 15 (preserve bot population for combat)

Initial testing shows 24-50% combat_death rate (up from 0% with defaults).
Further iteration needed to reach 90% target acceptance criteria.

Related: bf-4pm8 (Combat Density epic)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 12:52:44 -04:00
jedarden
2db4f2cc4d feat(engine): make zone more aggressive with faster shrink interval
- ZoneStartTurn: 5 (was 20, default 50) - start shrinking very early
- ZoneShrinkInterval: 2 (new) - shrink every 2 turns (vs default 5)
- ZoneShrinkStep: 3 - shrink 3 tiles per interval (1.5 tiles/turn vs default 0.4)
- ZoneMinRadius: 3 - small enough to force contact (attack radius ~2.24)

This change accelerates zone compression in 3+ player matches to force
bots into attack range before elimination (~40-50 turns).

Related: bf-4pm8 (Combat Density epic)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 12:27:34 -04:00
jedarden
9662ba07b0 feat(engine): reduce zone min radius to force combat contact
For 3+ player matches, zone now shrinks to radius 2 (down from 3) to force
bots into attack range (~2.24 tiles). Combined with earlier zone start (turn 20
vs 50) and faster shrink (3 vs 2 tiles per interval), this creates a forcing
function for combat contact.

Closes: bf-5htl
2026-05-24 11:49:59 -04:00
jedarden
4e903cc7b6 feat(engine): reduce zone min radius to force combat contact
Reduce ZoneMinRadius from 10 to 3 to force bots into a smaller
safe area (6-tile diameter vs 20-tile diameter). With attack
radius of ~2.24 tiles, bots in the final zone will be within
combat range and trigger focus-fire combat_death events.

Before: 20-tile diameter safe zone (area = 314 tiles)
After: 6-tile diameter safe zone (area = 28 tiles)

This is a pure config parameter change - no combat algorithm
or scoring changes.

Closes: bf-30jt

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 11:34:37 -04:00
jedarden
66e7951e99 fix(cli): handle draw result without panic
The acb-local tool was panicking when a match ended in a draw
(Winner = -1) because it tried to use -1 as an array index into
botNames[]. Fixed by checking if Winner >= 0 before accessing
the array, and printing "Result: Draw" for draws.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 11:13:00 -04:00
jedarden
f7752193fc fix(engine): zone should not kill bots before activation
The executeZone function was killing bots outside the zone radius
before the zone became active (ZoneStartTurn). This caused bots to
die at turn 49 when the zone shouldn't start until turn 50.

Added early return when ZoneActive is false, so zone killing only
occurs after the zone has activated.
2026-05-24 10:47:28 -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
3825cbee22 feat(engine): enable shrinking zone by default for combat density
Set ZoneEnabled: true in DefaultConfig() to activate the forcing
function that compresses bots into contact. Test matches now show
combat_death events (focus-fire kills) where previously all matches
had 0 combat deaths.

- Zone starts at turn 50, shrinks every 5 turns by 2 tiles
- Bots outside the safe zone die each turn
- Combined with 40x40 maps and center-weighted energy, forces
  bots to fight over central territory

Test results:
- Before: 0 combat_death events across all replays
- After: 2-8 combat_death events per match (swarm/hunter matchup)

Closes: bf-2up4

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 10:37:47 -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
16fce127ff feat(viewer): render shrinking play-zone in replay viewer
Draws the active zone boundary and out-of-zone danger area using
per-turn zone_bounds data from the replay. The zone renders as:
- Red semi-transparent overlay outside the safe zone
- Solid red boundary circle with dashed inner ring
- Center cross marker
- Inactive zones show as subtle dashed outline

Changes:
- Add ZoneBounds type to types.ts
- Add zone_bounds field to ReplayTurn
- Implement drawZone() method in replay-viewer.ts
- Call drawZone() in renderStandardView()
- Update replay-schema-v1.json with ZoneBounds definition

Accepts: bf-k1oy

Closes: bf-k1oy
2026-05-24 10:24:44 -04:00
jedarden
af46a1da97 feat(engine): add combat-density metric and fix computeCombatTurns
- Fix computeCombatTurns to count EventCombatDeath events instead of
  EventBotDied with reason="combat" (which was never emitted, causing
  CombatTurns to always be 0)
- Add CombatDeaths field to MapEngagementScore to track focus-fire kills
- Update engagement formula to weight combat deaths at 3.0 (same as
  win_prob_crossings) to bias map evolution toward combat-dense maps
- Add countCombatDeaths helper function to count EventCombatDeath events
- Update log output to include combat_deaths metric

This implements bf-4nxs: the combat-density metric is now measured and
weighted in map engagement, which gates map curation/selection. Maps
with zero combat will have low engagement scores and be filtered out.

Closes: bf-4nxs
2026-05-24 10:16:54 -04:00
jedarden
18ac1ff2b4 feat(engine): reduce default map size to 40x40 and add skirmish map class
Reduce default 2-player map size from 60x60 to 40x40 (from 3600 to 1600
tiles) to increase encounter frequency and combat density. Add -skirmish
flag to acb-mapgen for generating even smaller dense maps (32x32, 0.20
wall density, 15 energy nodes) with "skirmish_" ID prefix.

Changes:
- engine/types.go: DefaultConfig() returns 40x40, ConfigForPlayers()
  uses 800 tiles/player for 2-player (40x40) and 2000 tiles/player for
  3+ players
- cmd/acb-matchmaker/tickers.go: gridForPlayers() returns 40x40 for 2
  players
- cmd/acb-map-evolver/main.go: gridForPlayers() returns 40x40 for 2
  players
- cmd/acb-mapgen/main.go: defaults to 40x40, adds -skirmish flag for
  32x32 high-density maps
- cmd/acb-matchmaker/tickers_test.go: update test expectations for new
  40x40 default

Closes: bf-39wt
2026-05-24 10:10:57 -04:00
jedarden
16d474aceb feat(engine): add shrinking play-zone (storm) for combat density
Add configurable active zone that contracts toward map center on an interval,
forcing bots together to trigger focus-fire engagements. Bots outside the zone
die with reason "zone", and zone bounds are recorded in replay turns.

Config fields:
- ZoneEnabled: enable/disable the zone
- ZoneStartTurn: turn when zone starts shrinking (default 50)
- ZoneShrinkInterval: turns between shrink steps (default 5)
- ZoneShrinkStep: tiles to shrink each step (default 2)
- ZoneMinRadius: minimum zone radius (default 10)

Turn sequence update: MOVE → COMBAT → ZONE → CAPTURE → COLLECT → SPAWN → ENERGY_TICK

Zone phase inserted after COMBAT, uses toroidal distance calculation,
and emits bot_died events with reason "zone" for killed bots.

Replay update: ZoneBounds struct added to ReplayTurn to record center,
radius, and active state per turn for visualization.

Determinism verified: all tests pass, engine remains deterministic.

Closes: bf-2g96
2026-05-24 10:01:34 -04:00
jedarden
c55459d6d4 Merge remote-tracking branch 'origin/master' 2026-05-24 09:49:22 -04:00
jedarden
0af9fa33b6 docs: verify bf-67io - SQL migration file already exists
The migration file migrations/0001_initial.sql was created in commit 31678be
and contains the complete schema matching cmd/acb-api/db.go.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Bead-Id: bf-67io
2026-05-22 16:17:33 -04:00
jedarden
130528cfe1 docs: verify bf-67io - SQL migration file already exists
The migration file migrations/0001_initial.sql was created in commit 31678be
and contains the complete schema matching cmd/acb-api/db.go.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 16:17:04 -04:00
jedarden
44359c2425 docs: verify mobile bottom tab bar implementation (bf-om23)
Verified that the mobile bottom tab bar specified in §16.4 is implemented
in web/index.html as inline styles, not in external CSS files.

The implementation matches specification:
- Four bottom tabs: Home, Watch, Compete, Board
- Persistent bottom tab bar on mobile (<640px)
- Proper z-index layering and responsive behavior

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 16:08:40 -04:00
jedarden
60a7969dca chore: update needle predispatch sha
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 16:04:10 -04:00
jedarden
6c830dca5d chore: update needle predispatch sha
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 16:01:27 -04:00
jedarden
424aaf34d6 docs: notes for bf-67io - SQL migration file already exists
The migration file migrations/0001_initial.sql was added in commit 31678be.
This bead was filed based on an outdated plan inventory.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:59:30 -04:00
jedarden
a304f1febd docs: notes for bf-3ca5
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:58:27 -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
d73a77e5db Notes for bf-67io: SQL migration file already exists in commit 31678be
Verified that migrations/0001_initial.sql contains all 20 tables from
cmd/acb-api/db.go schema. Work was completed prior to bead assignment.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:55:05 -04:00
jedarden
31678beec7 Infra: Add initial SQL migration file (0001_initial.sql)
Extracts the embedded schema from cmd/acb-api/db.go into a standalone
migration file per §11.1 plan inventory. Creates all core tables:

- Core: bots, matches, match_participants, jobs, rating_history
- Season/series: seasons, season_snapshots, series, series_games
- Predictions: predictions, predictor_stats
- Maps: maps, map_scores, map_votes, map_fairness
- Evolution: programs
- Playlists: playlists, playlist_matches
- Feedback: replay_feedback, feedback_upvotes
- Enrichment: enrichment_requests

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:52:54 -04:00
jedarden
fe9f786bde Notes for bf-ns9q: C# starter kit registration re-verification
Verified all required components are in place:
- CI workflow at starters/csharp/.github/workflows/build.yml (added in 7bf6566)
- Plan §5.8 coverage at line 986 (added in 55c594c)
- Directory listing at line 2565 (added in 9d4a311)
- Plan §11.2 template repos at line 2629 (added in 55c594c)

C# starter kit fully registered alongside 8 other language starter kits.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:51:09 -04:00
jedarden
8e7a77dc70 Notes for bf-ns9q: C# starter kit registration verified
Re-verified that all required components are in place:
- CI workflow exists at starters/csharp/.github/workflows/build.yml
- Plan §5.8 includes acb-starter-csharp at line 986
- Plan §11.2 includes acb-starter-csharp at line 2629
- Directory listing includes csharp/ at line 2565

The task was originally completed in commits 55c594c and 9d4a311.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:46:47 -04:00
jedarden
f693afd562 Notes for bf-2xah: Bot registration endpoint already wired to matchmaking
The POST /api/register endpoint sets status='active' for newly registered
bots, and the matchmaker queries for all active bots. Integration is complete;
no code changes required.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:43:58 -04:00
jedarden
03ec821e48 Update predispatch sha 2026-05-22 15:40:21 -04:00
jedarden
10d2957cb7 Notes for bf-3z08: JavaScript starter kit registration already completed
Verified that commit 7e8c9d7 completed all registration requirements:
- Added to §5.8 Starter Kit table
- Added to file structure section
- Added to published template repos table
- CI workflow already exists

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:38:32 -04:00
jedarden
9d4a31125e Plan: Add csharp/ to starters directory listing
Complete the file structure section by including csharp/ alongside the other 7 starter kits. The C# starter kit is already fully documented in §5.8 and §11.2 tables.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:33:21 -04:00
jedarden
27466465ae Notes for bf-ns9q: C# starter kit registration already completed
The bead task indicated missing CI workflow and plan §5.8 coverage,
but verification found all components already in place from commit 55c594c.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:30:44 -04:00
jedarden
55c594c019 Plan: Add C# starter kit to §5.8 and §11.2 documentation
- Add acb-starter-csharp to §5.8 starter kit table
- Add acb-starter-csharp to §11.2 template repos table
- Update evolution validation test suite language list

The C# starter kit exists at starters/csharp/ with full implementation
including ASP.NET Core minimal API, HMAC auth, grid utilities, tests,
Dockerfile, and CI workflow. It was simply missing from plan documentation.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:27:12 -04:00
jedarden
c9a9323c4c Notes for bf-3z08: JavaScript starter kit registration completed
The JavaScript starter kit was officially registered via commit 7e8c9d7,
which added it to plan §5.8, the file structure section, and the published
template repos table. This notes file documents the completion status.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:24:10 -04:00
jedarden
7e8c9d7e6f Plan: Add JavaScript starter kit to §5.8 and related sections
- Add `acb-starter-javascript` to §5.8 Starter Kit table
- Add javascript/ to file structure section
- Add `acb-starter-javascript` to published template repos table

The JavaScript starter already exists in starters/javascript/ with:
- Dockerfile, CI workflow, README, package.json
- Node.js built-in http module, zero dependencies

This registers it as an official starter kit alongside the other 6 languages.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:21:05 -04:00
jedarden
d3d655b9c9 Evolver: Fix nsjail integration for complete sandbox coverage
- Add /opt to nsjail bindmounts so Rust toolchain (/opt/rust) is accessible
  during sandboxed validation of Rust bots
- Explicitly enable Alpine community repository in Dockerfile to ensure
  nsjail package can be installed (nsjail lives in community, not main)
- nsjail integration was already optional (falls back to plain exec if
  unavailable), but these changes ensure it actually works when enabled

This addresses bead bf-3f29: nsjail was listed in apk add but /opt wasn't
bindmounted, causing Rust validation to fail when UseNsjail=true.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:18:21 -04:00
jedarden
7137623f6a Evolver: Add nsjail and missing language runtimes (Rust, Java) to container
The evolver's validation pipeline supports Rust and Java bots, but the
container image was missing rustc and javac runtimes. Additionally, nsjail
was documented as part of the sandbox stage but not installed.

Changes:
- Add nsjail package (from Alpine community repo) for sandbox isolation
- Add openjdk-17-jdk for Java bot validation
- Install Rust toolchain (rustc) via rustup to /opt/rust for shared access
- Set PATH to include Rust binaries for the acb user

The validator already had graceful fallback when nsjail wasn't found in PATH,
but with nsjail installed, the sandbox stage now provides proper CPU/memory
resource limits during smoke testing.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:16:23 -04:00
jedarden
5fabf5a672 Verification: Directed attack arrows from killers[] in combat_death events (bf-3jyd)
Verified complete implementation of §16.9 directed attack arrows feature:
- Engine emits combat_death events with killers array (bot_id, owner, position)
- TypeScript types properly define CombatDeathKiller and CombatDeathDetails
- Viewer draws solid arrows from each killer to victim with attacker player color
- Arrowheads point to victim tile center
- Backward compatibility maintained for old replays (proximity-inference fallback)
- Red explosion flash and X marker for death visualization

Related commits: 8e0aa5e (engine), 323c1e8 (viewer)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:13:26 -04:00
jedarden
359a5450ab Update predispatch sha 2026-05-22 15:10:55 -04:00
jedarden
bd7617772a Notes for bf-3krf: K8s deployments and ExternalSecrets for extended bot fleet
Documenting that this work was completed in commit 1c8f0ae.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:01:44 -04:00
jedarden
b3f6dcba49 Verification: Directed attack arrows from killers[] in combat_death events (bf-3jyd)
Verified that the feature implemented in commits 8e0aa5e (engine) and 323c1e8 (viewer) is complete and working:

Engine (engine/turn.go):
- executeCombat emits EventCombatDeath with killers[] array
- Each killer entry includes bot_id, owner, and position

Viewer (web/src/replay-viewer.ts):
- drawCombatEffects() handles combat_death events with killers[]
- Draws solid colored arrows from each killer to the victim
- Includes red explosion flash and X marker for death
- Maintains backward compatibility with old replays (proximity-inference fallback)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 15:00:16 -04:00
jedarden
1c8f0aea72 K8s deployments and ExternalSecrets for extended bot fleet
Add Deployment, ExternalSecret, and Service manifests for 10 new strategy bots:
- scout (Python)
- assassin (Rust)
- defender (C#)
- farmer (Go)
- kamikaze (Node)
- nomad (Python)
- opportunist (Go)
- pacifist (Node)
- phalanx (Rust)
- raider (Java)

Each bot includes:
- Deployment with ArgoCD Image Updater annotations
- ExternalSecret for OpenBao shared-secret
- ClusterIP service (bot-<name>.acb-bots.svc.cluster.local)

Resource allocations tailored per language (JVM/C#/Rust = higher, Go/Python/Node = lower)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 14:58:41 -04:00
jedarden
0079812c56 Verification notes for bf-3jyd: Directed attack arrows from killers[] in combat_death events
The feature was already fully implemented in commits 8e0aa5e and 323c1e8.
This commit documents the verification of that implementation.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 14:53:27 -04:00
jedarden
323c1e8241 Viewer: directed attack arrows from killers[] in combat_death events (§16.9)
- Updated CombatDeathDetails type to include killers[] array with each killer's bot_id, owner, and position
- Modified drawCombatEffects() to handle combat_death events by drawing solid arrows from each killer to the victim
- Added drawArrow() helper method to draw arrows with arrowheads
- Maintained backward compatibility: old replays without combat_death events use proximity-inference lines

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 14:51:32 -04:00