Update 2.18
6/6/2026
v2.18.0BETA
Seymour
MODEL VIEWER (HD) in the editor: a 3D gallery of the 816 textured+animated models
- The plot twist ("this is going to have to run inside the editor") became a feature: a new "Model Viewer (HD) 🐉" button in the Extras card → opens
RuntimeTools/FFXModelViewerWeb(three.js + GLTFLoader) served over loopback HTTP (the same PROVEN Magic Viewer/Aurora recipe —python -m http.server, distinct port 8767; HTTP mandatory for the catalogfetch()+ GLTFLoader of/work/...). The viewer is an animated gallery: a unified catalog of 816 models (modelviewer-catalog.json, generated from the HD-lane baseline — pc/sum/npc/mon/obj/wep), filter by category + verdict + search, thumbnails, and animation-clip playback (AnimationMixer + clip selector) + orbit/grid/wire/spin/fit. It consumes exactly the glTFs baked in the HD saga (META 1 + pure-HD) — no re-baking.ModelViewerLauncher.cs(clone ofMagicViewerLauncher) + a button inMain_Window.axaml/handler. Build 0 errors; serve proven (catalog/index/gltf = 200). csproj bump (real UI feature). Phase 2 queued (owner decision): host the SAME viewer in an editor WebView panel (no browser) — needs one nuget; the three.js engine is host-agnostic. Docs:FFX_MODELVIEWER_EDITOR_2026-06-06.md
v2.17.0
v2.18.1BETA
Seymour
self-audit: 6 of MY OWN (Jarvis) bugs fixed (found in an adversarial 2-chat review, each finding verified by a 2nd agent):
- Ps3MagicBrowser: the first texture of every folder decoded SYNCHRONOUSLY on the UI thread (the freeze I claimed to have removed) and decoded again on the background — now row[0] is left to the background pass,
DecodeRowsskips already-decoded rows (no double-decode), anddecodeGenerationis nowvolatile(worker↔UI visibility). - Monster AI Editor: editing the hex (
AiEditRow) or opcode/operand in the AI Assembler (AiAsmRow) did not update the on-screen meaning —AiEditRownow raisesOnPropertyChanged(Meaning)in the hex AND command setters;AiAsmRowbecameObservableObjectand notifies Meaning/Label/HasOperand. - OpcodeHelp: wrong opcode tooltips (
StartsWith("PUSHFF")never matched;PUSHFfloat-const fell into the register-bank help) — rewritten to dispatch onOperandKindOf(the PROVEN kind), not fragile mnemonic prefixes. - MagicViewerLauncher: the ROOT of your "Waiting for catalog" — it opened the browser and returned "success" even when python never came up; now
EnsureViewerServerreturns a bool, the poll is ~6s (cold start), honest status on failure, cache-bust on the URL (stale stub), and it kills the python on ProcessExit (no leaked process). (Fixes in MY files only. The other chat's findings went todocs/ai/HANDOFF_CODE_AUDIT_HD_MODELS_2026-06-06.mdfor THEM to verify+fix — I did not touch their lane.) csproj bump.