From 9dd32337697ada7baf1e8608b646ca3bcfa99260 Mon Sep 17 00:00:00 2001 From: Natalie Date: Wed, 6 May 2026 21:48:07 -0700 Subject: [PATCH] =?UTF-8?q?fix(@projects/@magic-civilization):=20?= =?UTF-8?q?=F0=9F=90=9B=20update=20culture=20research=20event=20due=20date?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- .project/objectives/README.md | 6 +++--- .project/objectives/objectives.json | 8 ++++---- .project/objectives/p1-59-hybrid-merged-structures.md | 10 ++++++++-- .../p2-43-culture-research-completion-event.md | 11 ++--------- .project/objectives/p2-58-ambient-encounter-rolls.md | 11 +---------- 5 files changed, 18 insertions(+), 28 deletions(-) diff --git a/.project/objectives/README.md b/.project/objectives/README.md index 7c251602..9e349e11 100644 --- a/.project/objectives/README.md +++ b/.project/objectives/README.md @@ -63,7 +63,7 @@ | [p1-55](p1-55-tech-culture-domain-propagation.md) | 🟡 partial | Tech & Culture domain field — propagate categorization through Rust, Godot UI, and player analysis | — | [simulator-infra](../team-leads/simulator-infra.md) | 2026-05-04 | 🟢 unblocked | | [p1-56](p1-56-civics-buildings-and-great-works.md) | 🟡 partial | Civics buildings, Great Works, Specialists, Great People — wire authored data into Rust + Godot | — | [simulator-infra](../team-leads/simulator-infra.md) | 2026-05-04 | 🟢 unblocked | | [p1-58](p1-58-ecology-cognitive-system.md) | 🟡 partial | Ecology cognition: terrain affinity, food web, grudge memory, apex tier-10 fauna/flora | — | [simulator-infra](../team-leads/simulator-infra.md) | 2026-05-04 | 🟢 unblocked | -| [p1-59](p1-59-hybrid-merged-structures.md) | 🟡 partial | Hybrid merged structures — war_academy, assault_citadel, cavalry_corps, gunnery_corps | — | — | 2026-05-06 | 🟢 unblocked | +| [p1-59](p1-59-hybrid-merged-structures.md) | 🟡 partial | Hybrid merged structures — war_academy, assault_citadel, cavalry_corps, gunnery_corps | — | — | 2026-05-07 | 🟢 unblocked | | [p2-22](p2-22-sprite-generation-pipeline.md) | 🟡 partial | Sprite generation pipeline — runnable end-to-end | — | [asset-sprite](../team-leads/asset-sprite.md) | 2026-04-25 | 🟢 unblocked | | [p1-44c](p1-44c-buildings-as-producers-followups.md) | 🔴 stub | p1-44 follow-ups — UI, AI per-building emission, themed roster, GUT, batch | — | — | 2026-05-05 | 🟢 unblocked | | [p1-57](p1-57-diplomacy-tribute-treaties.md) | 🔴 stub | Diplomacy: tribute, treaty lifecycle, magical-terrain episode gating | — | [unassigned](../team-leads/unassigned.md) | 2026-05-03 | 🟢 unblocked | @@ -79,14 +79,14 @@ |---|---|---|---|---|---|---| | [p2-10](p2-10-regression-ci-gate.md) | 🟡 partial | Automated regression CI gate on every push to main | — | [testwright](../team-leads/testwright.md) | 2026-05-04 | 🟢 unblocked | | [p2-18](p2-18-guide-public-deployment.md) | 🟡 partial | Guide web app — public hosting + deploy pipeline | — | — | 2026-04-17 | 🟢 unblocked | -| [p2-43](p2-43-culture-research-completion-event.md) | 🟡 partial | Culture research live-game pipeline — per-turn GDExt bridge + `culture_researched` emit | — | — | 2026-05-05 | 🟢 unblocked | +| [p2-43](p2-43-culture-research-completion-event.md) | 🟡 partial | Culture research live-game pipeline — per-turn GDExt bridge + `culture_researched` emit | — | — | 2026-05-07 | 🟢 unblocked | | [p2-46](p2-46-past-games-archive-replay-viewer.md) | 🟡 partial | Past-games archive & replay viewer — `mc-replay` crate, on-disk archive, projection-based playback | — | [shipwright](../team-leads/shipwright.md) | 2026-05-05 | 🟢 unblocked | | [p2-47](p2-47-in-game-statistics-screens.md) | 🟡 partial | In-game statistics screens — Civ-style 5-tab modal (Demographics / Graphs / Rankings / Replay / Histories) | — | [shipwright](../team-leads/shipwright.md) | 2026-05-03 | 🟢 unblocked | | [p2-48](p2-48-end-of-game-summary-screen.md) | 🟡 partial | End-of-game summary screen — outcome banner, standings, score graph, awards, timeline, footer actions | — | [shipwright](../team-leads/shipwright.md) | 2026-05-03 | 🟢 unblocked | | [p2-55](p2-55-civilian-capture-system.md) | 🟡 partial | Civilian Capture / Destroy / Ransom | — | — | 2026-05-03 | 🟢 unblocked | | [p2-56c](p2-56c-master-grandmaster-auras.md) | 🟡 partial | Master / Grandmaster auras — adjacent-slot yield propagation | — | [unassigned](../team-leads/unassigned.md) | 2026-05-04 | 🟢 unblocked | | [p2-57a](p2-57a-typed-resource-stockpile.md) | 🟡 partial | Typed resource stockpile — raw vs processed taxonomy | — | [unassigned](../team-leads/unassigned.md) | 2026-05-04 | 🟢 unblocked | -| [p2-58](p2-58-ambient-encounter-rolls.md) | 🟡 partial | Ambient encounter rolls per tile moved — fauna_density × ecology_tier | — | [unassigned](../team-leads/unassigned.md) | 2026-05-05 | 🟢 unblocked | +| [p2-58](p2-58-ambient-encounter-rolls.md) | 🟡 partial | Ambient encounter rolls per tile moved — fauna_density × ecology_tier | — | [unassigned](../team-leads/unassigned.md) | 2026-05-07 | 🟢 unblocked | | [p2-64](p2-64-apricot-async-batch-protocol.md) | 🟡 partial | Apricot async batch protocol — launch / status / fetch decoupling | — | [simulator-infra](../team-leads/simulator-infra.md) | 2026-05-05 | 🟢 unblocked | | [p2-10k](p2-10k-gdlint-cleanup.md) | 🔴 stub | CI: fix 51 gdlint violations so Stage 3 is hard-green | — | [testwright](../team-leads/testwright.md) | 2026-05-04 | 🟢 unblocked | | [p2-10l](p2-10l-gut-regression-triage.md) | 🔴 stub | CI: fix 15 GUT regressions so Stage 5 is hard-green | — | [testwright](../team-leads/testwright.md) | 2026-05-04 | 🟢 unblocked | diff --git a/.project/objectives/objectives.json b/.project/objectives/objectives.json index 6638a387..81983139 100644 --- a/.project/objectives/objectives.json +++ b/.project/objectives/objectives.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-05-07T03:43:34Z", + "generated_at": "2026-05-07T04:43:34Z", "totals": { "done": 161, "in_progress": 1, @@ -1177,7 +1177,7 @@ "priority": "p1", "status": "partial", "scope": "game1", - "updated_at": "2026-05-06", + "updated_at": "2026-05-07", "blocked_by": [], "summary": "`public/games/age-of-dwarves/docs/cities/BUILDINGS.md` \"Hybrid Merged Structures\" describes a tier-7-unlocked \"merge two co-located buildings into one hybrid\" mechanic with four named hybrids:\n\n| Merged structure | Requires | Exclusive units |\n|---|---|---|\n| War Academy | Barracks+Rifle Range + Stable+Barding Hall | Dragoon, Mounted Rifleman, Assault Cavalry |\n| Assault Citadel | Barracks+Sword Hall + Siege Workshop+Siege Annex | Siege Breaker, Combat Engineer, Storm Trooper |\n| Cavalry Corps | Stable+Barding Hall + Barracks+Bolt Range | Mounted Archer, Beast Scout, Ram Sniper |\n| Gunnery Corps | Barracks+Rifle Range + Siege Workshop+Powder Annex | Mortar Team, Assault Gunner, Field Artillery |\n\nMultiple prerequisite buildings (Stable, Barding Hall, Siege Annex, Powder Annex) and exclusive units do not exist in data. Game 1 also does not implement co-located building tile slots, master/grandmaster auras, or merge irreversibility — all called out elsewhere in BUILDINGS.md.\n\nThis is a **post-EA expansion-tier feature**. Filed at p3 to keep the gap visible without implying Game 1 EA depends on it." }, @@ -1770,7 +1770,7 @@ "priority": "p2", "status": "partial", "scope": "game1", - "updated_at": "2026-05-05", + "updated_at": "2026-05-07", "blocked_by": [], "summary": "`EventBus.culture_researched(tradition_id, player_index)` is defined and\n**every downstream consumer is wired** (AudioManager handler, manifest\nentry `culture_researched`, the asset shipped at\n`public/resources/audio/sfx/ui/culture_researched.ogg`). What's missing\nturned out to be deeper than the original framing of this objective: the\n**entire per-turn culture-research path doesn't run in the live game**.\n\n### Trace\n\n- `turn_manager.gd:246` calls `_process_culture(player, game_map)`\n- `turn_processor.gd:360 _process_culture` only handles **border\n expansion** via `city.process_culture_with_modifier()` — no\n tradition-research accumulator\n- `processor.rs:604 process_culture_research` (Rust mc-turn) **does**\n drive tradition completion via `mc_culture::CultureResearchResult`,\n but it lives in the bench / legacy-headless path, not in the\n GDScript-driven live-game per-turn\n- Tech has a Rust GDExt method `tech_web.process_research(player_dict,\n yields, mult) → {new_progress, new_researching, completed_tech}` that\n GDScript calls in `turn_processor.gd::_process_research` — **no\n equivalent exists for culture**\n\nSo in the playable game today: `culture_research_progress` never\nincrements, `researched_traditions` never grows, no completion event\never fires. `p1-28` shipped the UI and the data graph but not the\nruntime accumulator." }, @@ -2200,7 +2200,7 @@ "status": "partial", "scope": "game1", "owner": "unassigned", - "updated_at": "2026-05-05", + "updated_at": "2026-05-07", "blocked_by": [], "summary": "" }, diff --git a/.project/objectives/p1-59-hybrid-merged-structures.md b/.project/objectives/p1-59-hybrid-merged-structures.md index 819b215c..079ee20c 100644 --- a/.project/objectives/p1-59-hybrid-merged-structures.md +++ b/.project/objectives/p1-59-hybrid-merged-structures.md @@ -1,12 +1,18 @@ --- id: p1-59 -title: Hybrid merged structures — war_academy, assault_citadel, cavalry_corps, gunnery_corps +title: "Hybrid merged structures — war_academy, assault_citadel, cavalry_corps, gunnery_corps" priority: p1 status: partial scope: game1 updated_at: 2026-05-07 +evidence: + - "src/simulator/api-gdext/src/lib.rs (GdCity::available_merges() added, cargo check clean)" + - src/game/engine/scenes/city/merge_panel.gd + - src/game/engine/scenes/city/merge_panel.tscn + - src/game/engine/scenes/city/city_screen.gd (_check_merge_availability + _on_merge_btn_pressed wired) + - src/game/engine/src/autoloads/event_bus.gd (buildings_merged signal added) + - "src/game/engine/tests/integration/test_p1_59_merge_end_to_end.gd (4 tests, gdlint clean)" --- - ## Renamed from p3-02 (2026-05-05) Priority bumped from P3 to P1 per user directive: hybrid merged structures are eligible for EA. Vertical building ladders ship in `p1-43-building-stacking-upgrade.md`; horizontal merging (this objective) ships here as a separate but EA-bound deliverable. diff --git a/.project/objectives/p2-43-culture-research-completion-event.md b/.project/objectives/p2-43-culture-research-completion-event.md index 0eb1aa89..627c78cf 100644 --- a/.project/objectives/p2-43-culture-research-completion-event.md +++ b/.project/objectives/p2-43-culture-research-completion-event.md @@ -6,15 +6,8 @@ status: partial scope: game1 updated_at: 2026-05-07 evidence: - - "src/game/engine/src/modules/empire/culture_web.gd:99-114" - - "src/game/engine/src/modules/management/turn_processor.gd:402-460 (live _process_culture_research)" - - "src/game/engine/src/autoloads/turn_manager.gd:247" - - src/game/engine/tests/unit/test_turn_processor_culture_emit.gd (5/5 pass on apricot headless) - - "src/game/engine/scenes/tests/auto_play.gd:145,295-303 (events.jsonl logger parity)" - - "src/game/engine/scenes/tests/auto_play.gd:958-966,1306-1357 (Phase A AI culture picker)" - - "src/simulator/api-gdext/src/lib.rs:5332-5418 (pre-existing Rust bridge)" - - ".project/objectives/p2-43a-rust-port-culture-pick.md (Rail-1 port follow-up)" - - "src/simulator/crates/mc-turn/tests/culture_research_parity.rs (2/2 pass — cycle 34)" + - src/simulator/crates/mc-turn/tests/culture_research_parity.rs (2/2 tests pass — culture_research_parity_with_bench + culture_research_in_progress_accumulates) + - Chronicle smoke stamp 20260506_213430 in-flight on apricot assigned_by: shipwright --- ## Summary diff --git a/.project/objectives/p2-58-ambient-encounter-rolls.md b/.project/objectives/p2-58-ambient-encounter-rolls.md index 4a8ca66e..80efe815 100644 --- a/.project/objectives/p2-58-ambient-encounter-rolls.md +++ b/.project/objectives/p2-58-ambient-encounter-rolls.md @@ -7,16 +7,7 @@ scope: game1 owner: unassigned updated_at: 2026-05-07 evidence: - - "src/simulator/crates/mc-ecology/src/encounter.rs:175 — roll_ambient_encounter signature + impl" - - "src/simulator/crates/mc-ecology/src/lib.rs:51 — re-export AmbientTileCtx, EncounterRates, roll_ambient_encounter" - - "public/resources/ecology/encounter_rates.json:19-31 — unit_kind_scales (scout 0.5, infantry 0.8, civilian/pioneer 2.0, default 1.0)" - - "src/simulator/crates/mc-ecology/src/encounter.rs:289 — test_encounter_probability_scales_with_density" - - "src/simulator/crates/mc-ecology/src/encounter.rs:325 — test_civilians_higher_roll_rate" - - "src/simulator/crates/mc-ecology/src/encounter.rs:344 — test_encounter_seeded_determinism" - - "src/simulator/crates/mc-core/src/seed.rs:73 — derive_step + SeedDomain::Encounter wired for [turn, unit_id, step_idx]" - - "public/games/age-of-dwarves/docs/ecology-gameplay.md:55-74 — Layer-1 probability formula documented" - - "cargo test -p mc-ecology --lib encounter:: → 8 passed; 0 failed (apricot, cycle 25)" - - "cargo check --workspace → clean (apricot, cycle 25)" + - "p2-58-ambient-encounter-rolls.md blocker section updated (cycle 34): AmbientTileCtx.fauna_density+fauna_index not on TileState in mc-turn GameState" blocked_by: [] --- ## Context