From 57725d0088172804d401dbf4773182c23a663dc8 Mon Sep 17 00:00:00 2001 From: Natalie Date: Fri, 26 Jun 2026 19:28:47 -0400 Subject: [PATCH] =?UTF-8?q?docs(@projects/@magic-civilization):=20?= =?UTF-8?q?=F0=9F=94=8E=20p3-26=20B3=20=E2=80=94=20improvement=20subsystem?= =?UTF-8?q?=20is=20FULLY=20absent=20headless=20(re-scoped)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Verified: improvement_yield_table never populated in apply_end_turn (yields no-op), handle_build_improvement is a stub (no placement, improvement_id dropped), no GameState improvement data. B3 is a full subsystem build (state+boot+FFI+handler+build-tick+yields), not a build-tick tweak. Precise ecology-phase-shaped plan recorded. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../objectives/p3-26-complete-headless-simulator.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.project/objectives/p3-26-complete-headless-simulator.md b/.project/objectives/p3-26-complete-headless-simulator.md index 661bf40f..ae6692ac 100644 --- a/.project/objectives/p3-26-complete-headless-simulator.md +++ b/.project/objectives/p3-26-complete-headless-simulator.md @@ -67,7 +67,18 @@ PvP/siege/lair combat, climate physics+weather+effects, 3 event categories. **Backlog (live-only → migrate into `mc-turn`):** - [x] **B1 Happiness + Golden Age** ✅ (7993ba7ca — happiness_phase.rs, wired post-economy-loop) — `mc-happiness` exists; tick per-turn (golden-age meter, anarchy). - [x] **B2 Unit + city healing** ✅ (7993ba7ca — healing.rs, wired post-climate) — HP regen (in-territory / fortified / city heal). -- [ ] **B3 Improvements build tick** — `_process_improvements` (build progress, not just yields). +- [ ] **B3 Improvements subsystem (FULLY ABSENT headless — verified 2026-06-26, not just the build-tick)**: + - `TurnProcessor::improvement_yield_table` is on the fresh-per-turn processor and is NEVER + populated by `apply_end_turn` (only set manually in unit tests) → `process_improvement_yields` + no-ops in real play. + - `handle_build_improvement` (action_handlers/mod.rs) is a stub: validates the unit, returns + Ok(()), places nothing. The action's `improvement_id` is dropped by the dispatcher. + - GameState holds no improvement data; improvement build_turns ARE in the JSON (farm.json etc.). + - **Plan (ecology-phase shape):** GameState += improvement yield+build_turns tables (#[serde skip] + boot) + `pending_improvements: Vec<{col,row,improvement_id,city_idx,turns_remaining}>`; apply_end_turn + loads the tables (or process_improvement_yields reads GameState); dispatch handles BuildImprovement + directly (unit tile → owning city via CityState.owned_tiles → push pending w/ build_turns); a + build-tick phase decrements + completes into city_improvements[ci]; FFI + harness boot. Full subsystem. - [ ] **B4 Government/civics per-turn** — `mc-civics`; (disabled in live too — stub). - [ ] **B5 Loot decay** — `mc-city` items; (disabled in live too). - [ ] **B6 Equipment/crafting** — `mc-city/recipes.rs`; add headless Craft action + tick (was gap 3).