JARVIS-UI
Mise à jour 2.159
20/06/2026
v2.159.0.0MINORJarvis-UI
Onglet « Character » de l’éditeur de sauvegarde : parité avec FFXED (compétences, groupe, modes OD, overdrives)
- L'onglet « Character » ne se limite plus aux statistiques et aux boutons de lot : nouveau
SaveEditor_CharacterBindings+FfxSaveCharacterFieldCatalogreproduisent le panneau de FFXED v0.749 — combinaisons Activation/Mode Overdrive, groupe (7 emplacements @15768), ~95 capacités (champ binaire @22090), 20 modes Overdrive avec compteurs, Overdrives et capacités spéciales, niveau de sphère / jauge OD avec maximum (22088/22086).FfxSaveCore.ReadSaveBit/WriteSaveBitcorrige les bits >7 (sémantique FFXEDoffset + bit/8). Interface utilisateur réorganisée en 3 colonnes comme dans FFXED. Version sans erreur
v2.158.2.0
v2.159.1.0PATCHJarvis-UI
Gestionnaire de DLL d'exécution : ModuleMasterDetail_Shell pilote + heroGradient + responsive + bannières hors ligne/détachées + état vide + a11y
- Poursuite de l'audit de l'interface utilisateur module par module dans le Runtime DLL Manager (
Modules/RuntimeDllManager/), conformément àPROMPT_UI_RUNTIMEDLL_2026-06-20.md. (P0) Héros en ligne#183444/#111C24/#3B4B2D→Classes="heroGradient"; hex de Chrome#20303Bsupprimé de.axaml(utiliseRailHoverBrush/PanelStrokeBrush). (P1) 1er consommé r du dépôtModuleMasterDetail_Shell: master = 3 cartes d'état (Game root / FFX open / Hooks) ; detail = héros + liste des DLL. (P1)rsp:Responsive.Breakpoints+ styleUserControl.narrowréduit le master. (P2) BannièresWarningBrush/DangerBrushlorsqueIsGameClosed(jeu fermé — les commutateurs ne font que charger le disque) etIsRuntimeDetached(FFX ouvert sans sonde/hook — état en direct non fiable). État videBorder#EmptyStatelorsque!GameRootReady. (P3)AutomationProperties.Namedans les cases à cocher d’état et les boutons d’action ;ToggleA11yNamepar élément. Portée respectée : logique de déploiement/activation/DLL/hook/probe inchangée — uniquement le conteneur visuel. [précédent :v2.159.0.0]
v2.159.2.0PATCHJarvis-UI
Hub Blitzball : migration du shell dupliqué vers le `SubTabHub` réutilisable
- Le
BlitzballHub_Control(Modules/BlitzballHub/) reproduisait exactement ce que leSubTabHub_Control— barre de sous-ongletstabPill,tabPillActive, chargement différé + cache par onglet, mode Writer/Read-only, audioPlayAlternative()au clic. LeMenuItem_Blitzballgénère désormais unSubTabHub_ControlavecAddTabfluide pour les 5 onglets (4 Writer + 1 Prize Atlas en lecture seule), avec les mêmes textes de pilule etrequiresProject: falsedans tous (les 4 éditeurs d'écriture conservent leurs états vides propres à leur projet ; l'Atlas s'ouvre sans projet). LeBlitzballHub_Control(.axaml+.axaml.cs) est supprimé —grepne trouve plusnew BlitzballHub_Control()en production. Portée respectée :FfxLib/Blitzball/*, RT0/RT2,ByteSnapshotEditorSessionet le contenu interne des 5 sous-éditeurs sont restés intacts — seul le conteneur visuel a changé. Devient un modèle pour la future migration deSaveEditorHub(7 onglets codés en dur). Build de version 0 erreur (401 avertissements préexistants)
v2.159.1.0
v2.159.3.0PATCHJarvis-UI
Save Editor Hub Phase 2 : chip dirty + payload SHA256 + garde de session
- L'audit de l'interface utilisateur se poursuit module par module dans le Save Editor Hub (
Modules/SaveEditor/), conformément àdocs/ai/PROMPT_UI_SAVEEDITOR_HUB_PHASE2_2026-06-20.md. (P0) Chip Modifications non enregistrées dans l'en-tête de la carte à l'aide des classesautosaveChip/autosaveOrb/autosaveLabelexistantes deStudioTheme, lié àIsDirty— s'affiche lorsque l'utilisateur modifie un personnage, des gils, de l'équipement, etc. et disparaît après un « Enregistrer » ou « Enregistrer sous » (DataModel remet déjà à zéroIsDirty). (P1) Payload SHA256 court (12 premiers caractères + « … ») viaFfxSaveHash.Sha256Hex(session.Core.Data)dans l’en-tête, avec une info-bulle affichant le hachage complet (64 caractères) ; recalculé lors du chargement/enregistrement/changement de MC — non recalculé dansTouchDirty(hachage = empreinte du blob en mémoire ; « dirty » ≠ modification du hachage jusqu’à « Apply+mutate »). Nouvelles propriétésPayloadHashShort/PayloadHashFullet méthodeRefreshPayloadHash()dans le DataModel. (P2) Confirmation avant le remplacement de la session : nouveau L'assistantAvaloniaDialog_Util.ConfirmYesNoAsync(fenêtre modale Oui/Non sans nouvel élément) est appelé avant Load (barre d'outils + CTA à l'état vide) et avant de changer d'emplacement MC lorsqueIsDirty; le menu déroulant du slot MC cesse d’utiliser le binding TwoWay direct et passe parSelectionChangedavec enregistrement de la confirmation + synchronisation manuelle entre le menu déroulant et le DataModel. Portée respectée : sous-onglets FFXED, décalages,FfxSaveFilewriters, balises de lot et CLI--ffx-save-rt2totalement inchangés — seuls le shell du hub et le DataModel ont gagné de nouvelles propriétés. Build de publication 0 erreur. [précédent :v2.159.2.0]
v2.159.4.0PATCHJarvis-UI
Magic DLL Browser : 9 hex → jetons + ModuleMasterDetail_Shell (2e consommateur) + états vides + réactivité + accessibilité
- L'audit de l'interface utilisateur se poursuit module par module dans le Magic DLL Browser (
Modules/Extras/), conformément àdocs/ai/PROMPT_UI_MAGICDLLBROWSER_2026-06-20.md. (P0) Les 11#RRGGBBde Chrome (directives d’édition Wave4#E8A040, avertissement de la famille Value Workbench#E8A040, ainsi que les 3 badges RT2 en ligne — inactifs#3B1A1A/#E85050/#F0A0A0, validé#3B2719/#E8A040/#F0C070, risque#2A2A1A/#C0A040/#E8D080) sont ajoutés aux tokens/classes existants deStudioTheme:WarningBrushdans les textes de guidance/family warning ; badge rt2-dead →Classes="pillDanger"; badge rt2-timing PROVED →Classes="pillWriter"; badge rt2-timing RISK → arrière-planPanelAltBrush+WarningBrush(bordure/premier plan). (P1) 2e consommateur du dépôtModuleMasterDetail_Shell(1er = RuntimeDllManager) : le corpsColumnDefinitions="330,*"créé manuellement devient le shell avecMasterHeaderLabel="Magic DLLs"— master = résumé de la racine source + recherche + liste déroulante demagic_*.dll; detail = héros des actions + Wave4 Attribution + Direct Patch Builder + TabControl dense (Sections/Exports/Imports/Sound (SeSep)/Overlay Slots/Role Candidates/Family Comparator/Logical Decompile/Strings/Warnings).MinWidthmaster ~260 provient du shell. (P2)Border#EmptyStatedans le détail lorsque!HasSelectedDll(titre « Aucune DLL sélectionnée » + sous-titre invitant à choisir une DLL / à définir la racinemagicFiles\FFX) ; état vide dans la vue principale lorsque!HasDllList(nouveau drapeau calculéDlls.Count > 0, notification placée dansApplyFilterpour couvrir les fonctions « Refresh » et « Search » ;rsp:Responsive.Breakpointsà la racine + styleUserControl.narrowréduit le master à <760px (le WrapPanel des actions ne coupe pas les boutons essentiels tels que Extract/Repack). (P3)AutomationProperties.Namesur les ~16 boutons d’action de la vue détaillée (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). En-tête conservé sous la formecardstandard (décision :heroGradientdans un en-tête de contexte secondaire alourdirait le tout — le véritable élément se trouve dans le panneau d’inspection lorsqu’une DLL est sélectionnée). Portée respectée : superposition PE, Direct Patch Builder, Value Workbench, décompilation logique,MagicDllBrowser_DataModeldécompilation/repack/patch logique et les événementsOpenPs3MagicRequested/OpenMagicViewerRequested+ le câblage dansMain_Windowsont restés totalement inchangés — seul le conteneur visuel a été modifié (ajout d’une propriété UI-onlyHasDllList). Build de version 0 erreur (401 avertissements préexistants) ; aucun littéral#RRGGBBdans le.axamldu module. [précédent :v2.159.3.0]
v2.159.5.0PATCHJarvis-UI
UI Optionals Master : 28 identifiants issus du backlog des options, regroupés dans un seul PATCH (Jarvis-UI)
- Exécution complète de
docs/ai/PROMPT_UI_OPTIONALS_MASTER_2026-06-20.mdsec. 5 — les 28 ID en attente ont tous été implémentés (OPT-F2 était déjà terminé dansv2.159.4.0, pas refait). Portée : amélioration de l’interface utilisateur container-only (tokens, réactivité, accessibilité, états vides, pills, emojis) — writers/save bytes/hooks/FfxLib/RT0/RT2 inchangés. Spri nt B (SubTabHub réutilisable) : OPT-B1/B2 —AutomationProperties.Namesur tous les boutonstabPillgénérés dansAddTab(), avectabA11yNameen option (la valeur par défaut est dérivée de l'étiquette : « Onglet X ») ; OPT-B3 —BlitzballSubTabHubFactory.Create()statique extrait la structure des 5 onglets duMenuItem_Blitzball(≤5 lignes) ; OPT-B4 — copie de l'espace réservérequiresProjectdésormais configurable par hub (RequiresProjectMessage), valeur par défaut héritée du portugais conservée. Sprint F (résidus de Magic DLL Browser) : OPT-F1 — en-tête de carteheroGradient; OPT-F3 — boutons d’action sur 2 lignes fixes (Ouvrir/Afficher | Auteur/Patch, auparavant un seul WrapPanel) ; OPT-F4 —IsMasterExpandedconservé dans le DataModel (TwoWay dans le shell) ; OPT-F5 — héros du détailheroGradient; OPT-F6 — master vide!HasDllListdans le modèle par défautBorder#EmptyState(icône + copie, parité avec le détail vide) ; OPT-F7 —StatusSeverity(Aucun/Info/Avertissement/Danger) dérivé deStatusText+ nouveauStatusSeverityBrushConverteraffiche une erreur/un avertissement dansDangerBrush/WarningBrush; OPT-F8 —AutomationProperties.Namedans la zone de recherche ; OPT-F9 — boutonWRITER LAB · native magicFiles DLL · RT2 pendingdans l'en-tête. Sprint A + C (Éditeur de sauvegarde) : OPT-A1 — réactivité (l'en-tête devient un StackPanel vertical, les actions s'empilent en mode « narrow ») ; OPT-A2 — en-têteheroGradient; OPT-A3 — pillREAD-ONLY · FFXED port · RT2 via CLIdans l'en-tête ; OPT-A4 — copie par clic du hachage SHA256 complet (presse-papiers viaTopLevel.Clipboard, nouveauIconCopy); OPT-C1 —StatusSeveritydansStatusSummary(réutilisation du convertisseur) ; OPT-C2–C5 — listes principales des sous-onglets « Character », « Equipment », « Items » et « Blitzball » dansExpanderpouvant être réduites (ExpandDirection="Left", déplié par défaut). Sprint A5/A6/D (Grille des sphères + Blitzball) : OPT-A5 — emoji🏐supprimé duSetModuletitre du Blitzball et dusectionLabelde la liste des joueurs ; OPT-A6 —♻️ Restaurar→ « Restore original »,✕dans le lien → « Supprimer » + a11y ; OPT-D1 — formulaire v1 responsive (grilles à 3 colonnes →WrapPanelqui s’empilent en mode étroit) ; OPT-D2 —ActiveToolModeénumération dans le DataModel + classe visuelletoolActivesur le bouton en mode actif (reflété viaPropertyChangeddans le code-behind) ; OPT-D3 —AutomationProperties.Namedans les CTA Load/Save/Validate. Sprint E (Runtime eDll résiduelle) : OPT-E2 — bouton « Refresh » dans la bannièreIsGameClosed; OPT-E3 — code hexadécimal du bouton bascule C# (ToggleBrush/ToggleBorderBrush/ToggleForeground/ToggleGlow/RuntimeBrush) converti en jetonsRuntimeToggle*/RuntimeRuntime*dansStudioTokens(résolution viaResources.TryGetValue, sans hexadécimal dans le module) ; OPT-E1 — ignoré (la commutation de la DLL est synchrone viaFile.Move/File.Copy, aucune opération asynchrone perceptible > 300 ms — documenté à la section 7). Build Release 0 erreur (401 avertissements préexistants, aucun dans les fichiers modifiés) ; aucun nouveau littéral#RRGGBBdans les fichiers.axamlmodifiés. [précédent :v2.159.4.0]
v2.159.6.0PATCHJarvis-UI
Améliorations visuelles de l'interface P0/P1 : dégradé « heroGradient » + jetons hexagonaux MonsterAi + tiroir étroit + jetons de conception P1-7 (Jarvis-UI)
- Exécution du backlog P0/P1 de
docs/ai/FRONTEND_AUDIT_P0_P1_2026-06-19.mdconformément au plan approuvé. Portée : peaufinage de l'interface utilisateur / du système de conception — writers/save bytes/hooks/FfxLib/RT0/RT2 inchangés ;MonsterAiEditor2_*(abandonné) n'a pas été modifié. P0-1 (heroGradient sweep) : 26 dégradés en ligne dans 25 fichiers deModules/migrés — 18 canoniques (#163245/#0F1821/#214F69) sont devenusClasses="heroGradient"; 8 variantes d'identité ont été conservées sous forme de nouveaux jetons nommés (heroPurple/heroGreen/heroBrown/heroTeal/heroBluedansStudioTheme.axaml+ColorjetonsHeroXxxA/B/CColordansStudioTokens.axaml) — Aurora reste violet, AutoAbility/Formation/Customization restent verts, KeyItem reste marron, AlBhed/CtbBase/PlayerGrowth restent bleu-vert, MixTable reste bleu.Main_Window.axamlen-tête (palettePanelDeepColorpropre) conservé intentionnellement. P0-2 (MonsterAi hex → jetons) : les 4 fichiers ACTIFS du cluster MonsterAiEditor ont été migrés — 261 littéraux hexadécimaux (Background/BorderBrush/Foreground) regroupés en{DynamicResource ...}par famille (Shell/Protect/Regen/Gold/Forbidden/Cycle + Panel/Stroke), ce qui a permis de normaliser la dérive intra-famille (~20 remplissages bleu sarcelle sont devenus 1AccentShellFillBrush). Création de 14AccentXxxForegroundBrushnouveaux styles (seule la famille Gold en comptait) + familleBorder.accentXxx(15 styles + sélecteurs> TextBlock) dansStudioTheme, parallèle àButton.accen 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
Correction au démarrage : jetons P1-7 radius/motion + liaisons du ModuleMasterDetail_Shell (Jarvis-UI)
- Correctif post-
v2.159.6.0. StudioTheme : les références P1-7 (RadiusLg/Md/Sm,DurationNormal/Fast) utilisaient{StaticResource }mas os tokens estão emApplication.Resources(StudioTokens.axaml) depois doStyleIncludedo tema →KeyNotFoundException : ressource statique « RadiusLg » introuvableno 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]