Aggiornamento 2.220
02/08/2026
v2.220.0.0BETAMINOR
Seymour2 ago 2026
VIEWERHUB F2: Magic/Model/Map viewers migrated to the hub + python retired
- Prefix routing in
StudioWebServer(MapPrefix): multi-app on a single port —/= noclip serve-dir,/magic/= RuntimeTools/FFXMagicViewerWeb,/model/= FFXModelViewerWeb,/map/= FFXMapViewerWeb,/work/= repoRoot/work (Model Viewer absolute glTF assets). Longest prefix wins;PrefixRouting_ServesAppUnderPrefixtest (9/9). - New descs in
ViewerHubService:magic-viewer,model-viewer,model-preview(model-preview.html for the MonEditor fusion/T-pose),map-scene-editor;BuildUrl(descId, extraQuery)with cache-bust for web apps + query (e.g.magic=004C);FindRepoRoot()(assembly walk-up). ViewerShellacceptsextraQuery(MagicDllBrowser?magic=deep-link).- MonEditor migrated: model preview (fusion/T-pose) now uses the hub (
model-preview+ id1/id2/label1/label2/tpose/fusion query) and the CommonWebView2Host— goodbye python launcher 8767. - Aurora migrated:
AuroraViewerWindowandAuroraFieldExplorer_Controluse the CommonWebView2Host(ModelViewerWeb namespace deleted). - RETIRED (git rm -f):
MagicViewerWeb/(launcher + 3 embeds),ModelViewerWeb/(launcher + 3 embeds + original WebView2Host),MapSceneEditorWeb/(launcher + 3 embeds),MonsterStudioWeb/MonsterStudioLauncher.cs(orphaned browser launcher). Zero python, zero duplicated launcher. - Wiring:
Main_Window—ShowMagicViewer/ModelViewerWeb/ModelViewerEmbedded/MapSceneEditorEmbedded open theViewerShell(Embedded 3D Viewer); legacy cases still work. - Gate: build 0 errors; tests 9/9 PASS; editor smoke (Extras → Magic Viewer / Model Viewer / Map Scene Editor — all in the shell, single port 8769, prefixes).
v2.219.2.3
v2.220.0.1BETAPATCH
Seymour2 ago 2026
i18n: final Latin coverage ~78-83% (PT→ES dict 520 terms + EN→ES 201 + UI map 42 keys) + ES regeneration fix
- Lane IFRT-2
- PT→ES dictionary (
work/_i18n_pt_es_{1,2,3}.py, 520 terms: articles/pronouns/adjectives/UI/gameplay/verbs) — ES was the only Latin without PT coverage (PT dicts were FR/DE/IT only); +EN→ES (work/_i18n_en_es_1.py, 201 terms: chance/selected/viewer/lab/writer + compound phrases "force battle"/"phase rotation"/"save editor"...). - Final consolidated pipeline (
work/_i18n_final_pipeline.py): precompiled regex (7 dictionaries), regenerates the 4 Latins from the neutral in order glossary > domain > EN phrases > EN words > PT > PT-ES/EN-ES; manual ES reapplied on top afterwards (441) + 50 orphans removed. - Key-based UI map (
work/_i18n_ui_map.py, 42 Common*/Action*/Lang*/Term* keys): Undo→Annuler/Rückgängig, Language→Langue/Sprache/Lingua, Owner→Propriétaire/Besitzer/Proprietario... applied last (force regenerates from neutral and would overwrite). - Final coverage: ES 83.4%, FR 82.7%, DE 78.3%, IT 82.9% (vs 50/58/56/60% before this round). Remaining = technical junk (hex/paths/IDs/boss proper nouns) that stays EN per house rule.
- Gate: build 0 errors; suite 396/396 PASS; 9/9 resx aligned (2199 keys). PT 10.2%; JA/KO/ZH staged (font-bank).
v2.220.0.0
v2.220.1.0BETAPATCH
Seymour2 ago 2026
Modules disabled (5) + MonEditor/Models on Monster Studio + clean titles
- DISABLED 100% (removed from the catalog — gone from the UI; explicit blocks in
ModuleCatalogPolicy.cswith "🚫 DISABLED — NOT FUNCTIONAL — do NOT re-enable without RT2"):magic-effects(Magic Effects — totally non-functional),ps3-magic(PS3 Magic HD — non-functional/redundant),magic-viewer-web(Magic Viewer Web — redundant with the hub's Magic Studio),model-viewer-embedded(duplicate of Model Viewer HD — both open the shell),pointer-script-table("??? / Wave-1 sem editor" placeholder). - MonEditor → Models now uses MONSTER STUDIO (noclip, real PS2 skeleton animated):
monster_studio.tsaccepts?monster=<modelID hex>(constructor parse + dropdown sync) andMonEditor_DataModelderives the modelID from CatalogId (m021→0x1015) — the edited monster's preview opens animated, no longer the three.js T-pose. Themodel-previewdesc (T-pose/fusion) stays available for future use. "Open preview in browser" button hidden (never-browser rule). - Title fixed:
map-scene-editorlost the "Spira Forge ·" (SPIRA FORGE is paused by rule) + Notes/Scope updated to the hub (no python, no browser). - Gate: build 0 errors; smoke: Monster Editor → Models (animated monster in Monster Studio) + catalog without the 5 disabled cards.
v2.220.0.1
v2.220.2.0BETAPATCH
Seymour2 ago 2026
PS2 Models (RSD) disabled (6th module)
ps2-rsd-models(Extras / PS2 Models RSD) — read-only structural counts browser of RSD bundles (@RSD/@PLY/@MAT manifest + .tm2), no 3D render/editing/writer — very low value, "pointless" for the user. Explicit disable block inModuleCatalogPolicy.cs. The real 3D model viewer = Model Viewer / Monster Studio (ViewerHub).- Gate: build 0 errors. Total disabled: 6 (magic-effects, ps3-magic, magic-viewer-web, model-viewer-embedded, pointer-script-table, ps2-rsd-models).
v2.220.1.0
v2.220.3.0BETAPATCH
Seymour2 ago 2026
PS2 Knowledge disabled (7th module)
ps2-knowledge(Extras / PS2 Knowledge) — read-only "provenance/structure" hub with no decoders/playback/writer — user: "no way to use this". Explicit disable block inModuleCatalogPolicy.cs. The real knowledge lives in the docs (KNOWLEDGE_BASE.md / docs/reverse/).- Gate: build 0 errors. Total disabled: 7.
v2.220.2.0
v2.220.3.1BETAREVISION
Seymour2 ago 2026
Technical cleanups: consolidated record of the legacy sweep
- Doc
docs/ai/TECHNICAL_CLEANUP_2026-08-02.md— consolidates EVERYTHING removed/disabled this session for being legacy that did not work, duplicated, and/or of low structural value: - 7 modules DISABLED (removed from the catalog, with "🚫 DISABLED — do NOT re-enable without RT2" blocks):
magic-effects(Magic Effects — totally non-functional),ps3-magic(PS3 Magic HD — non-functional/redundant),magic-viewer-web(Magic Viewer Web — duplicate of the hub's Magic Studio),model-viewer-embedded(duplicate of Model Viewer HD),pointer-script-table("no editor" placeholder),ps2-rsd-models(PS2 Models RSD — read-only counts, no render/edit/writer),ps2-knowledge(PS2 Knowledge — unused read-only hub). - 14 files DELETED (git rm -f, F2):
MagicViewerWeb/(python launcher 8766 + 3 embeds),ModelViewerWeb/(python launcher 8767 + 3 embeds + original WebView2Host),MapSceneEditorWeb/(python launcher 8768 + 3 embeds),MonsterStudioWeb/MonsterStudioLauncher.cs(orphaned browser launcher). - Duplication resolved: 5 viewers + 6 islands → 1 hub (in-process StudioWebServer, single port 8769, prefix routing; 1 ViewerShell; declarative descs). Zero python, zero external browser, zero leaked process.
- Other:
map-scene-editortitle cleaned (no "Spira Forge ·"); MonEditor "Open preview in browser" hidden; MonEditor → Models migrated to Monster Studio (?monster=); Aurora migrated to the Common WebView2Host.
v2.220.3.0
v2.220.4.0BETAPATCH
Seymour2 ago 2026
Model Viewer (HD) disabled (8th module) — option A+C approved
model-viewer-web(Model Viewer HD) — BROKEN: all 816 catalog glTFs point to/work/phyre_chr_anim/(missing on disk — 0/816 load; documented diagnosis). Monster Studio (ViewerHub) covers "viewing monsters" with the real PS2 renderer.- A+C: entry disabled (explicit "🚫 DISABLED" block with the re-enable path) + code and
model-viewerdesc INTACT and ready for the HD lane to re-enable (re-export glTFs + point the catalog correctly + remove the block). Themodel-preview(MonEditor fusion/T-pose) stays active (does not depend on the entry). - Gate: build 0 errors. Total disabled: 8.
v2.220.3.1
v2.220.5.0BETAPATCH
Seymour2 ago 2026
Own identity in the ViewerShell: URL gone, noclip Games/About purged
- Shell v3 (FFX Mod Studio identity): address bar/URL removed from the header (user rule: no loopback/URL emphasis); "FFX Mod Studio" brand + viewer title + status pill + Reload. The overall layout (dark, 3D on the right) kept.
- Skin purged: the noclip panels write their title to
data-title(Panel.setTitle →toplevel.dataset.title) — the skin now hidesdiv[data-title="About"](noclip.website credits) anddiv[data-title="Games"](Wii/GC game menu) by robust attribute selector + MutationObserver. Kept: 3D canvas + functional panel (dropdowns) + Viewer Settings/Statistics (technical, kept). - Gate: build 0 errors. Next: FFX scene navigation in the shell (Zanarkand/Ruins/Besaid tree via noclip hash routing — F3).
v2.220.4.0
v2.220.5.1BETAPATCH
Seymour2 ago 2026
i18n: HOUSE RULE "never translate filenames" applied and protected in the pipeline
- Lane IFRT-2
- Bug found by the user: the domain dictionary (
command→commande/Kommando) corrupted filenames via\bcommand\bmatching insidecommand.bin→ 9 corrupted files per language (command.bin→commande.bin,item.bin→objet.bin,FFX.exe→F.exe,ps3data\magic→ps3data\magie...). - Permanent fix:
PROTECT_REembedded infull_translateof_i18n_final_pipeline.py— paths (magicFiles\FFX), files with extensions (command.bin,kaizou.bin,.dds.phyre,magic_####.dll), technical acronyms (ATEL, DINPUT8, RT0, RT2, EBP, EV01, FTCX, MSEQ, VBF, DDS, GLTF, PHYRE, monmagic1/2, a_ability, arms_rate...) and proper nouns (Tidus, Rikku, Yunalesca, Sin, Seymour...) become~PTK~placeholders before translation and return byte-for-byte. Common UI words (modules,command,item) stay free. - Verification: 0 corrupted filenames across the 4 Latins (ES 83.4% / FR 82.7% / DE 78.2% / IT 82.9% preserved). Scripts:
_i18n_fix_filenames.py(surgical fix) +_i18n_protect_tokens.py(regenerates with protection). - Gate: build 0 errors; suite 396/396 PASS; 9/9 aligned.
v2.220.5.0
v2.220.6.0BETAMINOR
Seymour2 ago 2026
i18n: language selector with 6 options (PT/EN/ES/FR/DE/IT) — the 4 translated Latins are now selectable in the editor
- Lane IFRT-2
Strings.cs:ResolveLanguage/SetLanguage/CurrentLanguage/NormalizeLanguage/ApplyCultureextended from PT/EN topt|en|es|fr|de|it(CultureInfo pt-BR/es-ES/fr-FR/de-DE/it-IT); persistence (ui_lang.config) andFFX_UI_LANGenv accept all 6; default stayspt.Main_Window.axaml: selector MenuFlyout gained 4 new items (LangSpanish/LangFrench/LangGerman/LangItalian) +MenuItem_Language_Es/Fr/De/It_Clickhandlers in code-behind (sameApplyLanguageflow → clean restart).- Resx:
LangSpanish/French/German/Italiankeys in all 9 resx, self-localized (each language sees its own name: Français/Deutsch/Español/Italiano). - Gate: build 0 errors; suite 396/396 PASS; 9/9 aligned. The ES 83.4% / FR 82.7% / DE 78.2% / IT 82.9% translations are now reachable from the UI.
v2.220.5.1
v2.220.7.0BETAPATCH
Lulu2 ago 2026
Magic DLL Browser: tabs grouped into Structure | Runtime | RE (pill selector) — answering the lane's UI proposal
- Decision: apply the useful part of the proposal (grouping the 12 loose tabs) to the
MagicDllBrowser(Extras) — theMagicDllEditor(tree+slots) stays UNTOUCHED (stable after the .rdata resolver fix). - Groups: Structure (Sections, Exports, Imports, WD3 Streams, Overlay Slots, PPP Opcodes) · Runtime (Sound/SeSep, Role Candidates) · RE (Family Comparator, Logical Decompile, Strings, Warnings).
- Implementation: 3
tabPill/tabPillActivepills (theme) +Button_SetTabGroupcode-behind (filtersTabItem.IsVisible+SelectedIndex; no data/binding changes). 2 new i18n keys (U_grupo_estrutura,U_grupo_re; Runtime reusesModeRuntime). - Gates: build 0 errors; suite 396/396 PASS (incl. StringsIntegrity).
v2.220.6.0
v2.220.8.0BETAPATCH
Seymour2 ago 2026
SKIN FIX: guaranteed skin application (ExecuteScriptAsync fallback on NavigationCompleted)
- Diagnosis (WebView2 evidence):
AddScriptToExecuteOnDocumentCreatedAsyncwas NOT applying the script to the document (skin:falseconfirmed by a probe onNavigationCompleted— the skin never ran, which is why About/Games persisted even with the right build and clean caches). - Fix:
WebView2Hostnow stores the skin in_pendingSkinScriptand re-applies it viaExecuteScriptAsynconNavigationCompleted(the document already exists at that point — guaranteed application, covers reloads).AddScriptToExecuteOnDocumentCreatedAsyncremains the first path (for future documents). - Light permanent diagnostics:
NavigationCompletedwrites a probe (skin/hash/about/games) to%TEMP%\ffx-studio-diag.logon every navigation — tool for the UI lane. - Gate: build 0 errors; user confirmed: About and the game menu (Games) are gone from the viewer.
v2.220.7.0