JARVIS-UI
Update 2.160
20.6.2026
v2.160.0.0MINORJarvis-UI
Phase A–C: ModuleRegistry + Workspace Ready (§17) + Icon Rail ohne Flyouts (§16) (Jarvis-UI)
- Auslieferung der Phasen A–C des
docs/specs/EDITOR_UI_OVERHAUL_PLAN.md§ 16–§ 17 (Halyson-Entscheidungen vom 20.06.2026), gemäßdocs/ai/PROMPT_UI_GLM_REMAINING_BACKLOG_2026-06-20.md. Umfang: Navigationsarchitektur + datengesteuerter Katalog + Ikonografie — writers/save bytes/hooks/FfxLib/RT0/RT2/SGM/SPIRA FORGE unberührt; die 68 HandlerMenuItem_*nicht umgestaltet (nur aufgerufen). Phase A – ModuleRegistry (einzige Quelle):ModuleCatalogPolicy.csEntwicklung vom Dokumentations-Stub zum maßgeblichen Katalog – neupublic static class ModuleRegistrymitIReadOnlyList<ModuleCatalogEntry> Allgefüllt mit 41 Einträgen (Home + 10 Core Authoring + 5 Maps + 7 Live + 16 Extras + 2 Wave-1), jeweils einer pro Modul, das auf der Schiene geführt wird.ModuleCatalogEntrygewinntMode/Notes/Scope/Cluster(enumModuleCluster) zusätzlich zumId/Title/Description/IconKey/RequiresProjectOriginal. Getreue Kopie der Literale jedesSetModule(...)inMain_Window.axaml.cs(nicht neu erfunden). Richtlinie zu Dokumentkommentaren: neuMenuItem_*umgeleitet = in die Registrierung einfügen (Review-Blocker). Phase A – Ikonografie:StudioIcons.axamlerweitert von 14 → 54 Symbolen (<StreamGeometry>Lucide-ähnlich, ViewBox 24×24) — 1 Metapher pro Modul (Schwert + Hörner = Monster, Diskette = Speichern, Totenkopf = Gegnerdesign, Hexfeld = Kugelgitter usw.). Eine Konsistenzprüfung (Skript) bestätigt, dass alle 41IconKeyDie Einträge in der Registrierungsdatenbank führen zuStudioIcons. Phase B – §17 Workspace Ready:MainDashboard_Control.axamlhat nicht mehr 6 fest programmierte Kacheln und wird zuItemsControl ItemsSource="{Binding Modules}"mitDataTemplate(Symbol + Titel + vollständige Beschreibung + Modus-Pill).Main_DataModelgewinntpublic IReadOnlyList<ModuleCatalogEntry> Modules => ModuleRegistry.All. Zwei neue Konverter inFFXProjectEditor/Converters/:IconKeyToGeo metryConverter(resolve string IconKey → Geometry percorrendoRessourcen+Zusammengeführte WörterbücherviaTryGetResource(key, ActualThemeVariant, out _)— necessário porque binding{DynamicResource {Binding IconKey}}não funciona paraPathIcon.Dataem Avalonia) eRequiresProjectEnabledConverter(IMultiValueConverterRequiresProject × IsProjectLoaded →IsEnabled). Hero + empty-state CTA + card de Workspace status preservados (§17.4). Fase C — §16 Icon Rail sem flyouts: removidos os 5Button.Flyout/Flyout-MenüdoIconRailCol(XAML L156–239) — substituídos por<StackPanel Name="RailStack">populado em code-behind porBuildIconRail()(1 botãorailIconpor entry, agrupado por cluster comGrenze1px como separador).Popup#RailDrawer(narrow) troca a lista textual deSchaltfläche mit der Klasse „nav“por<WrapPanel Name="RailDrawerGrid">(grid de ícones). Handler únicoButton_RailModule_Click(sender, e)lêTag=Id→Dispatch(id).RefreshRailProjectGates()re-aplica o gateRequiresProjectquandoProject_Service.IsProjectLoadedmuda. Fase C — Dispatch genérico:OnQuickLaunchRequested(6 keys hardcoded: monster/kernel/sphere/save/extras/home) substituído porDispatch(string moduleId)com switch de todos os 41 Ids → handlerMenuItem_*existente. Rail, drawer e dashboard passam pelo mesmo caminho. Aceite: build Release 0 erros (402 warnings preexistentes); 0Flyout-MenünoIconRailCol; 0 tile hardcoded no dashboard; 41 ícones renderizando no rail + 41 cards no home com ícone dedicado + descrição completa; cards desabilitados quandoRequiresProject && !IsProjectLoaded. Bug visual corrigido: os ícones não renderizavam inicialmente porqueApplication.Current.Resources.TryGetValue()em Avalonia 11 não percorreZusammengeführte Wörterbücher— fix viaResolveGeometry()helper compartilhado que itera os merged dicts comTryGetResource. [anterior:v2.159.6.1]
v2.160.1.0PATCHJarvis-UI
Phase D1 abgeschlossen: Schnittstelle `IRestorableModule` + Refaktor `NavigationSnapshot` (Jarvis-UI)
- Erster Commit der Phase D (
docs/ai/PROMPT_GLM_PHASE_D_TO_F_2026-06-20.md§3.D1). Geltungsbereich: Navigationsarchitektur (wiederherstellbare Zurück-/Weiter-Funktion) — writers/save bytes/hooks/FfxLib/RT0/RT2/SGM/SPIRA FORGE bleiben unverändert. Neuer VertragFFXProjectEditor/Modules/Common/IRestorableModule.cs:CaptureState()→Dictionary<string,object?>?(null = zustandslos) undRestoreState(state)(idempotent, null-sicher). Vor D1 war dasMain_Windowführte Pattern-Matching für konkrete Typen durch (MonEditorSelector_Control/KernelCommands_Control) zur Erfassung des Zustands – lässt sich nicht auf ~38 Module skalieren. Jetzt ist dasMain_Windowfragt die Steuerung, ob sieIRestorableModule. RefaktorNavigationSnapshot: drehenrecord struct (string ModuleId, Dictionary<string,object?>? State); die EnumerationNavigationSurfaceKindwird entfernt. Neues Feldprivate string _currentModuleId = "home"festgelegt zu Beginn vonDispatch(string moduleId).CaptureCurrentNavigationSnapshot()Generikum überContentFrame.Content is IRestorableModule;IsSameNavigationSurface()Vergleiche einfach malModuleId;RestoreNavigationSnapshot()machtDispatch(snapshot.ModuleId)+restorable.RestoreState(snapshot.State). 3 fehlerhafte Aufrufe behoben (verwiesen noch aufNavigationSurfaceKind):MenuItem_MonsterMagic1/2(L560/568) →_currentModuleId = "battle-commands-hub"+new NavigationSnapshot("battle-commands-hub")(genau wie bei denMenuItem_Commands/MenuItem_Items(bereits migriert);NavigateToMonsterEditor(L1549) →new NavigationSnapshot("monster-editor"). Ehrlichkeit: „Zurück“/„Vorwärts“ funktioniert weiterhin in den drei Originalversionen (Home/Monster/KernelCommands), aber Monster/KernelCommands lassen sich nur vollständig wiederherstellen le, wenn Ihre Steuerelemente implementiert sindIRestorableModule(D2/D4). Bis dahin wird der Snapshot erstellt, aber derStatekommtnull(Zurück zum Modul, Unterauswahl wird nicht wiederhergestellt). Release-Build 0 Fehler (402 bereits vorhandene Warnungen). [vorher:v2.160.0.0]
v2.160.2.0PATCHJarvis-UI
Phase D2: `IRestorableModule` in den 7 einfachen Editoren (Jarvis-UI)
- Zweiter Commit der Phase D (
docs/ai/PROMPT_GLM_PHASE_D_TO_F_2026-06-20.md§3.D2). Umfang: Wiederherstellbare „Zurück“- und „Vorwärts“-Funktionen in 7 Core-Authoring-Editoren — writers/save bytes/hooks/FfxLib/RT0/RT2/SGM/SPIRA FORGE bleiben unverändert. ImplementiertIRestorableModule(definiert in D1) bei 7 Kontrollen:TreasureEditor_Control,AutoAbilityEditor_Control,PlayerGrowthEditor_Control,CtbBaseEditor_Control,KeyItemEditor_Control,FormationEditor_Control,BukiGetTreasureCatalog_Control. JedesCaptureState()AufnahmefilterText(Zeichenkette) +selectedIndex(int? abgeleitet vom ausgewählten Element in der SammlungDisplayed*);RestoreState(state)setzt den Filter wieder ein (wodurch derApplyFilterüberOnFilterTextChanged) und wählt die Zeile anhand des Index erneut aus. Zuordnung über den Editor: Treasure (SelectedTreasure/DisplayedTreasures), AutoAbility (SelectedAbility/DisplayedAbilities), PlayerGrowth (SelectedCharacter/DisplayedCharacters), CtbBase (SelectedRow/DisplayedRows), KeyItem (SelectedItem/DisplayedItems), Formation (SelectedBattle/Battles— ohneDisplayed*), BukiGetTreasureCatalog (SelectedRow/Angezeigte Zeilen). Honestidade: agora Monster Editor + os 7 editores acima são plenamente restorable via back/forward (voltam pra seleção/filtro exatos). KernelCommands + os hubs (BattleCommands/Items/etc.) viram em D3 (SubTabHub). Build Release 0 erros (402 warnings preexistentes). [anterior:v2.160.1.0]
v2.160.3.0PATCHJarvis-UI
Phase D3: `IRestorableModule` in `SubTabHub_Control` (umfasst 9 Hubs) (Jarvis-UI)
- Dritter Commit der Phase D (
docs/ai/PROMPT_GLM_PHASE_D_TO_F_2026-06-20.md§3.D3). Geltungsbereich: Wiederherstellbare „Zurück“- und „Weiter“-Funktionen auf allen basierten Hubs inSubTabHub** — writers/save bytes/hooks/FfxLib/RT0/RT2/SGM/SPIRA FORGE unverändert.SubTabHub_Control.axaml.csimplementiertIRestorableModule: neues Feldint _activeTabIndexnachverfolgt amSelectTab(index);CaptureState()kehrt zurück{["activeTab"] = _activeTabIndex};RestoreState(state)FlammeSelectTab(idx)(das normalerweise „pill/active/hosted-content“ neu benennt). Automatische Abdeckung der 9 Hubs: BattleCommandsHub, ItemsHub, SphereGridHub, TextHub, EnemyDesignHub, CustomizationsHub, StatsHub, EncountersHub, Blitzball – alle verwendenSubTabHub_ControlüberAddTab(...), dann erhalten alle in einem einzigen Schritt kostenlos die Wiederherstellung des aktiven Unterregisters. Hinweis: Der Inhalt jedes Unterregisters (Filter/Auswahl des gehosteten Editors) liegt in der Verantwortung des gehosteten Steuerelements – sofern dieses ebenfallsIRestorableModule(D2 hat Treasure/KeyItem/etc. abgedeckt), dasMain_WindowFührt anschließend den Restore-Vorgang aus. Build Release 0 Fehler (402 bereits vorhandene Warnungen). [vorher:v2.160.2.0]
v2.160.4.0PATCHJarvis-UI
Phase D4: `IRestorableModule` bei allen übrigen Steuerelementen über die Standard-Schnittstellenmethoden (Jarvis-UI)
- Vierter Commit der Phase D (
docs/ai/PROMPT_GLM_PHASE_D_TO_F_2026-06-20.md§3.D4). Geltungsbereich: die Schnittstelle in allen*_Controlübrige — writers/save bytes/hooks/FfxLib/RT0/RT2/SGM/SPIRA FORGE bleiben unverändert.IRestorableModule.cserhält Standard-Schnittstellenmethoden:CaptureState() => nullundRestoreState(state) { }(standardmäßig stateless/no-op). Daher müssen Steuerelemente ohne relevante Zustandsinformationen (schreibgeschützte Explorer, Hubs, Runtime Labs, Debug, Tracker, 16 Extras, Wave-1, Unterelemente) lediglich deklarieren, IRestorableModulein der Signatur — dasMain_WindowJetzt können SieContentFrame.Content is IRestorableModulein jedem Modul, unabhängig vom Typ. Automatischer Sweep überwork/_irestable_stateless_sweep_20260620.ps1: 65 geänderte Steuerelemente (fügt hinzuusing FFXProjectEditor.Modules.Common;+: UserControl, IRestorableModule), 9 übersprungen (die 8 bereits in D1/D2/D3 implementierten +MonsterAiEditor2_Control(nicht mehr unterstützt). Anmerkung: Die drei Browser mit Filter (MagicDllBrowser/RuntimeDllManager/Ps3MagicBrowser) haben die Standardeinstellung „stateless“ übernommen, da ihreFilterTextSie befinden sich in den privaten DataModels und werden im Steuerelement nicht angezeigt – die eigentliche Filtererfassung bleibt als kleinerer Rückstand bestehen. Mit D1+D2+D3+D4 deklarieren nun alle ~72 SteuerelementeIRestorableModule; diejenigen, die bereits vorhanden sind (8 Editoren + 9 Hubs), führen eine explizite Überschreibung durch, der Rest ist zustandslos. Build-Release 0 Fehler (402 bereits vorhandene Warnungen)
v2.160.3.0