diff --git a/.project/objectives/README.md b/.project/objectives/README.md
index cda21214..8200adeb 100644
--- a/.project/objectives/README.md
+++ b/.project/objectives/README.md
@@ -15,10 +15,10 @@
| Priority | ✅ | 🔵 | 🟡 | 🔴 | ❌ | ⚫ | Total |
|---|---|---|---|---|---|---|---|
| **P0** | 43 | 0 | 0 | 0 | 0 | 0 | 43 |
-| **P1** | 47 | 2 | 8 | 2 | 9 | 1 | 69 |
-| **P2** | 52 | 0 | 2 | 1 | 6 | 6 | 67 |
+| **P1** | 47 | 4 | 8 | 3 | 9 | 1 | 72 |
+| **P2** | 52 | 1 | 2 | 1 | 6 | 6 | 68 |
| **P3 (oos)** | 3 | 0 | 0 | 0 | 1 | 19 | 23 |
-| **total** | **145** | **2** | **10** | **3** | **16** | **26** | **202** |
+| **total** | **145** | **5** | **10** | **4** | **16** | **26** | **206** |
@@ -29,6 +29,7 @@
| [warcouncil](../team-leads/warcouncil.md) | 6 |
| [asset-sprite](../team-leads/asset-sprite.md) | 6 |
| [shipwright](../team-leads/shipwright.md) | 5 |
+| [simulator-infra](../team-leads/simulator-infra.md) | 3 |
| [combat-dev](../team-leads/combat-dev.md) | 2 |
| [unassigned](../team-leads/unassigned.md) | 1 |
| [asset-audio](../team-leads/asset-audio.md) | 1 |
@@ -145,7 +146,10 @@
| [p1-52](p1-52-api-wasm-build-fix.md) | ✅ done | api-wasm build fix — unblock WASM bundle for design-lab WASM consumption | [terraformer](../team-leads/terraformer.md) | 2026-05-01 |
| [p1-53](p1-53-worldgen-layer-pages.md) | ✅ done | "Worldgen layer pages — one playground per canonical doc, mirroring the layered Earth model" | [terraformer](../team-leads/terraformer.md) | 2026-05-01 |
| [p1-54](p1-54-hex-direction-rust-ts-mapping.md) | ✅ done | Hex direction-index translation — Rust pointy-top axial vs design-app flat-top canvas | [terraformer](../team-leads/terraformer.md) | 2026-05-01 |
-| [p1-55](p1-55-tech-culture-domain-propagation.md) | 🔵 in_progress | "Tech & Culture domain field — propagate categorization through Rust, Godot UI, and player analysis" | [unassigned](../team-leads/unassigned.md) | 2026-05-03 |
+| [p1-55](p1-55-tech-culture-domain-propagation.md) | 🔵 in_progress | "Tech & Culture domain field — propagate categorization through Rust, Godot UI, and player analysis" | [simulator-infra](../team-leads/simulator-infra.md) | 2026-05-04 |
+| [p1-56](p1-56-civics-buildings-and-great-works.md) | 🔵 in_progress | "Civics buildings, Great Works, Specialists, Great People — wire authored data into Rust + Godot" | [simulator-infra](../team-leads/simulator-infra.md) | 2026-05-04 |
+| [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 |
+| [p1-58](p1-58-ecology-cognitive-system.md) | 🔵 in_progress | "Ecology cognition: terrain affinity, food web, grudge memory, apex tier-10 fauna/flora" | [simulator-infra](../team-leads/simulator-infra.md) | 2026-05-04 |
| [p2-06](p2-06-export-pipeline.md) | ✅ done | Export pipeline for Windows / macOS / Linux | [shipwright](../team-leads/shipwright.md) | 2026-04-25 |
| [p2-16](p2-16-audio-assets.md) | 🔵 in_progress | Audio assets — in-theme OSS launch pack + source ledger | [asset-audio](../team-leads/asset-audio.md) | 2026-04-27 |
| [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 |
@@ -222,6 +226,7 @@
| [p2-54b](p2-54b-player-observation-cache.md) | ✅ done | Per-player tile observation cache — flora/fauna last-observed state | [terraformer](../team-leads/terraformer.md) | 2026-05-01 |
| [p2-54c](p2-54c-renderer-observations-and-indicators.md) | ✅ done | Renderer reads observations + indicator decorations for tech-gated resources | [terraformer](../team-leads/terraformer.md) | 2026-05-01 |
| [p2-54d](p2-54d-ai-tech-priority-from-visibility.md) | ✅ done | AI tech-priority bias from visible-but-gated luxuries + indicator decorations | [terraformer](../team-leads/terraformer.md) | 2026-05-01 |
+| [p2-55](p2-55-civilian-capture-system.md) | 🔵 in_progress | "Civilian Capture / Destroy / Ransom" | — | 2026-05-03 |
## Out of Scope (Game 2 / Game 3)
diff --git a/.project/objectives/p2-55-civilian-capture-system.md b/.project/objectives/p2-55-civilian-capture-system.md
index f141579b..c5cfe03a 100644
--- a/.project/objectives/p2-55-civilian-capture-system.md
+++ b/.project/objectives/p2-55-civilian-capture-system.md
@@ -2,7 +2,7 @@
id: p2-55
title: "Civilian Capture / Destroy / Ransom"
priority: p2
-status: pending
+status: in_progress
scope: game1
category: combat
owner:
diff --git a/public/games/age-of-dwarves/data/objectives.json b/public/games/age-of-dwarves/data/objectives.json
index 53fa5548..a2363c57 100644
--- a/public/games/age-of-dwarves/data/objectives.json
+++ b/public/games/age-of-dwarves/data/objectives.json
@@ -1,13 +1,13 @@
{
- "generated_at": "2026-05-04T00:07:36Z",
+ "generated_at": "2026-05-04T02:45:47Z",
"totals": {
- "missing": 16,
- "partial": 10,
- "stub": 3,
"done": 145,
"oos": 26,
- "in_progress": 2,
- "total": 202
+ "missing": 16,
+ "in_progress": 5,
+ "partial": 10,
+ "stub": 4,
+ "total": 206
},
"objectives": [
{
@@ -1026,9 +1026,39 @@
"priority": "p1",
"status": "in_progress",
"scope": "game1",
+ "owner": "simulator-infra",
+ "updated_at": "2026-05-04",
+ "summary": "The designs app at `.project/designs/app/` now drives `/tech-tree` and\n`/culture-tree` from real JSON data with a 10-domain categorization\n(Military / Economy / Industry / Agriculture / Governance / Culture /\nScience / Exploration / Engineering / Medicine), authored as\n`tech.domain` directly in `public/resources/techs/*.json`. Culture\npolicies use the `pillar` field as their tab axis.\n\nThis objective propagates that categorization through the rest of the\nsystem — the Rust simulator, the Godot gameplay UI (`knowledge_tree`,\n`tech_tree`, `culture_tree`), and player data analysis surfaces — so\nevery consumer reads the same Single Source of Truth.\n\nThe shared TreeView component (`.project/designs/app/src/components/tree/`)\nis the reference implementation. Other surfaces should match its UX:\ndomain tab bar, matching-tab-floats-to-top sort, inline unlocks on each\nnode."
+ },
+ {
+ "id": "p1-56",
+ "title": "\"Civics buildings, Great Works, Specialists, Great People — wire authored data into Rust + Godot\"",
+ "priority": "p1",
+ "status": "in_progress",
+ "scope": "game1",
+ "owner": "simulator-infra",
+ "updated_at": "2026-05-04",
+ "summary": "A large body of city-management data was authored in the 2026-05-03 design\nsession. The JSON content + designs-app pages exist as the canonical\nspecification. Rust simulator and Godot UI consumers must now be wired\nto actually run the systems in-game."
+ },
+ {
+ "id": "p1-57",
+ "title": "\"Diplomacy: tribute, treaty lifecycle, magical-terrain episode gating\"",
+ "priority": "p1",
+ "status": "stub",
+ "scope": "game1",
"owner": "unassigned",
"updated_at": "2026-05-03",
- "summary": "The designs app at `.project/designs/app/` now drives `/tech-tree` and\n`/culture-tree` from real JSON data with a 10-domain categorization\n(Military / Economy / Industry / Agriculture / Governance / Culture /\nScience / Exploration / Engineering / Medicine), authored as\n`tech.domain` directly in `public/resources/techs/*.json`. Culture\npolicies use the `pillar` field as their tab axis.\n\nThis objective propagates that categorization through the rest of the\nsystem — the Rust simulator, the Godot gameplay UI (`knowledge_tree`,\n`tech_tree`, `culture_tree`), and player data analysis surfaces — so\nevery consumer reads the same Single Source of Truth.\n\nThe shared TreeView component (`.project/designs/app/src/components/tree/`)\nis the reference implementation. Other surfaces should match its UX:\ndomain tab bar, matching-tab-floats-to-top sort, inline unlocks on each\nnode."
+ "summary": "Three diplomacy-related systems were authored in JSON. Rust wire-up\npending."
+ },
+ {
+ "id": "p1-58",
+ "title": "\"Ecology cognition: terrain affinity, food web, grudge memory, apex tier-10 fauna/flora\"",
+ "priority": "p1",
+ "status": "in_progress",
+ "scope": "game1",
+ "owner": "simulator-infra",
+ "updated_at": "2026-05-04",
+ "summary": "A unifying ecology-cognition layer was authored across flora, fauna, and\nwild-creature units. Adds shared `combat_profile`, `cognitive_profile`,\n`terrain_affinity`, and `loot_table` fields. Brings the Civ5 \"tier-10 apex\npredator owns the map\" experience to dwarven gameplay."
},
{
"id": "p2-06",
@@ -1800,6 +1830,16 @@
"updated_at": "2026-05-01",
"summary": "Per the user's 2026-05-01 design observation: **AI clans don't research the right techs to unlock luxuries**. With the three-axis schema (p2-54) and observation cache (p2-54b) in place, mc-ai's strategic policy can read each clan's visible-but-yield-gated luxuries + indicator-decorated subsurface resources in their territory and bias tech research toward unlocking them.\n\nThis is the architectural fix for p1-05's `luxury_variance` regression (median dropped from 3 to 0 because AI never researches Trapping/Scholarship/Herbalism even though their territory contains ivory, silk, spices)."
},
+ {
+ "id": "p2-55",
+ "title": "\"Civilian Capture / Destroy / Ransom\"",
+ "priority": "p2",
+ "status": "in_progress",
+ "scope": "game1",
+ "owner": null,
+ "updated_at": "2026-05-03",
+ "summary": ""
+ },
{
"id": "g2-01",
"title": "Ley lines — Game 2 (Age of Kzzykt)",
|