Atualização 2.218
02/08/2026
v2.218.0.0BETAMINOR
Seymour2 de ago. de 2026
VIEWERHUB F1: unificação universal dos viewers 3D (1 porta, zero python, zero browser)
StudioWebServer(Modules/Common/ViewerHub/): servidor estático IN-PROCESS HTTP (TcpListener loopback:8769) com roteamento de host virtual*.loopback(RFC 6761 — WebView2 resolve para loopback; cada app vê sua própria raiz de "domínio" — resolve caminhos absolutos sem reescrita HTML). Arquivos estáticos + MIME + junction transparente + guard de path traversal +GET /health. Reclamação de porta: se um python (http.server) squats 8769, kills it viaGetExtendedTcpTable; otherwise honest status. Zero external process (nothing para leak). legadoNoclipLocator: descoberta única (envNOCLIP_ROOT→ walk-up →Downloads/Compressed) com fix nested-root (bug latente da Aurora).ServeDirBuilder: noclip serve-dir (dist incremental + junction de dados).ViewerDescriptor+ViewerHubService: registro declarativo de viewers + único APIBuildUrl/Find/StatusText; descs iniciaismonster-studioemagic-studio(hostnoclip.loopback).ViewerShell(Modules/Common/ViewerShell/): o menu universal — barra fixa (status do servidor in-process, URL, Reload) + WebView2 embutido;WebView2Hostcopiado paraCommon(viewers legados mantêm a cópia antiga até F2).- Wiring:
Main_Window— Monster Studio agora abre o embed ViewerShell (sem browser) + novo handler/casemagic-studio-web;ModuleCatalogPolicy— entradamagic-studio-web+ entradamonster-studio-webatualizada (Embedded 3D Viewer). - Gate: build Release 0 erros (445 avisos preexistente); testes de probe StudioWebServer 7/7 PASS (health JSON, roteamento de host conhecido/desconhecido, js/bin MIME, path traversal via TCP raw, 404).
- Doc de arquitetura:
docs/ai/VIEWERHUB_ARCHITECTURE_2026-08-02.md(plano aprovado F1–F6, decisões do usuário). - Pendente:
*.loopbackWebView2 spike (smoke manual: Extras → Monster Studio no editor); F2 (migrar viewers Magic/Model/Map para o hub); deploy alvo (bin/Release estava travado pelo editor aberto durante o build).
v2.217.1.0
v2.218.1.0BETAPATCH
Seymour2 de ago. de 2026
i18n Wave 3b: 1.739 literais UNIQUE migrados — editor 100% resx-driven
- Lane IFRT-2
- Classificação objetiva dos 1.759 únicos: 1.739 UI reais vs 20 lixo técnico (paths/hex/números/símbolos/ids — intencionalmente não migrados).
- 1.739
U_{slug}_{hash8}chaves nos 9 resx (texto exibido preservado byte-for-byte em EN/PT — zero mudança visual de comportamento; tradução real fica como trabalho incremental futuro). - 1.736 substituições em 94 arquivos .axaml (
{x:Static res:Strings.U_...});MonsterAiEditor2*excluído (regra dura, 0 diffs).Strings.cs+1.739 propriedades. - Scripts:
_i18n_onda3b_classify.py,_i18n_onda3b_migrate.py,_i18n_onda3b_cs.py,_i18n_onda3b_check.py(0 residuais; os 10 "restantes" = falsos positivos de regex — fragmentos XAML dentro de strings, não UI). - Gate: build 0 erros; suíte 381/381 PASS (o StudioWebServerTests.cs de outra lane foi movido para o teste e restaurado intacto).
- MILESTONE: dívida de literal hardcoded ZEROED — Waves 1+2+3a+3b = 2.294 literais migrados (2.414 → 0 UI reais). Pendente: smoke manual PT/EN no editor. ### PATCH
v2.218.0.0
v2.218.2.0BETAPATCH
Seymour2 de ago. de 2026
fix ViewerHub F1: spike `*.loopback` FAILED → loopback-IP URL
- Diagnóstico (metódico): servidor in-process 100% OK (health 200, index 200, bundle 200, wasm 200 application/wasm, bins 1d/0080 200) — o BLACK SCREEN era o WebView2 navegando para
noclip.loopback, que esta máquina Windows NOT resolve (RFC 6761 não ativo no resolver OS:Resolve-DnsName/GetHostAddressesfalham). - Fix:
ViewerHubService.BuildUrlagora retornahttp://loopback:8769/index.html#ffx/...(IP direto, sem DNS) — o noclip vive na raiz serve-dir, caminhos absolutos resolvem sem reescrita. Roteamento Virtual-host fica emStudioWebServer(o aliasloopbackcobre o fluxo atual; hosts virtuais permanecem para apps futuros). - Fix de encoding:
ViewerHub.cs/ViewerShell_Control.axaml.cstinham MOJIBAKE (PowerShell 5.1Set-Contentcorrompia UTF-8 em comentários/strings ao aplicar o renameViewerHub→ViewerHubService) — arquivos recriados via editor (UTF-8 correto). Lição: nunca reescrever .cs via PowerShellSet-Contentcom acentos. - Gate: build 0 erros; testes 8/8 PASS (novo
LoopbackAlias_ServesForPlainIpHost— o fluxo real do hub). - Doc atualizado:
docs/ai/VIEWERHUB_ARCHITECTURE_2026-08-02.md§5 (resultado do spike + fallback documentado).
v2.218.1.0
v2.218.3.0BETAPATCH
Seymour2 de ago. de 2026
i18n: smoke manual AUTOMATED + 4 literais escapados Run.Text migrados
- Lane IFRT-2
StringsIntegrityTests(novo, 3 testes) — substitui o smoke manual de ~96 módulos: (1) toda referência{x:Static res:Strings.X}no .axaml resolve para uma propriedade Strings.cs AND uma chave resx neutra; (2) toda propriedade Strings.cs tem chave neutra; (3) zero literais crus UI no .axaml (com exceção documentada para lixo técnico — paths/hex/números — mesmos critérios do classificador Wave 3b).- 4 literais escapados (atributos
Run Text=com espaço antes de=— a regex de migração não pegou):· partner hex:,/ 112 non-empty,+ →(MixTableEditor),Payload SHA256:(SaveEditorHub) → chavesU_*nos 9 resx + Strings.cs + substituídos. - Gate: build 0 erros; suíte 384/384 PASS (381 + 3 novos). O teste pegou falhas reais na primeira execução (23 literais crus → análise → 20 lixo técnico legítimo + 4 reais migrados) — prova que o smoke automatizado funciona.
- Fluxo de tradução agora: string nova = 1 chave em Strings.resx + 1 prop em Strings.cs (os 8 satellites herdam EN via fallback ResourceManager); tradução real = preencher só as chaves traduzidas nos satellites. ### PATCH
v2.218.2.0
v2.218.4.0BETAPATCH
Seymour2 de ago. de 2026
ViewerShell UNIVERSAL MENU v2 (padrão browser-like)
- Nova toolbar:
cardSoftcompacta com 3 zonas — (1) título + pílula de status do servidor (3 estados:iniciando…/servidor in-process/pillDangercom o erro — classes StudioTheme reais:pillReadonly/pillDanger); (2) barra de endereço (URL truncado com ToolTip — o "browser" dentro do software); (3) ações universais (Reload). O card grande antigo (que desperdiçava espaço vertical) sumiu. - DataModel:
IsStarting/IsRunning/IsError+SetState(); code-behind atualiza o estado nos fluxos de sucesso/erro (BuildUrl null → pílula vermelha com a razão). - Gate: build 0 erros; smoke do editor (Extras → Monster Studio/Magic Studio — novo menu + carregamento do viewer).
- Nota: o painel de contexto per-mode (ferramentas de desc — e.g. picker de encontro na Aurora) entra como linha recolhível em F3 (comentário axaml).
v2.218.3.0
v2.218.5.0BETAPATCH
Seymour2 de ago. de 2026
ViewerShell SKIN: noclip UI escondido (logo/About/barra inferior)
WebView2HostganhouInjectScriptOnDocumentCreated(script)— injeta um script em todo documento criado (viaAddScriptToExecuteOnDocumentCreatedAsync, com fila segura antes da init do runtime). Fundação para futuros skins/tools.- Skin do noclip aplicado pelo ViewerShell (descs
RequiresNoclip): CSS+MutationObserver escondendo#BottomBar(play/pause/fullscreen/share do noclip),#About(painel de créditos com o logo deles),#studioSidePanelHelpBtn,.SettingsButton— o painel funcional fica (dropdown de monstro/magia) e o canvas 3D. O menu default deles sumiu; o menu universal é nosso (toolbar do shell). - Gate: build 0 erros; smoke do editor (Extras → Monster Studio — noclip UI escondido, dropdown de monstro intacto).
- Próximo: F2 (migrar viewers Magic/Model/Map) + evolução do skin (ferramentas próprias do shell substituindo os dropdowns do noclip).
v2.218.4.0