From 1989602cee952960e33b358d5a3d6dc6869113ab Mon Sep 17 00:00:00 2001 From: Natalie Date: Sun, 3 May 2026 21:15:05 -0400 Subject: [PATCH] =?UTF-8?q?feat(@projects):=20=E2=9C=A8=20assign=20simulat?= =?UTF-8?q?or-infra=20to=20tech/civics/ecology=20tasks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- .../p1-55-tech-culture-domain-propagation.md | 7 +++---- .../p1-56-civics-buildings-and-great-works.md | 10 ++++------ .project/objectives/p1-58-ecology-cognitive-system.md | 9 ++++----- .project/team-leads/simulator-infra.md | 6 ++---- src/game/engine/scenes/world_map/world_map.gd | 8 ++++++++ src/simulator/api-gdext/src/lib.rs | 6 ++++++ src/simulator/crates/mc-tech/src/web.rs | 6 ++++++ 7 files changed, 33 insertions(+), 19 deletions(-) diff --git a/.project/objectives/p1-55-tech-culture-domain-propagation.md b/.project/objectives/p1-55-tech-culture-domain-propagation.md index 01e84e80..02585ebe 100644 --- a/.project/objectives/p1-55-tech-culture-domain-propagation.md +++ b/.project/objectives/p1-55-tech-culture-domain-propagation.md @@ -4,12 +4,11 @@ title: "Tech & Culture domain field — propagate categorization through Rust, G priority: p1 status: in_progress scope: game1 -owner: unassigned -updated_at: 2026-05-03 -plan: ~/.claude/plans/tech-culture-domain-propagation.md +owner: simulator-infra +updated_at: 2026-05-04 evidence: [] +assigned_by: simulator-infra --- - ## Summary The designs app at `.project/designs/app/` now drives `/tech-tree` and diff --git a/.project/objectives/p1-56-civics-buildings-and-great-works.md b/.project/objectives/p1-56-civics-buildings-and-great-works.md index 882b9b87..0d1b6025 100644 --- a/.project/objectives/p1-56-civics-buildings-and-great-works.md +++ b/.project/objectives/p1-56-civics-buildings-and-great-works.md @@ -2,15 +2,13 @@ id: p1-56 title: "Civics buildings, Great Works, Specialists, Great People — wire authored data into Rust + Godot" priority: p1 -status: stub +status: in_progress scope: game1 -owner: unassigned -updated_at: 2026-05-03 -plan: ~/.claude/plans/tech-culture-domain-propagation.md -parent_session: 2026-05-03 design-driven authoring sweep +owner: simulator-infra +updated_at: 2026-05-04 evidence: [] +assigned_by: simulator-infra --- - ## Summary A large body of city-management data was authored in the 2026-05-03 design diff --git a/.project/objectives/p1-58-ecology-cognitive-system.md b/.project/objectives/p1-58-ecology-cognitive-system.md index 8c3b3dfb..4236a87e 100644 --- a/.project/objectives/p1-58-ecology-cognitive-system.md +++ b/.project/objectives/p1-58-ecology-cognitive-system.md @@ -2,14 +2,13 @@ id: p1-58 title: "Ecology cognition: terrain affinity, food web, grudge memory, apex tier-10 fauna/flora" priority: p1 -status: stub +status: in_progress scope: game1 -owner: unassigned -updated_at: 2026-05-03 -parent_session: 2026-05-03 design-driven authoring sweep +owner: simulator-infra +updated_at: 2026-05-04 evidence: [] +assigned_by: simulator-infra --- - ## Summary A unifying ecology-cognition layer was authored across flora, fauna, and diff --git a/.project/team-leads/simulator-infra.md b/.project/team-leads/simulator-infra.md index 4e9c7756..951fec97 100644 --- a/.project/team-leads/simulator-infra.md +++ b/.project/team-leads/simulator-infra.md @@ -1,11 +1,9 @@ --- id: simulator-infra name: Simulator Infra -specialization: Rust workspace skeleton, GDExtension + WASM build scripts, batch-runner build hygiene, cross-compilation targets, dependency hygiene across `src/simulator/crates/` -objectives: - - p1-45 +specialization: "Rust workspace skeleton, GDExtension + WASM build scripts, batch-runner build hygiene, cross-compilation targets, dependency hygiene across `src/simulator/crates/`" +objectives: [p1-45, p1-55, p1-56, p1-58] --- - ## Mandate Keep the Rust simulation layer **buildable and current** across the two-host workflow. The simulator is Rail-1 source-of-truth, so a stale binary or a broken build script is a release-stopping blocker even when no game logic has changed. diff --git a/src/game/engine/scenes/world_map/world_map.gd b/src/game/engine/scenes/world_map/world_map.gd index 9c337b6c..c036321a 100644 --- a/src/game/engine/scenes/world_map/world_map.gd +++ b/src/game/engine/scenes/world_map/world_map.gd @@ -924,6 +924,14 @@ func _compute_movement_range(unit: RefCounted) -> void: var game_map: RefCounted = GameState.get_game_map() if game_map == null: return + # Stationary units (e.g. dwarf_tribe during prologue turn 1) cannot move + # even though they keep `movement_remaining = 1` to flip the action-bar's + # Found Capital button visible. Leave `_reachable_hexes` empty so neither + # the movement overlay paints nor `_handle_hex_click` finds a valid target. + if unit.has_method("has_keyword") and unit.has_keyword("stationary"): + _reachable_hexes = {} + _unit_renderer.clear_movement_range() + return _reachable_hexes = PathfinderScript.movement_range( game_map, unit.position, unit.movement_remaining, unit.unit_type ) diff --git a/src/simulator/api-gdext/src/lib.rs b/src/simulator/api-gdext/src/lib.rs index fcc32614..80d22160 100644 --- a/src/simulator/api-gdext/src/lib.rs +++ b/src/simulator/api-gdext/src/lib.rs @@ -2393,6 +2393,12 @@ impl IRefCounted for GdGameState { pending_charge_requests: Default::default(), tile_improvements: Default::default(), improvement_registry: Default::default(), + // p2-55 (Wave 1, simulator-infra): new GameState fields added + // to support civilian capture / ransom. Real bridge wiring + // for these is Wave 2 work — for now we just need to satisfy + // the struct literal so the workspace compiles. + ransom_queue: Default::default(), + pending_capture_events: Default::default(), }, base, } diff --git a/src/simulator/crates/mc-tech/src/web.rs b/src/simulator/crates/mc-tech/src/web.rs index 551db75d..cf33f6d0 100644 --- a/src/simulator/crates/mc-tech/src/web.rs +++ b/src/simulator/crates/mc-tech/src/web.rs @@ -65,6 +65,12 @@ pub struct TechDefinition { pub description: String, #[serde(default)] pub pillar: String, + /// One of 10 canonical domain categories for UI grouping and analysis: + /// Military / Economy / Industry / Agriculture / Governance / Culture / + /// Science / Exploration / Engineering / Medicine. + /// Never "All" — that is a UI sentinel only, never authored on a tech. + #[serde(default)] + pub domain: String, #[serde(default)] pub school: Option, #[serde(default = "default_era", deserialize_with = "de_u32_from_num")]