JARVIS-UI
Atualização 2.159
20/06/2026
v2.159.0.0MINORJarvis-UI
Save Editor Character tab: paridade FFXED (abilities, party, OD modes, overdrives)
- A aba Character deixa de ser só stats + batch buttons: novo
SaveEditor_CharacterBindings+FfxSaveCharacterFieldCatalogespelham o painel FFXED v0.749 — combos Activation/Overdrive Mode, party (7 slots @15768), ~95 abilities (bitfield @22090), 20 overdrive modes com contadores, overdrives e special abilities, sphere level / OD gauge com max (22088/22086).FfxSaveCore.ReadSaveBit/WriteSaveBitcorrige bits >7 (semântica FFXEDoffset + bit/8). UI reorganizada em 3 colunas como no FFXED. Build Release 0 erros
v2.158.2.0
v2.159.1.0PATCHJarvis-UI
Runtime DLL Manager: ModuleMasterDetail_Shell piloto + heroGradient + responsive + banners offline/detached + empty state + a11y
- Continua o audit UI módulo a módulo no Runtime DLL Manager (
Modules/RuntimeDllManager/), conformePROMPT_UI_RUNTIMEDLL_2026-06-20.md. (P0) Hero inline#183444/#111C24/#3B4B2D→Classes="heroGradient"; hex de chrome#20303Bremovido do.axaml(usaRailHoverBrush/PanelStrokeBrush). (P1) 1º consumidor do repo deModuleMasterDetail_Shell: master = 3 cards de status (Game root / FFX open / Hooks); detail = hero + lista de DLLs. (P1)rsp:Responsive.Breakpoints+ styleUserControl.narrowcolapsa o master. (P2) BannersWarningBrush/DangerBrushquandoIsGameClosed(jogo fechado — toggles só armam disco) eIsRuntimeDetached(FFX aberto sem probe/hook — status ao vivo não confiável). Empty stateBorder#EmptyStatequando!GameRootReady. (P3)AutomationProperties.Namenos checkboxes de status e botões de ação;ToggleA11yNamepor item. Escopo respeitado: lógica de deploy/toggle/DLL/hook/probe intocada — só container visual
v2.159.0.0
v2.159.2.0PATCHJarvis-UI
Blitzball Hub: migração do shell duplicado para o `SubTabHub` reutilizável
- O
BlitzballHub_Control(Modules/BlitzballHub/) duplicava exatamente o que oSubTabHub_Controljá faz — faixa de sub-abastabPill,tabPillActive, lazy load + cache por aba, pílula Writer/Read-only, áudioPlayAlternative()no clique. OMenuItem_Blitzballagora constrói umSubTabHub_ControlcomAddTabfluent para as 5 abas (4 Writer + 1 Prize Atlas Read-only), com os mesmos pill texts erequiresProject: falseem todas (os 4 editores de escrita mantêm seus empty states próprios de projeto; o Atlas abre sem projeto). OBlitzballHub_Control(.axaml+.axaml.cs) é deletado —grepnão encontra maisnew BlitzballHub_Control()em produção. Escopo respeitado:FfxLib/Blitzball/*, RT0/RT2,ByteSnapshotEditorSessione o conteúdo interno dos 5 sub-editores totalmente intocados — só o container visual mudou. Vira template para a migração futura doSaveEditorHub(7 abas hardcoded). Build Release 0 erros (401 warnings preexistentes)
v2.159.1.0
v2.159.3.0PATCHJarvis-UI
Save Editor Hub Phase 2: chip dirty + payload SHA256 + guarda de sessão
- Continua o audit UI módulo a módulo no Save Editor Hub (
Modules/SaveEditor/), conformedocs/ai/PROMPT_UI_SAVEEDITOR_HUB_PHASE2_2026-06-20.md. (P0) Chip Unsaved changes no header card usando classesautosaveChip/autosaveOrb/autosaveLabelexistentes doStudioTheme, bindado aIsDirty— aparece quando o usuário edita Character/Gil/Equipment/etc. e some após Save/Save As (DataModel já zeraIsDirty). (P1) Payload SHA256 curto (primeiros 12 chars + "…") viaFfxSaveHash.Sha256Hex(session.Core.Data)no header, com tooltip mostrando hash completo (64 chars); recalculado em Load/Save/MC switch — não recalculado emTouchDirty(hash = fingerprint do blob em memória; dirty ≠ hash change até Apply+mutate). Novas propriedadesPayloadHashShort/PayloadHashFulle métodoRefreshPayloadHash()no DataModel. (P2) Confirmação antes de substituir sessão: novo helperAvaloniaDialog_Util.ConfirmYesNoAsync(modal Yes/No sem asset novo) é chamado antes de Load (toolbar + empty state CTA) e antes de trocar slot MC quandoIsDirty; o combo de slot MC deixa de usar binding TwoWay direto e passa porSelectionChangedcom guarda de confirmação + sincronização manual combo↔DataModel. Escopo respeitado: sub-abas FFXED, offsets,FfxSaveFilewriters, batch tags e CLI--ffx-save-rt2totalmente intocados — só o hub shell e o DataModel ganharam propriedades novas. Build Release 0 erros
v2.159.2.0
v2.159.4.0PATCHJarvis-UI
Magic DLL Browser: 9 hex → tokens + ModuleMasterDetail_Shell (2º consumidor) + empty states + responsive + a11y
- Continua o audit UI módulo a módulo no Magic DLL Browser (
Modules/Extras/), conformedocs/ai/PROMPT_UI_MAGICDLLBROWSER_2026-06-20.md. (P0) Os 11#RRGGBBde chrome (Wave4 editing guidance#E8A040, Value Workbench family warning#E8A040, e os 3 badges RT2 inline — dead#3B1A1A/#E85050/#F0A0A0, proved#3B2719/#E8A040/#F0C070, risk#2A2A1A/#C0A040/#E8D080) sobem a tokens/classes existentes doStudioTheme:WarningBrushnos textos de guidance/family warning; badge rt2-dead →Classes="pillDanger"; badge rt2-timing PROVED →Classes="pillWriter"; badge rt2-timing RISK → fundoPanelAltBrush+WarningBrush(border/foreground). (P1) 2º consumidor do repo deModuleMasterDetail_Shell(1º = RuntimeDllManager): o bodyColumnDefinitions="330,*"hand-rolled vira o shell comMasterHeaderLabel="Magic DLLs"— master = Source Root summary + Search + ListBox demagic_*.dll; detail = hero de ações + Wave4 Attribution + Direct Patch Builder + TabControl denso (Sections/Exports/Imports/Sound (SeSep)/Overlay Slots/Role Candidates/Family Comparator/Logical Decompile/Strings/Warnings).MinWidthmaster ~260 vem do shell. (P2)Border#EmptyStateno detail quando!HasSelectedDll(título "No DLL selected" + subtítulo orientando escolher DLL / setar omagicFiles\FFXroot); empty state na master quando!HasDllList(nova flag computedDlls.Count > 0, notificada emApplyFilterpara cobrir Refresh e Search);rsp:Responsive.Breakpointsno root + styleUserControl.narrowcolapsa o master em <760px (WrapPanel de ações não corta botões críticos como Extract/Repack). (P3)AutomationProperties.Namenos ~16 botões de ação do detail (Open DLL/Extract/Logical Decompile/Repack/Patch Plan/C/ASM Project/Semantic RE Report/Magic Viewer/Phyre Package I/O/Clone/Apply Byte Patch/Apply ASCII Patch/Stage+Apply value patch/Stage+Apply host offset patch/Deploy ps3data clone/Open PS3 Magic & folders). Header card mantido comocardcomum (decisão:heroGradientnum header de contexto secundário pesaria — o hero real fica no painel de inspeção quando há DLL selecionada). Escopo respeitado: PE overlay, Direct Patch Builder, Value Workbench, logical decompile,MagicDllBrowser_DataModeldecompile/repack/patch logic e os eventosOpenPs3MagicRequested/OpenMagicViewerRequested+ wiring noMain_Windowtotalmente intocados — só o container visual mudou (1 propriedade UI-onlyHasDllListadicionada). Build Release 0 erros (401 warnings preexistentes); zero#RRGGBBliteral no.axamldo módulo
v2.159.3.0
v2.159.5.0PATCHJarvis-UI
UI Optionals Master: 28 IDs do backlog de opcionais fechados num único PATCH (Jarvis-UI)
- Execução integral do
docs/ai/PROMPT_UI_OPTIONALS_MASTER_2026-06-20.mdsec. 5 — todos os 28 IDs pendentes implementados (OPT-F2 já estava feito emv2.159.4.0, não refeito). Escopo: polish UI container-only (tokens, responsivo, a11y, empty states, pills, emojis) — writers/save bytes/hooks/FfxLib/RT0/RT2 intocados. Sprint B (SubTabHub reutilizável): OPT-B1/B2 —AutomationProperties.Nameem todos os botõestabPillgerados emAddTab(), comtabA11yNameopcional (default deriva do label: "Aba X"); OPT-B3 —BlitzballSubTabHubFactory.Create()estático extrai a construção das 5 abas doMenuItem_Blitzball(≤5 linhas); OPT-B4 — copy do placeholderrequiresProjectagora configurável por hub (RequiresProjectMessage), default legado PT preservado. Sprint F (Magic DLL Browser residual): OPT-F1 — header cardheroGradient; OPT-F3 — botões de ação em 2 linhas fixas (Open/View | Author/Patch, antes WrapPanel único); OPT-F4 —IsMasterExpandedpersistido no DataModel (TwoWay no shell); OPT-F5 — hero do detailheroGradient; OPT-F6 — master empty!HasDllListno padrãoBorder#EmptyState(ícone + copy, paridade com detail empty); OPT-F7 —StatusSeverity(None/Info/Warning/Danger) derivado doStatusText+ novoStatusSeverityBrushConverterpinta erro/aviso emDangerBrush/WarningBrush; OPT-F8 —AutomationProperties.Nameno Search TextBox; OPT-F9 — pillWRITER LAB · native magicFiles DLL · RT2 pendingno header. Sprint A + C (Save Editor): OPT-A1 — responsividade (header vira StackPanel vertical, ações empilham em narrow); OPT-A2 — headerheroGradient; OPT-A3 — pillREAD-ONLY · FFXED port · RT2 via CLIno header; OPT-A4 — copy-on-click do hash SHA256 completo (clipboard viaTopLevel.Clipboard, novoIconCopy); OPT-C1 —StatusSeveritynoStatusSummary(reuso do converter); OPT-C2–C5 — master lists das sub-abas Character/Equipment/Items/Blitzball emExpandercolapsável (ExpandDirection="Left", default expandido). Sprint A5/A6/D (Sphere Grid + Blitzball): OPT-A5 — emoji🏐removido doSetModuletitle do Blitzball e dosectionLabeldo Roster; OPT-A6 —♻️ Restaurar→ "Restore original",✕no link → "Remove" + a11y; OPT-D1 — v1 form responsivo (Grids de 3 colunas →WrapPanelque empilha em narrow); OPT-D2 —ActiveToolModeenum no DataModel + classe visualtoolActiveno botão de modo ativo (refletido viaPropertyChangedno code-behind); OPT-D3 —AutomationProperties.Namenos CTAs Load/Save/Validate. Sprint E (RuntimeDll residual): OPT-E2 — botão Refresh no bannerIsGameClosed; OPT-E3 — hex do toggle pill C# (ToggleBrush/ToggleBorderBrush/ToggleForeground/ToggleGlow/RuntimeBrush) promovido a tokensRuntimeToggle*/RuntimeRuntime*noStudioTokens(resolve viaResources.TryGetValue, sem hex no módulo); OPT-E1 — skipped (toggle DLL é síncrono viaFile.Move/File.Copy, não há operação async perceptível >300ms — documentado em sec. 7). Build Release 0 erros (401 warnings preexistentes, nenhum nos arquivos tocados); zero#RRGGBBliteral novo nos.axamltocados
v2.159.4.0
v2.159.6.0PATCHJarvis-UI
Frontend P0/P1 polish visual: heroGradient sweep + MonsterAi hex tokens + drawer narrow + P1-7 design tokens (Jarvis-UI)
- Execução do backlog P0/P1 do
docs/ai/FRONTEND_AUDIT_P0_P1_2026-06-19.mdconforme plano aprovado. Escopo: polish UI / design system — writers/save bytes/hooks/FfxLib/RT0/RT2 intocados;MonsterAiEditor2_*(discontinued) intocado. P0-1 (heroGradient sweep): 26 gradientes inline em 25 arquivos deModules/migrados — 18 canônicos (#163245/#0F1821/#214F69) viramClasses="heroGradient"; 8 variantes de identidade preservadas como tokens nomeados novos (heroPurple/heroGreen/heroBrown/heroTeal/heroBlueemStudioTheme.axaml+ColortokensHeroXxxA/B/CColoremStudioTokens.axaml) — Aurora mantém roxo, AutoAbility/Formation/Customization mantêm verde, KeyItem mantém marrom, AlBhed/CtbBase/PlayerGrowth mantêm teal, MixTable mantém azul.Main_Window.axamlheader (paletaPanelDeepColorprópria) preservado intencionalmente. P0-2 (MonsterAi hex → tokens): os 4 arquivos ATIVOS do cluster MonsterAiEditor migrados — 261 hex literais (Background/BorderBrush/Foreground) colapsados para{DynamicResource ...}por família (Shell/Protect/Regen/Gold/Forbidden/Cycle + Panel/Stroke), normalizando o drift intra-família (~20 fills teal viram 1AccentShellFillBrush). Criados 14AccentXxxForegroundBrushnovos (só Gold tinha) + famíliaBorder.accentXxx(15 styles + selectors> TextBlock) emStudioTheme, paralela àButton.accentXxxexistente.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
v2.159.5.0
v2.159.6.1PATCHJarvis-UI
Boot fix: tokens P1-7 radius/motion + bindings do ModuleMasterDetail_Shell (Jarvis-UI)
- Hotfix pós-
v2.159.6.0. StudioTheme: referências P1-7 (RadiusLg/Md/Sm,DurationNormal/Fast) usavam{StaticResource ...}mas os tokens estão emApplication.Resources(StudioTokens.axaml) depois doStyleIncludedo tema →KeyNotFoundException: Static resource 'RadiusLg' not foundno 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
v2.159.6.0