diff --git a/.project/objectives/DASHBOARD_CATEGORIES.md b/.project/objectives/DASHBOARD_CATEGORIES.md index c7d30085..ea278607 100644 --- a/.project/objectives/DASHBOARD_CATEGORIES.md +++ b/.project/objectives/DASHBOARD_CATEGORIES.md @@ -41,6 +41,8 @@ | [g5-02](g5-02-flugel-oos.md) | ⚫ oos | P3 | FlΓΌgel playable species β€” Game 5 (Age of Ascension) | β€” | 🟒 | | [g5-03](g5-03-gith-oos.md) | ⚫ oos | P3 | Gith playable species (Githyanki + Githzerai) β€” Game 5 (Age of Ascension) | β€” | 🟒 | | [g5-04](g5-04-demonia-oos.md) | ⚫ oos | P3 | Demonia playable species β€” Game 5 (Age of Ascension) | β€” | 🟒 | +| [g6-01](g6-01-naval-combat-oos.md) | ⚫ oos | P3 | Naval combat β€” out-of-scope (post-v10) | β€” | 🟒 | +| [g6-02](g6-02-caravan-trade-routes-oos.md) | ⚫ oos | P3 | Caravan trade routes β€” out-of-scope (post-v10) | β€” | 🟒 | | [p0-01](p0-01-mcts-wiring.md) | 🟑 partial | P0 | Wire MCTS into gameplay AI | [warcouncil](../team-leads/warcouncil.md) | 🟒 | | [p0-02](p0-02-clan-personalities.md) | βœ… done | P0 | Five AI clan personalities drive distinct playstyles | [warcouncil](../team-leads/warcouncil.md) | 🟒 | | [p0-03](p0-03-pvp-in-turn.md) | βœ… done | P0 | PvP combat resolved inside the authoritative turn processor | β€” | 🟒 | @@ -112,7 +114,7 @@ | [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) | ❌ missing | 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-28](p1-28-culture-research-tree.md) | πŸ”΅ in_progress | P1 | Culture research tree β€” real graph, bridge, UI | [shipwright](../team-leads/shipwright.md) | 🟒 | +| [p1-28](p1-28-culture-research-tree.md) | 🟑 partial | P1 | Culture research tree β€” real graph, bridge, UI | [shipwright](../team-leads/shipwright.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) | 🟒 | diff --git a/.project/objectives/README.md b/.project/objectives/README.md index 97990234..0061b003 100644 --- a/.project/objectives/README.md +++ b/.project/objectives/README.md @@ -15,10 +15,10 @@ | Priority | πŸ”΅ | 🟑 | πŸ”΄ | ❌ | ⚫ | βœ… | Total | |---|---|---|---|---|---|---|---| | **P0** | 0 | 1 | 0 | 0 | 0 | 42 | 43 | -| **P1** | 1 | 4 | 0 | 8 | 1 | 25 | 39 | +| **P1** | 0 | 5 | 0 | 8 | 1 | 25 | 39 | | **P2** | 0 | 2 | 8 | 0 | 0 | 20 | 30 | -| **P3 (oos)** | 0 | 0 | 0 | 1 | 17 | 0 | 18 | -| **total** | **1** | **7** | **8** | **9** | **18** | **87** | **130** | +| **P3 (oos)** | 0 | 0 | 0 | 1 | 19 | 0 | 20 | +| **total** | **0** | **8** | **8** | **9** | **20** | **87** | **132** | @@ -35,16 +35,6 @@ -## πŸ”΅ In Progress - -> Actively claimed by a team lead. Grouped by owner. - -### [shipwright](../team-leads/shipwright.md) - -| ID | Priority | Title | Updated | Blocked | -|---|---|---|---|---| -| [p1-28](p1-28-culture-research-tree.md) | P1 | Culture research tree β€” real graph, bridge, UI | 2026-04-26 | 🟒 unblocked | - ## P0 β€” Blockers | ID | Status | Title | Tags | Owner | Updated | Blocked | @@ -58,6 +48,7 @@ | [p0-20](p0-20-gpu-mcts-rollouts.md) | 🟑 partial | GPU-accelerated MCTS rollouts for look-ahead decision-making | β€” | [warcouncil](../team-leads/warcouncil.md) | 2026-04-19 | 🟒 unblocked | | [p1-05](p1-05-balance-tuning.md) | 🟑 partial | Balance tuning β€” pop_peak β‰₯30 median, worker improvements β‰₯8 min | β€” | [shipwright](../team-leads/shipwright.md) | 2026-04-25 | 🟒 unblocked | | [p1-22](p1-22-mcts-wall-clock-budget.md) | 🟑 partial | MCTS per-decision wall-clock budget β€” bound per-turn cost on huge maps | β€” | [warcouncil](../team-leads/warcouncil.md) | 2026-04-25 | 🟒 unblocked | +| [p1-28](p1-28-culture-research-tree.md) | 🟑 partial | Culture research tree β€” real graph, bridge, UI | β€” | [shipwright](../team-leads/shipwright.md) | 2026-04-26 | 🟒 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-26](p1-26-tile-placement-preview-ux.md) | ❌ missing | Tile-placement UX with effect preview β€” Civ7-style "where does this go and what changes" | β€” | [shipwright](../team-leads/shipwright.md) | 2026-04-25 | 🟒 unblocked | | [p1-27](p1-27-mcts-service-extraction.md) | ❌ missing | Extract GPU MCTS into a standalone service/client (model-boss-shaped, magic-civ-only) | β€” | [warcouncil](../team-leads/warcouncil.md) | 2026-04-25 | 🟒 unblocked | @@ -107,6 +98,8 @@ | [g5-02](g5-02-flugel-oos.md) | ⚫ oos | FlΓΌgel playable species β€” Game 5 (Age of Ascension) | β€” | β€” | 2026-04-17 | 🟒 unblocked | | [g5-03](g5-03-gith-oos.md) | ⚫ oos | Gith playable species (Githyanki + Githzerai) β€” Game 5 (Age of Ascension) | β€” | β€” | 2026-04-17 | 🟒 unblocked | | [g5-04](g5-04-demonia-oos.md) | ⚫ oos | Demonia playable species β€” Game 5 (Age of Ascension) | β€” | β€” | 2026-04-17 | 🟒 unblocked | +| [g6-01](g6-01-naval-combat-oos.md) | ⚫ oos | Naval combat β€” out-of-scope (post-v10) | β€” | β€” | 2026-04-26 | 🟒 unblocked | +| [g6-02](g6-02-caravan-trade-routes-oos.md) | ⚫ oos | Caravan trade routes β€” out-of-scope (post-v10) | β€” | β€” | 2026-04-26 | 🟒 unblocked | ## Superseded diff --git a/.project/objectives/g6-01-naval-combat-oos.md b/.project/objectives/g6-01-naval-combat-oos.md new file mode 100644 index 00000000..2f94ea5d --- /dev/null +++ b/.project/objectives/g6-01-naval-combat-oos.md @@ -0,0 +1,36 @@ +--- +id: g6-01 +title: Naval combat β€” out-of-scope (post-v10) +priority: p3 +status: oos +scope: post-v10 +owner: +updated_at: 2026-04-26 +evidence: [] +--- + +> **Out of scope for Game 1 "Age of Dwarves" and the planned Game 2-5 cycle.** Per `public/games/age-of-dwarves/data/shipping-roadmap.json`, naval combat is in the **post-v10** bucket alongside the Ethereal Plane, caravan trade routes, map editor, and mod support. Dwarves are mountain-dwelling; ships are not narratively core to Game 1's experience. Tracking here so the roadmap entry has a corresponding objective ID. + +## Summary + +Hex-based naval combat β€” water-tile movement for ships, ship unit types (transport / warship / etc.), naval-vs-naval and naval-vs-coastal-city combat, harbor / port buildings, sea-region map topology where applicable. + +## Acceptance + +- ❌ Ship unit types in `public/games//data/units/` with `domain: "water"` (or new domain) and naval-only stats / promotions. +- ❌ Water-tile pathfinding in `mc-mapgen` / `mc-turn` honoring coast, deep-water, and impassable land/water transitions. +- ❌ Naval-vs-naval combat resolution in `mc-combat` (deck-to-deck volley + boarding distinct from land hex combat). +- ❌ Coastal-city bombardment and amphibious assault (transport unloads land troops onto a coastal hex). +- ❌ Harbor / shipyard buildings (production gate for ships, +trade for adjacency). +- ❌ Map topology variants supporting meaningful naval play (archipelago / continents / island maps). + +## Why post-v10 (not Game 1-5) + +- Game 1 (Dwarves): mountain-dwelling race, pangaea / continental landmass play. No naval need. +- Games 2-5: each already scoped around specific systems (leylines, Archons, psionics, ascended species). No naval slot reserved. +- Post-v10: roadmap pairs naval with map editor + mod support + Ethereal Plane β€” the "engine completes its surface" phase, not the "ship ten races" phase. + +## Non-goals + +- Submarine / aerial-naval hybrid mechanics (separate scope if relevant to post-v10 race work). +- Procedural sea-monster encounters (would belong to whichever game's bestiary, not this objective). diff --git a/.project/objectives/g6-02-caravan-trade-routes-oos.md b/.project/objectives/g6-02-caravan-trade-routes-oos.md new file mode 100644 index 00000000..a12f3964 --- /dev/null +++ b/.project/objectives/g6-02-caravan-trade-routes-oos.md @@ -0,0 +1,37 @@ +--- +id: g6-02 +title: Caravan trade routes β€” out-of-scope (post-v10) +priority: p3 +status: oos +scope: post-v10 +owner: +updated_at: 2026-04-26 +evidence: [] +--- + +> **Out of scope for Game 1 "Age of Dwarves" and the planned Game 2-5 cycle.** Per `public/games/age-of-dwarves/data/shipping-roadmap.json`, caravan trade routes are in the **post-v10** bucket alongside naval combat (g6-01), the Ethereal Plane, map editor, and mod support. Game 1 ships peace/war + simple luxury-for-gold trade (p1-01 done); persistent unit-routed caravans are a separate, larger system. + +## Summary + +Persistent trade-route units (caravans, traders) that travel between owned cities OR between own-city and foreign-city, generate per-turn gold/resource yields tied to distance and city-pair characteristics, and can be plundered by enemy units. Distinct from p1-01's instantaneous luxury-for-gold trade modal. + +## Acceptance + +- ❌ Caravan unit type with movement, finite cargo capacity, and a route assignment from origin β†’ destination city. +- ❌ Per-turn trade yield computation in `mc-trade` based on route distance, city populations, road/river connections, and luxury parity between endpoints. +- ❌ Plunder mechanic: enemy military unit ending its turn on a caravan's hex captures cargo + interrupts the route. +- ❌ Route persistence across turns: the caravan auto-loops between endpoints, generating yield each cycle, until destroyed or reassigned. +- ❌ International routes (own-city ↔ foreign-city) gated by diplomatic state β€” peace required, war breaks the route, alliance gives bonus. +- ❌ UI: route-management panel showing all active routes, per-route yield, expected-arrival turns, and reassignment controls. +- ❌ Caravan sprite + roads-and-rivers visual feedback distinguishing trade-routed paths. + +## Relationship to existing trade + +- `p1-01` (Diplomacy-lite β€” peace/war + one trade action) is the Game 1 trade surface. Gold-for-luxury exchange is instantaneous, no unit involved. Caravans are the persistent / spatial trade upgrade. +- `mc-trade` already has `Relation::{Peace, War}` and `apply_trade_offer` β€” caravan routes layer on top, they don't replace. + +## Non-goals + +- Trade depots / warehouses as separate building types (could be a sub-feature of the harbor / city-improvement system if naval-coupled). +- Stock-market / commodity-pricing minigame (out-of-scope even post-v10 unless a specific economic-focused expansion is greenlit). +- Cross-game-world trade (any kind of inter-game economy is beyond the scope of any single game's design). diff --git a/.project/objectives/objectives.json b/.project/objectives/objectives.json index 392fe01d..5770a0d2 100644 --- a/.project/objectives/objectives.json +++ b/.project/objectives/objectives.json @@ -1,13 +1,13 @@ { - "generated_at": "2026-04-26T07:39:22Z", + "generated_at": "2026-04-26T08:14:51Z", "totals": { "done": 87, - "in_progress": 1, - "partial": 7, + "in_progress": 0, + "partial": 8, "stub": 8, "missing": 9, - "oos": 18, - "total": 130 + "oos": 20, + "total": 132 }, "objectives": [ { @@ -796,12 +796,12 @@ "id": "p1-28", "title": "Culture research tree β€” real graph, bridge, UI", "priority": "p1", - "status": "in_progress", + "status": "partial", "scope": "game1", "owner": "shipwright", "updated_at": "2026-04-26", "blocked_by": [], - "summary": "The culture data files (`public/games/age-of-dwarves/data/culture/manifest.json` β†’\n`public/resources/culture/*.json`) describe a six-pillar culture tree that\nmirrors the tech-tree shape: `id`, `name`, `pillar`, `era`, `tier`, `cost`,\n`requires`, `unlocks{…}`, `flavor`. The web guide already renders it via the\nshared `TechTreeGraph` component (`CultureTreePage.tsx`).\n\nInside the Godot game there is **no** culture-tree surface: no Rust research\ngraph, no GDExtension bridge, no GDScript wrapper, no scene, no per-turn\nresearch accumulator. The `CulturePool` only powers border expansion.\n\nThis objective ships the live culture-research path end-to-end so the player\ncan open a culture-tree screen identical in UX to the tech tree, pick a\ntradition, accumulate culture-research progress per turn, and unlock\nbuildings / wonders / lenses / mechanics on completion." + "summary": "The culture data files\n(`public/games/age-of-dwarves/data/culture/manifest.json` β†’\n`public/resources/culture/*.json`) describe a six-pillar culture tree that\nmirrors the tech-tree shape: `id`, `name`, `pillar`, `era`, `tier`, `cost`,\n`requires`, `unlocks{…}`, `flavor`. The web guide already renders it via the\nshared `TechTreeGraph` component (`CultureTreePage.tsx`).\n\nInside the Godot game there was no culture-tree surface: no Rust research\ngraph, no GDExtension bridge, no GDScript wrapper, no scene, no per-turn\nresearch accumulator. The `CulturePool` only powered border expansion.\n\nThis objective shipped the live culture-research path end-to-end so the\nplayer can open a culture-tree screen identical in UX to the tech tree,\npick a tradition, accumulate culture-research progress per turn, and unlock\nbuildings / wonders / lenses / mechanics on completion." }, { "id": "p2-06", @@ -1402,6 +1402,28 @@ "blocked_by": [], "summary": "Demonia (NGNL rank 11) are the demon species of the Ethereal Plane, aligned with Chaos school. Low-to-mid tier; they have no coherent belief system, making them the primary beachhead for Terran religious conversion β€” susceptible when isolated, violently opposed when organized. They are the \"wild card\" species of Game 5: unpredictable alliances, high aggression, and the most conventional military threat." }, + { + "id": "g6-01", + "title": "Naval combat β€” out-of-scope (post-v10)", + "priority": "p3", + "status": "oos", + "scope": "post-v10", + "owner": "", + "updated_at": "2026-04-26", + "blocked_by": [], + "summary": "Hex-based naval combat β€” water-tile movement for ships, ship unit types (transport / warship / etc.), naval-vs-naval and naval-vs-coastal-city combat, harbor / port buildings, sea-region map topology where applicable." + }, + { + "id": "g6-02", + "title": "Caravan trade routes β€” out-of-scope (post-v10)", + "priority": "p3", + "status": "oos", + "scope": "post-v10", + "owner": "", + "updated_at": "2026-04-26", + "blocked_by": [], + "summary": "Persistent trade-route units (caravans, traders) that travel between owned cities OR between own-city and foreign-city, generate per-turn gold/resource yields tied to distance and city-pair characteristics, and can be plundered by enemy units. Distinct from p1-01's instantaneous luxury-for-gold trade modal." + }, { "id": "p3-01", "title": "Courier-gated diplomacy β€” open borders + shared maps via tech-tiered courier units",