更新 2.17
2026/6/6
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 孤立的(編輯器中 沒有按鈕)。新增 「Magic Viewer (Web) 🪄」PS3 Magic (HD)") +MagicViewerLauncher.cs,透過RuntimeTools/FFXMagicViewerWeb提供python -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 Effects新增搜尋(pa ckage/工作 線 + kern el/工作線)與 empty-state (actionable message vs a blank pane); the "Counts" card no longer echoes "Summary". PS3Magic (HD):縮圖 解碼移 UI (大型資料夾不再凍結——列會先 顯示「pending」並透過Dispatcher串流載入,並使用 generation token 防止過期掃描)、 texture-name ,以及「開啟資料夾/開啟檔案」按鈕現在會綁定IsEnabled(no more dead-click). (Spell names by id stay BLOCKED — no name table exists; themagic.bin→magic_####連接是被阻斷的因 - 果橋;並非捏造。) C — root+88 RE (Pass12, doc-only, applied to the REAL db
FFX_recon.i64): 已關閉 Pas s11 的兩個未結事 項。(1) 誰寫入執 行時期 root:sub_7FD9A0在開機階段(FFX_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) roo t+88 的 最終寫入者:sub_817200= opcode handler 0x21 inFFX_Magic_OpcodeHandlerTable(0xC48EC8);在 family0x1000上,它會寫入root+84=root+88=same cursor in the work-copy, written back to the root at phase end. 5 renames +[pass12]條註解。文件docs/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.)