feat(objectives): update clan personalities priority and status

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
Natalie 2026-04-18 10:27:49 -07:00
parent 109a5fb692
commit 2c0071e721
4 changed files with 18 additions and 16 deletions

View file

@ -14,11 +14,11 @@
| Priority | ✅ | 🟡 | 🔴 | ❌ | ⚫ | Total |
|---|---|---|---|---|---|---|
| **P0** | 28 | 6 | 1 | 0 | 0 | 35 |
| **P0** | 27 | 7 | 1 | 0 | 0 | 35 |
| **P1** | 15 | 4 | 2 | 0 | 1 | 22 |
| **P2** | 14 | 5 | 0 | 8 | 0 | 27 |
| **P3 (oos)** | 0 | 0 | 0 | 0 | 17 | 17 |
| **total** | **57** | **15** | **3** | **8** | **18** | **101** |
| **total** | **56** | **16** | **3** | **8** | **18** | **101** |
</td><td valign='top' style='padding-left:2em'>
@ -27,8 +27,8 @@
| Team Lead | Remaining |
|---|---|
| [asset-sprite](../team-leads/asset-sprite.md) | 7 |
| [warcouncil](../team-leads/warcouncil.md) | 6 |
| [wireguard](../team-leads/wireguard.md) | 6 |
| [warcouncil](../team-leads/warcouncil.md) | 5 |
| [shipwright](../team-leads/shipwright.md) | 2 |
| [testwright](../team-leads/testwright.md) | 2 |
| [asset-audio](../team-leads/asset-audio.md) | 1 |
@ -46,7 +46,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) | ✅ done | Domination victory path in mc-turn::victory | [warcouncil](../team-leads/warcouncil.md) | 2026-04-17 |
| [p0-08](p0-08-domination-victory.md) | 🟡 partial | Domination victory path in mc-turn::victory | [warcouncil](../team-leads/warcouncil.md) | 2026-04-18 |
| [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

@ -76,7 +76,7 @@ Note: ablated TTV drops (not rises) because most games hit T300 stalemate when t
- ✓ `mc-ai::ScoringWeights::from_personality(id: &str)` loads weights from JSON — implemented in `evaluator.rs`, GUT test 8 verifies `blackhammer.military_base > goldvein.military_base`.
- ✓ AI assignment at game start picks one of the 5 personalities per AI player — `personality_assigner.gd` assigns randomly; `meta.json::player_clans` confirms. `AI_PIN_PERSONALITY` env var verified working.
- 🟡 Batch of 5×10 seeds with `AI_PIN_PERSONALITY=<id>` produces measurably different stats per clan. Legacy pre-reframe evidence: gold axis shows goldvein 2× ironhold (543 vs 266) — still valid. TTV divergence (goldvein/runesmith 30 turns faster than ironhold/deepforge) was the pre-p0-25 proxy for the era-progression metric and does NOT translate 1:1 into the reframed `tier_peak` framework. Post-reframe target: **median `winner_tier_peak` differs by ≥1 era between clans with divergent production/expansion axes** (ironhold/deepforge vs goldvein/runesmith). NEEDS batch re-run on the p0-25-instrumented binary to cite.
- ✓ **Personality win-rate balance (blackhammer)**: FIXED 2026-04-17 via two GDScript-only changes: `DOMINANCE_GOLD_FLOOR` 200→50 (unblocks rush-buy for low-economy clans) and `PRODUCTION_AXIS_BUILDING_BIAS` 6→8 (raises threshold so aggression=9 clans prefer units over buildings). Batch `blackhammer_tune_20260417_101447` (10 seeds, T300, `AI_PIN_PERSONALITY=blackhammer`): **2/10 blackhammer wins** (seed 4 T71, seed 9 T125, both domination). Gate: ≥1 win in 10-seed sample — PASSED. Seed 8 hit safety timeout (892s, `in_progress`) — not a blackhammer loss. Prior B5 zero-win run (`.local/iter/b5-manual-20260417_061957/`) used old binary with DOMINANCE_GOLD_FLOOR=200.
- ✓ **Personality win-rate balance** (50-game sample across all 5 clans, post-p0-26 port binary, 2026-04-18): ironhold 8/10, goldvein 9/10, blackhammer 9/10, deepforge 8/10, runesmith 9/10 — every clan wins ≥1/10 when pinned on player 1 (no clan shut out), spread 80-90% (no clan dominant). This is the 50-game personality_win_balance sample p1-05 cites as its warcouncil dependency. Historical fix trail retained: post-port binary preserves `DOMINANCE_GOLD_FLOOR = 50` + `PRODUCTION_AXIS_BUILDING_BIAS = 8` tunings via `mc-ai::tactical::production` constants, ported from the deleted `simple_heuristic_ai.gd` 2026-04-17 fixes.
- 🟡 **Six axes each materially affect gameplay** — pre-reframe verification via per-axis ablation sweep (2026-04-17, `.local/iter/ablate_<axis>_20260417_072921/`): each axis neutralized to 5 for all clans; all 6 showed ≥10% delta on correlated legacy metric (aggression→mil -16.7%, expansion→TTV -27.6%, grudge_persistence→TTV -28.9%, production→TTV -24.9%, trade_willingness→gold -48.9%, wealth→gold -40.0%). Neutralizing any axis collapses domination win rate from 49/49 to 18/10 — games stall. **POST-REFRAME target**: re-run the 6-axis ablation under p0-25 instrumentation and pin the era-progression-axis correlations (expansion/production/grudge_persistence should each show ≥1 era delta on `tier_peak_med`; aggression/trade_willingness/wealth retain their existing mil_med / gold_med correlations). NEEDS re-run to cite under the reframed gate.
## Post-reframe evidence (2026-04-18, p0-25-instrumented binary)

View file

@ -2,16 +2,17 @@
id: p0-08
title: Domination victory path in mc-turn::victory
priority: p0
status: done
status: partial
scope: game1
owner: warcouncil
updated_at: 2026-04-17
updated_at: 2026-04-18
evidence:
- src/simulator/crates/mc-turn/src/victory.rs
- src/simulator/crates/mc-ai/src/tactical/movement.rs # DOMINANCE_FACTOR, CAPITAL_APPROACH_HEX ported from simple_heuristic_ai.gd
- src/simulator/crates/mc-ai/src/tactical/production.rs # DOMINANCE_GOLD_FLOOR, CAPITAL_WALLS_MIN_AGE_TURNS
- 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/
- .local/iter/apricot-20260418_074209/ # post-port smoke: domination T39-T300
---
## Summary
@ -25,4 +26,5 @@ Domination victory fires when one player captures all opponent original capitals
- ✓ `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`.
- ✓ 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` — ported into `mc-ai::tactical::{movement,production}` during p0-26. Test coverage migrated to `cargo test -p mc-ai tactical` (constant-value assertions at `movement.rs:1049-1054` + `production.rs:446`).
- ✗ **Domination tempo calibration** (added 2026-04-18 per p1-05 dependency). Post-port batches (5 clan pins + smoke, 2026-04-18) resolve T39-T150 via domination — too fast for the downstream quality gates. p1-05 luxury variance requires median game length ≥ T250; p0-01 state-at-end tier_peak ≥ 6 requires games reach tier 6+ content before resolving. Current tempo rushes past both. **Retune target**: raise `DOMINANCE_FACTOR` from 1.25 toward 1.75-2.0 OR scale up `CAPITAL_WALLS_MIN_AGE_TURNS` (production.rs:68, currently 20) so early capital assaults fail more often. Needs a parameter sweep + 10-seed validation batch per candidate value.

View file

@ -1,11 +1,11 @@
{
"generated_at": "2026-04-18T17:08:47Z",
"generated_at": "2026-04-18T17:25:56Z",
"totals": {
"missing": 8,
"partial": 16,
"stub": 3,
"missing": 8,
"done": 56,
"oos": 18,
"partial": 15,
"done": 57,
"total": 101
},
"objectives": [
@ -83,10 +83,10 @@
"id": "p0-08",
"title": "Domination victory path in mc-turn::victory",
"priority": "p0",
"status": "done",
"status": "partial",
"scope": "game1",
"owner": "warcouncil",
"updated_at": "2026-04-17",
"updated_at": "2026-04-18",
"summary": "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.\n\n10-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."
},
{