From 91095be2326e1dbb2881028b50fb60ba128cf9a6 Mon Sep 17 00:00:00 2001 From: Natalie Date: Sat, 27 Jun 2026 03:28:54 -0400 Subject: [PATCH] =?UTF-8?q?docs(@projects/@magic-civilization):=20?= =?UTF-8?q?=E2=9C=85=20p3-29=20step=201=20complete=20=E2=80=94=20Rust=20tu?= =?UTF-8?q?rn=20surfaces=20CityGrew=20+=20CityBordersExpanded=20+=20FloraS?= =?UTF-8?q?uccession?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All three granular UI events the GDScript turn emitted inline are now emitted by the Rust turn (replay value now; UI-parity ready for the swap). Remaining: step 2 (dict surface) + steps 3-5 (turn_manager → GdTurnProcessor.step + delete GDScript orchestration + render proof). Co-Authored-By: Claude Opus 4.8 (1M context) --- .project/objectives/p3-29-rail1-turn-unification.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.project/objectives/p3-29-rail1-turn-unification.md b/.project/objectives/p3-29-rail1-turn-unification.md index fb3cc59d..179ebca7 100644 --- a/.project/objectives/p3-29-rail1-turn-unification.md +++ b/.project/objectives/p3-29-rail1-turn-unification.md @@ -77,11 +77,10 @@ this session but the live game still runs GDScript — the event-surface gap was - [x] **CityGrew** event (06c6e2547) — process_city_production emits it on growth. - [x] **CityBordersExpanded** event (db808e477) — process_culture emits it on tile claim. -- [ ] **FloraSuccession** — DEFERRED to the swap pass: ecology runs in the END_OF_TURN_PHASES - registry whose `SimPhaseFn = fn(&mut GameState)` has no event sink; surfacing flora needs - either the registry signature to carry `&mut Vec` (a ~40-test-call-site cascade) - or a transient `GameState.pending_flora_events` buffer drained by `step()`. The registry- - events refactor belongs with steps 3-5 (it's needed there anyway), so flora rides with it. +- [x] **FloraSuccession** (7b6d24bde) — ecology buffers transitions into transient + `GameState.pending_flora_events`; `step()` drains them into `FloraSuccession` events (avoided + the registry-signature cascade via the buffer). **STEP 1 COMPLETE** — the Rust turn now emits + all three granular UI events the GDScript turn emitted inline. Both high-value growth/border events are surfaced (replay value now; UI-parity at the swap). Remaining: FloraSuccession + the registry-events refactor + dict surface + the live swap +