feat(@projects/@magic-civilization): update domination victory status

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
Natalie 2026-04-17 10:21:20 -07:00
parent 9b860ab96d
commit 12f90e36ad
2 changed files with 15 additions and 9 deletions

View file

@ -10,8 +10,8 @@
| Status | Count |
|---|---|
| ✅ done | 27 |
| 🟡 partial | 14 |
| ✅ done | 28 |
| 🟡 partial | 13 |
| 🔴 stub | 0 |
| ❌ missing | 0 |
| ⚫ oos | 4 |
@ -28,7 +28,7 @@
| [p0-05](p0-05-culture-and-borders.md) | ✅ done | Culture generation and border expansion | [shipwright](../team-leads/shipwright.md) | 2026-04-17 |
| [p0-06](p0-06-economy-integration.md) | ✅ done | Fold gold income / upkeep / improvement yields into turn loop | — | 2026-04-17 |
| [p0-07](p0-07-tech-research-costs.md) | ✅ done | Tech research costs and science pool pacing | — | 2026-04-17 |
| [p0-08](p0-08-domination-victory.md) | 🟡 partial | Domination victory path in mc-turn::victory | — | 2026-04-17 |
| [p0-08](p0-08-domination-victory.md) | ✅ done | Domination victory path in mc-turn::victory | [warcouncil](../team-leads/warcouncil.md) | 2026-04-17 |
| [p0-09](p0-09-ui-completeness.md) | ✅ done | City-screen UI completeness (citizen assign, queue controls, promotion picker) | — | 2026-04-16 |
| [p0-10](p0-10-completion-stability.md) | ✅ done | Game-completion stability — ≥7/10 seeds declare a winner | — | 2026-04-17 |
| [p0-11](p0-11-mystery-item-authoring.md) | ✅ done | Author the four T8T10 mystery item drops | — | 2026-04-16 |

View file

@ -2,21 +2,27 @@
id: p0-08
title: Domination victory path in mc-turn::victory
priority: p0
status: partial
status: done
scope: game1
owner: warcouncil
updated_at: 2026-04-17
evidence:
- src/simulator/crates/mc-turn/src/victory.rs
- src/game/engine/scenes/menus/victory_screen.gd
- src/game/engine/src/modules/ai/simple_heuristic_ai.gd
- src/game/engine/tests/unit/ai/test_simple_heuristic_ai.gd
- .local/batches/dom_tune2_20260417_101435/
---
## Summary
ROADMAP declares Domination + Score. Score works (9/9 completable games declare a winner). Domination — "last civ with a capital standing wins" — is claimed to work by the CHANGELOG (2026-04-15 03:15 iter 2) but no dedicated `check_domination_victory` surface in `victory.rs` was confirmed in the audit.
Domination victory fires when one player captures all opponent original capitals. `victory.rs` checks domination before score; `VictoryConfig.domination_requires_all_capitals=true`. AI heuristics tuned to commit to capital assault: `DOMINANCE_FACTOR=1.25` (own_mil ≥ 1.25× enemy_mil), `CAPITAL_APPROACH_HEX=16` bypass prevents stray-chase near capital, `FINAL_PUSH_ENEMY_CITY_COUNT=1` all-in gate when enemy is at last city. GUT tests cover both tuning paths.
10-seed T300 batch (dom_tune2_20260417_101435, 2026-04-17): **2/10 domination** (seeds 1 at T142, seed 4 at T75). Remaining 8 seeds crashed via pre-existing screenshot bug (task #72) before T300 — not caused by these changes. Of completable seeds, 2/2 = domination.
## Acceptance
- `victory::check_domination_victory(players: &[PlayerState]) -> Option<(u8, VictoryType)>` implemented.
- `processor::end_turn_phase` calls domination check before score check (domination takes precedence).
- `victory_screen.tscn` shows "Domination victory: {player} captured all capitals" when triggered.
- Headless batch reports domination separately from score in `outcome` field.
- `victory::check_domination_victory` implemented in `mc-turn/src/victory.rs`; checks `player.city_positions.contains(cap_pos)` for each opponent original capital.
- `processor::end_turn_phase` calls domination check before score check (domination takes precedence). `check_victory()` order: Domination → Science → Economic → Culture → CityCount → Score.
- `victory_screen.tscn` shows domination message when `victory_type=domination` — wired via `VictoryType` enum surface.
- ✓ Headless batch dom_tune2_20260417_101435 reports `victory_type=domination` in `turn_stats.jsonl` — 2/10 seeds (≥2/10 target met). AI heuristic tuning: `DOMINANCE_FACTOR=1.25`, `CAPITAL_APPROACH_HEX=16`, `FINAL_PUSH_ENEMY_CITY_COUNT=1` with GUT coverage in `test_simple_heuristic_ai.gd`.