diff --git a/.project/objectives/objectives.json b/.project/objectives/objectives.json index 1968cedf..e487145b 100644 --- a/.project/objectives/objectives.json +++ b/.project/objectives/objectives.json @@ -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", diff --git a/.project/objectives/p2-48a-end-game-summary-gut-and-proof.md b/.project/objectives/p2-48a-end-game-summary-gut-and-proof.md index 7e48359f..e3b279c8 100644 --- a/.project/objectives/p2-48a-end-game-summary-gut-and-proof.md +++ b/.project/objectives/p2-48a-end-game-summary-gut-and-proof.md @@ -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 1–2). If the demo is a fixed-length sandbox that never resolves, this is pure post-demo. **Effort:** M (steps 1–2 + 4–5, ~1–1.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.)