From 41f2363ba70aa27d8e00cf5fbee6e58e6ec2ab72 Mon Sep 17 00:00:00 2001 From: autocommit Date: Thu, 4 Jun 2026 09:26:32 -0700 Subject: [PATCH] =?UTF-8?q?feat(turn):=20=E2=9C=A8=20Update=20turn=20proce?= =?UTF-8?q?ssing=20logic=20with=20improved=20state=20validation=20and=20pl?= =?UTF-8?q?ayer=20turn=20transitions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- src/simulator/crates/mc-turn/src/game_state.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/simulator/crates/mc-turn/src/game_state.rs b/src/simulator/crates/mc-turn/src/game_state.rs index c7c09695..f0ecf8fa 100644 --- a/src/simulator/crates/mc-turn/src/game_state.rs +++ b/src/simulator/crates/mc-turn/src/game_state.rs @@ -779,6 +779,16 @@ pub struct PlayerState { /// Empty = fall-through to default at dispatch time. #[serde(default)] pub controller_id: String, + /// p1-29h — cross-turn tactical memory: the army-level target-lock + + /// commitment-hysteresis channel that makes the AI's war decisive + /// (capture → press on → elimination) instead of indecisive (capture → + /// disperse → opponent refounds). Borrowed `&mut` by + /// `mc_player_api::dispatch::drive_ai_slot` and threaded into the tactical + /// movement layer. `#[serde(skip)]` — transient; re-acquired from scratch + /// (at most one no-lock turn) after a save/load rather than persisted into + /// the save format, keeping the `mc-save` contract unchanged. + #[serde(skip)] + pub tactical_memory: mc_ai::tactical::TacticalMemory, /// Accumulated expansion capacity (earned from the `expansion` axis). pub expansion_points: u32, /// Per-city list of constructed building IDs. Aligned with `cities`.