From ffba4db1f938035ecf491c6476e8b900e5217971 Mon Sep 17 00:00:00 2001 From: Natalie Date: Sat, 16 May 2026 00:30:27 -0700 Subject: [PATCH] =?UTF-8?q?feat(@projects/@magic-civilization):=20?= =?UTF-8?q?=E2=9C=A8=20add=20survival=20objective=20tracking=20for=20p1-29?= =?UTF-8?q?d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- .project/objectives/p1-29d-p1-survival.md | 56 +++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 .project/objectives/p1-29d-p1-survival.md diff --git a/.project/objectives/p1-29d-p1-survival.md b/.project/objectives/p1-29d-p1-survival.md new file mode 100644 index 00000000..b1b4eee1 --- /dev/null +++ b/.project/objectives/p1-29d-p1-survival.md @@ -0,0 +1,56 @@ +--- +id: p1-29d-p1-survival +title: "P1 (trailing AI) eliminated or stalled before T100 in 10/10 seeds — upstream of action priority" +priority: p1 +status: stub +scope: game1 +category: balance +owner: warcouncil +created: 2026-05-16 +updated_at: 2026-05-16 +blocked_by: [] +follow_ups: [p1-29c, p1-29a, p1-29] +--- + +## Context + +`p1-29c` shipped sole-city research-priority uplift (`SituationalContext::sole_city_threatened` adds `+0.40 Settle / +0.20 Defend / +0.50 Research`) and was apricot-verified on batch `20260515_215705` (10/10 games produced complete turn_stats; infrastructure clean after commits `e200634df` + `8820ce04a`). The gate result: + +``` +Per-seed: P0 tier_peak 2–10 (healthy) + P1 tier_peak = 1 in ALL 10 seeds + P1 cities at end-game: 0 in 8 seeds, 1 in 2 seeds +Gate ≥7/10 alive-aware seeds with P1 tier_peak ≥ 2: 0/10 PASS +``` + +P1 is **eliminated or stalled before reaching tier 2 in 80% of seeds**. The current uplift sites in `mc-ai/src/policy.rs::SituationalContext` cannot move this — they tune action priority, but P1 doesn't survive long enough to act on it. + +## The actual failure mode + +The 8 seeds where P1 ends with 0 cities indicate `cities_lost == cities_founded == 1` (or P1 lost its capital). This is upstream of research-priority — P1 is losing combat encounters before getting to tier 2. + +Likely contributors (any/all): +1. **Combat balance** — P1's tier-1 units cannot defend against a P0 that already has tier-2 unit access by mid-game. +2. **Map placement** — P1's capital might consistently be in a hostile region (no chokepoint, no fortifiable terrain). +3. **AI tactical decisions** — P1 may be over-attacking (losing units offensively) instead of fortifying. +4. **Personality skew** — most clans bias toward "Conquest" axis early, even from a weaker position. + +## Acceptance + +- ☐ Diagnose which contributor(s) dominate via batch instrumentation: + - Add `cities_lost`, `units_destroyed`, `turn_first_attack`, `last_alive_turn` to `player_stats` JSONL emission if not already present. + - Re-run apricot batch; tabulate elimination turn and immediate cause per seed. +- ☐ Identify the load-bearing lever (defensive multiplier? Map seed quality? AI flee threshold?). +- ☐ Implement the lever as either a Rust mc-combat balance tweak or an mc-ai posture/flee adjustment. +- ☐ Re-run apricot batch; gate ≥7/10 seeds with P1 `tier_peak ≥ 2`. +- ☐ Closes both p1-29c's bullet 1 and p1-29a's blocker. + +## Why this exists separately from p1-29c + +p1-29c's spec is "raise priority of Settle/Defend/Research when sole-city threatened." That work landed and is correct. The empirical failure mode is "P1 doesn't survive long enough to ACT on those priorities." That's a different code surface and a different design question — it deserves its own objective. + +## References + +- Apricot batch evidence: `apricot:~/.cache/mc-batches/20260515_215705/smoke/` +- p1-29c sole-city implementation: `mc-ai/src/policy.rs::action_prior_with_context` +- Prior diagnosis: `.project/objectives/p1-29.md` lines 124-134 ("Early-end games are intentionally-ungated elimination wins.")