docs(p2-48a): phase-gate approved — end-game summary GUT+proof done

Orchestrator-reviewed clean proof (all 4 GameOverReason variants, themed copy) + GUT green. partial -> done.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
autocommit 2026-06-04 18:20:08 -07:00
parent 7e6c10613a
commit 4c719a073e
2 changed files with 27 additions and 13 deletions

View file

@ -1,14 +1,14 @@
{
"generated_at": "2026-06-04T21:49:36Z",
"generated_at": "2026-06-05T01:20:08Z",
"totals": {
"done": 241,
"done": 242,
"in_progress": 1,
"missing": 1,
"oos": 29,
"partial": 19,
"stub": 8,
"partial": 20,
"stub": 7,
"superseded": 4,
"total": 303
"total": 304
},
"objectives": [
{
@ -1313,6 +1313,17 @@
"blocked_by": [],
"summary": "`p1-29d`'s clean-surface investigation (2026-06-03) reduced the entire `p1-29a..e` \"trailing-AI never converges / balance levers never move the dial\" family to a single, precisely-characterised root cause:"
},
{
"id": "p1-29i-refound-suppression",
"title": "Refound-suppression / capture-stickiness lever — convert captures into eliminations",
"priority": "p1",
"status": "partial",
"scope": "game1",
"owner": "warcouncil",
"updated_at": "2026-06-04",
"blocked_by": [],
"summary": "p1-29h Phase 2 isolated the elimination wall: on the fair gridded two-`scripted:default` duel (`mc-player-api/tests/p1_29h_gridded_elimination.rs`) the army-lock engages and captures land (20 captures / 160 turns) but **0 eliminations** — the loser refounds before the attacker can take the last city. p1-29h flagged refound-suppression / capture-stickiness as the candidate lever and asked for a new objective if scope warranted. It does — this is it."
},
{
"id": "p1-30",
"title": "Optimize `_build_tactical_state` — 8000-tile GDScript dict-build per AI turn blocks p1-22 huge-map gate",
@ -2441,10 +2452,10 @@
"id": "p2-48a",
"title": "End-of-game summary — GUT tests + headless proof scene",
"priority": "p2",
"status": "stub",
"status": "done",
"scope": "game1-stretch",
"owner": "shipwright",
"updated_at": "2026-05-08",
"updated_at": "2026-06-04 (bridge-cse lane)",
"blocked_by": [],
"summary": "Carry-forward from p2-48 cycle 2. The Rust `compute_awards` function and `end_game_summary.gd` scene skeleton are complete. These two acceptance bullets from p2-48 remain un-met because they require a wired `.tscn`, the GdReplayPlayer bridge, and headless Godot infrastructure that blocks on `p3-05` + `p3-06`."
},
@ -3302,7 +3313,7 @@
"blocked_by": [
"p3-10a"
],
"summary": "`mc_core::lair::SiegeState` + `SiegeOutcome` typed enums shipped. `mc_combat::lair::apply_siege_pressure` and `decay_siege` functions implement multi-turn pressure-from-adjacent semantics. Outcomes include `Continuing | Surrender | AlreadySurrendered`. Status: partial — Rust mechanic implemented; mc-turn integration into the per-turn dispatch (call site for besieging units) and end-to-end batch validation are not yet in place. ACS pushed `2de4ae5ac \"add siege pressure state tracking\"`."
"summary": "Promoted K=0→4 of 5. The siege mechanic is now **LIVE in the turn loop** (`TurnProcessor::process_lair_sieges`, Phase 5d in `step`), driven by a data-driven `LairSiegeConfig` loaded from `lair_combat_modes.json` (per-tier resistance + tuning, Rail 2). Pressure accumulates under besieger adjacency, decays unattended, surrenders + drops loot at threshold, and round-trips through save/load (verified). 4 named acceptance tests + 3 config-loader tests + 5 lib + 4 integration green; full mc-turn 240 lib, mc-combat 143 lib, serde_roundtrip 6/6; `cargo check --workspace` exit 0 (apricot 2026-06-04). F"
},
{
"id": "p3-10c",
@ -3519,12 +3530,12 @@
"remaining": 6
},
{
"owner": "shipwright",
"remaining": 5
"owner": "warcouncil",
"remaining": 6
},
{
"owner": "warcouncil",
"remaining": 5
"owner": "shipwright",
"remaining": 4
},
{
"owner": "unassigned",

View file

@ -2,7 +2,7 @@
id: p2-48a
title: End-of-game summary — GUT tests + headless proof scene
priority: p2
status: partial
status: done
scope: game1-stretch
owner: shipwright
updated_at: 2026-06-04 (bridge-cse lane)
@ -123,3 +123,6 @@ GdReplayPlayer bridge, and headless Godot infrastructure that blocks on
**Demo gate:** **post-demo polish**, with a caveat. A full end-of-game summary screen is not needed to PLAY a demo loop. But if the demo runs to a victory condition, there is currently NO summary screen shown (the scene is orphaned). If the demo is meant to reach game-over, author the `.tscn` + entry point (steps 12). If the demo is a fixed-length sandbox that never resolves, this is pure post-demo.
**Effort:** M (steps 12 + 45, ~11.5 sessions) + S Rust (step 3).
## Phase-gate APPROVED — 2026-06-04 (orchestrator review)
Flipped partial → done. Both bullets met: GUT green on apricot (award 3/3, footer 5/5, game_over_event 5/5) + headless proof scene boots the real EndGameSummary for all 4 GameOverReason variants. Clean re-captured proof reviewed in-conversation (Dwarf-flavored copy "Victory!" / "Last Clan Standing" / "Victor"/"Fallen" / themed footer, zero raw vocabulary keys). Operator may veto on review. (Live awards-data bridge is p2-48's concern, tracked separately; the proof correctly shows the "honour-rolls being tallied" pending notice.)