From aedb233173648c4e38bc3be3d0b6e672fc861a82 Mon Sep 17 00:00:00 2001 From: Natalie Date: Sat, 25 Apr 2026 18:54:32 -0700 Subject: [PATCH] =?UTF-8?q?fix(@projects/@magic-civilization):=20?= =?UTF-8?q?=F0=9F=90=9B=20update=20p1-24=20status=20to=20partial?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- .project/objectives/DASHBOARD_CATEGORIES.md | 2 +- .project/objectives/README.md | 6 +++--- .project/objectives/objectives.json | 8 ++++---- .project/objectives/p1-24-windows-path-separator.md | 12 +++++++----- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/.project/objectives/DASHBOARD_CATEGORIES.md b/.project/objectives/DASHBOARD_CATEGORIES.md index e8fb3612..458e0526 100644 --- a/.project/objectives/DASHBOARD_CATEGORIES.md +++ b/.project/objectives/DASHBOARD_CATEGORIES.md @@ -108,7 +108,7 @@ | [p1-21](p1-21-unit-patrol-orders.md) | ✅ done | P1 | Unit patrol orders — standing order to loop between waypoint tiles | [wireguard](../team-leads/wireguard.md) | 🟢 | | [p1-22](p1-22-mcts-wall-clock-budget.md) | 🟡 partial | P1 | MCTS per-decision wall-clock budget — bound per-turn cost on huge maps | [warcouncil](../team-leads/warcouncil.md) | 🟢 | | [p1-23](p1-23-stats-tracker-restore.md) | ✅ done | P1 | Restore StatsTracker — demographics overview broken in shipped builds | [shipwright](../team-leads/shipwright.md) | 🟢 | -| [p1-24](p1-24-windows-path-separator.md) | ❌ missing | P1 | ai_personalities.json fails to load from packed builds (all platforms) — pass JSON contents not path | [shipwright](../team-leads/shipwright.md) | 🟢 | +| [p1-24](p1-24-windows-path-separator.md) | 🟡 partial | P1 | ai_personalities.json fails to load from packed builds (all platforms) — pass JSON contents not path | [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 2a6263e9..b5fba0ff 100644 --- a/.project/objectives/README.md +++ b/.project/objectives/README.md @@ -15,10 +15,10 @@ | Priority | 🔵 | 🟡 | 🔴 | ❌ | ⚫ | ✅ | Total | |---|---|---|---|---|---|---|---| | **P0** | 0 | 3 | 0 | 1 | 0 | 39 | 43 | -| **P1** | 0 | 3 | 0 | 9 | 1 | 22 | 35 | +| **P1** | 0 | 4 | 0 | 8 | 1 | 22 | 35 | | **P2** | 0 | 4 | 0 | 1 | 0 | 17 | 22 | | **P3 (oos)** | 0 | 0 | 0 | 0 | 17 | 0 | 17 | -| **total** | **0** | **10** | **0** | **11** | **18** | **78** | **117** | +| **total** | **0** | **11** | **0** | **10** | **18** | **78** | **117** | @@ -50,7 +50,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-24](p1-24-windows-path-separator.md) | ❌ missing | ai_personalities.json fails to load from packed builds (all platforms) — pass JSON contents not path | — | [shipwright](../team-leads/shipwright.md) | 2026-04-25 | 🟢 unblocked | +| [p1-24](p1-24-windows-path-separator.md) | 🟡 partial | ai_personalities.json fails to load from packed builds (all platforms) — pass JSON contents not path | — | [shipwright](../team-leads/shipwright.md) | 2026-04-25 | 🟢 unblocked | | [p2-16](p2-16-audio-assets.md) | ❌ missing | Audio assets — SFX + music .ogg files shipped | — | [asset-audio](../team-leads/asset-audio.md) | 2026-04-17 | 🟢 unblocked | | [p2-22](p2-22-sprite-generation-pipeline.md) | ❌ missing | Sprite generation pipeline — runnable end-to-end | — | [asset-sprite](../team-leads/asset-sprite.md) | 2026-04-17 | 🟢 unblocked | | [p2-23](p2-23-unit-sprites-dwarf-roster.md) | ❌ missing | Unit sprites — Dwarf-racial roster (m/f variants) | — | [asset-sprite](../team-leads/asset-sprite.md) | 2026-04-17 | 🟢 unblocked | diff --git a/.project/objectives/objectives.json b/.project/objectives/objectives.json index a1cb5c8c..dce39f8c 100644 --- a/.project/objectives/objectives.json +++ b/.project/objectives/objectives.json @@ -1,11 +1,11 @@ { - "generated_at": "2026-04-26T01:42:26Z", + "generated_at": "2026-04-26T01:49:45Z", "totals": { "done": 78, "in_progress": 0, - "partial": 10, + "partial": 11, "stub": 0, - "missing": 11, + "missing": 10, "oos": 18, "total": 117 }, @@ -752,7 +752,7 @@ "id": "p1-24", "title": "ai_personalities.json fails to load from packed builds (all platforms) — pass JSON contents not path", "priority": "p1", - "status": "missing", + "status": "partial", "scope": "game1", "owner": "shipwright", "updated_at": "2026-04-25", diff --git a/.project/objectives/p1-24-windows-path-separator.md b/.project/objectives/p1-24-windows-path-separator.md index 22e5fbfd..e2df45be 100644 --- a/.project/objectives/p1-24-windows-path-separator.md +++ b/.project/objectives/p1-24-windows-path-separator.md @@ -2,7 +2,7 @@ id: p1-24 title: ai_personalities.json fails to load from packed builds (all platforms) — pass JSON contents not path priority: p1 -status: missing +status: partial scope: game1 owner: shipwright updated_at: 2026-04-25 @@ -35,10 +35,12 @@ Option 1 recommended. ## Acceptance -- ❌ Add `scoring_weights_for_clan_json(clan_id, personalities_json)` to `GdMcTreeController` (api-gdext/src/ai.rs) that takes the JSON string, deserializes via the existing `mc_ai::evaluator::PersonalityDef` parser, and returns the same `ScoringWeights` JSON output. Keep the path variant temporarily for tests but mark deprecated. -- ❌ `ai_turn_bridge.gd:79` reads the file via `FileAccess.get_file_as_string("res://public/games/age-of-dwarves/data/ai_personalities.json")` once per turn (cache to avoid re-read), passes the JSON to the new Rust entry. -- ❌ Audit other `data_dir`-style joins in `api-gdext/src/` for the same bug (every Rust call that receives a Godot-string path and reads files via std::fs is broken in packed builds). -- ❌ Re-run wine smoke against the fixed Windows .exe; expect zero `Path not found` errors for ai_personalities.json. Same check for macOS .app smoke. +- ✓ Added `ScoringWeights::from_personality_json(id, json_str)` in `mc-ai/src/evaluator.rs:148` (refactored existing `from_personality` to delegate). 16 evaluator unit tests still green on apricot. (2026-04-25) +- ✓ Added `scoring_weights_for_clan_json(clan_id, personalities_json)` to `GdMcTreeController` in `api-gdext/src/ai.rs`. Path-based variant retained but documented as deprecated for packed builds. (2026-04-25) +- ✓ `ai_turn_bridge.gd` reads `ai_personalities.json` via `FileAccess.get_file_as_string("res://public/games/age-of-dwarves/data/ai_personalities.json")` (cached as `_ai_personalities_json_cache` static var, read once per process), passes the JSON to the new Rust entry. (2026-04-25) +- ✓ Linux .so + Windows .dll rebuilt on apricot with the new APIs (1m44s + 1m14s respectively). (2026-04-25) +- ❌ Audit other `data_dir`-style joins in `api-gdext/src/` for the same bug (every Rust call that receives a Godot-string path and reads files via std::fs is broken in packed builds). Likely candidates: any `from_X(data_dir)` callsite. +- ❌ Re-run wine smoke against a fresh Windows export to confirm zero `Path not found` errors for ai_personalities.json. Currently blocked on apricot disk-full — `.local/iter/*` is 11GB across past evidence runs and the export-staging step needs ~5GB free. ## Caller chain to inspect