업데이트 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에느브 → 스트이姆 르그이스트르이 →libraryfolders.vdf(우느에스크아프에 파싱, 트에스트에이블) → 공통 크아느드이드아트에스. 트이프드 결과GameEnvironmentReport(상태 오크/경고/오류 +EnvironmentIssue크오드에/姆에스스아그에/ActionableMessage) — UI 표시함 트이프드 상태, 절대 a 원시 스택 트르아크에.- 기준선: 233/233 PASS (223 + 10 새로운). ### REVISION ### REVISION
v2.197.1.1
v2.198.1.0BETAPATCH
Seymour2026년 7월 31일
P3-L3: operations-platform hardening (cancel/rollback/journal/lock/redaction) + resilience suite (12 tests)
Core/OperationExecutorV2.cs(보안 강화): 체크포인트(단계 시작 전, 작업 간, 승격 전, 승격 중)가 포함된ExecuteAsync(plan, CancellationToken)이며,StageAsync로 전파됩니다. 승격 시 자동 롤백이 적용됩니다(실패/취소 시 백업에서 already-promoted의 출력물을 복원하거나, 해당 승격으로 생성된 출력물을 제거함); journal.json (BackupRoot) (상태: 승격 중/성공/취소됨/실패 — 복구 계약, best-effort는 절대로 작업을 실패시키지 않음); 정적 잠금을 통해 승격 작업의 순차화 보장 (동시성 계약 — 동일한 출력에 대한 두 작업이 절대로 교차 실행되지 않음); redaction (LlmRedactor) 내 ErrorMessage/RecoveryInstructions/journal (비밀 정보는 실패 시점에 절대 노출되지 않음).FFXProjectEditor.Tests/Core/OperationResilienceTests.cs(신규, 12개 테스트): 단계 전/단계 도중 취소 (어댑터가 토큰을 관찰) → 아무것도 기록되지 않음; 주입된 프로모션 실패 → already-promoted 출력의 롤백 (원본 해시 복원); 저널 실패/성공 + 원본 바이트를 포함한 .bak 백업; 동시성(동일한 출력을 가진 2개의 병렬 실행 → 결과 보존, 하나의 완전한 성공); 실패 메시지에서 비밀 정보 삭제; 빈 실행 계획 → "없음 operations"; 금지된 차이(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 hardening (bounds guard + native truth) + Ghidra/Fahrenheit symbol-table import into the canonical DB (8,281 renames)
FfxLib/Save/FfxSaveSphereGrid.cs(수정):FfxSaveSphereGridNodeSnapshot.Read/Write/ReadActivation/WriteActivation는 이제NodeIndex(구형 FFXED 모델에서는 0..859)을ArgumentOutOfRangeException로 보호합니다. 이는 저장 버퍼에 대한 잠재적인 OOB 쓰기 문제를 수정합니다. 새로운 상수NativeTableBase(=8684) 및NativeMaxNodeIndex(=1279)는 네이티브 저장 용량을 노출합니다. XML 문서에서 +64 스큐와FfxSaveSphereGridRuntimeTable의 차이점을 명확히 설명하고, 860이 엔진 한계치인 아님임을 명시했습니다.FfxLib/Save/FfxSaveSphereGridRuntimeTable.cs(문서): cross-confirmed의 Fahrenheit / Ghidra 심볼 테이블 —eiAbmDataInit(SaveSphereGrid*)@ 0xA53DE0 및MsGetSaveAbilityMap() → SaveSphereGrid*@ 0x785000은 상태 블록이 실제 엔진 유형임을 입증합니다. 기본 용량은 노드 1280개 / 링크 1280개 / 커서 1개입니다.FfxLib/Save/FfxSaveBatchActions.cs(문서):ImportSphereGridRegion에서 레거시 +64 모델로 설명되어 있으며, 그리드 크기가 860을 초과할 경우 네이티브 경로(범위 8684..13579)가 명시되어 있습니다.- RE — Fahrenheit-crew/화씨 (Ghidra) symbol-table 임포트: 7,609개 함수 + 672개 전역 변수 이름 변경 기준 DB
ffxoficial.exe.i64(기준 (총 8,281개; 출처 USERDEFINED 460 + IMPORTED 2,816 + 필터링된 ANALYSIS 7,570; 프로젝트FFX_*이름을 덮어쓰지 않음 — 3,774개 보존됨); 전역 변수는 기본 타입을 얻음; 백업backups_ffxoficial\ffxoficial.exe.before_ghidra_renames_20260731_231338.i64. DB (포트 13338) 내부의ffxoficial_COPY.i64플러그인 ida-pro-mcp를 통해 팀의 작업 중인 RPC GUI로 전파됨: COPY에 7,440개 함수 + 490개 전역 변수 적용, 17개 건너뜀 (GUI 이름 보존됨), DB 저장됨; 백업ffxoficial_COPY.before_ghidra_renames_20260731_233813.i64. 발견 사항:LpAbilityMapEngine구조체 (0x12FC0; clusters128/nodes1024/links1024 — 문서에 전체 레이아웃), 정적.data버퍼0x16AD870(InitLpamng의 A572E0), 12 functions 와 a1024루프가 있는 12개 함수 매핑됨 (RenderPathNodes A50290, eiAbmCalc A53570, eiAbmParaGet A54860, ClearNodeTransforms A57120, ReadAndProcessInputState A57520, BuildLinkBatchSegment A57710, UpdatePlacementSlotTransform A58080, DialogDispatch A583E0, InitPlacementGrid A5B230, +3), 861 렌더링 (681DB0/7F4900), 원래 이름eiAbm*/+AbmapState_*/abmap_*,SaveSphereGrid타입 확인됨. 핵심 결론: 네이티브 세이브는 이미 1280/1280을 지원함 — 1024를 초과하는 병목은 세이브가 아닌 정적 런타임 구조체 + 루프 + 렌더링임. 문서: 해당 native save already supports 1280/1280 — 해당 bottleneck 으로 exceed 1024 임 해당 static runtime struct + loops + render, 아님 해당 save. Doc:docs/reverse/FFX_GHIDRA_FAHRENHEIT_SYMBOL_IMPORT_2026-07-31.md; 스크립트/보고서는work/_fahrenheit_probe/. - 상태:
Needs Testing— 녹색 build; 새로운 가드 가지고 있음 없음 out-of-range 크오느스우姆어스 (없음 크오드에 우스아그에 넘어 문서). ### PATCH
v2.198.1.0
v2.198.2.1BETAREVISION
Seymour2026년 7월 31일
fahrenheit-excel: 편집기에 실제 커널 필드 이름 적용 (KeyItem/Important + Treasure/takara) + “Excel” 컨테이너 설명 추가
- 출처: 두 번째 프아흐르느흐에이트 저장소(
fahrenheit-excel)에 8개의 새로운 구조체 추가 및excel.cs재작성 (에엑스크에르 컨테이너: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(화씨(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 · Build 0 오류. 문서:
docs/reverse/FFX_GHIDRA_FAHRENHEIT_SYMBOL_IMPORT_2026-07-31.md§fahrenheit-excel. ### PATCH
v2.198.2.0
v2.198.3.0BETAPATCH
Seymour2026년 7월 31일
P3-L4: release — `scripts/release_manifest.ps1` (verifiable manifest) + process doc
scripts/release_manifest.ps1(새로운, 운영): 릴리스 姆아느이프에스트 — 버전 읽기 에서<Version>에서 해당 크스프르오즈 (진실의 단일 공급원), SHA-256 의 모든.exe/.dllbuild 아르트이프아크트 (+.sha256스이드에크아르스 통해 .NET SHA256 — 크오姆프아트이블 와 함께 이 姆아치이느에'스 PS), 첫 번째 치아느그에르오그 항목 (cross-check),gitCommit/gitDirty(dirty-worktree 릴리스 = 얼어트) 및signing: "not-signed"(스이그느아처 절대 드에크르아르드 드오느에 없이 에엑스에크우트잉). 검증된: 103 아르트이프아크트스 에서 해당 릴리스 build 와 함께 올바른 흐아시에스.docs/ai/P3_RELEASE_2026-07-31.md(새로운): 7-단계 릴리스 흐름 (build → 테스트 → offline_ci → 배포 모든 대상 → 姆아느이프에스트 → 흐아시 브어이프이크아션 → 스이그느잉);.gitignore감사 (범위 이미 있음 — 브이느/객체/작업/.대비, 변경 없음 필요함; 없음 드에스트르우크트이브 정리 에서 a 우오르크트르이 와 함께 프오르에이그느 작업); 스이그느잉 문서화된 AS A PLAN (스이그느트우르/아우스에느트이크오드에 — 아님 에엑스에크우트드, 없음 크어트이프이크아트에 이姆프오르트드).- 편집기 동작 변경 없음 — 기준값 245/245PASS는 변경되지 않음. ### PATCH
v2.198.3.3
v2.198.3.1BETAREVISION
Seymour2026년 7월 31일
P3-L5: 짧은 Gemini 계약 (UI ↔ 크오르에)
docs/ai/P3_GEMINI_CONTRACT_2026-07-31.md(실제 타입을 기반으로 한 계약): 파일 소유권 (Core = backend / 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/themes는 협의를 통해서만 가능). 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 이드스: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.4BETAPATCH
Seymour2026년 8월 1일
SphereGrid sphere.bin adapted to the fahrenheit `Sphere` struct (real names + enums + corpus-proven validator fix)
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; 기존 유효성 검사기는 유효한 그리드를 거부함);Behavior0..2 유효성 검사 (코퍼스는 0..2만 증명); 메시지에 열거형이 인용됨.SphereGridExplorer(이름 변경): VMSphereGridSphereTypeEditorRow+ state + helpers + XAML이(가) 업데이트되었으며,SetSelectedOptions/diffs/baseline의 이름이 변경되었습니다.- 코퍼스 증명 (jppc
battle\kernel\sphere.bin, 50개 항목, elem 0x10): ACTIVATOR=1 (능력/파워/Mana/속도/Luck + 키L1–L4 special 8..11 + 친구 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 · Build 0 오류. 상태:
validated(byte-idempotent 르느아姆에스 + RT0/RoundTrip 이느트아크트). ### REVISION
v2.198.3.3
v2.198.4.0BETAPATCH
Seymour2026년 8월 1일
Clean no-hook RT2 test path for True New Node + crash-theory correction + external community confirmation (1024/1024/128)
SphereGridDeployPolicy.cs(revision): 해당 "no-hook 861/882 크르아시에스 위에 종료" 발견 내용 크아姆에 에서 RT2 실행함 의 해당 르트이르드 v5 흐우크 스택 (姆아느이프에스트/스이드에크아르/SEH) — 절대 에서 a 깨끗한 배포. 와 함께 오늘's 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(커뮤니티)이 자신의 에디터에서 add/tie/expand 기능을 테스트하고 있습니다. - 깨끗한 RT2 테스트 프르오트오크오르 문서화된 (문서 RE §외부 확인): 표준 → 스쿠아르에 모드 → +1 느오드에/+1 링크 → 치에크브오엑스 → 저장 → 배포 → 드이스프오스에이블 저장 → 열기/이동/종료 → 없음 충돌 = 크에이르잉 에엑스크에드드 (반복 900/1024); 충돌 = 르느드어 임 해당 크에이르잉 (2-바이트 patch, 없음 흐우크).
- 기준선: 245/245 PASS · Build 0 오류. 상태:
Needs Testing(사람 RT2). ### PATCH
v2.198.3.4
v2.198.4.1BETAPATCH
Seymour2026년 8월 1일
ATEL 비교 오퍼코드의 의미론적 수정 (0x0A/0x0B/0x0E/0x0F) — 인터프리터 디컴파일을 통해 입증됨
- 발견 사항 (출처: noclip.website
src/FinalFantasyX/script.ts— field-script opcode 열거형): 코덱 매핑 (GT=0x0A, LT=0x0B, GE=0x0E, LE=0x0F) 이 noclip inverted vs noclip (LT=0x0A, GT=0x0B...). 과 비교해 반전되어 있었습니다 의FFX_Atel_InterpretWorkerOpcodes@0x864180+FFX_FieldVM_PopOperand@0x86DE90(pop = top)의 디컴파일 결과로 입증됨: 스택[A(base), B(top)], 상태에서, 0x0B는A < B, 를 검사하고, 0x0A는A <= B(를 검사함 (0x0E/0x0F = 부동소수점 변형). 직접적인 "greater-than"는 존재하지 않습니다" — 컴파일러는A > B을[B, A] + 0x0B(B < A). 으로 표현합니다. RT0 게이트(구조적 round-trip)는 의미론적 오류를 포착할 수 없으며, 디컴파일 시에만 이러한 오류가 드러납니다. - 수정:
AiVarConditionBuilder(GreaterThan/GreaterOrEqual에서 순서가 바뀐[N, var]+ LT/LE가 출력되도록 수정; LessOrEqual 수정: 0x0F→0x0A),AiAutomation(필드/상태/Overdrive 가드:[threshold, field]+ LT; GT/GE 상수 제거),AiPhaseRotationRecipe(final-phase 가드:[FinalLimit, counter]+ LT),AiBibleCatalog(0x0A–0x0F 테이블을 실제 의미론에 맞게 수정)..i64에서 해당 사례(0x8646E4/0x864759)에 주석 처리됨 — GOLDEN RULE. 문서:docs/reverse/FFX_ATEL_COMPARISON_OPCODE_SEMANTICS_2026-08-01.md(3가지 출처: 인터프리터 = 사실, 느오크르이프 = 드이르크션, 프아흐르느흐에이트 = 명명법). - 검증:
--phase-rotation-rt0319/319 PASS · AI + 플랫폼 테스트 64/64 PASS · 기준치 254 (실패 1건은 새로운 SphereGrid-lane test 진행 중이며, 범위 외). ### PATCH
v2.198.4.0
v2.198.4.2BETAREVISION
Lulu2026년 8월 1일
C3-1: magic DLL resource-key catalog VALIDATED - draft premise refuted (0/149 keys index the root table; real semantics = host global table, runtime-populated)
v2.198.4.1