Skip to content

Make hunter the baseline FFA default (legacy becomes the explicit opt-out) - #56

Open
devin-ai-integration[bot] wants to merge 2 commits into
mainfrom
devin/1787603976-hunter-default-v2
Open

Make hunter the baseline FFA default (legacy becomes the explicit opt-out)#56
devin-ai-integration[bot] wants to merge 2 commits into
mainfrom
devin/1787603976-hunter-default-v2

Conversation

@devin-ai-integration

Copy link
Copy Markdown
Contributor

Summary

Reopens #51 (closed unmerged; same commit, rebased onto current main at 85159b0). Flips the compiled default of the baseline policy's FFA doctrine from legacy to hunter — the arm #46 landed behind an env flag now ships on:

-  FfaDoctrine = FfaLegacy
+  FfaDoctrine = FfaHunter
   ...
-    if requestedDoctrine.len == 0: FfaLegacy
+    if requestedDoctrine.len == 0: FfaHunter

CTF_BOT_FFA_DOCTRINE=legacy is now the opt-out; every other arm (hybrid, passive, rush, shade, hunter) still selects by name, and no hunter tuning constant, other doctrine, or sim file changes. tools/ci/check_gameversion.sh origin/main is quiet — GV45 unchanged, no rule change claimed, so replays and fixtures are untouched.

Why hunter: it arms itself (bounded, abortable gun trips), fires at real weapon range instead of a flat 120px, pursues only weaker targets while healthy, and starts the endgame at 4 alive. Locally that is +42.3 ± 7.8 score over passive with survival up (89s vs 64s) and armed fraction 0.07 → 0.51 (#46). The honest caveat, also from #46: on the hosted field against the current champion it measured +3.8 ± 3.4 pp pairwise across 196 clean episodes — inside noise. So this is defensible as "the bundled bot should fight rather than hide", not as a proven ladder win.

What it actually changes in production: the bundled baseline player artifact in coworld_manifest_battleroyale.json is built from this source and is what certification, smoke runs and league seat-filling use, and the manifest carries no doctrine override — so the flip reaches the league only on the next Coworld publish, and competitor-submitted policies are unaffected.

Tests move with the default rather than being relaxed: test_baseline_doctrine.nim now asserts hunter-when-unset and adds a case asserting legacy still resolves explicitly. tools/run_ffa_demo.sh's unset fallback follows the same default so the demo matches shipped behavior. docs/ENV_VARIATION.md and players/baseline/README.md are corrected — both previously stated the league baseline stays legacy unless a runner opts in.

Verification

Carried over from #51 on the identical tree: nim c -d:release players/baseline/baseline.nim; startup line for unset (ffaDoctrine=hunter) and each explicit arm, plus invalid-doctrine exit 1; tests/test_baseline_doctrine.nim (4 tests) and tests/test_artlog.nim; tools/ci/check_gameversion.sh origin/main (GV45 unchanged both sides). Runtime: two real 12-player FFA matches from one identical config with bots launched directly, so the compiled default is what was under test — unset gave 12/12 ffaDoctrine=hunter banners, 21 loot trips, hunter-only engage reasons (fire_range 192, pursue_weak 31) and an elimination ending; explicit legacy gave 0 loot trips and 0 hunter engage reasons.

Link to Devin session: https://app.devin.ai/sessions/274a6b4a46034710a7a81a2a81dc02dc
Requested by: @aaln

Switch unset CTF_BOT_FFA_DOCTRINE and the local FFA demo fallback to hunter while retaining explicit legacy opt-out coverage. Update the policy documentation and doctrine regression tests.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment, CI, and merge conflict monitoring

Resolve the doctrine-default conflicts with #52's pact arm and per-seat
override: ffaDoctrineFor now resolves an unset CTF_BOT_FFA_DOCTRINE to
hunter, pact stays opt-in, and the pact-default guard asserts pact rather
than legacy.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant