Update 2.17
6/6/2026
v2.17.0BETA
Seymour
Magic Viewer FINALIZED (3-lane parallel workflow): web viewer wired into the editor + menus polished + root+88 RE closed:
- Lane A — web viewer wired into the editor:
FFXMagicViewerWeb(Codex-built — Spell Index, Package Graph, Texture Stack, Runtime Evidence, Effect Stage, Crosswalk + 6 indices/catalog) was orphaned (no editor button). New "Magic Viewer (Web) 🪄" nav button (Extras group, next to "PS3 Magic (HD)") +MagicViewerLauncher.csthat servesRuntimeTools/FFXMagicViewerWebviapython -m http.server(port 8766, distinct from Aurora's 8765) and opens the browser — identical recipe to Aurora/MapViewer (HTTP is mandatory: app.jsfetch()es its catalog →file://would CORS-hang). Did NOT use SpiraForgeHub'sfile://path. - Lane B — 2 magic menus polished (read-only, no writer): PS2
Magic Effectsgot search (package/lane + kernel/lane) and an honest empty-state (actionable message vs a blank pane); the "Counts" card no longer echoes "Summary". PS3Magic (HD): thumbnail decode moved off the UI thread (heavy folders no longer freeze — rows show "pending" and stream in viaDispatcher, with a generation token against stale passes), texture-name search, and Open Folder/Open File buttons now bindIsEnabled(no more dead-click). (Spell names by id stay BLOCKED — no name table exists; themagic.bin→magic_####join is a blocked causal bridge; not fabricated.) - Lane C — root+88 RE (Pass12, doc-only, applied to the REAL db
FFX_recon.i64): closed Pass11's two open items. (1) Who populates the runtime root:sub_7FD9A0installsFFX_Magic_RuntimeRootTable[0x12A4080]ONCE at bootstrap (bin-load) and zeroesroot+88; phases don't swap the table — they reuse the same root and mutate in-place. (2) Final root+88 writer:sub_817200= opcode handler 0x21 inFFX_Magic_OpcodeHandlerTable(0xC48EC8); on family0x1000it writesroot+84=root+88=same cursor in the work-copy, written back to the root at phase end. 5 renames +[pass12]comments applied/saved in the real db. Docdocs/reverse/FFX_MAGIC_ROOT88_WRITER_PASS12_2026-06-06.md. (Honest: concrete spell→opcode, engine-accurate timing, and full writer coverage stay BLOCKED.) - csproj bump (real UI: launch + polish). (Lane C is RE/doc-only but lands in the same entry.)