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`.