| g2-01 |
⚫ oos |
P3 |
Ley lines — Game 2 (Age of Kzzykt) |
— |
🟢 |
| g2-02 |
⚫ oos |
P3 |
Kzzykt playable race — Game 2 (Age of Kzzykt) |
— |
🟢 |
| g2-03 |
⚫ oos |
P3 |
Kzzykt Green school of magic — Game 2 (Age of Kzzykt) |
— |
🟢 |
| g2-04 |
⚫ oos |
P3 |
Multi-GPU sharding for batch_simulate_gpu — out-of-scope (Game 2) |
warcouncil |
🟢 |
| g2-05 |
🟡 partial |
P2 |
Tectonics + lithology — extend the existing prepass/terrain-evolution into a lithology axis |
— |
🟢 |
| g2-06 |
🟡 partial |
P2 |
Soil derivation layer — emergent soil order from rock + climate + slope (the one unbuilt worldsim engine) |
— |
🔒 p2-80, g2-05 |
| g2-07 |
✅ done |
P1 |
Flora succession — wire the existing flora lifecycle engine into the playable turn |
— |
🟢 |
| g2-08 |
🟡 partial |
P2 |
Fauna population dynamics — confirm the existing LV engine ticks in the playable turn |
— |
🟢 |
| g2-09 |
🟡 partial |
P2 |
Flora tolerance-driven selection — extend the existing flora_select engine with tolerance gating |
— |
🟢 |
| g2-10 |
🟡 partial |
P2 |
Fauna migration — wire the existing apply_migrations engine into the per-turn step |
— |
🔒 p2-80, g2-08 |
| g2-11 |
⚫ oos |
P3 |
Vertical city floor stack (Game 2) — OOS |
unassigned |
🔒 g2-12a, g2-12c |
| g2-12 |
⚫ oos |
P3 |
Underground layer stack (Game 2) — OOS |
unassigned |
🟢 |
| g2-12a |
⚫ oos |
P3 |
Underground — N-layer data model + save format (Game 2) — OOS |
unassigned |
🟢 |
| g2-12b |
⚫ oos |
P3 |
Underground — worldgen for L1/L2/L3 + cavern terrain (Game 2) — OOS |
unassigned |
🔒 g2-12a |
| g2-12c |
⚫ oos |
P3 |
Underground — excavation action + cavern lifecycle (Game 2) — OOS |
unassigned |
🔒 g2-12a, g2-12b |
| g2-12d |
⚫ oos |
P3 |
Underground — cross-layer movement, connection points + pathfinding (Game 2) — OOS |
unassigned |
🔒 g2-12a, g2-12c |
| g2-12e |
⚫ oos |
P3 |
Underground — per-layer fog of war + vision (Game 2) — OOS |
unassigned |
🔒 g2-12a, g2-12d |
| g2-12f |
⚫ oos |
P3 |
Underground — structural integrity + cross-layer collapse (Game 2) — OOS |
unassigned |
🔒 g2-12a, g2-12c |
| g2-12g |
⚫ oos |
P3 |
Underground — layer rendering + layer-switch UI (Game 2) — OOS |
unassigned |
🔒 g2-12a, g2-12b, g2-12e |
| g2-12h |
⚫ oos |
P3 |
Underground — AI layer-awareness (Game 2) — OOS |
unassigned |
🔒 g2-12a, g2-12c, g2-12d, g2-12e |
| g3-01 |
⚫ oos |
P3 |
Archons — Game 3 (Age of Elves) |
— |
🟢 |
| g3-02 |
⚫ oos |
P3 |
Life school spellbook — Game 3 (Age of Elves) |
— |
🟢 |
| g3-03 |
⚫ oos |
P3 |
Death school spellbook — Game 3 (Age of Elves) |
— |
🟢 |
| g3-04 |
⚫ oos |
P3 |
Chaos school spellbook — Game 3 (Age of Elves) |
— |
🟢 |
| g3-05 |
⚫ oos |
P3 |
Aether school spellbook — Game 3 (Age of Elves) |
— |
🟢 |
| g3-06 |
⚫ oos |
P3 |
Arcane Ascension victory — Game 3 (Age of Elves) |
— |
🟢 |
| g4-01 |
⚫ oos |
P3 |
Terran (Human) playable species — Game 4 (Age of Terrans) |
— |
🟢 |
| g4-02 |
⚫ oos |
P3 |
Psionics ability system — Game 4 (Age of Terrans) |
— |
🟢 |
| g4-03 |
⚫ oos |
P3 |
Religious victory condition — Game 4 (Age of Terrans) |
— |
🟢 |
| g5-01 |
⚫ oos |
P3 |
Phantasma playable species — Game 5 (Age of Ascension) |
— |
🟢 |
| g5-02 |
⚫ oos |
P3 |
Flügel playable species — Game 5 (Age of Ascension) |
— |
🟢 |
| g5-03 |
⚫ oos |
P3 |
Gith playable species (Githyanki + Githzerai) — Game 5 (Age of Ascension) |
— |
🟢 |
| g5-04 |
⚫ oos |
P3 |
Demonia playable species — Game 5 (Age of Ascension) |
— |
🟢 |
| g6-01 |
⚫ oos |
P3 |
Naval combat — out-of-scope (post-v10) |
— |
🟢 |
| g6-02 |
⚫ oos |
P3 |
Caravan trade routes — out-of-scope (post-v10) |
— |
🟢 |
| mc-replay-followup-unit-spawn-events |
✅ done |
P2 |
mc-turn unit-spawn event coverage — every PlayerState.units.push emits UnitCreated / CityUnitCompleted |
simulator-infra |
🟢 |
| p0-01 |
✅ done |
P0 |
Wire MCTS into gameplay AI |
warcouncil |
🟢 |
| p0-02 |
✅ done |
P0 |
Five AI clan personalities drive distinct playstyles |
warcouncil |
🟢 |
| p0-03 |
✅ done |
P0 |
PvP combat resolved inside the authoritative turn processor |
— |
🟢 |
| p0-04 |
✅ done |
P0 |
World wonder tracking in PlayerState and score victory |
— |
🟢 |
| p0-05 |
✅ done |
P0 |
Culture generation and border expansion |
shipwright |
🟢 |
| p0-06 |
✅ done |
P0 |
Fold gold income / upkeep / improvement yields into turn loop |
— |
🟢 |
| p0-07 |
✅ done |
P0 |
Tech research costs and science pool pacing |
— |
🟢 |
| p0-08 |
✅ done |
P0 |
Domination victory path in mc-turn::victory |
warcouncil |
🟢 |
| p0-09 |
✅ done |
P0 |
City-screen UI completeness (citizen assign, queue controls, promotion picker) |
— |
🟢 |
| p0-10 |
✅ done |
P0 |
Game-completion stability — ≥7/10 seeds declare a winner |
— |
🟢 |
| p0-11 |
✅ done |
P0 |
Author the four T8–T10 mystery item drops |
— |
🟢 |
| p0-12 |
✅ done |
P0 |
Save / load + autosave on quit |
shipwright |
🟢 |
| p0-13 |
✅ done |
P0 |
Fog of war and exploration / scout loop |
— |
🟢 |
| p0-14 |
✅ done |
P0 |
Map generation, resource placement, and balanced fair starts |
shipwright |
🟢 |
| p0-15 |
✅ done |
P0 |
Happiness pool and Golden Age mechanics end-to-end |
shipwright |
🟢 |
| p0-16 |
✅ done |
P0 |
Worker / tile-improvement build loop |
shipwright |
🟢 |
| p0-17 |
✅ done |
P0 |
Wild creature and lair clearing loop |
shipwright |
🟢 |
| p0-18 |
✅ done |
P0 |
Strategic resources gate unit production (empire ledger) |
— |
🟢 |
| p0-19 |
✅ done |
P0 |
Biome-driven collectibles → tile yields → happiness end-to-end |
— |
🟢 |
| p0-20 |
✅ done |
P1 |
GPU-accelerated MCTS rollouts for look-ahead decision-making |
warcouncil |
🟢 |
| p0-21 |
✅ done |
P0 |
Audio system capability — manifest + autoload + EventBus wiring |
shipwright |
🟢 |
| p0-22 |
✅ done |
P0 |
Ultimate AI stress test — 5 clans, huge map, deep lookahead |
warcouncil |
🟢 |
| p0-23 |
✅ done |
P0 |
Sprite rendering capability — replace procedural draw_* with texture rendering |
shipwright |
🟢 |
| p0-24 |
✅ done |
P0 |
Difficulty-calibrated AI progression — Easy / Normal / Hard tier-peak distributions |
warcouncil |
🟢 |
| p0-25 |
✅ done |
P0 |
Game-quality metrics instrumentation — tier_peak, peak_unit_tier, wonder_count |
shipwright |
🟢 |
| p0-26 |
✅ done |
P0 |
Port tactical AI from GDScript to mc-ai (Rail-1 compliance) |
warcouncil |
🟢 |
| p0-27 |
✅ done |
P0 |
GdCulture bridge — live game delegates culture to mc-culture |
shipwright |
🟢 |
| p0-28 |
✅ done |
P0 |
GdEconomy bridge — live game delegates gold/upkeep to mc-economy |
shipwright |
🟢 |
| p0-29 |
✅ done |
P0 |
GdTechWeb bridge — live game delegates research to mc-tech |
shipwright |
🟢 |
| p0-30 |
✅ done |
P0 |
Remove duplicate GDScript ecology tick (single Rust source) |
shipwright |
🟢 |
| p0-31 |
✅ done |
P0 |
Restore Rust ecology path — fix ClimateScript bugs + re-enable per-turn tick |
shipwright |
🟢 |
| p0-32 |
✅ done |
P0 |
Restore WeatherScript + ClimateEffectsScript — per-turn weather and climate-effects |
shipwright |
🟢 |
| p0-33 |
✅ done |
P0 |
World-map input wiring — unit selection panel, city click, ESC/F10 menu, panel close |
wireguard |
🟢 |
| p0-34 |
✅ done |
P0 |
Freepeople tribe-founding cinematic — turn -1 / 0 / 1 start sequence and Dwarf Tribe founder unit |
shipwright |
🟢 |
| p0-35 |
✅ done |
P1 |
Ecology telemetry instrumentation — flora canopy / undergrowth fields in turn_stats.jsonl |
shipwright |
🟢 |
| p0-36 |
✅ done |
P1 |
Weather / climate-effects event telemetry — events.jsonl + turn_stats aggregates |
shipwright |
🟢 |
| p0-37 |
✅ done |
P0 |
Personality-emergent tactical thresholds (lift 7 hardcoded constants into axis-derived functions) |
warcouncil |
🟢 |
| p0-38 |
✅ done |
P0 |
Inject personality-utility scores as MCTS UCB1 priors |
warcouncil |
🟢 |
| p0-39 |
✅ done |
P0 |
AI tier-progression unit selection — production.rs picks tier-2+ units once tech unlocks |
warcouncil |
🟢 |
| p0-40 |
✅ done |
P0 |
Iron-ore strategic resource density — unblock tier 3-6 unit chain |
shipwright |
🟢 |
| p0-41 |
✅ done |
P0 |
Building rally points — produced units auto-deploy to a designated hex |
shipwright |
🟢 |
| p0-41a |
✅ done |
P0 |
Rally-point smoke — produced unit gets PatrolOrder toward rally hex |
shipwright |
🟢 |
| p0-42 |
✅ done |
P0 |
Formation aggregation — adjacent units link into a shaped formation with terrain reflow |
shipwright |
🟢 |
| p0-42a |
✅ done |
P0 |
Formation aggregation smoke — formations form and evolve at runtime |
shipwright |
🟢 |
| p0-44 |
✅ done |
P0 |
Movement mode UX — Move button, path preview, right-click confirm, fog-aware pathing |
wireguard |
🟢 |
| p0-45 |
✅ done |
P0 |
Turn processor consolidation — entities/ duplicate caused T1 SCRIPT ERROR halt |
shipwright |
🟢 |
| p1-01 |
✅ done |
P1 |
Diplomacy-lite — peace/war toggle plus one trade action |
shipwright |
🟢 |
| p1-02 |
✅ done |
P1 |
Strategic resource yields feed into production bonuses |
shipwright |
🟢 |
| p1-03 |
✅ done |
P1 |
First-run tutorial / onboarding overlay |
shipwright |
🟢 |
| p1-05 |
✅ done |
P1 |
Balance tuning — pop_peak ≥30 median, worker improvements ≥8 min |
shipwright |
🟢 |
| p1-05-followup-shipwright-batch |
🔴 stub |
P2 |
Shipwright autoplay-batch sign-off — luxury variance + personality win balance |
shipwright |
🟢 |
| p1-06 |
✅ done |
P1 |
Options screen polish |
shipwright |
🟢 |
| p1-07 |
✅ done |
P1 |
Chronicle notifications coverage |
shipwright |
🟢 |
| p1-08 |
✅ done |
P1 |
Victory/defeat screen content — recap, banner, replay seed |
shipwright |
🟢 |
| p1-09 |
✅ done |
P1 |
Determinism gate — same seed produces byte-identical runs |
testwright |
🟢 |
| p1-10 |
✅ done |
P1 |
Game setup UX — new-game dialog, difficulty, clan preview |
shipwright |
🟢 |
| p1-11 |
✅ done |
P1 |
Purge build output from src/ — wasm-pack moves to .local/build/wasm/ |
tourguide |
🟢 |
| p1-12 |
✅ done |
P1 |
Align every doc reference to the relocated wasm-pack output |
tourguide |
🟢 |
| p1-13 |
✅ done |
P1 |
Guide dev server boots on plum with zero-error route coverage |
tourguide |
🟢 |
| p1-14 |
⚫ oos |
P1 |
Gate Game 2/3/4 magic-school content behind EpisodeGate (future-game scope) |
— |
🟢 |
| p1-15 |
✅ done |
P1 |
Deploy dev guide to https://mc.next.black.lan |
tourguide |
🟢 |
| p1-16 |
✅ done |
P1 |
Purge Game 2/3 scope bleed from user-visible Game 1 guide copy |
tourguide |
🟢 |
| p1-17 |
✅ done |
P1 |
Forgejo workflow auto-deploys dev guide on push to main |
tourguide |
🟢 |
| p1-18 |
✅ done |
P1 |
Village discovery — world-map feedback (notification, reward popup, minimap ping) |
wireguard |
🟢 |
| p1-19 |
✅ done |
P1 |
Tutorial opt-in — HUD button, disappears after turn 5, starts from Step 1 |
wireguard |
🟢 |
| p1-20 |
✅ done |
P1 |
Unit action capability registry — one source of truth for "what can this unit do right now?" |
wireguard |
🟢 |
| p1-21 |
✅ done |
P1 |
Unit patrol orders — standing order to loop between waypoint tiles |
wireguard |
🟢 |
| p1-22 |
✅ done |
P1 |
MCTS per-decision wall-clock budget — bound per-turn cost on huge maps |
warcouncil |
🟢 |
| p1-22a |
✅ done |
P1 |
Huge-map AI quality — close the 4/10 → ≥5/10 decisive-game gate |
warcouncil |
🟢 |
| p1-23 |
✅ done |
P1 |
Restore StatsTracker — demographics overview broken in shipped builds |
shipwright |
🟢 |
| p1-24 |
✅ done |
P1 |
ai_personalities.json fails to load from packed builds (all platforms) — pass JSON contents not path |
shipwright |
🟢 |
| p1-25 |
✅ done |
P1 |
Eliminate parse-error spam in export logs (Unit dup decl + SaveManager stray) |
shipwright |
🟢 |
| p1-26 |
✅ done |
P1 |
Tile-placement UX with effect preview — Civ7-style \"where does this go and what changes\" |
shipwright |
🟢 |
| p1-27 |
✅ done |
P1 |
Extract GPU MCTS into a standalone service/client (model-boss-shaped, magic-civ-only) |
warcouncil |
🟢 |
| p1-27a |
✅ done |
P1 |
MCTS service telemetry + parity test + huge-map wiring |
warcouncil |
🟢 |
| p1-28 |
✅ done |
P1 |
Culture research tree — real graph, bridge, UI |
shipwright |
🟢 |
| p1-29c-followup-empty-params-json-regression |
✅ done |
P1 |
GdEconomy::process_turn fails — _build_params_json produces empty string for autoplay seeds |
shipwright |
🟢 |
| p1-29d-p1-survival |
🟡 partial |
P1 |
P1 (trailing AI) eliminated or stalled before T100 in 10/10 seeds — upstream of action priority |
warcouncil |
🟢 |
| p1-29h-stateful-tactical-decisiveness |
🟡 partial |
P1 |
Stateful tactical decisiveness — army target-lock + commitment hysteresis + press-on-capture in mc-ai |
warcouncil |
🟢 |
| p1-29i-refound-suppression |
🟡 partial |
P1 |
Refound-suppression / capture-stickiness lever — convert captures into eliminations |
warcouncil |
🟢 |
| p1-29j-autoplay-rust-action-application |
🔴 stub |
P1 |
Route autoplay action-application (city-founding / capture) through Rust mc_turn::processor |
warcouncil |
🟢 |
| p1-31 |
✅ done |
P1 |
Split bundled resources/buildings/<category>.json into per-file pattern matching resources/units/ |
— |
🟢 |
| p1-32 |
✅ done |
P1 |
Author the two missing food/processing buildings (sawmill, herbalist) |
— |
🟢 |
| p1-33 |
✅ done |
P1 |
Wire naval/aerial unit gates to the harbor and airfield buildings |
— |
🟢 |
| p1-34 |
✅ done |
P1 |
Unit metadata expansion — flavor, archetype, promotion_tree, clan_affinity fields |
shipwright |
🟢 |
| p1-35 |
✅ done |
P1 |
Per-unit lore paragraphs — historical/cultural context for the dwarven roster |
shipwright |
🟢 |
| p1-36 |
✅ done |
P1 |
AI personalities — T1–T10 build order coverage + clan_affinity routing |
warcouncil |
🟢 |
| p1-37 |
✅ done |
P1 |
mc-ai clan_affinity routing — Rust AI reads unit clan_affinity at build-decision time |
warcouncil |
🟢 |
| p1-38 |
✅ done |
P1 |
Biome → economy coupling — population & luxury driven by live ecology |
shipwright |
🟢 |
| p1-38-followup-shipwright-batch |
🔴 stub |
P2 |
p1-38 follow-up — Shipwright coupled-mode 10-seed regression batch + sign-off |
shipwright |
🟢 |
| p1-40 |
✅ done |
P1 |
Collapse data// override layer into single source of truth at resources/ |
— |
🟢 |
| p1-41 |
✅ done |
P1 |
Game-pack subscription manifest + loader filter (Phase B of resources/ unification) |
— |
🟢 |
| p1-42 |
✅ done |
P1 |
AI must consider the full 155-building catalog, not the hardcoded 8-id ladder |
— |
🟢 |
| p1-42a |
✅ done |
P2 |
Reconcile capture_scoring.rs ↔ PersonalityPriors — building_priors field location |
warcouncil |
🟢 |
| p1-42b |
✅ done |
P2 |
Plumb per-personality building_category_weights + wonder_priorities through mc-turn PlayerState + GDScript bridge |
warcouncil |
🟢 |
| p1-43 |
✅ done |
P1 |
Building stacking — per-category upgrade chains (military / science / culture / production / etc.) |
— |
🟢 |
| p1-43b |
✅ done |
P1 |
Deep chain authoring — fill T6/T7/T8/T9/T10 building tiers across the 5 short chains |
— |
🟢 |
| p1-43c |
✅ done |
P1 |
p1-43 follow-ups — chain ladder authoring, AI stack scoring, city UI upgrade surface, GUT bridge test |
— |
🟢 |
| p1-43c-gdext-upgrade-target |
✅ done |
P1 |
api-gdext bridge — GdBuildingRegistry::get_upgrade_target for city UI upgrade surface |
— |
🟢 |
| p1-44 |
✅ done |
P1 |
Buildings produce units, not the city center — per-building production queues |
— |
🟢 |
| p1-44c |
✅ done |
P1 |
p1-44 follow-ups — UI, AI per-building emission, themed roster, GUT, batch |
— |
🟢 |
| p1-46 |
✅ done |
P1 |
Terrain Dimensions Lab — fix ridginess, bind 149 flora species, add Whittaker plot |
terraformer |
🟢 |
| p1-47 |
✅ done |
P1 |
River hydrology — D6 flow analysis, hydraulic erosion, multi-hex lakes, cross-tile rivers |
terraformer |
🟢 |
| p1-48 |
✅ done |
P1 |
Flora species renderer — bind 149 species to world-map tile rendering (single source of truth) |
terraformer |
🟢 |
| p1-49 |
✅ done |
P1 |
Fauna species renderer — 61 Game-1 species visible on encounter and lair tiles |
terraformer |
🟢 |
| p1-50 |
✅ done |
P1 |
Tectonic prepass — voronoi plates + boundary classification seeding elevation |
terraformer |
🟢 |
| p1-51 |
✅ done |
P1 |
Worldgen canonical design docs — author the spec before any Rust |
terraformer |
🟢 |
| p1-52 |
✅ done |
P1 |
api-wasm build fix — unblock WASM bundle for design-lab WASM consumption |
terraformer |
🟢 |
| p1-53 |
✅ done |
P1 |
Worldgen layer pages — one playground per canonical doc, mirroring the layered Earth model |
terraformer |
🟢 |
| p1-54 |
✅ done |
P1 |
Hex direction-index translation — Rust pointy-top axial vs design-app flat-top canvas |
terraformer |
🟢 |
| p1-55 |
✅ done |
P1 |
Tech & Culture domain field — propagate categorization through Rust, Godot UI, and player analysis |
simulator-infra |
🟢 |
| p1-56 |
✅ done |
P1 |
Civics buildings, Great Works, Specialists, Great People — wire authored data into Rust + Godot |
simulator-infra |
🟢 |
| p1-57 |
✅ done |
P1 |
Diplomacy: tribute, treaty lifecycle, magical-terrain episode gating |
envoy |
🟢 |
| p1-58 |
✅ done |
P1 |
Ecology cognition: terrain affinity, food web, grudge memory, apex tier-10 fauna/flora |
simulator-infra |
🟢 |
| p1-59 |
✅ done |
P1 |
Hybrid merged structures — war_academy, assault_citadel, cavalry_corps, gunnery_corps |
— |
🟢 |
| p1-60 |
✅ done |
P1 |
Fog-of-war end-to-end test coverage + AI fairness fix |
simulator-infra |
🟢 |
| p1-61 |
✅ done |
P1 |
Ecology content gap fill: sparse biomes + lineage tier holes (P1 actions from ecology-audit-gaps.md) |
terraformer |
🟢 |
| p2-01 |
✅ done |
P2 |
Minimap — fog reflection and unit markers |
shipwright |
🟢 |
| p2-02 |
✅ done |
P2 |
Tooltips on all HUD elements |
shipwright |
🟢 |
| p2-03 |
✅ done |
P2 |
Hotkey cheat sheet (F1 / ?) |
shipwright |
🟢 |
| p2-04 |
✅ done |
P2 |
Localization audit — no hardcoded strings |
shipwright |
🟢 |
| p2-05 |
✅ done |
P2 |
Sub-second single-player turn latency |
— |
🟢 |
| p2-06 |
✅ done |
P1 |
Export pipeline for Windows / macOS / Linux |
shipwright |
🟢 |
| p2-06b |
✅ done |
P2 |
Cross-compile Windows .exe + .dll from Linux via cargo-xwin (no Windows host) |
shipwright |
🟢 |
| p2-07 |
✅ done |
P2 |
Credits screen accessible from main menu |
shipwright |
🟢 |
| p2-08 |
✅ done |
P2 |
Accessibility baseline — colorblind palette + keyboard navigation |
shipwright |
🟢 |
| p2-09 |
✅ done |
P2 |
Player guide web app — builds clean from source |
— |
🟢 |
| p2-10 |
✅ done |
P2 |
Automated regression CI gate on every push to main |
testwright |
🟢 |
| p2-10a |
✅ done |
P2 |
CI: gdlint stage un-gated |
testwright |
🟢 |
| p2-10b |
✅ done |
P2 |
CI: headless GUT stage un-gated |
testwright |
🟢 |
| p2-10c |
✅ done |
P2 |
Diplomacy: implement _collect_unique_luxury_ids() in happiness.gd |
— |
🟢 |
| p2-10d |
✅ done |
P2 |
Data: strip legacy flags/can_found_city/can_build_improvements from unit JSON |
— |
🟢 |
| p2-10e |
✅ done |
P2 |
Data: resolve duplicate IDs and dangling unlock refs in game data |
— |
🟢 |
| p2-10f |
✅ done |
P2 |
SaveManager: fix typed array property assignment on Player/Unit deserialization |
— |
🟢 |
| p2-10g |
✅ done |
P2 |
CityBridge: add production_cost field to items JSON fixture |
— |
🟢 |
| p2-10h |
✅ done |
P2 |
UnitRenderer: implement _build_sprite_key() helper and fix cache key test |
— |
🟢 |
| p2-10i |
✅ done |
P2 |
TileTooltip: fix scene node name mismatches and collectibles text formatting |
— |
🟢 |
| p2-10j |
✅ done |
P2 |
FogOfWar: fix recalculate_vision to not re-reveal already-seen tiles on move |
— |
🟢 |
| p2-10k |
✅ done |
P2 |
CI: fix 51 gdlint violations so Stage 3 is hard-green |
testwright |
🟢 |
| p2-10k-followup |
🔴 stub |
P2 |
Workflow policy decision: how to clear the 10 max-file-lines gdlint violations |
testwright |
🟢 |
| p2-10l |
✅ done |
P2 |
CI: fix 15 GUT regressions so Stage 5 is hard-green |
testwright |
🟢 |
| p2-10l-followup-gdai-set-map |
✅ done |
P2 |
GdAiController::set_map — wire map into tactical state_json |
simulator-infra |
🟢 |
| p2-10l-followup-update-tile-negative-axial |
✅ done |
P2 |
GdAiController::update_tile rejects negative axial coordinates |
simulator-infra |
🟢 |
| p2-11 |
✅ done |
P2 |
Version string + About screen |
shipwright |
🟢 |
| p2-11a |
✅ done |
P2 |
SaveManager: add Unit.serialize/deserialize and City.production_queue serialize path |
— |
🟢 |
| p2-12 |
✅ done |
P2 |
Install weston on apricot RUN host — unblock display-server smoke tests |
shipwright |
🟢 |
| p2-16 |
🟡 partial |
P1 |
Audio assets — in-theme OSS launch pack + source ledger |
asset-audio |
🟢 |
| p2-18 |
🟡 partial |
P2 |
Guide web app — public hosting + deploy pipeline |
— |
🟢 |
| p2-19 |
✅ done |
P2 |
Guide progress report page — dynamic dashboard + missing assets |
— |
🟢 |
| p2-20 |
✅ done |
P2 |
Fix simCachePlugin pre-warm worker — tsx can't resolve @magic-civ/physics-rs through pnpm symlink |
tourguide |
🟢 |
| p2-21 |
✅ done |
P2 |
Bake pre-computed sim-cache frames into the static build |
tourguide |
🟢 |
| p2-22 |
✅ done |
P1 |
Sprite generation pipeline — runnable end-to-end |
asset-sprite |
🟢 |
| p2-23 |
🟡 partial |
P1 |
Unit sprites — Dwarf-racial roster (m/f variants) |
asset-sprite |
🟢 |
| p2-24 |
🟡 partial |
P1 |
Unit sprites — wild creatures & fauna (generic, no race/sex) |
asset-sprite |
🟢 |
| p2-25 |
🟡 partial |
P1 |
Building sprites — base game coverage (non-wonder) |
asset-sprite |
🟢 |
| p2-26 |
🟡 partial |
P1 |
Mundane-wonder sprites — 24 distinct, higher-fidelity art |
asset-sprite |
🟢 |
| p2-27 |
🟡 partial |
P1 |
City population-tier sprites — city_q1 through city_q5 |
asset-sprite |
🟢 |
| p2-28 |
✅ done |
P1 |
Sprite provenance ledger — LICENSES.md per-file attribution |
asset-sprite |
🟢 |
| p2-29 |
✅ done |
P2 |
Welcome modal + HomePage lore + guide theme align to the player's chosen race/gender |
tourguide |
🟢 |
| p2-30 |
✅ done |
P2 |
Consolidate duplicate page styled-components into shared PagePrimitives |
tourguide |
🟢 |
| p2-31 |
✅ done |
P2 |
Migrate guide filter + tab state from useState to URL search params |
tourguide |
🟢 |
| p2-32 |
✅ done |
P2 |
Replace hardcoded page enums with JSON data reads |
tourguide |
🟢 |
| p2-33 |
✅ done |
P1 |
Sound system extension — categorical fallback, variant pools, per-entity routing |
asset-audio |
🟢 |
| p2-35 |
✅ done |
P2 |
Palace evolution system — longhouse → great_hall → citadel → grand_citadel + function-shedding |
— |
🟢 |
| p2-36 |
✅ done |
P2 |
Reconcile the 14 building IDs defined in both resources/buildings/ and data/buildings/ |
— |
🟢 |
| p2-37 |
✅ done |
P2 |
React calculator UI — surface flavor, lore, clan_affinity, archetype filter |
tourguide |
🟢 |
| p2-38 |
✅ done |
P2 |
Unit audio_cues stub strings — selection/move/attack lines for the dwarven roster |
asset-audio |
🟢 |
| p2-39 |
✅ done |
P2 |
Resolve chronicle_hall phantom unlock in chronicle_keeping culture tech |
— |
🟢 |
| p2-43 |
✅ done |
P2 |
Culture research live-game pipeline — per-turn GDExt bridge + culture_researched emit |
— |
🟢 |
| p2-43a |
✅ done |
P3 |
Rail-1 port — _pick_culture_tradition → mc-ai::tactical::culture_pick |
— |
🟢 |
| p2-43a-followup-gdscript-delegation |
✅ done |
P3 |
Shared infra — wire GdAiController into auto_play.gd so Rail-1 bridges can be one-liners |
— |
🟢 |
| p2-44 |
✅ done |
P2 |
AI promotion selection — auto-pick + emit unit_promoted for AI units |
— |
🟢 |
| p2-44a |
✅ done |
P2 |
DataLoader path mismatch — get_promotion(\"trees\") returns empty |
unassigned |
🟢 |
| p2-44b |
✅ done |
P2 |
AI promotion dispatch — instrumentation pass to identify the silent gate |
unassigned |
🟢 |
| p2-45 |
✅ done |
P2 |
Player elimination reconciliation — emit player_eliminated on every transition |
— |
🟢 |
| p2-46 |
✅ done |
P2 |
Past-games archive & replay viewer — mc-replay crate, on-disk archive, projection-based playback |
shipwright |
🟢 |
| p2-47 |
🟡 partial |
P2 |
In-game statistics screens — Civ-style 5-tab modal (Demographics / Graphs / Rankings / Replay / Histories) |
shipwright |
🟢 |
| p2-48 |
🟡 partial |
P2 |
End-of-game summary screen — outcome banner, standings, score graph, awards, timeline, footer actions |
shipwright |
🟢 |
| p2-48a |
✅ done |
P2 |
End-of-game summary — GUT tests + headless proof scene |
shipwright |
🟢 |
| p2-49 |
✅ done |
P2 |
Climate axes refactor — latitude + continentality + zonal winds as first-class per-hex inputs |
terraformer |
🟢 |
| p2-50 |
✅ done |
P2 |
Deterministic RNG + seed-derivation pin across mc-mapgen / mc-climate / mc-ecology |
terraformer |
🟢 |
| p2-51 |
✅ done |
P2 |
Player-facing world-shape parameters on new-game screen |
terraformer |
🟢 |
| p2-52 |
✅ done |
P2 |
Split terrain enum into substrate × flora-cover layers (resolve biome ontology) |
terraformer |
🟢 |
| p2-53 |
✅ done |
P2 |
Action vocabulary — gap analysis between design page and shipped Rust/Godot game |
wireguard |
🟢 |
| p2-53a |
✅ done |
P2 |
Sentry/Guard ActionKind — add Sentry/Unsentry to mc-core with wake-on-vision |
wireguard |
🟢 |
| p2-53a1 |
✅ done |
P2 |
Sentry bridge state pipe — extend GdUnitActions signature to pass is_sentrying |
simulator-infra |
🟢 |
| p2-53b |
✅ done |
P2 |
Building action registry — BuildingActionKind, building_actions.json, GdBuildingActions bridge |
simulator-infra |
🟢 |
| p2-53c |
✅ done |
P2 |
Rally vocabulary expansion — Hold / Fortify / JoinFormation + two-waypoint Patrol |
shipwright |
🟢 |
| p2-53d |
✅ done |
P2 |
Building specifics — Garrison, Repair, Toggle Active + 18 archetype-specific actions |
shipwright |
🟢 |
| p2-53e |
✅ done |
P2 |
Siege handlers (Pack/Deploy/Bombard) + Pillage UI wiring + Embark/Disembark handlers |
combat-dev |
🟢 |
| p2-53f |
✅ done |
P2 |
Infantry specifics — Shield Wall, Brace, Shove, Rage, Cleave, War Cry |
combat-dev |
🟢 |
| p2-53g |
✅ done |
P2 |
Ranged specifics — Volley, Aimed Shot, Fire Arrows |
combat-dev |
🟢 |
| p2-53h |
✅ done |
P2 |
Cavalry specifics — Charge, Pursue, Wheel |
combat-dev |
🟢 |
| p2-53i |
✅ done |
P2 |
Support specifics — Engineer, Pioneer, Medic, Scout |
shipwright |
🟢 |
| p2-54 |
✅ done |
P2 |
Resource visibility — three-axis (visibility/yield_gate/improvement_gate) refactor |
terraformer |
🟢 |
| p2-54a |
✅ done |
P2 |
Migrate deposits/*.json to three-axis visibility schema |
terraformer |
🟢 |
| p2-54b |
✅ done |
P2 |
Per-player tile observation cache — flora/fauna last-observed state |
terraformer |
🟢 |
| p2-54c |
✅ done |
P2 |
Renderer reads observations + indicator decorations for tech-gated resources |
terraformer |
🟢 |
| p2-54d |
✅ done |
P2 |
AI tech-priority bias from visible-but-gated luxuries + indicator decorations |
terraformer |
🟢 |
| p2-55 |
✅ done |
P2 |
Civilian Capture / Destroy / Ransom |
combat-dev |
🟢 |
| p2-55a |
✅ done |
P2 |
Engineer (Great Person) capture mechanics |
combat-dev |
🟢 |
| p2-55b |
✅ done |
P2 |
Caravan master capture mechanics |
combat-dev |
🟢 |
| p2-55c |
⚫ oos |
P2 |
Freepeople capture mechanics |
combat-dev |
🟢 |
| p2-55d |
✅ done |
P2 |
AI ransom accept/refuse hook in mc-turn start-of-turn |
— |
🟢 |
| p2-55e |
✅ done |
P2 |
UnitRansomAccepted / UnitRansomExpired events on TurnResult |
— |
🟢 |
| p2-55f |
✅ done |
P3 |
Read ransom_offer_duration_turns from combat_balance.json |
— |
🟢 |
| p2-56 |
✅ done |
P2 |
Worker categories (Sustenance/Construction/Wealth) + 5-tier expertise + Master/Grandmaster auras + idle decay |
unassigned |
🟢 |
| p2-56a |
✅ done |
P2 |
Worker category types — Sustenance / Construction / Wealth taxonomy |
unassigned |
🟢 |
| p2-56b |
✅ done |
P2 |
Expertise tier progression — 5-tier specialist XP ladder |
simulator-infra |
🟢 |
| p2-56c |
✅ done |
P2 |
Master / Grandmaster auras — adjacent-slot yield propagation |
unassigned |
🟢 |
| p2-57 |
✅ done |
P2 |
Production-chain typed resources — raw → processed pipelines wired into mc-city |
unassigned |
🟢 |
| p2-57a |
✅ done |
P2 |
Typed resource stockpile — raw vs processed taxonomy |
unassigned |
🟢 |
| p2-57b |
🟡 partial |
P2 |
Building consume/produce edges — stockpile coupled to unit quality |
unassigned |
🟢 |
| p2-57c-mc-units-quality-consumer |
🟡 partial |
P2 |
mc-units quality consumer — turn QualityTier into unit stat deltas (gives quality_chain a contract) |
simulator-infra |
🟢 |
| p2-58 |
✅ done |
P2 |
Ambient encounter rolls per tile moved — fauna_density × ecology_tier |
unassigned |
🟢 |
| p2-58a |
✅ done |
P2 |
TileState fauna fields — fauna_density + fauna_index for AmbientTileCtx |
shipwright |
🟢 |
| p2-58b |
✅ done |
P2 |
Ambient encounter hook — mc-turn::movement calls roll_ambient_encounter per tile step |
unassigned |
🟢 |
| p2-59 |
✅ done |
P2 |
Pioneer escort mechanic — protection rules vs ambient encounters |
combat-dev |
🟢 |
| p2-60 |
✅ done |
P2 |
Weather / observation lens switcher in the Godot HUD |
wireguard |
🟢 |
| p2-61 |
✅ done |
P2 |
Bind mc-observation gate_bits to player tech state — recording gates per-field |
simulator-infra |
🟢 |
| p2-62 |
✅ done |
P2 |
Procedural unit/building renderer — alpha-only visual substitute |
asset-sprite |
🟢 |
| p2-63 |
✅ done |
P2 |
mc-flora generation: migrate biome filter to substrate_climate-aware path |
simulator-infra |
🟢 |
| p2-64 |
✅ done |
P2 |
Apricot async batch protocol — launch / status / fetch decoupling |
simulator-infra |
🟢 |
| p2-65 |
🟡 partial |
P2 |
Extract GameState and pending-queue data types into a dedicated mc-state crate |
simulator-infra |
🟢 |
| p2-66 |
✅ done |
P2 |
World-map visual proof scene that actually renders |
terraformer |
🟢 |
| p2-67 |
✅ done |
P2 |
Claude-driven player API — programmatic player + Agent-SDK adapter |
simulator-infra |
🟢 |
| p2-67-followup-legal-actions |
✅ done |
P2 |
PlayerView.legal_actions — populate full per-unit / per-city / empire-level legal-action enumerators |
simulator-infra |
🟢 |
| p2-67-followup-mcts-tactical-state-impl |
✅ done |
P2 |
TreeState impl for TacticalState — wire real MCTS into the AI decision path |
simulator-infra |
🟢 |
| p2-68 |
✅ done |
P2 |
mc-ai headless turn driver — GameState projector/applicator + run_ai_turn |
simulator-infra |
🟢 |
| p2-69 |
✅ done |
P2 |
Port GdMcTreeController to mc-player-api AI driver (DRY consolidation) |
simulator-infra |
🟢 |
| p2-70 |
✅ done |
P2 |
mc-vision — per-player tile visibility producer (Rust) |
simulator-infra |
🟢 |
| p2-71 |
✅ done |
P2 |
Bench projector enrichment — make MCTS see a real tactical surface |
simulator-infra |
🟢 |
| p2-71b |
✅ done |
P2 |
Militarist starter widening — add a settler/founder unit so FoundCity fires |
simulator-infra |
🟢 |
| p2-72 |
🔴 stub |
P2 |
GdPlayerApi → render bridge (visualise the API-held game world) |
simulator-infra |
🔒 p2-72a |
| p2-72-option-b |
✅ done |
P2 |
Option B render bridge — proof scene rehydrates GDScript from GdPlayerApi each turn |
simulator-infra |
🟢 |
| p2-72a |
🔴 stub |
P2 |
Make GdGameState the canonical render source |
simulator-infra |
🟢 |
| p2-72a-building-entity-port |
🟡 partial |
P2 |
Port NPC Building entity (lairs/villages/ruins) into Rust |
simulator-infra |
🟢 |
| p2-72a-pre-strip |
✅ done |
P2 |
Strip Game 2/3 magic/ascension/ley fields from Game 1 runtime |
simulator-infra |
🟢 |
| p2-72a-save-format-migration |
🟡 partial |
P2 |
Decouple save format from GDScript-class shape |
simulator-infra |
🔒 p2-72a-gdgamestate-canonical-render-source |
| p2-72b-promote-playerstate-cities-to-city |
✅ done |
P2 |
Parallel-field cities synthesis at Godot bridge (Option C) |
simulator-infra |
🟢 |
| p2-73-ui-theme-token-pipeline |
✅ done |
P2 |
UI theme pipeline — generate ui_theme.tres from design-tokens.json + apply globally |
wireguard |
🟢 |
| p2-74-ui-dehardcode-to-tokens |
🟡 partial |
P2 |
De-hardcode the Godot UI — route 45 scene scripts off raw Color() onto theme/tokens |
wireguard |
🟢 |
| p2-75 |
🟡 partial |
P2 |
Improvement-completion effects subsystem in Rust — move completion side-effects out of GDScript |
— |
🟢 |
| p2-76 |
✅ done |
P2 |
Bunker improvement — deposit-destroying fortified subterranean chamber |
— |
🟢 |
| p2-77 |
❌ missing |
P2 |
Deposit-destruction environmental taxonomy — destruction_effect classes + contamination engine |
— |
🟢 |
| p2-78 |
❌ missing |
P2 |
Runtime localized hydrology re-solve — in-game flow/basin-fill triggered by terraforming |
— |
🟢 |
| p2-79 |
❌ missing |
P2 |
Environmental cascade integration — bunker → dam → flood/parch → flora dieback → fauna migration |
— |
🔒 p2-80, p2-76, p2-77, p2-78, g2-07, g2-08, g2-10 |
| p2-80 |
✅ done |
P1 |
mc-worldsim orchestration crate — drive the existing worldsim engines in the playable turn |
— |
🟢 |
| p2-81 |
🟡 partial |
P2 |
Improvement effects authored-but-unwired — move moisture/wind/erosion/movement to Rust |
— |
🟢 |
| p2-82 |
✅ done |
P2 |
Climate-input save-fidelity — persist (or re-derive) worldgen-static grid inputs across save/load |
— |
🟢 |
| p2-85 |
🟡 partial |
P2 |
POI sprites + hover tooltips — lairs (and resources) legible on the map |
asset-sprite |
🟢 |
| p2-86 |
🟡 partial |
P2 |
Claude-player MCP — rendered driver mode (drive UI + capture screenshots) |
simulator-infra |
🟢 |
| p2-87-single-color-system-sot |
🟡 partial |
P2 |
Single game-wide colour system — one source of truth, layered tokens, every consumer derives from it |
wireguard |
🟢 |
| p3-01 |
✅ done |
P3 |
Courier-gated diplomacy — open borders + shared maps via tech-tiered courier units |
envoy |
🟢 |
| p3-03 |
✅ done |
P3 |
Courier route resolver — real hex pathfinding, per-tier movement, severable infrastructure |
envoy |
🟢 |
| p3-04 |
✅ done |
P3 |
Per-hex improvement layer in mc-core / mc-turn — anchor improvements at (col,row) |
envoy |
🟢 |
| p3-05a |
✅ done |
P3 |
Civic state wrapper — typed CivicState added to PlayerState |
unassigned |
🟢 |
| p3-05a-gdext-bridge |
✅ done |
P3 |
GDExt bridge for CivicState — GdPlayer::civic query surface |
warcouncil |
🟢 |
| p3-05b |
✅ done |
P3 |
Authority axis civics catalog |
unassigned |
🟢 |
| p3-05c |
✅ done |
P3 |
Labor axis civics catalog |
unassigned |
🟢 |
| p3-05d |
✅ done |
P3 |
Economy axis civics catalog |
unassigned |
🟢 |
| p3-05e |
✅ done |
P3 |
Civic modifier propagation — apply civic effects to per-city yields |
unassigned |
🟢 |
| p3-06 |
✅ done |
P3 |
Civic anarchy — 5-turn anarchy on axis switch |
unassigned |
🟢 |
| p3-07a |
✅ done |
P3 |
CV-of-wealth + Authority amplifier → inequality stat |
unassigned |
🟢 |
| p3-07b |
✅ done |
P3 |
Four damage channels — Land/Water/Magic/Air emission from inequality |
unassigned |
🟢 |
| p3-10a |
🟡 partial |
P3 |
Lair assault mode — enter-and-clear |
unassigned |
🟢 |
| p3-10b |
🟡 partial |
P3 |
Lair siege mode — multi-turn pressure from adjacent |
unassigned |
🔒 p3-10a |
| p3-10c |
✅ done |
P3 |
Lair raid mode — grab-and-exit |
combat-dev |
🟢 |
| p3-11 |
✅ done |
P3 |
Pioneer & Engineer action-point pool |
shipwright |
🟢 |
| p3-12 |
✅ done |
P3 |
Fauna combat stat derivation — regenerate from traits |
terraformer |
🟢 |
| p3-13a |
✅ done |
P3 |
Extend meteorological events — drought, flood, dust_storm |
unassigned |
🟢 |
| p3-13b |
✅ done |
P3 |
Geological events — earthquake, volcanic_eruption, landslide |
shipwright |
🟢 |
| p3-13c |
✅ done |
P3 |
Biological events — plague, bloom, migration_pulse |
unassigned |
🟢 |
| p3-13d |
✅ done |
P3 |
Anomalous events — aurora, fog_bank, thermal_anomaly |
unassigned |
🟢 |