アップデート 2.160
2026/6/20
updateuiJARVIS-UI
フェーズ A–C: ModuleRegistry + Workspace Ready(§17)+ flyout-free Icon Rail(§16)(Jarvis-UI)。 レーン Jarvis-UI。MINOR。`docs/specs/EDITOR_UI_OVERHAUL_PLAN.md` §16–§17(Halysonの2026-06-20の判断)からフェーズA–Cを、`docs/ai/PROMPT_UI_GLM_REMAINING_BACKLOG_2026-06-20.md`に従って提供。スコープ: ナビゲーションアーキテクチャ + data-driven カタログ + アイコノグラフィ — writer/保存バイト/hook/FfxLib/RT0/RT2/SGM/SPIRA FORGE は 未変更;68個の `MenuItem_` ハンドラーは リファクタリングしていない(呼び出すだけ)。フェーズ A — ModuleRegistry(単一の正本): `ModuleCatalogPolicy.cs` はドキュメントのスタブから権威あるカタログへ進化 — `public static class ModuleRegistry` と、`IReadOnlyList<ModuleCatalogEntry> All` に 41エントリを登録(Home + Core Authoring 10 + Maps 5 + Live 7 + Extras 16 + Wave-1 2)、rail-routed モジュールごとに1つ。`ModuleCatalogEntry` は `Mode`/`Notes`/`Scope`/`Cluster`(`ModuleCluster` enum)を追加で持ち、元の `Id`/`Title`/`Description`/`IconKey`/`RequiresProject`の上に重ねた。コピーは各 `SetModule(...)` のリテラル(`Main_Window.axaml.cs` 内)に忠実(再発明していない)。Doc-comment ポリシー: 新しい rail-routed `MenuItem_` = レジストリに追加(レビューを阻む要因)。フェーズ A — アイコノグラフィ: `StudioIcons.axaml` は 14 → 54個のアイコンへ拡張(`<StreamGeometry>` Lucide-like、viewBox 24×24)— モジュールごとに専用のメタファー1つ(剣+角=モンスター、フロッピー=保存、ドクロ=敵デザイン、六角グリッド=スフィアグリッドなど)。A の整合性チェック(スクリプト)により、41個すべてのレジストリ `IconKey` が `StudioIcons` 内で解決することを確認。 フェーズ B — §17 Workspace Ready: `MainDashboard_Control.axaml` はハードコードされた6つのタイルを廃止し、`ItemsControl ItemsSource="{Binding Modules}"` と `DataTemplate`(アイコン + タイトル + 完全な説明 + モードピル)を備える。`Main_DataModel` は `public IReadOnlyList<ModuleCatalogEntry> Modules => ModuleRegistry.All` を獲得。`FFXProjectEditor/Converters/` に2つの新しいコンバーター: `IconKeyToGeometryConverter`(文字列 IconKey を、`Resources` + `MergedDictionaries` を `TryGetResource(key, ActualThemeVariant, out _)` 経由でたどって Geometry に解決 — Avaloniaでは `{DynamicResource {Binding IconKey}}` バインディングが `PathIcon.Data` に対して機能しないため必要)と `RequiresProjectEnabledConverter`(`IMultiValueConverter` RequiresProject × IsProjectLoaded → `IsEnabled`)。Hero + empty-state CTA + Workspaceステータスカードは維持(§17.4)。フェーズ C — §16 flyout-free Icon Rail: 5つの `Button.Flyout`/`MenuFlyout` を `IconRailCol`(XAML L156–239)から削除 — `<StackPanel Name="RailStack">` に置き換え、code-behind で `BuildIconRail()` により設定(エントリごとに1つの `railIcon` ボタン、クラスター単位でまとめ、区切りとして1pxの `Border`)。`Popup#RailDrawer`(narrow)はテキストの `Button Classes="nav"` リストを `<WrapPanel Name="RailDrawerGrid">`(アイコングリッド)に交換。A の単一ハンドラー `Button_RailModule_Click(sender, e)` は `Tag=Id` → `Dispatch(id)` を読み取る。`RefreshRailProjectGates()` は `RequiresProject` ゲートを `Project_Service.IsProjectLoaded` が変わったときに re-applies する。フェーズ C — 汎用Dispatch: `OnQuickLaunchRequested`(ハードコードされた6キー: monster/kernel/sphere/save/extras/home)を `Dispatch(string moduleId)`(全41 Idを既存の `MenuItem_` ハンドラーへ切り替える)に置き換え。Rail、drawer、dashboardが同じ経路を共有。受け入れ条件: Release build 0 errors(既存の警告402件);`MenuFlyout` は `IconRailCol` 内で0;dashboardにハードコードされたタイルは0;railに41アイコン + homeに専用アイコンと完全な説明付き41カードを表示;`RequiresProject && !IsProjectLoaded` のときカードを無効化。 ビジュアルバグ修正: Avalonia 11では `Application.Current.Resources.TryGetValue()` が `MergedDictionaries` をたどらないため、アイコンが最初は表示されなかった — 共有 `ResolveGeometry()` ヘルパー(`TryGetResource` でマージ済み辞書を反復)で修正。[前回: `v2.159.6.1`]
ノートを読む