JARVIS-UI
Aggiornamento 2.159
20/06/2026
v2.159.0.0MINORJarvis-UI
Save Editor Character tab: parità FFXED (abilità, party, modalità OD, overdrive)
- La scheda Character non è più solo stats + pulsanti batch: nuovo
SaveEditor_CharacterBindings+FfxSaveCharacterFieldCatalogriflettono il pannello FFXED v0.749 — combo Activation/Overdrive Mode, party (7 slot @15768), ~95 abilità (bitfield @22090), 20 modalità overdrive con contatori, overdrives e abilità speciali, sfera livello / OD gauge con max (22088/22086).FfxSaveCore.ReadSaveBit/WriteSaveBitcorregge bit >7 (semantica FFXEDoffset + bit/8). UI riorganizzata in 3 colonne come nel FFXED. Build Release 0 errori
v2.158.2.0
v2.159.1.0PATCHJarvis-UI
Runtime DLL Manager: ModuleMasterDetail_Shell pilota + heroGradient + responsive + banner offline/detached + empty state + a11y
- Continua l'audit UI modulo per modulo nel Runtime DLL Manager (
Modules/RuntimeDllManager/), secondoPROMPT_UI_RUNTIMEDLL_2026-06-20.md. (P0) Hero inline#183444/#111C24/#3B4B2D→Classes="heroGradient"; hex del chrome#20303Brimosso dal.axaml(usaRailHoverBrush/PanelStrokeBrush). (P1) 1° consumato r dal repoModuleMasterDetail_Shell: master = 3 schede di stato (Game root / FFX open / Hooks); dettaglio = hero + lista DLL. (P1)rsp:Responsive.Breakpoints+ stileUserControl.narrowcollassa il master. (P2) BannersWarningBrush/DangerBrushquandoIsGameClosed(gioco chiuso — i toggles armano solo disco) eIsRuntimeDetached(FFX aperto senza probe/hook — stato live non affidabile). Empty stateBorder#EmptyStatequando!GameRootReady. (P3)AutomationProperties.Namenelle checkbox di stato e nei pulsanti azione;ToggleA11yNameper elemento. Ambito rispettato: logica di deploy/toggle/DLL/hook/probe intatta — solo contenitore visivo. [precedente:v2.159.0.0]
v2.159.2.0PATCHJarvis-UI
Blitzball Hub: migrazione dal shell duplicato al `SubTabHub` riutilizzabile
- Il
BlitzballHub_Control(Modules/BlitzballHub/) duplicava esattamente ciò che ilSubTabHub_Controlgià faceva — fascia di sub-tabtabPill,tabPillActive, lazy load + cache per tab, pillola Writer/Sola lettura, audioPlayAlternative()al clic. IlMenuItem_Blitzballora costruisce unSubTabHub_ControlconAddTabfluent per le 5 tab (4 Writer + 1 Prize Atlas in sola lettura), con gli stessi testi delle pillole erequiresProject: falsein tutte (i 4 editor di scrittura mantengono i loro empty state propri di progetto; l'Atlas si apre senza progetto). IlBlitzballHub_Control(.axaml+.axaml.cs) viene eliminato —grepnon trova piùnew BlitzballHub_Control()in produzione. Ambito rispettato:FfxLib/Blitzball/*, RT0/RT2,ByteSnapshotEditorSessione il contenuto interno dei 5 sub-editor totalmente intatti — solo il container visuale è cambiato. Diventa template per la futura migrazione delSaveEditorHub(7 tab hardcoded). Build Release 0 errori (401 warning preesistenti)
v2.159.1.0
v2.159.3.0PATCHJarvis-UI
Save Editor Hub Fase 2: dirty chip + payload SHA256 + salvataggio sessione
- Continua l'audit UI modulo per modulo nel Save Editor Hub (
Modules/SaveEditor/), conformemente adocs/ai/PROMPT_UI_SAVEEDITOR_HUB_PHASE2_2026-06-20.md. (P0) Chip Modifiche non salvate nella scheda di intestazione usando le classiautosaveChip/autosaveOrb/autosaveLabelesistenti delStudioTheme, bindato aIsDirty— appare quando l'utente modifica Character/Gil/Equipment/ecc. e scompare dopo Salva/Salva con nome (il DataModel azzera giàIsDirty). (P1) Payload SHA256 breve (primi 12 caratteri + "…") tramiteFfxSaveHash.Sha256Hex(session.Core.Data)nell'intestazione, con tooltip che mostra hash completo (64 caratteri); ricalcolato in Load/Save/MC switch — non ricalcolato inTouchDirty(hash = fingerprint del blob in memoria; dirty ≠ cambio hash fino a Applica+muta). Nuove proprietàPayloadHashShort/PayloadHashFulle metodoRefreshPayloadHash()nel DataModel. (P2) Conferma prima di sostituire sessione: nuov o helperAvaloniaDialog_Util.ConfirmYesNoAsync(modal Sì/No senza asset nuovo) viene chiamato prima di Load (toolbar + CTA empty state) e prima di cambiare slot MC quandoIsDirty; il combo dello slot MC smette di usare il binding TwoWay diretto e passa tramiteSelectionChangedcon guardia di conferma + sincronizzazione manuale combo↔DataModel. Ambito rispettato: sub-tab FFXED, offsets,FfxSaveFilewriters, batch tags e CLI--ffx-save-rt2totalmente intatti — solo l'hub shell e il DataModel hanno ricevuto nuove proprietà. Build Release 0 errori. [precedente:v2.159.2.0]
v2.159.4.0PATCHJarvis-UI
Magic DLL Browser: 9 hex → token + ModuleMasterDetail_Shell (2º consumatore) + stati vuoti + responsive + a11y
- Continua l'audit UI modulo per modulo nel Magic DLL Browser (
Modules/Extras/), conforme adocs/ai/PROMPT_UI_MAGICDLLBROWSER_2026-06-20.md. (P0) I 11#RRGGBBdi chrome (linee guida editing Wave4#E8A040, avviso famiglia Value Workbench#E8A040, e i 3 badge RT2 inline — dead#3B1A1A/#E85050/#F0A0A0, proved#3B2719/#E8A040/#F0C070, risk#2A2A1A/#C0A040/#E8D080) salgono ai token/classi esistenti delStudioTheme:WarningBrushnei testi di guidance/avviso famiglia; badge rt2-dead →Classes="pillDanger"; badge rt2-timing PROVED →Classes="pillWriter"; badge rt2-timing RISK → sfondoPanelAltBrush+WarningBrush(border/foreground). (P1) 2º consumatore del repositoryModuleMasterDetail_Shell(1º = RuntimeDllManager): il bodyColumnDefinitions="330,*"realizzato a mano diventa il shell conMasterHeaderLabel="Magic DLLs"— master = riepilogo Source Root + Search + ListBox dimagic_*.dll; detail = hero azioni + Wave4 Attribution + Direct Patch Builder + TabControl denso (Sections/Exports/Imports/Sound (SeSep)/Overlay Slots/Role Candidates/Family Comparator/Logical Decompile/Strings/Warnings).MinWidthmaster ~260 viene dal shell. (P2)Border#EmptyStatenel detail quando!HasSelectedDll(titolo "No DLL selected" + sottotitolo che orienta a scegliere DLL / impostare ilmagicFiles\FFXroot); stato vuoto nella master quando!HasDllList(nuova flag calcolataDlls.Count > 0, notif aumentatoApplyFilterper coprire Refresh e Search);rsp:Responsive.Breakpointsnel root + lo stileUserControl.narrowcollassa il master a <760px (il WrapPanel delle azioni non tronca bottoni critici come Estrai/Ricomponi). (P3)AutomationProperties.Namesui ~16 bottoni azione del dettaglio (Apri DLL/Estrai/Decompila Logicamente/Ricomponi/Piano Patch/C/Progetto ASM/Report Semantic RE/Magic Viewer/Pacchetto I/O Phyre/Clona/Applica Patch Byte/Applica Patch ASCII/Applica Patch Valore Stage+Applica/Applica Patch Offset Host Stage+Applica/Clona ps3data/Open PS3 Magic & cartelle). La scheda di intestazione mantenuta comecardcomune (decisione:heroGradientin un intestazione di contesto secondario avrebbe peso — l'eroe reale sta nel pannello di ispezione quando una DLL è selezionata). Ambito rispettato: PE overlay, Direct Patch Builder, Value Workbench, decompile logico,MagicDllBrowser_DataModeldecompile/repack/patch logic e gli eventiOpenPs3MagicRequested/OpenMagicViewerRequested+ wiring nelMain_Windowtotalmente intocati — è cambiato solo il contenitore visivo (aggiunta 1 proprietà UI-onlyHasDllList). Build Release 0 errori (401 warning preesistenti); zero#RRGGBBletterali nel.axamldel modulo. [precedente:v2.159.3.0]
v2.159.5.0PATCHJarvis-UI
UI Optionals Master: 28 ID delle opzioni nel backlog chiuse in un unico PATCH (Jarvis-UI)
- Implementazione integrale della
docs/ai/PROMPT_UI_OPTIONALS_MASTER_2026-06-20.mdsec. 5 — tutti i 28 ID pendenti implementati (OPT-F2 era già stato fatto inv2.159.4.0, non rifatto). Ambito: polish UI solo contenitore (token, responsivo, a11y, stati vuoti, pills, emoji) — writers/save bytes/hooks/FfxLib/RT0/RT2 intoccati. **Spri Sprint B (SubTabHub riusabile): OPT-B1/B2 —AutomationProperties.Namein tutti i pulsantitabPillgenerati inAddTab(), contabA11yNameopzionale (il default deriva dall'etichetta: "Scheda X"); OPT-B3 —BlitzballSubTabHubFactory.Create()statico estrae la costruzione delle 5 schede delMenuItem_Blitzball(≤5 righe); OPT-B4 — copy del placeholderrequiresProjectora configurabile per hub (RequiresProjectMessage), default legacy PT preservato. Sprint F (Magic DLL Browser residuo): OPT-F1 — header cardheroGradient; OPT-F3 — pulsanti di azione su 2 righe fisse (Open/View | Author/Patch, prima WrapPanel unico); OPT-F4 —IsMasterExpandedpersistito nel DataModel (TwoWay nello shell); OPT-F5 — hero del detailheroGradient; OPT-F6 — master vuoto!HasDllListnel patternBorder#EmptyState(icona + copy, parità con detail vuoto); OPT-F7 —StatusSeverity(None/Info/Warning/Danger) derivato dalStatusText+ nuovoStatusSeverityBrushConvertercolora errore/avviso inDangerBrush/WarningBrush; OPT-F8 —AutomationProperties.Namenella Search TextBox; OPT-F9 — pillWRITER LAB · native magicFiles DLL · RT2 pendingnell'header. Sprint A + C (Save Editor): OPT-A1 — responsività (header diventa StackPanel verticale, le azioni si impilano in narrow); OPT-A2 — headerheroGradient; OPT-A3 — pillREAD-ONLY · FFXED port · RT2 via CLInell'header; OPT-A4 — copy-on-click dell'hash SHA256 completo (clipboard tramiteTopLevel.Clipboard, nuovoIconCopy); OPT-C1 —StatusSeveritynelStatusSummary(riuso del converter); OPT-C2–C5 — master list delle sotto-schede Character/Equipment/Items/Blitzball inExpandercollassabile (ExpandDirection="Left", default espanso). Sprint A5/A6/D (Sphere Grid + Blitzball): OPT-A5 — emoji🏐rimossa dal titoloSetModuledel Blitzball e dalsectionLabeldel Roster; OPT-A6 —♻️ Restaurar→ "Restore original",✕nel link → "Remove" + a11y; OPT-D1 — form v1 responsivo (Griglie di 3 colonne →WrapPanelche si impila in narrow); OPT-D2 —ActiveToolModeenum nel DataModel + classe visualetoolActivenel pulsante di modo attivo (riflesso tramitePropertyChangednel code-behind); OPT-D3 —AutomationProperties.Namenei CTA Load/Save/Validate. Sprint E (Runtim eDll residuo): OPT-E2 — pulsante Aggiorna nel bannerIsGameClosed; OPT-E3 — hex del pulsante di attivazione C# (ToggleBrush/ToggleBorderBrush/ToggleForeground/ToggleGlow/RuntimeBrush) promosso a tokenRuntimeToggle*/RuntimeRuntime*nelStudioTokens(risolto tramiteResources.TryGetValue, senza hex nel modulo); OPT-E1 — saltato (toggle DLL è sincrono tramiteFile.Move/File.Copy, non c'è operazione async percepibile >300ms — documentato in sec. 7). Build Release 0 errori (401 warning preesistenti, nessuno nei file modificati); zero#RRGGBBliteral nuovi nei.axamlmodificati. [precedente:v2.159.4.0]
v2.159.6.0PATCHJarvis-UI
Rifinitura visiva frontend P0/P1: variazione heroGradient + token hex MonsterAi + cassetto stretto + token design P1-7 (Jarvis-UI)
- Esecuzione del backlog P0/P1 del
docs/ai/FRONTEND_AUDIT_P0_P1_2026-06-19.mdsecondo il piano approvato. Ambito: rifinitura UI / design system — writers/save bytes/hooks/FfxLib/RT0/RT2 intatti;MonsterAiEditor2_*(discontinued) intatto. P0-1 (variazione heroGradient): 26 gradienti inline in 25 file diModules/migrati — 18 canonici (#163245/#0F1821/#214F69) diventanoClasses="heroGradient"; 8 varianti di identità preservate come nuovi token denominati (heroPurple/heroGreen/heroBrown/heroTeal/heroBlueinStudioTheme.axaml+ColortokenHeroXxxA/B/CColorinStudioTokens.axaml) — Aurora mantiene il viola, AutoAbility/Formation/Customization mantengono il verde, KeyItem mantiene il marrone, AlBhed/CtbBase/PlayerGrowth mantengono il teal, MixTable mantiene il blu. L'headerMain_Window.axaml(paletta propriaPanelDeepColor) preservato intenzionalmente. P0-2 (MonsterAi hex → token): i 4 file ATTIVI del cluster MonsterAiEditor migrati — 261 letterali hex (Background/BorderBrush/Foreground) collassati in{DynamicResource ...}per famiglia (Shell/Protect/Regen/Gold/Forbidden/Cycle + Panel/Stroke), normalizzando la deriva intra-famiglia (~20 fill teal diventano 1AccentShellFillBrush). Creati 14AccentXxxForegroundBrushnuovi (solo Gold ne aveva) + famigliaBorder.accentXxx(15 stili + selettori> TextBlock) inStudioTheme, parallela aButton.accent tXxxexistente.MonsterAiEditor2_Control.axamlretém seus 71 hex (discontinued). P0-4 (drawer narrow): o bug onde emWindow.narrowo botão "≡" eCtrl+Bnão faziam nada visível (estiloWindow.narrow Border#IconRailCol → IsVisible=Falsevencia o toggle) foi resolvido — novo<Popup Name="RailDrawer">flutuante emMain_Window.axamlcom os 6 grupos de navegação como botões de texto verticais (mais escaneáveis que ícones 22px em tela pequena),IsLightDismissEnabled=True;ToggleIconRail()agora branch narrow→Popup / wide→Border. Reusa os MESMOSMenuItem_*handlers (zero mudança em handlers). P1-7 (design tokens estruturais): novas famílias emStudioTokens.axaml— Spacing (SpacingXs/Sm/Md/Lg/XlThickness +StackGapSm/Md/Lgdoubles), Radius (RadiusSm=8/Md=10/Lg=12/Pill=999CornerRadius), Motion (DurationFast/Normal/Slowsys:TimeSpan), Elevation (Border.elevation1/2/3BoxShadow). Adoção piloto:StudioTheme.axamlconsomeRadiusLg/Md/SmemBorder.card/cardSoft/Button.primaryAction/secondaryAction/railIcon/tabPill, eDurationNormal/Fastnas 3 transições de microinteração (antes literais0:0:0.12/0:0:0.10);MonsterAiEditor_Control.axamldemonstraSpacingLg/Md+ combocard accentShellem 4 cards piloto. Divergências do audit registradas: P0-3 (Ctrl+B) já estava implementado na working tree (não era mais "comentário mentiroso"); P1-8 (shell) já tinha 2 consumidores; P1-5/P1-6 (arquitetura nav) fora do escopo por alto merge-risk. Build Release 0 erros (401 warnings preexistentes, nenhum novo). Artefatos de sweep:work/_hero_gradient_sweep_20260620.ps1,work/_monster_ai_hex_sweep_20260620.ps1. [anterior:v2.159.5.0]
v2.159.6.1PATCHJarvis-UI
Boot fix: token P1-7 raggio/moto + binding al ModuleMasterDetail_Shell (Jarvis-UI)
- Hotfix post-
v2.159.6.0. StudioTheme: i riferimenti P1-7 (RadiusLg/Md/Sm,DurationNormal/Fast) usavano{StaticResource }mas os tokens estão emApplication.Resources(StudioTokens.axaml) depois doStyleIncludedo tema →KeyNotFoundException: Risorsa statica 'RadiusLg' non trovatano boot (processo morria sem janela). Fix:{DynamicResource ...}. ModuleMasterDetail_Shell:MasterHeader/MasterList/Detail/MasterHeaderLabel/IsMasterExpandedagora usamRelativeSource AncestorType=ModuleMasterDetail_Shell(antes bindavam o DataModel do módulo → lista/botões/detail vazios no Magic DLL Browser e Runtime DLL Manager). Escopo: UI container only — writers/save/hooks intocados. Build Release 0 erros. [anterior:v2.159.6.0]