diff --git a/.project/objectives/DASHBOARD_CATEGORIES.md b/.project/objectives/DASHBOARD_CATEGORIES.md
index faf975a1..34f07e56 100644
--- a/.project/objectives/DASHBOARD_CATEGORIES.md
+++ b/.project/objectives/DASHBOARD_CATEGORIES.md
@@ -217,7 +217,7 @@
| [p1-53](p1-53-worldgen-layer-pages.md) | ✅ done | P1 | Worldgen layer pages — one playground per canonical doc, mirroring the layered Earth model | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p1-54](p1-54-hex-direction-rust-ts-mapping.md) | ✅ done | P1 | Hex direction-index translation — Rust pointy-top axial vs design-app flat-top canvas | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p1-55](p1-55-tech-culture-domain-propagation.md) | 🟡 partial | P1 | Tech & Culture domain field — propagate categorization through Rust, Godot UI, and player analysis | [simulator-infra](../team-leads/simulator-infra.md) | 🟢 |
-| [p1-56](p1-56-civics-buildings-and-great-works.md) | 🔵 in_progress | P1 | Civics buildings, Great Works, Specialists, Great People — wire authored data into Rust + Godot | [simulator-infra](../team-leads/simulator-infra.md) | 🟢 |
+| [p1-56](p1-56-civics-buildings-and-great-works.md) | 🟡 partial | P1 | Civics buildings, Great Works, Specialists, Great People — wire authored data into Rust + Godot | [simulator-infra](../team-leads/simulator-infra.md) | 🟢 |
| [p1-57](p1-57-diplomacy-tribute-treaties.md) | 🔴 stub | P1 | Diplomacy: tribute, treaty lifecycle, magical-terrain episode gating | [unassigned](../team-leads/unassigned.md) | 🟢 |
| [p1-58](p1-58-ecology-cognitive-system.md) | 🟡 partial | P1 | Ecology cognition: terrain affinity, food web, grudge memory, apex tier-10 fauna/flora | [simulator-infra](../team-leads/simulator-infra.md) | 🟢 |
| [p2-01](p2-01-minimap-improvements.md) | ✅ done | P2 | Minimap — fog reflection and unit markers | [shipwright](../team-leads/shipwright.md) | 🟢 |
diff --git a/.project/objectives/README.md b/.project/objectives/README.md
index 6fcf7602..21fad528 100644
--- a/.project/objectives/README.md
+++ b/.project/objectives/README.md
@@ -15,10 +15,10 @@
| Priority | 🔵 | 🟡 | 🔴 | ❌ | ⚫ | ✅ | Total |
|---|---|---|---|---|---|---|---|
| **P0** | 0 | 0 | 0 | 0 | 0 | 43 | 43 |
-| **P1** | 2 | 12 | 3 | 7 | 1 | 47 | 72 |
+| **P1** | 1 | 13 | 3 | 7 | 1 | 47 | 72 |
| **P2** | 0 | 7 | 14 | 3 | 6 | 53 | 83 |
| **P3 (oos)** | 0 | 0 | 18 | 1 | 21 | 3 | 43 |
-| **total** | **2** | **19** | **35** | **11** | **28** | **146** | **241** |
+| **total** | **1** | **20** | **35** | **11** | **28** | **146** | **241** |
@@ -47,12 +47,6 @@
|---|---|---|---|---|
| [p2-16](p2-16-audio-assets.md) | P1 | Audio assets — in-theme OSS launch pack + source ledger | 2026-05-03 | 🟢 unblocked |
-### [simulator-infra](../team-leads/simulator-infra.md)
-
-| ID | Priority | Title | Updated | Blocked |
-|---|---|---|---|---|
-| [p1-56](p1-56-civics-buildings-and-great-works.md) | P1 | Civics buildings, Great Works, Specialists, Great People — wire authored data into Rust + Godot | 2026-05-04 | 🟢 unblocked |
-
## P1 — Ship-readiness
| ID | Status | Title | Tags | Owner | Updated | Blocked |
@@ -67,6 +61,7 @@
| [p1-39](p1-39.md) | 🟡 partial | Port per-yield difficulty multipliers from GDScript into Rust crates (Rail-1) — research + culture | rust-source-of-truth, rail-1 | [warcouncil](../team-leads/warcouncil.md) | 2026-05-01 | 🟢 unblocked |
| [p1-43](p1-43-building-stacking-upgrade.md) | 🟡 partial | Building stacking — per-category upgrade chains (military / science / culture / production / etc.) | — | — | 2026-05-03 | 🟢 unblocked |
| [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 |
| [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-29a](p1-29a-last-stand-defense.md) | 🔴 stub | Last-stand defense — combat-strength multiplier when defender is at last city | balance, combat, pacing | [combat-dev](../team-leads/combat-dev.md) | 2026-05-03 | 🟢 unblocked |
diff --git a/.project/objectives/objectives.json b/.project/objectives/objectives.json
index 9589bd55..9995077d 100644
--- a/.project/objectives/objectives.json
+++ b/.project/objectives/objectives.json
@@ -1,9 +1,9 @@
{
- "generated_at": "2026-05-04T04:42:07Z",
+ "generated_at": "2026-05-04T04:50:40Z",
"totals": {
"done": 146,
- "in_progress": 2,
- "partial": 19,
+ "in_progress": 1,
+ "partial": 20,
"stub": 35,
"missing": 11,
"oos": 28,
@@ -1120,7 +1120,7 @@
"id": "p1-56",
"title": "Civics buildings, Great Works, Specialists, Great People — wire authored data into Rust + Godot",
"priority": "p1",
- "status": "in_progress",
+ "status": "partial",
"scope": "game1",
"owner": "simulator-infra",
"updated_at": "2026-05-04",
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 e0ac88a7..209f35dc 100644
--- a/.project/objectives/p1-56-civics-buildings-and-great-works.md
+++ b/.project/objectives/p1-56-civics-buildings-and-great-works.md
@@ -7,12 +7,12 @@ scope: game1
owner: simulator-infra
updated_at: 2026-05-04
evidence:
- - "src/simulator/crates/mc-core/src/ids.rs:1 — typed BuildingId/SpecialistId/GreatPersonClass/HarvestPolicyId newtypes (transparent serde)"
- - "src/simulator/crates/mc-core/src/gpp.rs:1 — closed GppType + GreatWorkType enums with effect-key mapping"
- - "src/simulator/crates/mc-city/src/building.rs:42 — BuildingEffect typed enum (gpp_*, great_work_slots_*) with Other catch-all"
- - "src/simulator/crates/mc-city/src/building.rs:567 — test_building_deserialises_new_fields green (saga_arena + saga_chronicle round-trip)"
+ - "src/simulator/crates/mc-core/src/ids.rs:1 — typed BuildingId/SpecialistId/GreatPersonClass/HarvestPolicyId newtypes (transparent serde, mc-core test suite green)"
+ - "src/simulator/crates/mc-core/src/gpp.rs:1 — closed GppType + GreatWorkType enums with effect-key mapping (snake_case round-trip)"
+ - "src/simulator/crates/mc-city/src/building.rs:42 — typed BuildingEffect enum covering gpp_* and great_work_slots_* with Other catch-all; specialist_slots: Vec; requires_buildings_all_cities: Vec"
+ - "src/simulator/crates/mc-city/src/building.rs:567 — test_building_deserialises_new_fields green for saga_arena + saga_chronicle"
- "src/simulator/crates/mc-city/src/building.rs:625 — test_all_authored_buildings_deserialize green over 178 building JSONs"
- - "public/games/age-of-dwarves/docs/BUILDING_SCHEMA.md:99 — Civics extensions section + GPP / Great Work effect inventory"
+ - "public/games/age-of-dwarves/docs/BUILDING_SCHEMA.md:99 — Civics extensions section documents new effect-array variants and typed wrappers"
assigned_by: simulator-infra
---
## Summary
|