From fe45592e32f3f557b7c289090f4ca617fade14e4 Mon Sep 17 00:00:00 2001 From: Natalie Date: Sun, 19 Apr 2026 18:04:47 -0700 Subject: [PATCH] =?UTF-8?q?fix(@projects/@magic-civilization):=20?= =?UTF-8?q?=F0=9F=90=9B=20update=20priority=20counts=20and=20stub=20counts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- .project/objectives/README.md | 8 ++++---- public/games/age-of-dwarves/data/objectives.json | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.project/objectives/README.md b/.project/objectives/README.md index 70de104a..4bdd5bec 100644 --- a/.project/objectives/README.md +++ b/.project/objectives/README.md @@ -15,10 +15,10 @@ | Priority | ✅ | 🟡 | 🔴 | ❌ | ⚫ | Total | |---|---|---|---|---|---|---| | **P0** | 33 | 6 | 0 | 0 | 0 | 39 | -| **P1** | 17 | 2 | 2 | 0 | 1 | 22 | +| **P1** | 18 | 2 | 1 | 0 | 1 | 22 | | **P2** | 14 | 5 | 0 | 8 | 0 | 27 | | **P3 (oos)** | 0 | 0 | 0 | 0 | 17 | 17 | -| **total** | **64** | **13** | **2** | **8** | **18** | **105** | +| **total** | **65** | **13** | **1** | **8** | **18** | **105** | @@ -30,7 +30,7 @@ | [warcouncil](../team-leads/warcouncil.md) | 5 | | [shipwright](../team-leads/shipwright.md) | 3 | | [testwright](../team-leads/testwright.md) | 2 | -| [wireguard](../team-leads/wireguard.md) | 2 | +| [wireguard](../team-leads/wireguard.md) | 1 | | [asset-audio](../team-leads/asset-audio.md) | 1 | @@ -102,7 +102,7 @@ | [p1-17](p1-17-guide-next-auto-deploy.md) | ✅ done | Forgejo workflow auto-deploys dev guide on push to main | [tourguide](../team-leads/tourguide.md) | 2026-04-18 | | [p1-18](p1-18-village-discovery-feedback.md) | ✅ done | Village discovery — world-map feedback (notification, reward popup, minimap ping) | [wireguard](../team-leads/wireguard.md) | 2026-04-19 | | [p1-19](p1-19-tutorial-opt-in.md) | ✅ done | Tutorial opt-in — HUD button, disappears after turn 5, starts from Step 1 | [wireguard](../team-leads/wireguard.md) | 2026-04-19 | -| [p1-20](p1-20-unit-action-capability-registry.md) | 🔴 stub | Unit action capability registry — one source of truth for "what can this unit do right now?" | [wireguard](../team-leads/wireguard.md) | 2026-04-18 | +| [p1-20](p1-20-unit-action-capability-registry.md) | ✅ done | Unit action capability registry — one source of truth for "what can this unit do right now?" | [wireguard](../team-leads/wireguard.md) | 2026-04-19 | | [p1-21](p1-21-unit-patrol-orders.md) | 🔴 stub | Unit patrol orders — standing order to loop between waypoint tiles | [wireguard](../team-leads/wireguard.md) | 2026-04-18 | ## P2 — Polish diff --git a/public/games/age-of-dwarves/data/objectives.json b/public/games/age-of-dwarves/data/objectives.json index 74311027..78969dcf 100644 --- a/public/games/age-of-dwarves/data/objectives.json +++ b/public/games/age-of-dwarves/data/objectives.json @@ -1,10 +1,10 @@ { - "generated_at": "2026-04-20T00:53:52Z", + "generated_at": "2026-04-20T00:59:45Z", "totals": { - "missing": 8, + "done": 65, "partial": 13, - "stub": 2, - "done": 64, + "missing": 8, + "stub": 1, "oos": 18, "total": 105 }, @@ -603,10 +603,10 @@ "id": "p1-20", "title": "Unit action capability registry — one source of truth for \"what can this unit do right now?\"", "priority": "p1", - "status": "stub", + "status": "done", "scope": "game1", "owner": "wireguard", - "updated_at": "2026-04-18", + "updated_at": "2026-04-19", "summary": "The game has no unified answer to *\"what actions can unit U take on turn T in\nstate S?\"* Today the unit panel (`unit_panel.gd:19-40`) hardcodes three\nbuttons — Fortify, Skip, Found City — and decides visibility with bespoke\nper-unit booleans scattered across the JSON (`can_found_city`,\n`can_build_improvements`, `flags: [\"ranged\"]`) and ad-hoc GDScript predicates\n(`is_civilian()`). Meanwhile `mc-ai/src/tactical/movement.rs` enumerates\nmoves and attacks but has no registry for non-motion actions. UI and AI have\nno shared truth.\n\nEvery future action — patrol (p1-21), siege pack/deploy, pillage, embark,\nbuild-road, heal, upgrade — compounds that debt by adding another hardcoded\nbutton plus its own scattered check. A siege engine in `packed` state can\nmove but not bombard; in `deployed` state can bombard but not move. Patrol\nhas the same shape (idle ↔ patrolling, with auto-cancel). Fortify has the\nsame shape. Without a registry, each state gate becomes a new bespoke flag.\n\nThis objective lands the foundation: a JSON-driven capability declaration,\na Rust `ActionKind` enum with a single `legal_actions(unit, state)` query,\nand a unit-panel refactor that renders buttons from that list. **Behavior\ndoes not change** — the three existing actions are folded in with no\nsemantic change. The payoff is every subsequent action objective (patrol,\nsiege, pillage, embark, ...) ships as one enum variant + one JSON keyword\nmapping + one handler, with no UI or AI scaffolding to re-invent." }, {