feat(@projects): assign simulator-infra to tech/civics/ecology tasks

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
Natalie 2026-05-03 21:15:05 -04:00
parent c732a8c4e8
commit 1989602cee
7 changed files with 33 additions and 19 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

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

View file

@ -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
)

View file

@ -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,
}

View file

@ -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<String>,
#[serde(default = "default_era", deserialize_with = "de_u32_from_num")]