Mise à jour 2.218
02/08/2026
v2.218.0.0BETAMINOR
Seymour2 août 2026
VIEWERHUB F1 : unification universelle des visualiseurs 3D (1 port, zéro python, zéro navigateur)
StudioWebServer(Modules/Common/ViewerHub/) : serveur HTTP statique IN-PROCESS (TcpListener loopback:8769) avec routage d'hôtes virtuels*.loopback(RFC 6761 — WebView2 résout vers loopback ; chaque app voit sa propre racine « domaine » — résout les chemins absolus sans réécriture HTML). Fichiers statiques + MIME + jonction transparente + garde de path traversal +GET /health. Reprise de port : si un python hérité (http.server) squatte 8769, le tue viaGetExtendedTcpTable; sinon statut honnête. Zéro processus externe (rien à fuir).NoclipLocatordécouverte unique (envNOCLIP_ROOT→ walk-up →Downloads/Compressed) avec correctif de racine imbriquée (bug Aurora latent).ServeDirBuilderserve-dir noclip (dist incrémentale + jonction data).ViewerDescriptor+ViewerHubServiceregistre de visualiseurs déclaratif + API uniqueBuildUrl/Find/StatusText; descs initialesmonster-studioetmagic-studio(hôtenoclip.loopback).ViewerShell(Modules/Common/ViewerShell/) : le menu universel — barre fixe (statut de serveur in-process, URL, Reload) + WebView2 embarqué ;WebView2Hostcopié dansCommon(les visualiseurs hérités gardent l'ancienne copie jusqu'à F2).- Câblage :
Main_Window— Monster Studio ouvre désormais l'embed ViewerShell (pas de navigateur) + nouveau handler/casmagic-studio-web;ModuleCatalogPolicy— entréemagic-studio-web+ entréemonster-studio-webmise à jour (Embedded 3D Viewer). - Porte : build Release 0 erreurs (445 avertissements préexistants) ; tests de sonde StudioWebServer 7/7 PASS (health JSON, routage d'hôtes connu/inconnu, MIME js/bin, path traversal via TCP brut, 404).
- Doc d'architecture :
docs/ai/VIEWERHUB_ARCHITECTURE_2026-08-02.md(plan approuvé F1–F6, décisions utilisateur). - En attente :
*.loopbackspike WebView2 (smoke manuel : Extras → Monster Studio dans l'éditeur) ; F2 (migrer les visualiseurs Magic/Model/Map vers le hub) ; déploiement cible (bin/Release était verrouillé par l'éditeur ouvert pendant le build).
v2.217.1.0
v2.218.1.0BETAPATCH
Seymour2 août 2026
i18n Vague 3b : 1 739 littéraux UNIQUES migrés — éditeur 100 % piloté par resx
- Voie IFRT-2
- Classification objective des 1 759 uniques : 1 739 vrais UI vs 20 déchets techniques (chemins/hex/nombres/symboles/ids — intentionnellement non migrés).
- 1 739
U_{slug}_{hash8}clés dans les 9 resx (texte affiché préservé octet pour octet en EN/PT — zéro changement visuel de comportement ; la vraie traduction reste du travail incrémental futur). - 1 736 remplacements dans 94 fichiers .axaml (
{x:Static res:Strings.U_...}) ;MonsterAiEditor2*exclu (règle dure, 0 diff).Strings.cs+1 739 propriétés. - Scripts :
_i18n_onda3b_classify.py,_i18n_onda3b_migrate.py,_i18n_onda3b_cs.py,_i18n_onda3b_check.py(0 résidus ; les 10 « restants » = faux positifs regex — fragments XAML dans des chaînes, pas de l'UI). - Porte : build 0 erreurs ; suite 381/381 PASS (les StudioWebServerTests.cs d'une autre voie écartés pour le test et restaurés intacts).
- JALON : dette de littéraux codés en dur ZÉRO — Vagues 1+2+3a+3b = 2 294 littéraux migrés (2 414 → 0 vrai UI). En attente : smoke manuel PT/EN dans l'éditeur. ### PATCH
v2.218.0.0
v2.218.2.0BETAPATCH
Seymour2 août 2026
ViewerHub F1 : spike `*.loopback` ÉCHOUÉ → URL par IP loopback
- Diagnostic (méthodique) : serveur in-process 100 % OK (health 200, index 200, bundle 200, wasm 200 application/wasm, bins 1d/0080 200) — l'ÉCRAN NOIR venait de la navigation de WebView2 vers
noclip.loopback, que cette machine Windows ne résout PAS (RFC 6761 inactive dans le résolveur de l'OS :Resolve-DnsName/GetHostAddresseséchouent). - Correctif :
ViewerHubService.BuildUrlrenvoie désormaishttp://loopback:8769/index.html#ffx/...(IP directe, pas de DNS) — le noclip vit à la racine du serve-dir, les chemins absolus se résolvent sans réécriture. Le routage d'hôtes virtuels reste dansStudioWebServer(l'aliasloopbackcouvre le flux actuel ; les hôtes virtuels restent pour de futures apps). - Correctif d'encodage :
ViewerHub.cs/ViewerShell_Control.axaml.csavaient du MOJIBAKE (leSet-Contentde PowerShell 5.1 corrompait l'UTF-8 dans les commentaires/chaînes pendant le renameViewerHub→ViewerHubService) — fichiers recréés via l'éditeur (UTF-8 correct). Leçon : ne jamais réécrire un .cs viaSet-Contentde PowerShell avec des accents. - Porte : build 0 erreurs ; tests 8/8 PASS (nouveau
LoopbackAlias_ServesForPlainIpHost— le vrai flux hub). - Doc mis à jour :
docs/ai/VIEWERHUB_ARCHITECTURE_2026-08-02.md§5 (résultat du spike + repli documenté).
v2.218.1.0
v2.218.3.0BETAPATCH
Seymour2 août 2026
i18n : smoke manuel AUTOMATISÉ + 4 littéraux Run.Text échappés migrés
- Voie IFRT-2
StringsIntegrityTests(nouveau, 3 tests) — remplace le smoke manuel des ~96 modules : (1) chaque référence{x:Static res:Strings.X}dans .axaml se résout en une propriété Strings.cs ET une clé resx neutre ; (2) chaque propriété Strings.cs a une clé neutre ; (3) zéro littéral UI brut dans .axaml (avec exception documentée pour les déchets techniques — chemins/hex/nombres — mêmes critères que le classifieur Vague 3b).- 4 littéraux échappés (attributs
Run Text=avec un espace avant=— la regex de migration les manquait) :· partner hex:,/ 112 non-empty,+ →(MixTableEditor),Payload SHA256:(SaveEditorHub) → clésU_*dans les 9 resx + Strings.cs + remplacés. - Porte : build 0 erreurs ; suite 384/384 PASS (381 + 3 nouveaux). Le test a attrapé de vrais échecs au premier run (23 littéraux bruts → analyse → 20 déchets techniques légitimes + 4 vrais migrés) — preuve que le smoke automatisé fonctionne.
- Le flux de traduction est désormais : nouvelle chaîne = 1 clé dans Strings.resx + 1 prop dans Strings.cs (les 8 satellites héritent de l'EN via le repli ResourceManager) ; vraie traduction = remplir seulement les clés traduites dans les satellites. ### PATCH
v2.218.2.0
v2.218.4.0BETAPATCH
Seymour2 août 2026
ViewerShell MENU UNIVERSEL v2 (motif type-navigateur)
- Nouvelle barre d'outils :
cardSoftcompacte avec 3 zones — (1) titre + pilule de statut de serveur (3 états :iniciando…/servidor in-process/pillDangeravec l'erreur — vraies classes StudioTheme :pillReadonly/pillDanger) ; (2) barre d'adresse (URL tronquée avec ToolTip — le « navigateur » dans le logiciel) ; (3) actions universelles (Reload). L'ancienne grande carte (qui gaspillait l'espace vertical) a disparu. - DataModel :
IsStarting/IsRunning/IsError+SetState(); le code-behind met à jour l'état sur les flux de succès/erreur (BuildUrl null → pilule rouge avec la raison). - Porte : build 0 erreurs ; smoke éditeur (Extras → Monster Studio/Magic Studio — nouveau menu + chargement du visualiseur).
- Note : le panneau de contexte par mode (outils de desc — ex. picker d'encounters sur Aurora) atterrit comme une rangée repliable en F3 (commentaire axaml).
v2.218.3.0
v2.218.5.0BETAPATCH
Seymour2 août 2026
ViewerShell SKIN : UI noclip cachée (logo/About/barre du bas)
WebView2Hosta gagnéInjectScriptOnDocumentCreated(script)— injecte un script dans chaque document créé (viaAddScriptToExecuteOnDocumentCreatedAsync, avec une file sûre avant l'init du runtime). Fondation pour de futurs skins/outils.- Skin noclip appliqué par le ViewerShell (descs
RequiresNoclip) : CSS+MutationObserver cachant#BottomBar(play/pause/fullscreen/share de noclip),#About(panneau de crédits avec leur logo),#studioSidePanelHelpBtn,.SettingsButton— le panneau fonctionnel reste (menu déroulant monstre/magie) ainsi que le canvas 3D. Leur menu par défaut a disparu ; le menu universel est le nôtre (barre d'outils du shell). - Porte : build 0 erreurs ; smoke éditeur (Extras → Monster Studio — UI noclip cachée, menu déroulant de monstres intact).
- Suivant : F2 (migrer les visualiseurs Magic/Model/Map) + évolution du skin (outils propres du shell remplaçant les menus déroulants noclip).
v2.218.4.0