更新 2.198
2026/8/1
v2.198.0.0BETAMINOR
Seymour2026年7月31日
P3-L2: `GameEnvironmentProbe` (執行環境健康檢查)
Core/GameEnvironmentProbe.cs(新增,10 項測試): 版本偵測器 / 執行環境健康檢查 — 符合 P3 合約(提示 L410-416:偵測器 · 安裝/設定/權限/路徑合約 · 備援 · 不包含原始堆疊追蹤的可操作錯誤 · 相容性矩陣)。偵測:FFX.exe(透過 FileVersionInfo 的data\jppc/intl/us/eu版本與區域)、modules\ffx-probe.dll+modules\FfxHooksDll.dll、作用中旗標(config\*.flag與根目錄)、透過FfxProbe_Service的即時探測(MMFLocal\FFXProbeBlock_v1— IsAttached/IsHooked/心跳、read-only,未觸發任何項目)。遊戲根目錄搜尋:FFX_GAME_ROOT環境變數 → Steam 登錄檔 →libraryfolders.vdf(解除跳脫解析,可測試)→ 常見候選路徑。型別化結果GameEnvironmentReport(狀態 Ok/警告/錯誤 +EnvironmentIssue代碼/訊息/ActionableMessage)— UI 顯示型別化狀態,絕不顯示原始堆疊追蹤。- 基準線:233/233 PASS(223 + 10 新增)。 ### REVISION ### REVISION
v2.197.1.1
v2.198.1.0BETA
Seymour2026年7月31日
P3-L3:operations-platform 強化(取消/回滾/日誌/鎖定/編輯遮蔽)+ 韌性測試套件(12 項測試)
Core/OperationExecutorV2.cs(強化):ExecuteAsync(plan, CancellationToken)搭配檢查點(於階段前、操作之間、推廣前、推廣期間)並傳播至StageAsync;自動回滾於推廣時(失敗/取消從備份還原 already-promoted 輸出,或移除由此次推廣建立的輸出);journal.json 於 BackupRoot(狀態:推廣中/成功/已取消/失敗 — 復原合約,best-effort 絕不使操作失敗);靜態鎖定序列化推廣(並發合約 — 2 個對同一輸出的操作永不交錯);編輯遮蔽(LlmRedactor)於 ErrorMessage/RecoveryInstructions/日誌中(機密絕不出現在失敗表面)。FFXProjectEditor.Tests/Core/OperationResilienceTests.cs(新,12 項測試): 在階段前取消/在階段期間取消(適配器觀察令牌)→ 無任何寫入;注入推廣失敗 → 回滾 already-promoted 輸出(原始雜湊已還原);日誌失敗/成功 + .bak 備份含原始位元組;並發(2 個平行執行同一輸出 → 完整結果,一個完全勝出者);機密從失敗訊息中遮蔽;空計劃 → "無操作";禁止的差異(EditSession.Build 拒絕允許清單外的欄位);OperationPlan JSON round-trip;失敗收據一致(FilesWritten=0)。- 基準:245/245 PASS(233 + 12 新)。 ### MINOR ### MINOR
v2.198.0.0
v2.198.2.0BETAPATCH
Seymour2026年7月31日
FfxSaveSphereGrid 強化(邊界防護 + 原生真實性) + Ghidra/Fahrenheit symbol-table 匯入至標準 DB(8,281 項重新命名)
FfxLib/Save/FfxSaveSphereGrid.cs(修正 ):FfxSaveSphereGridNodeSnapshot.Read/Write/ReadActivation/WriteActivation現在會以可操作的NodeIndex(0..859 in the legacy FFXED model) with actionableArgumentOutOfRangeException— fixes a latent OOB write into the save buffer; new constantsNativeTableBase(=8684)和NativeMaxNodeIndex(=1279) expose the native save capacity; XML docs clarify the +64 skew vsFfxSaveSphereGridRuntimeTableand that 860 is NOT the engine limit.FfxLib/Save/FfxSaveSphereGridRuntimeTable.cs(文件 ): cross-confirmed by the Fahrenheit/Ghidra symbol table —eiAbmDataInit(SaveSphereGrid*)@ 0xA53DE0 andMsGetSaveAbilityMap() → SaveSphereGrid*@ 0x785000 prove the state block is a real engine type; native capacity 1280 nodes / 1280 links / cursor.FfxLib/Save/FfxSaveBatchActions.cs(文件 ):ImportSphereGridRegion被記錄為舊版 +64 模型;指出了用於超過 860 格網的原生路徑(範圍 8684..13579)。- RE — Fahrenheit-crew/fahrenheit (Ghidra) symbol-table import: 7,609 functions + 672 globals renamed on the base DB
ffxoficial.exe.i64上重新命名了 7,609 個函式 + 672 個全域變數 USER_DEFINED 460 + IMPORTED 2,816 + filtered ANALYSIS 7,570; never overwrites projectFFX_*名稱 — 保留了 3,774 項);全域變數已賦予基本型別;備份backups_ffxoficial\ffxoficial.exe.before_ghidra_renames_20260731_231338.i64。 Propagated to the team's working DBffxoficial_COPY.i64via the ida-pro-mcp plugin RPC inside the GUI (port 13338): 7,440 functions + 490 globals applied on the COPY, 17 skipped (GUI names preserved), DB saved; backupffxoficial_COPY.before_ghidra_renames_20260731_233813.i64。 發 現:LpAbilityMapEnginestruct (0x12FC0; clusters[128]/nodes[1024]/links[1024] — full layout in doc), static.data緩衝區0x16AD870(InitLpamng @ A572E0已對應 12 個包含1024迴圈 的函式RenderPathNodes A50290, eiAbmCalc A53570, eiAbmParaGet A54860, ClearNodeTransforms A57120, ReadAndProcessInputState A57520, BuildLinkBatchSegment A57710, UpdatePlacementSlotTransform A58080, DialogDispatch A583E0, InitPlacementGrid A5B230, +3), render 861 (681DB0/7F4900),原始名稱eiAbm*/+AbmapState_*/abmap_*,SaveSphereGrid型別已確認。關鍵結論: 原生儲存已支援 1280 /1280 — 要超過 1024 的瓶頸在於靜態執 行時期結構體 + 迴圈 + 渲染,而非儲存。文件:docs/reverse/FFX_GHIDRA_FAHRENHEIT_SYMBOL_IMPORT_2026-07-31.md;腳本/報告位於work/_fahrenheit_probe/。狀 - 態:
Needs Testing— green build; new guards have no out-of-range consumers (no code usage beyond docs). ### PATCH
v2.198.1.0
v2.198.2.1BETAREVISION
Seymour2026年7月31日
fahrenheit-excel: 真實核心欄位名稱已套用至編輯器 (KeyItem/重要 + 寶物/takara) + "Excel" 容器已記錄
- 來源: 第二個 fahrenheit 儲存庫 (
fahrenheit-excel),含有 8 個新結構 +excel.cs重寫 (Excel 容器:ExcelProlog0x8 +ExcelHeader0xC +ExcelTextOffset0x4 — 符合我們的Customization_File.ReadHeader, HeaderLength 0x14)。 FfxLib/Common/KeyItem_File.cs+ KeyItemEditor (重新命名):PrimerByte10/RawByte11/RawByte12/OrderingByte13→ItemType/ItemValue/Icon/Number(真實的 Ghidra 名稱;0x10 = "是 Al Bhed Primer?",0x13 = 入門編號) — XAML、摘要與 RT0 已更新。FfxLib/Treasure/Treasure_File.cs+ TreasureEditor + BukiGetTreasureCatalog + TaskRewardGameFileLoader + TreasureRt0 (重新命名):Treasure_Entry.Type→ItemId(確認 fahrenheit 的Treasure{item_id u16});VMTreasureRow.Type/TypeHex/TypeDecimal→ItemId/ItemIdHex/ItemIdDecimal;XAML 繫結已更新。- 確認事項:
MixRecipe= ushort[0x70] 符合MixTable_File(EntryLength 0xE0);SphereGridNodeType.amount@0x14確認IncreaseAmount;SphereGridNodeTypeInfo→SphereGridNodeTypeUiInfo(lpamngnode_type_infos陣列是 UI-only)。 - 已記錄(供未來撰寫者參考):
Sphere(ACTIVATOR/MODIFIER + 11 屬性位元遮罩 + NORMAL/UNLIMITED 範圍),Rate,WeaponName,HelpText/NameHelpText,Treasure。 - 基準線:245/245 PASS · 建置 0 錯誤。文件:
docs/reverse/FFX_GHIDRA_FAHRENHEIT_SYMBOL_IMPORT_2026-07-31.md§fahrenheit-excel。 ### PATCH
v2.198.2.0
v2.198.3.0BETA
Seymour2026年7月31日
P3-L4:發行 — `scripts/release_manifest.ps1` (可驗證的資訊清單) + 流程文件
scripts/release_manifest.ps1(新增,營運中): 發行資訊清單 — 版本讀取自 csproj 中的<Version>(事實來源),每個 SHA-256/.exe建置成品的.dll(加上透過 ..sha256的 NET SHA256 側車 — 與此機器的 PS 相容),第一個變更日誌條目 (cross-check),gitCommit/gitDirty(dirty-worktree 發行 = 警示) 以及signing: "not-signed"(未執行絕不宣告簽署完成)。已驗證:來自 Release 建置的 103 個成品,雜湊正確。docs/ai/P3_RELEASE_2026-07-31.md(新增): 7 步驟發行流程 (建置 → 測試 → offline_ci → 部署所有目標 → 資訊清單 → 雜湊驗證 → 簽署);.gitignore稽覈 (覆蓋範圍已存在 — bin/obj/work/.vs,無需變更;在工作樹中若有外來工作不會進行破壞性清除);已記錄簽署 AS A PLAN (signtool/Authenticode — 未執行,未匯入憑證)。- 無編輯器行為變更 — 基準線 245/245 PASS 未更動。 ### PATCH
v2.198.3.3
v2.198.3.1BETAREVISION
Seymour2026年7月31日
P3-L5: 簡短 Gemini 合約 (UI ↔ Core)
docs/ai/P3_GEMINI_CONTRACT_2026-07-31.md(基於真實型別的合約): 檔案所有權 (Core = 後端 / Modules+AXAML = UI); 公開 DTO (CapabilityDescriptor, OperationPlanPreview/ChangeSetSummary, OperationProgress, CommitReceipt, ValidationResult, OperationResult, FilePreviewSummary/OperationPreview, GameEnvironmentReport); 指令 (EditSession fluent, OperationExecutorV2, OperationPreview, ReceiptBuilder, GameEnvironmentProbe); 型別化狀態 載入中/空/不可用/警告/封鎖/失敗 並帶有真實來源; ValidationIssue 代碼; 10 個真實能力 ID; 模擬/暫定 (啟發式 Steam 探索, LAB FfxProbe_Service, opt-in LlmHttpAdapter, OperationProgress 未完整接線); 嚴格規則 (UI 絕不在 OperationPlan 外部建立寫入器; 訊息已編輯; AXAML/主題僅在協調下進行)。Read-only — 基準 245/245 PASS 未更動。 ### PATCH
v2.198.3.0
v2.198.3.2BETAREVISION
Seymour2026年7月31日
P3-L6: per-family RT2 協定(可重現、已記錄)
docs/ai/P3_RT2_PROTOCOL_2026-07-31.md(協定;執行 = 人類運行時):不同的 RT0/RT1/RT2 帶有退出閘門 (RT0 = CLI byte-identity 閘門;RT2 = 可重現的記錄前/後日誌 + 拋棄式存檔);會話前提條件(探針已部署、ffxprobectl mon、拋棄式存檔、編輯器已關閉);相位旋轉家族試行 分 7 個步驟(應用配方 → 哈希 H2 → 使用原始備份 H1 部署 → 戰鬥 → 5 個觀察回合 → read-only counter-var 讀取 → 還原 H1 → 僅憑日誌提升);per-family 檢查清單(探針 PROVEN/強制戰鬥 1 場景/相位旋轉待處理/鉤子部分完成/read-only 探針);提升規則(絕不從 RT0 晉升到生產環境,除非有 RT2;絕不使用主要存檔;絕不 CreateRemoteThread);引用的強制戰鬥矛盾(PROVEN 機制 / LAB 產物)。Read-only — 基線 245/245 PASS 未觸及。 ### REVISION ### REVISION
v2.198.3.1
v2.198.3.3BETAREVISION
Seymour2026年8月1日
Gemini 提示已更新:完整 P3 後端已反映 (245/245,執行器取消/回滾/日誌/鎖定,真實適配器 ID,強制 UI↔核心合約)
docs/ai/PROMPT_GEMINI_UI_UX_FINAL_2026-08-01.md(已更新): 包含版本2.198.3.2的標頭 + 245/245 PASS;強制閱讀現在包含P3_GEMINI_CONTRACT_2026-07-31.md(項目 5 — 官方 UI↔核心合約);核心表格已更新OperationExecutorV2(CancellationToken 4 個檢查點,自動回滾,journal.json, PromoteGate,已編輯訊息) + 新型別OperationPreview/FilePreviewSummary(3 層差異);適配器表格已修正 (10 個已註冊 — 原本是「8」但卻有 10 行 — 且 REAL ID:ability-command和atel-recipe-phase-rotation,這些是錯誤的);GameEnvironmentProbe含探索 (環境/註冊表/libraryfolders.vdf);新的「後端狀態」區塊 (245/245,可信賴的執行器,already-redacted 訊息,exception-free 健康檢查,3 層預覽,發行清單,RT2 協定,other-lane changes — FfxSaveSphereGrid 邊界防護,華氏重新命名,已知已註解的 FAILmcyt00_21);限制現在包含 選擇性提交 (工作線 race — 從不git add -A). No behavior change — baseline 245/245 PASS untouched. ### REVISION ### REVISION
v2.198.3.2
v2.198.3.4BETA
Seymour2026年8月1日
SphereGrid sphere.bin 已配合 fahrenheit `Sphere` 結構調整(真實名稱 + 列舉 + corpus-proven 驗證器修正)
FfxLib/SphereGrid/SphereGrid_File.cs(+Write.cs) (重新命名+列舉):SphereGridSphereTypeEntryActionValue/ActivationBitfield/RangeValue/AlwaysZero→Behavior/Activates/Range/Reserved0x0E(Ghidra/fahrenheitSphere名稱); 新增列舉SphereBehavior(None/Activator/Modifier)、SphereTargets[Flags] (11 項屬性,All=0x07FF— 位元順序尚未證實, 原版數值已記錄)、SphereRange(None/Normal/Unlimited=0x20); 衍生屬性BehaviorKind/ActivatesTargets/RangeKind;ActionLabel已修正 ("Mutator"→"Modifier")。Core/Writers/SphereGridAdapter.cs(修正+強化): 鍵值已更名(Behavior/Activates/Range/Reserved0x0E);SpecialRole驗證器已修正 0x0F→0x1F(原版語料使用了最高到 24 的特殊角色 —— sphere.bin 佔用 14..29 槽位;舊驗證器會拒絕合法的網格);Behavior驗證範圍為 0..2(語料證實僅使用 0..2);訊息中引用列舉名稱。SphereGridExplorer(更名): VMSphereGridSphereTypeEditorRow+ 狀態 + 輔助函式 + XAML 已更新;SetSelectedOptions/diffs/baseline 已更名。- 語料驗證(jppc
battle\kernel\sphere.bin,50 筆,elem 0x10): ACTIVATOR=1(Ability/Power/Mana/Speed/Luck + Key L1–L4 特殊 8..11 + Friend 0x07FF),MODIFIER=2(Return=1、Teleport=2、Clear=3、Master=4),範圍 0x01 NORMAL / 0x20 UNLIMITED;索引與SphereGridNodeSphereRequirementKind一致(Ability=0..Luck=4)。文件:docs/reverse/FFX_GHIDRA_FAHRENHEIT_SYMBOL_IMPORT_2026-07-31.md§sphere.bin。 - 基準:245/245 PASS · 建置 0 錯誤。狀態:
validated(byte-idempotent 重新命名 + RT0/RoundTrip 完整保留)。 ### REVISION
v2.198.3.3
v2.198.4.0BETAPATCH
Seymour2026年8月1日
清理 no-hook RT2 測試路徑,針對 True New Node + crash-theory 修正 + 外部社群確認 (1024/1024/128)
SphereGridDeployPolicy.cs(REVISION):「no-hook 861/882 退出時崩潰」的發現來自已淘汰的 v5 掛鉤堆疊的 RT2 次執行(清單/側車/SEH)——絕非來自乾淨部署。隨著今日的 RE(header-driven 引擎;靜態LpAbilityMapEngine1024/1024/128;原生存檔 1280/1280),計數 ≤ 1024 無需掛鉤。疑似真正上限:渲染(681DB0861×48 緩衝區 +7F4900n861 >= 861閘門)。新的 opt-in 覆寫builder.AllowRuntimeTestDeploy(預設 OFF)解鎖 SaveToProject/SaveSquareToProject,並為乾淨測試變更計數。SphereGrid_File.Builder.cs:AllowRuntimeTestDeploy屬性 + 文件。SphereGridCanvas_DataModel.cs+SphereGridCanvas_Control.axaml:「允許 RT2 測試部署 (no-hook)」工具列核取方塊;RefreshTopologySafetySummary顯示測試狀態(🧪 已發布,附帶 disposable-save 警告 / 🚫 已封鎖,附帶修正後的說明)。- 外部確認: EvelynTSMG (fahrenheit-crew) 確認上限為 1024 節點 / 1024 連結 / 128 叢集 — 與我們證明的
LpAbilityMapEngine完全吻合(陣列位於 0x808/0xA808/0x8,.data緩衝區 0x16AD870)。Dragoon(社羣)正在他的編輯器中測試新增/連結/展開。 - 已記錄乾淨的 RT2 測試協定(文件 RE §外部確認):標準 → 方塊模式 → +1 節點/+1 連結 → 核取方塊 → 儲存 → 部署 → 可拋棄存檔 → 開啟/移動/退出 → 無崩潰 = 超出上限(重複 900/1024);崩潰 = 渲染即為上限(2 位元組修補,無掛鉤)。
- 基準線:245/245 PASS · 建置 0 錯誤。狀態:
Needs Testing(人工 RT2)。 ### PATCH
v2.198.3.4
v2.198.4.1BETAPATCH
Seymour2026年8月1日
semantic fix of ATEL comparison opcodes (0x0A/0x0B/0x0E/0x0F工作
- 先前:
v2.198.4.0] - Discovery (source: noclip.website
src/FinalFantasyX/script.ts— field-script 編解碼 映射 (GT=0x0A, LT=0x0B, GE=0x0E, LE=0x0F) 相較於 noc lip (LT=0x0A, GT=0x0B...) 是 反向的 。經由FFX_Atel_InterpretWorkerOpcodes@0x864180+FFX_FieldVM_PopOperand@0x86DE90的反編譯確認 (彈出 = 頂端): 使用堆疊[A(base), B(top)]時, 0x0B testsA < B, 0x0A testsA <= B(0x0E/0x0F = float variants). There is no direct "greater-than— 編 譯器將A > B表達為[B, A] + 0x0B(B < A). The RT0 gate (structural round-trip修 - 正:
AiVarConditionBuilder(GreaterThan/GreaterOrEqual now emit swapped order[N, var]+ LT/LE; LessOrEqual fixed 0x0F→0x0A),AiAutomation(field/status/Overdrive guards:[threshold, field]+ LT; GT/GE constants removed),AiPhaseRotationRecipe(final-phase guard:[FinalLimit, counter]+ LT),AiBibleCatalog(0x0A–0x0F table corrected with real semantics)..i64commented at the cases (0x8646E4/0x864759) — GOLDEN RULE. Doc:docs/reverse/FFX_ATEL_COMPARISON_OPCODE_SEMANTICS_2026-08-01.md(三個來源:直譯器 = 事實真相 - ,noclip = 方向,fahr enheit = 命名)。驗證:
--phase-rotation-rt0319/319 PASS · AI + platform tests 64/64 PASS · baseline 254 (1 failure is a new SphereGrid-lane test in progress, out of scope). ### PATCH
v2.198.4.2BETAREVISION
Lulu2026年8月1日
C3-1: 魔法 DLL resource-key 目錄 VALIDATED - 草案前提遭駁斥 (0/149 個金鑰索引根資料表;實際語義 = 主機全域表,runtime-populated)
v2.198.4.1