feat(objectives): update dashboard objective statuses

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
Natalie 2026-05-04 00:42:05 -04:00
parent 438f2b8b4e
commit 6a16837c66
7 changed files with 1020 additions and 109 deletions

View file

@ -12,25 +12,26 @@
| ID | Status | Priority | Title | Owner | Blocked |
|---|---|---|---|---|---|
| [p1-29](p1-29.md) | ❌ missing | P1 | Anti-early-domination: lift game-balance gates that p0-01 v1 measured | [combat-dev](../team-leads/combat-dev.md) | 🟢 |
| [p1-29](p1-29.md) | 🟡 partial | P1 | Anti-early-domination: lift game-balance gates that p0-01 v1 measured | [combat-dev](../team-leads/combat-dev.md) | 🟢 |
| [p1-29a](p1-29a-last-stand-defense.md) | 🔴 stub | P1 | Last-stand defense — combat-strength multiplier when defender is at last city | [combat-dev](../team-leads/combat-dev.md) | 🟢 |
## batch
| ID | Status | Priority | Title | Owner | Blocked |
|---|---|---|---|---|---|
| [p1-45](p1-45-batch-binary-freshness.md) | ❌ missing | P1 | Batch binary freshness: rebuild GDExt before every autoplay batch | [simulator-infra](../team-leads/simulator-infra.md) | 🟢 |
| [p1-45](p1-45-batch-binary-freshness.md) | ✅ done | P1 | Batch binary freshness: rebuild GDExt before every autoplay batch | [simulator-infra](../team-leads/simulator-infra.md) | 🟢 |
## ci
| ID | Status | Priority | Title | Owner | Blocked |
|---|---|---|---|---|---|
| [p1-45](p1-45-batch-binary-freshness.md) | ❌ missing | P1 | Batch binary freshness: rebuild GDExt before every autoplay batch | [simulator-infra](../team-leads/simulator-infra.md) | 🟢 |
| [p1-45](p1-45-batch-binary-freshness.md) | ✅ done | P1 | Batch binary freshness: rebuild GDExt before every autoplay batch | [simulator-infra](../team-leads/simulator-infra.md) | 🟢 |
## combat
| ID | Status | Priority | Title | Owner | Blocked |
|---|---|---|---|---|---|
| [p2-55](p2-55-civilian-capture-system.md) | ⚪ pending | P2 | Civilian Capture / Destroy / Ransom | — | 🟢 |
| [p1-29a](p1-29a-last-stand-defense.md) | 🔴 stub | P1 | Last-stand defense — combat-strength multiplier when defender is at last city | [combat-dev](../team-leads/combat-dev.md) | 🟢 |
## formation
@ -42,25 +43,28 @@
| ID | Status | Priority | Title | Owner | Blocked |
|---|---|---|---|---|---|
| [p1-45](p1-45-batch-binary-freshness.md) | ❌ missing | P1 | Batch binary freshness: rebuild GDExt before every autoplay batch | [simulator-infra](../team-leads/simulator-infra.md) | 🟢 |
| [p1-45](p1-45-batch-binary-freshness.md) | ✅ done | P1 | Batch binary freshness: rebuild GDExt before every autoplay batch | [simulator-infra](../team-leads/simulator-infra.md) | 🟢 |
## mcts
| ID | Status | Priority | Title | Owner | Blocked |
|---|---|---|---|---|---|
| [p0-43](p0-43.md) | ✅ done | P0 | Formation AI — MCTS plans at formation level, not per-unit | [warcouncil](../team-leads/warcouncil.md) | 🟢 |
| [p1-30b](p1-30b-parallel-mcts-rollouts.md) | 🔴 stub | P1 | Parallel MCTS rollouts for huge-map decisive games (closes p1-22's huge-map sub-gate) | [warcouncil](../team-leads/warcouncil.md) | 🟢 |
## pacing
| ID | Status | Priority | Title | Owner | Blocked |
|---|---|---|---|---|---|
| [p1-29](p1-29.md) | ❌ missing | P1 | Anti-early-domination: lift game-balance gates that p0-01 v1 measured | [combat-dev](../team-leads/combat-dev.md) | 🟢 |
| [p1-29](p1-29.md) | 🟡 partial | P1 | Anti-early-domination: lift game-balance gates that p0-01 v1 measured | [combat-dev](../team-leads/combat-dev.md) | 🟢 |
| [p1-29a](p1-29a-last-stand-defense.md) | 🔴 stub | P1 | Last-stand defense — combat-strength multiplier when defender is at last city | [combat-dev](../team-leads/combat-dev.md) | 🟢 |
## perf
| ID | Status | Priority | Title | Owner | Blocked |
|---|---|---|---|---|---|
| [p1-30](p1-30.md) | ❌ missing | P1 | Optimize `_build_tactical_state` — 8000-tile GDScript dict-build per AI turn blocks p1-22 huge-map gate | [warcouncil](../team-leads/warcouncil.md) | 🟢 |
| [p1-30](p1-30.md) | 🟡 partial | P1 | Optimize `_build_tactical_state` — 8000-tile GDScript dict-build per AI turn blocks p1-22 huge-map gate | [warcouncil](../team-leads/warcouncil.md) | 🟢 |
| [p1-30b](p1-30b-parallel-mcts-rollouts.md) | 🔴 stub | P1 | Parallel MCTS rollouts for huge-map decisive games (closes p1-22's huge-map sub-gate) | [warcouncil](../team-leads/warcouncil.md) | 🟢 |
## rail-1
@ -78,13 +82,14 @@
| ID | Status | Priority | Title | Owner | Blocked |
|---|---|---|---|---|---|
| [p1-30](p1-30.md) | ❌ missing | P1 | Optimize `_build_tactical_state` — 8000-tile GDScript dict-build per AI turn blocks p1-22 huge-map gate | [warcouncil](../team-leads/warcouncil.md) | 🟢 |
| [p1-30](p1-30.md) | 🟡 partial | P1 | Optimize `_build_tactical_state` — 8000-tile GDScript dict-build per AI turn blocks p1-22 huge-map gate | [warcouncil](../team-leads/warcouncil.md) | 🟢 |
| [p1-30b](p1-30b-parallel-mcts-rollouts.md) | 🔴 stub | P1 | Parallel MCTS rollouts for huge-map decisive games (closes p1-22's huge-map sub-gate) | [warcouncil](../team-leads/warcouncil.md) | 🟢 |
## tooling
| ID | Status | Priority | Title | Owner | Blocked |
|---|---|---|---|---|---|
| [p1-45](p1-45-batch-binary-freshness.md) | ❌ missing | P1 | Batch binary freshness: rebuild GDExt before every autoplay batch | [simulator-infra](../team-leads/simulator-infra.md) | 🟢 |
| [p1-45](p1-45-batch-binary-freshness.md) | ✅ done | P1 | Batch binary freshness: rebuild GDExt before every autoplay batch | [simulator-infra](../team-leads/simulator-infra.md) | 🟢 |
## (untagged)
@ -100,6 +105,8 @@
| [g2-08](g2-08-fauna-population-dynamics-oos.md) | ⚫ oos | P2 | Fauna population dynamics — habitat_min, carrying_capacity, prey availability (Game 2) | — | 🟢 |
| [g2-09](g2-09-flora-tolerance-driven-selection-oos.md) | ⚫ oos | P2 | Flora tolerance-driven selection — drought / fire / cold tolerances feed selector (Game 2) | — | 🟢 |
| [g2-10](g2-10-fauna-migration-paths-oos.md) | ⚫ oos | P2 | Fauna migration paths — seasonal range shifts, reintroduction propagation (Game 2) | — | 🟢 |
| [g2-11](g2-11-vertical-city-floor-stack-oos.md) | ⚫ oos | P3 | Vertical city floor stack (Game 2) — OOS | [unassigned](../team-leads/unassigned.md) | 🔒 g2-12 |
| [g2-12](g2-12-underground-layer-stack-oos.md) | ⚫ oos | P3 | Underground layer stack (Game 2) — OOS | [unassigned](../team-leads/unassigned.md) | 🟢 |
| [g3-01](g3-01-archons-oos.md) | ⚫ oos | P3 | Archons — Game 3 (Age of Elves) | — | 🟢 |
| [g3-02](g3-02-life-school-oos.md) | ⚫ oos | P3 | Life school spellbook — Game 3 (Age of Elves) | — | 🟢 |
| [g3-03](g3-03-death-school-oos.md) | ⚫ oos | P3 | Death school spellbook — Game 3 (Age of Elves) | — | 🟢 |
@ -185,30 +192,34 @@
| [p1-24](p1-24-windows-path-separator.md) | ✅ done | P1 | ai_personalities.json fails to load from packed builds (all platforms) — pass JSON contents not path | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p1-25](p1-25-export-script-error-cleanup.md) | ✅ done | P1 | Eliminate parse-error spam in export logs (Unit dup decl + SaveManager stray) | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p1-26](p1-26-tile-placement-preview-ux.md) | ✅ done | P1 | Tile-placement UX with effect preview — Civ7-style \\\"where does this go and what changes\\\" | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p1-27](p1-27-mcts-service-extraction.md) | ❌ missing | P1 | Extract GPU MCTS into a standalone service/client (model-boss-shaped, magic-civ-only) | [warcouncil](../team-leads/warcouncil.md) | 🟢 |
| [p1-27](p1-27-mcts-service-extraction.md) | 🟡 partial | P1 | Extract GPU MCTS into a standalone service/client (model-boss-shaped, magic-civ-only) | [warcouncil](../team-leads/warcouncil.md) | 🟢 |
| [p1-28](p1-28-culture-research-tree.md) | ✅ done | P1 | Culture research tree — real graph, bridge, UI | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p1-31](p1-31-split-bundled-building-resources.md) | ✅ done | P1 | Split bundled `resources/buildings/<category>.json` into per-file pattern matching `resources/units/` | — | 🟢 |
| [p1-32](p1-32-food-chain-buildings.md) | ❌ missing | P1 | Author the two missing food/processing buildings (sawmill, herbalist) | — | 🟢 |
| [p1-33](p1-33-naval-aerial-production-buildings.md) | ❌ missing | P1 | Wire naval/aerial unit gates to the harbor and airfield buildings | — | 🟢 |
| [p1-32](p1-32-food-chain-buildings.md) | ✅ done | P1 | Author the two missing food/processing buildings (sawmill, herbalist) | — | 🟢 |
| [p1-33](p1-33-naval-aerial-production-buildings.md) | ✅ done | P1 | Wire naval/aerial unit gates to the harbor and airfield buildings | — | 🟢 |
| [p1-34](p1-34-unit-metadata-expansion.md) | ✅ done | P1 | Unit metadata expansion — flavor, archetype, promotion_tree, clan_affinity fields | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p1-35](p1-35-unit-lore-paragraphs.md) | ✅ done | P1 | Per-unit lore paragraphs — historical/cultural context for the dwarven roster | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p1-36](p1-36-ai-personalities-t1-t10-coverage.md) | 🟡 partial | P1 | AI personalities — T1T10 build order coverage + clan_affinity routing | [warcouncil](../team-leads/warcouncil.md) | 🟢 |
| [p1-37](p1-37-mc-ai-clan-affinity-routing.md) | 🟡 partial | P1 | mc-ai clan_affinity routing — Rust AI reads unit clan_affinity at build-decision time | [warcouncil](../team-leads/warcouncil.md) | 🟢 |
| [p1-36](p1-36-ai-personalities-t1-t10-coverage.md) | ✅ done | P1 | AI personalities — T1T10 build order coverage + clan_affinity routing | [warcouncil](../team-leads/warcouncil.md) | 🟢 |
| [p1-37](p1-37-mc-ai-clan-affinity-routing.md) | ✅ done | P1 | mc-ai clan_affinity routing — Rust AI reads unit clan_affinity at build-decision time | [warcouncil](../team-leads/warcouncil.md) | 🟢 |
| [p1-38](p1-38-biome-economy-coupling.md) | 🟡 partial | P1 | Biome → economy coupling — population & luxury driven by live ecology | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p1-40](p1-40-single-source-of-truth-resources.md) | ✅ done | P1 | Collapse data/<category>/ override layer into single source of truth at resources/ | — | 🟢 |
| [p1-41](p1-41-game-pack-subscription-manifest.md) | ✅ done | P1 | Game-pack subscription manifest + loader filter (Phase B of resources/ unification) | — | 🟢 |
| [p1-42](p1-42-ai-full-building-catalog.md) | ❌ missing | P1 | AI must consider the full 155-building catalog, not the hardcoded 8-id ladder | — | 🟢 |
| [p1-43](p1-43-building-stacking-upgrade.md) | ❌ missing | P1 | Building stacking — per-category upgrade chains (military / science / culture / production / etc.) | — | 🟢 |
| [p1-43](p1-43-building-stacking-upgrade.md) | 🟡 partial | P1 | Building stacking — per-category upgrade chains (military / science / culture / production / etc.) | — | 🟢 |
| [p1-44](p1-44-buildings-as-producers.md) | ❌ missing | P1 | Buildings produce units, not the city center — per-building production queues | — | 🟢 |
| [p1-46](p1-46-design-lab-terrain-dimensions.md) | 🟡 partial | P1 | Terrain Dimensions Lab — fix ridginess, bind 149 flora species, add Whittaker plot | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p1-47](p1-47-river-hydrology-network.md) | 🟡 partial | P1 | River hydrology — D6 flow analysis, hydraulic erosion, multi-hex lakes, cross-tile rivers | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p1-48](p1-48-flora-species-renderer.md) | 🟡 partial | P1 | Flora species renderer — bind 149 species to world-map tile rendering (single source of truth) | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p1-49](p1-49-fauna-species-renderer.md) | 🟡 partial | P1 | Fauna species renderer — 61 Game-1 species visible on encounter and lair tiles | [terraformer](../team-leads/terraformer.md) | 🔒 p1-47 |
| [p1-50](p1-50-tectonic-prepass.md) | 🟡 partial | P1 | Tectonic prepass — voronoi plates + boundary classification seeding elevation | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p1-46](p1-46-design-lab-terrain-dimensions.md) | ✅ done | P1 | Terrain Dimensions Lab — fix ridginess, bind 149 flora species, add Whittaker plot | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p1-47](p1-47-river-hydrology-network.md) | ✅ done | P1 | River hydrology — D6 flow analysis, hydraulic erosion, multi-hex lakes, cross-tile rivers | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p1-48](p1-48-flora-species-renderer.md) | ✅ done | P1 | Flora species renderer — bind 149 species to world-map tile rendering (single source of truth) | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p1-49](p1-49-fauna-species-renderer.md) | ✅ done | P1 | Fauna species renderer — 61 Game-1 species visible on encounter and lair tiles | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p1-50](p1-50-tectonic-prepass.md) | ✅ done | P1 | Tectonic prepass — voronoi plates + boundary classification seeding elevation | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p1-51](p1-51-worldgen-canonical-design-docs.md) | ✅ done | P1 | Worldgen canonical design docs — author the spec before any Rust | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p1-52](p1-52-api-wasm-build-fix.md) | ✅ done | P1 | api-wasm build fix — unblock WASM bundle for design-lab WASM consumption | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [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) | 🔵 in_progress | 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-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) | 🟢 |
| [p2-02](p2-02-hud-tooltips.md) | ✅ done | P2 | Tooltips on all HUD elements | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p2-03](p2-03-hotkey-cheat-sheet.md) | ✅ done | P2 | Hotkey cheat sheet (F1 / ?) | [shipwright](../team-leads/shipwright.md) | 🟢 |
@ -231,7 +242,7 @@
| [p2-10i](p2-10i-tile-tooltip-scene.md) | ✅ done | P2 | TileTooltip: fix scene node name mismatches and collectibles text formatting | — | 🟢 |
| [p2-10j](p2-10j-fog-vision-scout-move.md) | ✅ done | P2 | FogOfWar: fix recalculate_vision to not re-reveal already-seen tiles on move | — | 🟢 |
| [p2-11](p2-11-version-about-screen.md) | ✅ done | P2 | Version string + About screen | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p2-11a](p2-11a.md) | 🔴 stub | P2 | SaveManager: add Unit.serialize/deserialize and City.production_queue serialize path | — | 🟢 |
| [p2-11a](p2-11a.md) | 🟡 partial | P2 | SaveManager: add Unit.serialize/deserialize and City.production_queue serialize path | — | 🟢 |
| [p2-12](p2-12-apricot-weston-install.md) | ✅ done | P2 | Install weston on apricot RUN host — unblock display-server smoke tests | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p2-16](p2-16-audio-assets.md) | 🔵 in_progress | P1 | Audio assets — in-theme OSS launch pack + source ledger | [asset-audio](../team-leads/asset-audio.md) | 🟢 |
| [p2-18](p2-18-guide-public-deployment.md) | 🟡 partial | P2 | Guide web app — public hosting + deploy pipeline | — | 🟢 |
@ -258,16 +269,64 @@
| [p2-43](p2-43-culture-research-completion-event.md) | ❌ missing | P2 | Culture research live-game pipeline — per-turn GDExt bridge + `culture_researched` emit | — | 🟢 |
| [p2-44](p2-44-ai-promotion-selection.md) | ❌ missing | P2 | AI promotion selection — auto-pick + emit unit_promoted for AI units | — | 🟢 |
| [p2-45](p2-45-elimination-reconciliation.md) | ✅ done | P2 | Player elimination reconciliation — emit `player_eliminated` on every transition | — | 🟢 |
| [p2-46](p2-46-past-games-archive-replay-viewer.md) | ❌ missing | P2 | Past-games archive & replay viewer — `mc-replay` crate, on-disk archive, projection-based playback | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p2-47](p2-47-in-game-statistics-screens.md) | ❌ missing | P2 | In-game statistics screens — Civ-style 5-tab modal (Demographics / Graphs / Rankings / Replay / Histories) | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p2-48](p2-48-end-of-game-summary-screen.md) | ❌ missing | P2 | End-of-game summary screen — outcome banner, standings, score graph, awards, timeline, footer actions | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p2-49](p2-49-climate-axes-latitude-continentality.md) | 🟡 partial | P2 | Climate axes refactor — latitude + continentality + zonal winds as first-class per-hex inputs | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p2-50](p2-50-rng-determinism-pin.md) | 🟡 partial | P2 | Deterministic RNG + seed-derivation pin across mc-mapgen / mc-climate / mc-ecology | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p2-51](p2-51-world-shape-knobs.md) | 🟡 partial | P2 | Player-facing world-shape parameters on new-game screen | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p2-52](p2-52-substrate-flora-cover-ontology-split.md) | 🟡 partial | P2 | Split terrain enum into substrate × flora-cover layers (resolve biome ontology) | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p2-55](p2-55-civilian-capture-system.md) | ⚪ pending | P2 | Civilian Capture / Destroy / Ransom | — | 🟢 |
| [p2-46](p2-46-past-games-archive-replay-viewer.md) | 🟡 partial | P2 | Past-games archive & replay viewer — `mc-replay` crate, on-disk archive, projection-based playback | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p2-47](p2-47-in-game-statistics-screens.md) | 🟡 partial | P2 | In-game statistics screens — Civ-style 5-tab modal (Demographics / Graphs / Rankings / Replay / Histories) | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p2-48](p2-48-end-of-game-summary-screen.md) | 🟡 partial | P2 | End-of-game summary screen — outcome banner, standings, score graph, awards, timeline, footer actions | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p2-49](p2-49-climate-axes-latitude-continentality.md) | ✅ done | P2 | Climate axes refactor — latitude + continentality + zonal winds as first-class per-hex inputs | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p2-50](p2-50-rng-determinism-pin.md) | ✅ done | P2 | Deterministic RNG + seed-derivation pin across mc-mapgen / mc-climate / mc-ecology | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p2-51](p2-51-world-shape-knobs.md) | ✅ done | P2 | Player-facing world-shape parameters on new-game screen | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p2-52](p2-52-substrate-flora-cover-ontology-split.md) | ✅ done | P2 | Split terrain enum into substrate × flora-cover layers (resolve biome ontology) | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p2-53](p2-53-action-vocabulary-design-game-gap.md) | ✅ done | P2 | Action vocabulary — gap analysis between design page and shipped Rust/Godot game | [wireguard](../team-leads/wireguard.md) | 🟢 |
| [p2-53a](p2-53a-sentry-guard-action-kind.md) | ✅ done | P2 | Sentry/Guard ActionKind — add Sentry/Unsentry to mc-core with wake-on-vision | [wireguard](../team-leads/wireguard.md) | 🟢 |
| [p2-53a1](p2-53a1-sentry-bridge-state-pipe.md) | ✅ done | P2 | Sentry bridge state pipe — extend `GdUnitActions` signature to pass `is_sentrying` | [simulator-infra](../team-leads/simulator-infra.md) | 🟢 |
| [p2-53b](p2-53b-building-action-registry.md) | ✅ done | P2 | Building action registry — `BuildingActionKind`, `building_actions.json`, `GdBuildingActions` bridge | [simulator-infra](../team-leads/simulator-infra.md) | 🟢 |
| [p2-53c](p2-53c-rally-vocabulary-expansion.md) | ✅ done | P2 | Rally vocabulary expansion — Hold / Fortify / JoinFormation + two-waypoint Patrol | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p2-53d](p2-53d-building-specifics.md) | ✅ done | P2 | Building specifics — Garrison, Repair, Toggle Active + 18 archetype-specific actions | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p2-53e](p2-53e-siege-pillage-embark.md) | ✅ done | P2 | Siege handlers (Pack/Deploy/Bombard) + Pillage UI wiring + Embark/Disembark handlers | [combat-dev](../team-leads/combat-dev.md) | 🟢 |
| [p2-53f](p2-53f-infantry-specifics.md) | ✅ done | P2 | Infantry specifics — Shield Wall, Brace, Shove, Rage, Cleave, War Cry | [combat-dev](../team-leads/combat-dev.md) | 🟢 |
| [p2-53g](p2-53g-ranged-specifics.md) | ✅ done | P2 | Ranged specifics — Volley, Aimed Shot, Fire Arrows | [combat-dev](../team-leads/combat-dev.md) | 🟢 |
| [p2-53h](p2-53h-cavalry-specifics.md) | ✅ done | P2 | Cavalry specifics — Charge, Pursue, Wheel | [combat-dev](../team-leads/combat-dev.md) | 🟢 |
| [p2-53i](p2-53i-engineer-pioneer-medic-scout.md) | ✅ done | P2 | Support specifics — Engineer, Pioneer, Medic, Scout | [shipwright](../team-leads/shipwright.md) | 🟢 |
| [p2-54](p2-54-resource-visibility-three-axis.md) | ✅ done | P2 | Resource visibility — three-axis (visibility/yield_gate/improvement_gate) refactor | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p2-54a](p2-54a-deposits-three-axis-migration.md) | ✅ done | P2 | Migrate deposits/*.json to three-axis visibility schema | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p2-54b](p2-54b-player-observation-cache.md) | ✅ done | P2 | Per-player tile observation cache — flora/fauna last-observed state | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p2-54c](p2-54c-renderer-observations-and-indicators.md) | ✅ done | P2 | Renderer reads observations + indicator decorations for tech-gated resources | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p2-54d](p2-54d-ai-tech-priority-from-visibility.md) | ✅ done | P2 | AI tech-priority bias from visible-but-gated luxuries + indicator decorations | [terraformer](../team-leads/terraformer.md) | 🟢 |
| [p2-55](p2-55-civilian-capture-system.md) | 🟡 partial | P2 | Civilian Capture / Destroy / Ransom | — | 🟢 |
| [p2-55d](p2-55d-ai-ransom-decision-hook.md) | 🔴 stub | P2 | AI ransom accept/refuse hook in mc-turn start-of-turn | — | 🟢 |
| [p2-55e](p2-55e-richer-ransom-events.md) | 🔴 stub | P2 | UnitRansomAccepted / UnitRansomExpired events on TurnResult | — | 🟢 |
| [p2-55f](p2-55f-ransom-duration-from-json.md) | 🔴 stub | P3 | Read ransom_offer_duration_turns from combat_balance.json | — | 🟢 |
| [p2-56](p2-56-worker-categories-and-expertise-tiers.md) | 🔴 stub | P2 | Worker categories (Sustenance/Construction/Wealth) + 5-tier expertise + Master/Grandmaster auras + idle decay | [unassigned](../team-leads/unassigned.md) | 🔒 p2-35 |
| [p2-56a](p2-56a-worker-category-types.md) | 🔴 stub | P2 | Worker category types — Sustenance / Construction / Wealth taxonomy | [unassigned](../team-leads/unassigned.md) | 🔒 p2-35 |
| [p2-56b](p2-56b-expertise-tier-progression.md) | 🔴 stub | P2 | Expertise tier progression — 5-tier specialist XP ladder | [unassigned](../team-leads/unassigned.md) | 🔒 p2-56a |
| [p2-56c](p2-56c-master-grandmaster-auras.md) | 🔴 stub | P2 | Master / Grandmaster auras — adjacent-slot yield propagation | [unassigned](../team-leads/unassigned.md) | 🔒 p2-56b |
| [p2-57](p2-57-production-chain-typed-resources.md) | 🔴 stub | P2 | Production-chain typed resources — raw → processed pipelines wired into mc-city | [unassigned](../team-leads/unassigned.md) | 🟢 |
| [p2-57a](p2-57a-typed-resource-stockpile.md) | 🔴 stub | P2 | Typed resource stockpile — raw vs processed taxonomy | [unassigned](../team-leads/unassigned.md) | 🟢 |
| [p2-57b](p2-57b-consume-produce-edges.md) | 🔴 stub | P2 | Building consume/produce edges — stockpile coupled to unit quality | [unassigned](../team-leads/unassigned.md) | 🔒 p2-57a |
| [p2-58](p2-58-ambient-encounter-rolls.md) | 🔴 stub | P2 | Ambient encounter rolls per tile moved — fauna_density × ecology_tier | [unassigned](../team-leads/unassigned.md) | 🟢 |
| [p2-59](p2-59-pioneer-escort-mechanic.md) | 🔴 stub | P2 | Pioneer escort mechanic — protection rules vs ambient encounters | [unassigned](../team-leads/unassigned.md) | 🔒 p2-58 |
| [p2-60](p2-60-weather-lens-godot-ui.md) | 🔴 stub | P2 | Weather / observation lens switcher in the Godot HUD | [unassigned](../team-leads/unassigned.md) | 🟢 |
| [p2-61](p2-61-observation-recording-gates-from-tech.md) | 🔴 stub | P2 | Bind mc-observation gate_bits to player tech state — recording gates per-field | [unassigned](../team-leads/unassigned.md) | 🟢 |
| [p2-62](p2-62-procedural-unit-and-building-renderer.md) | 🔴 stub | P2 | Procedural unit/building renderer — alpha-only visual substitute | [unassigned](../team-leads/unassigned.md) | 🟢 |
| [p3-01](p3-01-courier-diplomacy.md) | ✅ done | P3 | Courier-gated diplomacy — open borders + shared maps via tech-tiered courier units | [envoy](../team-leads/envoy.md) | 🟢 |
| [p3-02](p3-02-hybrid-merged-structures.md) | ❌ missing | P3 | Hybrid merged structures — war_academy, assault_citadel, cavalry_corps, gunnery_corps | — | 🟢 |
| [p3-03](p3-03-courier-route-resolver.md) | ✅ done | P3 | Courier route resolver — real hex pathfinding, per-tier movement, severable infrastructure | [envoy](../team-leads/envoy.md) | 🟢 |
| [p3-04](p3-04-per-hex-improvement-layer.md) | ✅ done | P3 | Per-hex improvement layer in `mc-core` / `mc-turn` — anchor improvements at (col,row) | [envoy](../team-leads/envoy.md) | 🟢 |
| [p3-05a](p3-05a-civic-state-wrapper-and-game-state.md) | 🔴 stub | P3 | Civic state wrapper — typed CivicState added to PlayerState | [unassigned](../team-leads/unassigned.md) | 🟢 |
| [p3-05b](p3-05b-authority-axis-catalog.md) | 🔴 stub | P3 | Authority axis civics catalog | [unassigned](../team-leads/unassigned.md) | 🔒 p3-05a |
| [p3-05c](p3-05c-labor-axis-catalog.md) | 🔴 stub | P3 | Labor axis civics catalog | [unassigned](../team-leads/unassigned.md) | 🔒 p3-05a |
| [p3-05d](p3-05d-economy-axis-catalog.md) | 🔴 stub | P3 | Economy axis civics catalog | [unassigned](../team-leads/unassigned.md) | 🔒 p3-05a |
| [p3-05e](p3-05e-civic-modifier-propagation.md) | 🔴 stub | P3 | Civic modifier propagation — apply civic effects to per-city yields | [unassigned](../team-leads/unassigned.md) | 🔒 p3-05b, p3-05c, p3-05d |
| [p3-06](p3-06-civic-anarchy-and-axis-switching.md) | 🔴 stub | P3 | Civic anarchy — 5-turn anarchy on axis switch | [unassigned](../team-leads/unassigned.md) | 🔒 p3-05a |
| [p3-07a](p3-07a-cv-wealth-and-authority-amplifier.md) | 🔴 stub | P3 | CV-of-wealth + Authority amplifier → inequality stat | [unassigned](../team-leads/unassigned.md) | 🔒 p3-05b |
| [p3-07b](p3-07b-four-damage-channels.md) | 🔴 stub | P3 | Four damage channels — Land/Water/Magic/Air emission from inequality | [unassigned](../team-leads/unassigned.md) | 🔒 p3-07a |
| [p3-10a](p3-10a-lair-assault-mode.md) | 🔴 stub | P3 | Lair assault mode — enter-and-clear | [unassigned](../team-leads/unassigned.md) | 🟢 |
| [p3-10b](p3-10b-lair-siege-mode.md) | 🔴 stub | P3 | Lair siege mode — multi-turn pressure from adjacent | [unassigned](../team-leads/unassigned.md) | 🔒 p3-10a |
| [p3-10c](p3-10c-lair-raid-mode.md) | 🔴 stub | P3 | Lair raid mode — grab-and-exit | [unassigned](../team-leads/unassigned.md) | 🔒 p3-10a |
| [p3-11](p3-11-pioneer-engineer-action-points.md) | 🔴 stub | P3 | Pioneer & Engineer action-point pool | [unassigned](../team-leads/unassigned.md) | 🟢 |
| [p3-12](p3-12-fauna-stat-derivation-from-traits.md) | 🔴 stub | P3 | Fauna combat stat derivation — regenerate from traits | [unassigned](../team-leads/unassigned.md) | 🟢 |
| [p3-13a](p3-13a-extend-meteorological-events.md) | 🔴 stub | P3 | Extend meteorological events — drought, flood, dust_storm | [unassigned](../team-leads/unassigned.md) | 🟢 |
| [p3-13b](p3-13b-geological-events.md) | 🔴 stub | P3 | Geological events — earthquake, volcanic_eruption, landslide | [unassigned](../team-leads/unassigned.md) | 🟢 |
| [p3-13c](p3-13c-biological-events.md) | 🔴 stub | P3 | Biological events — plague, bloom, migration_pulse | [unassigned](../team-leads/unassigned.md) | 🟢 |
| [p3-13d](p3-13d-anomalous-events.md) | 🔴 stub | P3 | Anomalous events — aurora, fog_bank, thermal_anomaly | [unassigned](../team-leads/unassigned.md) | 🟢 |

View file

@ -80,10 +80,20 @@
| [p1-26](p1-26-tile-placement-preview-ux.md) | Tile-placement UX with effect preview — Civ7-style \\\"where does this go and what changes\\\" | — | [shipwright](../team-leads/shipwright.md) | 2026-04-26 |
| [p1-28](p1-28-culture-research-tree.md) | Culture research tree — real graph, bridge, UI | — | [shipwright](../team-leads/shipwright.md) | 2026-04-26 |
| [p1-31](p1-31-split-bundled-building-resources.md) | Split bundled `resources/buildings/<category>.json` into per-file pattern matching `resources/units/` | — | — | 2026-04-27 |
| [p1-32](p1-32-food-chain-buildings.md) | Author the two missing food/processing buildings (sawmill, herbalist) | — | — | 2026-05-03 |
| [p1-33](p1-33-naval-aerial-production-buildings.md) | Wire naval/aerial unit gates to the harbor and airfield buildings | — | — | 2026-05-03 |
| [p1-34](p1-34-unit-metadata-expansion.md) | Unit metadata expansion — flavor, archetype, promotion_tree, clan_affinity fields | — | [shipwright](../team-leads/shipwright.md) | 2026-04-27 |
| [p1-35](p1-35-unit-lore-paragraphs.md) | Per-unit lore paragraphs — historical/cultural context for the dwarven roster | — | [shipwright](../team-leads/shipwright.md) | 2026-04-27 |
| [p1-36](p1-36-ai-personalities-t1-t10-coverage.md) | AI personalities — T1T10 build order coverage + clan_affinity routing | — | [warcouncil](../team-leads/warcouncil.md) | 2026-05-03 |
| [p1-37](p1-37-mc-ai-clan-affinity-routing.md) | mc-ai clan_affinity routing — Rust AI reads unit clan_affinity at build-decision time | — | [warcouncil](../team-leads/warcouncil.md) | 2026-05-01 |
| [p1-40](p1-40-single-source-of-truth-resources.md) | Collapse data/<category>/ override layer into single source of truth at resources/ | — | — | 2026-04-29 |
| [p1-41](p1-41-game-pack-subscription-manifest.md) | Game-pack subscription manifest + loader filter (Phase B of resources/ unification) | — | — | 2026-04-29 |
| [p1-45](p1-45-batch-binary-freshness.md) | Batch binary freshness: rebuild GDExt before every autoplay batch | tooling, batch, gdext, ci | [simulator-infra](../team-leads/simulator-infra.md) | 2026-05-03 |
| [p1-46](p1-46-design-lab-terrain-dimensions.md) | Terrain Dimensions Lab — fix ridginess, bind 149 flora species, add Whittaker plot | — | [terraformer](../team-leads/terraformer.md) | 2026-05-01 |
| [p1-47](p1-47-river-hydrology-network.md) | River hydrology — D6 flow analysis, hydraulic erosion, multi-hex lakes, cross-tile rivers | — | [terraformer](../team-leads/terraformer.md) | 2026-05-01 |
| [p1-48](p1-48-flora-species-renderer.md) | Flora species renderer — bind 149 species to world-map tile rendering (single source of truth) | — | [terraformer](../team-leads/terraformer.md) | 2026-05-01 |
| [p1-49](p1-49-fauna-species-renderer.md) | Fauna species renderer — 61 Game-1 species visible on encounter and lair tiles | — | [terraformer](../team-leads/terraformer.md) | 2026-05-01 |
| [p1-50](p1-50-tectonic-prepass.md) | Tectonic prepass — voronoi plates + boundary classification seeding elevation | — | [terraformer](../team-leads/terraformer.md) | 2026-05-01 |
| [p1-51](p1-51-worldgen-canonical-design-docs.md) | Worldgen canonical design docs — author the spec before any Rust | — | [terraformer](../team-leads/terraformer.md) | 2026-04-30 |
| [p1-52](p1-52-api-wasm-build-fix.md) | 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) | Worldgen layer pages — one playground per canonical doc, mirroring the layered Earth model | — | [terraformer](../team-leads/terraformer.md) | 2026-05-01 |
@ -129,6 +139,26 @@
| [p2-38](p2-38-unit-audio-cues-stubs.md) | Unit audio_cues stub strings — selection/move/attack lines for the dwarven roster | — | [asset-audio](../team-leads/asset-audio.md) | 2026-04-27 |
| [p2-39](p2-39-chronicle-hall-phantom-unlock.md) | Resolve `chronicle_hall` phantom unlock in `chronicle_keeping` culture tech | — | — | 2026-04-27 |
| [p2-45](p2-45-elimination-reconciliation.md) | Player elimination reconciliation — emit `player_eliminated` on every transition | — | — | 2026-04-30 |
| [p2-49](p2-49-climate-axes-latitude-continentality.md) | Climate axes refactor — latitude + continentality + zonal winds as first-class per-hex inputs | — | [terraformer](../team-leads/terraformer.md) | 2026-04-30 |
| [p2-50](p2-50-rng-determinism-pin.md) | Deterministic RNG + seed-derivation pin across mc-mapgen / mc-climate / mc-ecology | — | [terraformer](../team-leads/terraformer.md) | 2026-05-01 |
| [p2-51](p2-51-world-shape-knobs.md) | Player-facing world-shape parameters on new-game screen | — | [terraformer](../team-leads/terraformer.md) | 2026-05-01 |
| [p2-52](p2-52-substrate-flora-cover-ontology-split.md) | Split terrain enum into substrate × flora-cover layers (resolve biome ontology) | — | [terraformer](../team-leads/terraformer.md) | 2026-05-01 |
| [p2-53](p2-53-action-vocabulary-design-game-gap.md) | Action vocabulary — gap analysis between design page and shipped Rust/Godot game | — | [wireguard](../team-leads/wireguard.md) | 2026-05-03 |
| [p2-53a](p2-53a-sentry-guard-action-kind.md) | Sentry/Guard ActionKind — add Sentry/Unsentry to mc-core with wake-on-vision | — | [wireguard](../team-leads/wireguard.md) | 2026-05-01 |
| [p2-53a1](p2-53a1-sentry-bridge-state-pipe.md) | Sentry bridge state pipe — extend `GdUnitActions` signature to pass `is_sentrying` | — | [simulator-infra](../team-leads/simulator-infra.md) | 2026-05-01 |
| [p2-53b](p2-53b-building-action-registry.md) | Building action registry — `BuildingActionKind`, `building_actions.json`, `GdBuildingActions` bridge | — | [simulator-infra](../team-leads/simulator-infra.md) | 2026-05-01 |
| [p2-53c](p2-53c-rally-vocabulary-expansion.md) | Rally vocabulary expansion — Hold / Fortify / JoinFormation + two-waypoint Patrol | — | [shipwright](../team-leads/shipwright.md) | 2026-05-01 |
| [p2-53d](p2-53d-building-specifics.md) | Building specifics — Garrison, Repair, Toggle Active + 18 archetype-specific actions | — | [shipwright](../team-leads/shipwright.md) | 2026-05-03 |
| [p2-53e](p2-53e-siege-pillage-embark.md) | Siege handlers (Pack/Deploy/Bombard) + Pillage UI wiring + Embark/Disembark handlers | — | [combat-dev](../team-leads/combat-dev.md) | 2026-05-03 |
| [p2-53f](p2-53f-infantry-specifics.md) | Infantry specifics — Shield Wall, Brace, Shove, Rage, Cleave, War Cry | — | [combat-dev](../team-leads/combat-dev.md) | 2026-05-01 |
| [p2-53g](p2-53g-ranged-specifics.md) | Ranged specifics — Volley, Aimed Shot, Fire Arrows | — | [combat-dev](../team-leads/combat-dev.md) | 2026-05-03 |
| [p2-53h](p2-53h-cavalry-specifics.md) | Cavalry specifics — Charge, Pursue, Wheel | — | [combat-dev](../team-leads/combat-dev.md) | 2026-05-03 |
| [p2-53i](p2-53i-engineer-pioneer-medic-scout.md) | Support specifics — Engineer, Pioneer, Medic, Scout | — | [shipwright](../team-leads/shipwright.md) | 2026-05-03 |
| [p2-54](p2-54-resource-visibility-three-axis.md) | Resource visibility — three-axis (visibility/yield_gate/improvement_gate) refactor | — | [terraformer](../team-leads/terraformer.md) | 2026-05-02 |
| [p2-54a](p2-54a-deposits-three-axis-migration.md) | Migrate deposits/*.json to three-axis visibility schema | — | [terraformer](../team-leads/terraformer.md) | 2026-05-01 |
| [p2-54b](p2-54b-player-observation-cache.md) | 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) | 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) | AI tech-priority bias from visible-but-gated luxuries + indicator decorations | — | [terraformer](../team-leads/terraformer.md) | 2026-05-01 |
## P3

View file

@ -15,10 +15,10 @@
| Priority | ✅ | 🔵 | 🟡 | 🔴 | ❌ | ⚫ | Total |
|---|---|---|---|---|---|---|---|
| **P0** | 43 | 0 | 0 | 0 | 0 | 0 | 43 |
| **P1** | 47 | 4 | 10 | 3 | 7 | 1 | 72 |
| **P1** | 47 | 3 | 11 | 3 | 7 | 1 | 72 |
| **P2** | 52 | 0 | 7 | 14 | 3 | 6 | 82 |
| **P3 (oos)** | 3 | 0 | 0 | 18 | 1 | 21 | 43 |
| **total** | **145** | **4** | **17** | **35** | **11** | **28** | **240** |
| **total** | **145** | **3** | **18** | **35** | **11** | **28** | **240** |
</td><td valign='top' style='padding-left:2em'>
@ -149,7 +149,7 @@
| [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 |
| [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 |
| [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-05-03 |
| [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 |

File diff suppressed because it is too large Load diff

View file

@ -6,7 +6,9 @@ status: in_progress
scope: game1
owner: simulator-infra
updated_at: 2026-05-04
evidence: []
evidence:
- "src/simulator/crates/mc-core/src/tech.rs"
- "src/simulator/crates/mc-tech/src/web.rs"
assigned_by: simulator-infra
---
## Summary
@ -30,10 +32,25 @@ node.
## Acceptance
- [ ] **Rust**`mc-tech::Tech` carries `domain: String` deserialised
from JSON. Schema test in `mc-data` asserts every authored tech has
a non-empty domain belonging to the 10-value enum. `cargo test -p
mc-tech -p mc-culture -p mc-data` passes.
- [x] **Rust**`mc-tech::TechDefinition` now carries
`domain: Option<TechDomain>` (typed enum, not `String`); `TechDomain`
lives in `mc-core/src/tech.rs:20` with all 10 canonical variants and
serde round-trips PascalCase. Schema test
(`src/simulator/crates/mc-tech/src/web.rs:399`
`all_authored_techs_have_valid_domain`) confirms every authored tech
has `Some(_)` after deserialisation; serde itself rejects unknown
strings, so enum-membership and non-empty are enforced together.
Determinism aid `TechWeb::techs_by_domain_map() -> BTreeMap<...>`
added at `web.rs:248`. `cargo test -p mc-core -p mc-tech` green
(12 + 28 tests; including new `domain_field_round_trips_via_json`,
`domain_field_defaults_to_none_when_absent`,
`invalid_domain_string_is_rejected`); `cargo test -p mc-culture
-p mc-turn` green; `cargo check --workspace` green. `mc-data` crate
does not exist in this workspace; the schema test was placed in
`mc-tech` where the deserialisation lives. (mc-culture re-exports
`TechDefinition` as `CultureNode`; the enum field defaults to `None`
for culture data, matching the design note that culture uses `pillar`
as its tab axis.)
- [ ] **GDExtension**`GdTechWeb` exposes `domains() ->
PackedStringArray` and `techs_by_domain(domain) -> Array<Dictionary>`.

View file

@ -2,11 +2,19 @@
id: p1-58
title: "Ecology cognition: terrain affinity, food web, grudge memory, apex tier-10 fauna/flora"
priority: p1
status: in_progress
status: partial
scope: game1
owner: simulator-infra
updated_at: 2026-05-04
evidence: []
evidence:
- "src/simulator/crates/mc-ecology/src/species.rs:107-288 — apex profile types CombatProfile/CognitiveProfile/BreathWeapon/PackBehavior/LootTable/Devastation wired into Species"
- "src/simulator/crates/mc-ecology/src/species.rs:651-665 — RawSpeciesJson reads combat_profile/cognitive_profile/terrain_affinity/loot_table/devastation/food_consumption_per_turn"
- "src/simulator/crates/mc-ecology/src/species.rs:1444-1483 — test_all_authored_species_deserialize: 592 fauna files parse with no panic"
- "src/simulator/crates/mc-ecology/src/species.rs:1487-1509 — test_ancient_red_dragon_profile_fields validates apex profile contents"
- "src/simulator/crates/mc-ecology/src/species.rs:1129-1135 — true_dragon lineage exempt from T7 cap"
- "src/simulator/crates/mc-flora/src/generation.rs:340-369 — AuthoredSpeciesFile accepts apex flora (optional traits/biomes)"
- "src/simulator/crates/mc-flora/src/generation.rs:779-825 — all_authored_flora_species_deserialize: 153 flora files parse, ≥4 apex"
- "public/games/age-of-dwarves/docs/FAUNA_COMBAT_STATS.md:143-176 — apex profile schema documented"
assigned_by: simulator-infra
---
## Summary
@ -76,9 +84,15 @@ domain, trophic_level):
## Acceptance — Rust wire-up
- [ ] `mc-ecology::Species` (or shared parent type) deserializes the new
- [] `mc-ecology::Species` (or shared parent type) deserializes the new
fields: `combat_profile`, `cognitive_profile`, `terrain_affinity`,
`loot_table`, `devastation`, `prey` (already deserialized).
Fauna: `species.rs:651-665` (RawSpeciesJson) + `species.rs:1444-1509` tests
(592 fauna parse; ancient_red_dragon profile asserted). Flora: apex tier-10
parses without panic via `mc-flora::generation::AuthoredSpeciesFile` defaults
(`generation.rs:340-369`); test `all_authored_flora_species_deserialize`
(`generation.rs:779-825`) walks 153 flora files, ≥4 apex flora deserialise.
`cargo test -p mc-ecology -p mc-core` green; `cargo check --workspace` green.
- [ ] `mc-ecology::dynamics`: when a unit attacks a creature with
`cognitive_profile.intelligence >= 3` and survives, register a grudge
entry on the creature: `{ player_id, turn_recorded, expires_turn:
@ -213,4 +227,7 @@ domain, trophic_level):
- Dependencies: all Rust bullets.
- Acceptance gate: `godot --headless --test ...` green; screenshot showing populated tile inspector + grudge badge approved per `phase-gate-protocol.md`.
Bullets remaining: 9.
Bullets remaining: 8 (deserialise gate ✓ as of 2026-05-04). Remaining: grudge
dynamics, devastation in combat, Lotka-Volterra prey shifts, food drain, generation
refactor (terrain_affinity-indexed pool), loot rolling, Godot UI bridge,
GUT tests + proof screenshot.

View file

@ -1,12 +1,12 @@
{
"generated_at": "2026-05-04T03:17:51Z",
"generated_at": "2026-05-04T04:41:32Z",
"totals": {
"partial": 17,
"in_progress": 4,
"in_progress": 3,
"missing": 11,
"stub": 35,
"done": 145,
"partial": 18,
"oos": 28,
"done": 145,
"stub": 35,
"total": 240
},
"objectives": [
@ -1054,7 +1054,7 @@
"id": "p1-58",
"title": "\"Ecology cognition: terrain affinity, food web, grudge memory, apex tier-10 fauna/flora\"",
"priority": "p1",
"status": "in_progress",
"status": "partial",
"scope": "game1",
"owner": "simulator-infra",
"updated_at": "2026-05-04",