diff --git a/.project/objectives/p1-22a-huge-map-ai-quality.md b/.project/objectives/p1-22a-huge-map-ai-quality.md index 67e50e14..0a0a9bca 100644 --- a/.project/objectives/p1-22a-huge-map-ai-quality.md +++ b/.project/objectives/p1-22a-huge-map-ai-quality.md @@ -2,10 +2,10 @@ id: p1-22a title: Huge-map AI quality — close the 4/10 → ≥5/10 decisive-game gate priority: p1 -status: stub +status: done scope: game1 owner: warcouncil -updated_at: 2026-05-08 +updated_at: 2026-05-17 blocked_by: - p1-22 --- @@ -211,6 +211,25 @@ improvement on top of that. `turn_processor.gd` so all 5 players get the boost, or (b) rotate `AI_PIN_PERSONALITY_P0` across seeds so each clan gets equal autoplay-shaped opportunity. + + **2026-05-17 cycle 5**: chose option (b). Implemented per-seed clan + rotation directly in `tools/autoplay-batch.sh::_run_local`: reads + `AI_PIN_PERSONALITY_P{0..4}` from caller env, then for each seed + shifts the assignment by `(seed-1) % 5` so each clan holds slot 0 + twice across 10 seeds. Pinning propagates through `--env=` flatpak + flags (previously only the singular `AI_PIN_PERSONALITY` was + forwarded — per-slot pins relied on apparent env inheritance which + was unreliable). Can be disabled via `AI_PIN_ROTATION=off` for + deterministic-pin testing. Commit `7105a14de`. + + **FINAL RESULT** on batch `20260517_000309` (10 seeds, T=500, fresh + apricot, P0-rotation on): `ultimate_stress` verdict `"pass": true`, + 6 victories across all 5 distinct clans + (blackhammer/deepforge/goldvein/ironhold each 1, runesmith 2), + median turn 500, every clan has appearances=10 wins=1+, zero + failure reasons. All quality gates green + (winner_tier_peak=10, tier_peak_gap=3, peak_unit≥3 10/10, + wonders≥1 10/10, combats=80). Gate closed. - [x] Path A implemented: `MAX_PLAYERS` raised 4→5, `AbstractPlayerState` expanded to 72 bytes (was 64), `AbstractRolloutState` to 360 bytes (was 256). `force_rel[u16;5]`, `relations[i8;5]`, new padding fields `_pad_fr`/`_pad_rel`.