feat(@projects/@magic-civilization): ✨ add survival objective tracking for p1-29d
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
parent
0c3e66e0de
commit
ffba4db1f9
1 changed files with 56 additions and 0 deletions
56
.project/objectives/p1-29d-p1-survival.md
Normal file
56
.project/objectives/p1-29d-p1-survival.md
Normal file
|
|
@ -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.")
|
||||
Loading…
Add table
Reference in a new issue