Update 2.218
8/2/2026
v2.218.0.0BETAMINOR
SeymourAug 2, 2026
VIEWERHUB F1: universal unification of the 3D viewers (1 port, zero python, zero browser)
StudioWebServer(Modules/Common/ViewerHub/): IN-PROCESS static HTTP server (TcpListener loopback:8769) with virtual host routing*.loopback(RFC 6761 — WebView2 resolves to loopback; each app sees its own "domain" root — solves absolute paths with no HTML rewriting). Static files + MIME + transparent junction + path traversal guard +GET /health. Port reclaim: if a legacy python (http.server) squats 8769, kills it viaGetExtendedTcpTable; otherwise honest status. Zero external process (nothing to leak).NoclipLocator: single discovery (envNOCLIP_ROOT→ walk-up →Downloads/Compressed) with nested-root fix (latent Aurora bug).ServeDirBuilder: noclip serve-dir (incremental dist + data junction).ViewerDescriptor+ViewerHubService: declarative viewer registry + single APIBuildUrl/Find/StatusText; initial descsmonster-studioandmagic-studio(hostnoclip.loopback).ViewerShell(Modules/Common/ViewerShell/): the universal menu — fixed bar (in-process server status, URL, Reload) + embedded WebView2;WebView2Hostcopied toCommon(legacy viewers keep the old copy until F2).- Wiring:
Main_Window— Monster Studio now opens the ViewerShell embed (no browser) + newmagic-studio-webhandler/case;ModuleCatalogPolicy—magic-studio-webentry +monster-studio-webentry updated (Embedded 3D Viewer). - Gate: Release build 0 errors (445 pre-existing warnings); StudioWebServer probe tests 7/7 PASS (health JSON, known/unknown host routing, js/bin MIME, path traversal via raw TCP, 404).
- Architecture doc:
docs/ai/VIEWERHUB_ARCHITECTURE_2026-08-02.md(approved plan F1–F6, user decisions). - Pending:
*.loopbackWebView2 spike (manual smoke: Extras → Monster Studio in the editor); F2 (migrate Magic/Model/Map viewers to the hub); target deploy (bin/Release was locked by the open editor during build).
v2.217.1.0
v2.218.1.0BETAPATCH
SeymourAug 2, 2026
i18n Wave 3b: 1,739 UNIQUE literals migrated — editor 100% resx-driven
- Lane IFRT-2
- Objective classification of the 1,759 uniques: 1,739 real UI vs 20 technical junk (paths/hex/numbers/symbols/ids — intentionally not migrated).
- 1,739
U_{slug}_{hash8}keys in all 9 resx (displayed text preserved byte-for-byte in EN/PT — zero visual behavior change; real translation stays as future incremental work). - 1,736 replacements across 94 .axaml files (
{x:Static res:Strings.U_...});MonsterAiEditor2*excluded (hard rule, 0 diffs).Strings.cs+1,739 properties. - Scripts:
_i18n_onda3b_classify.py,_i18n_onda3b_migrate.py,_i18n_onda3b_cs.py,_i18n_onda3b_check.py(0 residuals; the 10 "remaining" = regex false positives — XAML fragments inside strings, not UI). - Gate: build 0 errors; suite 381/381 PASS (another lane's StudioWebServerTests.cs moved aside for the test and restored intact).
- MILESTONE: hardcoded literal debt ZEROED — Waves 1+2+3a+3b = 2,294 literals migrated (2,414 → 0 real UI). Pending: manual PT/EN smoke in the editor. ### PATCH
v2.218.0.0
v2.218.2.0BETAPATCH
SeymourAug 2, 2026
ViewerHub F1 fix: `*.loopback` spike FAILED → loopback-IP URL
- Diagnosis (methodical): in-process server 100% OK (health 200, index 200, bundle 200, wasm 200 application/wasm, 1d/0080 bins 200) — the BLACK SCREEN was the WebView2 navigating to
noclip.loopback, which this Windows machine does NOT resolve (RFC 6761 not active in the OS resolver:Resolve-DnsName/GetHostAddressesfail). - Fix:
ViewerHubService.BuildUrlnow returnshttp://loopback:8769/index.html#ffx/...(direct IP, no DNS) — the noclip lives at the serve-dir root, absolute paths resolve with no rewriting. Virtual-host routing stays inStudioWebServer(theloopbackalias covers the current flow; virtual hosts remain for future apps). - Encoding fix:
ViewerHub.cs/ViewerShell_Control.axaml.cshad MOJIBAKE (PowerShell 5.1Set-Contentcorrupted UTF-8 in comments/strings while applying theViewerHub→ViewerHubServicerename) — files recreated via editor (correct UTF-8). Lesson: never rewrite .cs via PowerShellSet-Contentwith accents. - Gate: build 0 errors; tests 8/8 PASS (new
LoopbackAlias_ServesForPlainIpHost— the real hub flow). - Doc updated:
docs/ai/VIEWERHUB_ARCHITECTURE_2026-08-02.md§5 (spike result + documented fallback).
v2.218.1.0
v2.218.3.0BETAPATCH
SeymourAug 2, 2026
i18n: manual smoke AUTOMATED + 4 escaped Run.Text literals migrated
- Lane IFRT-2
StringsIntegrityTests(new, 3 tests) — replaces the manual smoke of ~96 modules: (1) every{x:Static res:Strings.X}reference in .axaml resolves to a Strings.cs property AND a neutral resx key; (2) every Strings.cs property has a neutral key; (3) zero raw UI literals in .axaml (with documented exception for technical junk — paths/hex/numbers — same criteria as the Wave 3b classifier).- 4 escaped literals (
Run Text=attributes with a space before=— the migration regex missed them):· partner hex:,/ 112 non-empty,+ →(MixTableEditor),Payload SHA256:(SaveEditorHub) →U_*keys in all 9 resx + Strings.cs + replaced. - Gate: build 0 errors; suite 384/384 PASS (381 + 3 new). The test caught real failures on first run (23 raw literals → analysis → 20 legitimate technical junk + 4 real migrated) — proof the automated smoke works.
- Translation flow now: new string = 1 key in Strings.resx + 1 prop in Strings.cs (the 8 satellites inherit EN via ResourceManager fallback); real translation = fill only the translated keys in satellites. ### PATCH
v2.218.2.0
v2.218.4.0BETAPATCH
SeymourAug 2, 2026
ViewerShell UNIVERSAL MENU v2 (browser-like pattern)
- New toolbar: compact
cardSoftwith 3 zones — (1) title + server status pill (3 states:iniciando…/servidor in-process/pillDangerwith the error — real StudioTheme classes:pillReadonly/pillDanger); (2) address bar (truncated URL with ToolTip — the "browser" inside the software); (3) universal actions (Reload). The old big card (which wasted vertical space) is gone. - DataModel:
IsStarting/IsRunning/IsError+SetState(); code-behind updates state on success/error flows (BuildUrl null → red pill with the reason). - Gate: build 0 errors; editor smoke (Extras → Monster Studio/Magic Studio — new menu + viewer loading).
- Note: the per-mode context panel (desc tools — e.g. encounter picker on Aurora) lands as a collapsible row in F3 (axaml comment).
v2.218.3.0
v2.218.5.0BETAPATCH
SeymourAug 2, 2026
ViewerShell SKIN: noclip UI hidden (logo/About/bottom bar)
WebView2HostgainedInjectScriptOnDocumentCreated(script)— injects a script into every created document (viaAddScriptToExecuteOnDocumentCreatedAsync, with a safe queue before runtime init). Foundation for future skins/tools.- Noclip skin applied by the ViewerShell (
RequiresNoclipdescs): CSS+MutationObserver hiding#BottomBar(noclip play/pause/fullscreen/share),#About(credits panel with their logo),#studioSidePanelHelpBtn,.SettingsButton— the functional panel stays (monster/magic dropdown) and the 3D canvas. Their default menu is gone; the universal menu is ours (shell toolbar). - Gate: build 0 errors; editor smoke (Extras → Monster Studio — noclip UI hidden, monster dropdown intact).
- Next: F2 (migrate Magic/Model/Map viewers) + skin evolution (own shell tools replacing noclip dropdowns).
v2.218.4.0