Update 2.198
1.8.2026
v2.198.0.0BETAMINOR
Seymour31. Juli 2026
P3-L2: `GameEnvironmentProbe` (Laufzeit-Umgebungs-Health-Check)
Core/GameEnvironmentProbe.cs(neu, 10 Tests): Versionsdetektor / Health-Check der Laufzeitumgebung — erfüllt den P3-Vertrag (Prompt L410-416: Detektor · Install/Config/Permission/Path-Vertrag · Fallback · Actionable Error ohne rohen Stack-Trace · Kompatibilitätsmatrix). Erkennt:FFX.exe(FileVersionInfo-Version + Region viadata\jppc/intl/us/eu),modules\ffx-probe.dll+modules\FfxHooksDll.dll, aktive Flags (config\*.flagund Root), Live-Probe viaFfxProbe_Service(MMFLocal\FFXProbeBlock_v1— IsAttached/IsHooked/Heartbeat, read-only, nichts bewaffnet). Spiel-Root-Erkennung:FFX_GAME_ROOT-Env → Steam-Registry →libraryfolders.vdf(unescape-Parse, testbar) → common-Kandidaten. Typisiertes ErgebnisGameEnvironmentReport(State Ok/Warning/Error +EnvironmentIssueCode/Message/ActionableMessage) — UI zeigt typisierten State, nie einen rohen Stack-Trace.- Baseline: 233/233 PASS (223 + 10 neue). ### REVISION ### REVISION
v2.197.1.1
v2.198.1.0BETAPATCH
Seymour31. Juli 2026
P3-L3: Härtung der Operationsplattform (Abbruch/Rollback/Journal/Sperre/Redaktion) + Resilienz-Suite (12 Tests)
Core/OperationExecutorV2.cs(hardening):ExecuteAsync(plan, CancellationToken)mit Checkpoints (vor Stage, zwischen Ops, vor Promote, während Promote) und Propagation inStageAsync; automatisches Rollback beim Promote (Fehler/Doch nicht stellt bereits promotete Outputs aus Backups wieder her oder entfernt durch diesen Promote erstellte Outputs); journal.json in BackupRoot (Zustände promoting/success/cancelled/failed — Recovery-Vertrag, best-effort schlägt die Op nie fehl); statisches Lock serialisiert Promote (Concurrency-Vertrag — 2 Ops auf demselben Output interleaven nie); Redaction (LlmRedactor) in ErrorMessage/RecoveryInstructions/journal (Secret erscheint nie auf Fehlerflächen).FFXProjectEditor.Tests/Core/OperationResilienceTests.cs(neu, 12 Tests): cancel vor Stage / während Stage (Adapter beobachtet Token) → nichts geschrieben; injizierter Promote-Fehler → Rollback des bereits-promote-Outputs (Original-Hash wiederhergestellt); journal failed/success + .bak-Backup mit Original-Bytes; Concurrency (2 parallele Ausführungen desselben Outputs → intaktes Ergebnis, ein vollständiger Gewinner); Secret aus Fehlermeldungen redigiert; leerer Plan → „No operations"; verbotener diff (EditSession.Build lehnt Feld außerhalb der Allowlist ab); OperationPlan-JSON-Round-Trip; Failure-Receipt konsistent (FilesWritten=0).- Baseline: 245/245 PASS (233 + 12 neue). ### MINOR ### MINOR
v2.198.0.0
v2.198.2.0BETAPATCH
Seymour31. Juli 2026
FfxSaveSphereGrid-Härtung (Bounds-Guard + native Wahrheit) + Ghidra/Fahrenheit-Symboltabellen-Import in die kanonische DB (8,281 Umbenennungen)
FfxLib/Save/FfxSaveSphereGrid.cs(fix):FfxSaveSphereGridNodeSnapshot.Read/Write/ReadActivation/WriteActivationschützen jetztNodeIndex(0..859 im Legacy-FFXED-Modell) mit einer aussagekräftigenArgumentOutOfRangeException— fixt einen latenten OOB-Write in den Save-Buffer; neue KonstantenNativeTableBase(=8684) undNativeMaxNodeIndex(=1279) legen die native Save-Kapazität offen; XML-Docs klären den +64-Versatz vsFfxSaveSphereGridRuntimeTableund dass 860 NICHT die Engine-Grenze ist.FfxLib/Save/FfxSaveSphereGridRuntimeTable.cs(doc): durch die Fahrenheit/Ghidra-Symboltabelle kreuzbestätigt —eiAbmDataInit(SaveSphereGrid*)@ 0xA53DE0 undMsGetSaveAbilityMap() → SaveSphereGrid*@ 0x785000 beweisen, dass der State-Block ein echter Engine-Typ ist; native Kapazität 1280 Knoten / 1280 Links / Cursor.FfxLib/Save/FfxSaveBatchActions.cs(doc):ImportSphereGridRegionals Legacy-+64-Modell dokumentiert; nativer Pfad (Span 8684..13579) für Grids >860 aufgezeigt.- RE — Fahrenheit-crew/fahrenheit (Ghidra) Symbol-Tabellen-Import: 7,609 Funktionen + 672 Globals umbenannt auf der Basis-DB
ffxoficial.exe.i64(8,281 gesamt; Quellen USER_DEFINED 460 + IMPORTED 2,816 + gefiltert ANALYSIS 7,570; überschreibt nie Projekt-FFX_*-Namen — 3,774 erhalten); Globals erhielten primitive Typen; Backupbackups_ffxoficial\ffxoficial.exe.before_ghidra_renames_20260731_231338.i64. Propagiert auf die Team-Arbeits-DBffxoficial_COPY.i64via ida-pro-mcp-Plugin-RPC in der GUI (Port 13338): 7,440 Funktionen + 490 Globals auf der COPY angewendet, 17 übersprungen (GUI-Namen erhalten), DB gespeichert; Backupffxoficial_COPY.before_ghidra_renames_20260731_233813.i64. Befunde:LpAbilityMapEngine-Struct (0x12FC0; clusters[128]/nodes[1024]/links[1024] — volles Layout im Doc), statischer.data-Buffer0x16AD870(InitLpamng @ A572E0), 12 Funktionen mit einer1024-Schleife gemappt (RenderPathNodes A50290, eiAbmCalc A53570, eiAbmParaGet A54860, ClearNodeTransforms A57120, ReadAndProcessInputState A57520, BuildLinkBatchSegment A57710, UpdatePlacementSlotTransform A58080, DialogDispatch A583E0, InitPlacementGrid A5B230, +3), Render 861 (681DB0/7F4900), OriginalnameneiAbm*/+AbmapState_*/abmap_*,SaveSphereGrid-Typ bestätigt. Kernschluss: der native Save unterstützt bereits 1280/1280 — der Engpass über 1024 ist das statische Runtime-Struct + Loops + Render, nicht der Save. Doc:docs/reverse/FFX_GHIDRA_FAHRENHEIT_SYMBOL_IMPORT_2026-07-31.md; Skripte/Reports inwork/_fahrenheit_probe/. - Status:
Needs Testing— grüner Build; neue Guards haben keine Out-of-Range-Konsumenten (keine Code-Nutzung über Docs hinaus). ### PATCH
v2.198.1.0
v2.198.2.1BETAREVISION
Seymour31. Juli 2026
fahrenheit-excel: echte Kernel-Feldnamen auf den Editor angewendet (KeyItem/Important + Treasure/takara) + "Excel"-Container dokumentiert
- Quelle: zweites fahrenheit-Repo (
fahrenheit-excel) mit 8 neuen Structs +excel.cs-Rewrite (Excel-Container:ExcelProlog0x8 +ExcelHeader0xC +ExcelTextOffset0x4 — passt zu unseremCustomization_File.ReadHeader, HeaderLength 0x14). FfxLib/Common/KeyItem_File.cs+ KeyItemEditor (Umbenennung):PrimerByte10/RawByte11/RawByte12/OrderingByte13→ItemType/ItemValue/Icon/Number(echte Ghidra-Namen; 0x10 = "ist Al Bhed-Primer?", 0x13 = Primer-Nummer) — XAML, Zusammenfassungen und RT0 aktualisiert.FfxLib/Treasure/Treasure_File.cs+ TreasureEditor + BukiGetTreasureCatalog + TaskRewardGameFileLoader + TreasureRt0 (Umbenennung):Treasure_Entry.Type→ItemId(bestätigt fahrenheitTreasure{item_id u16}); VMTreasureRow.Type/TypeHex/TypeDecimal→ItemId/ItemIdHex/ItemIdDecimal; XAML-Bindings aktualisiert.- Bestätigungen:
MixRecipe= ushort[0x70] passt zuMixTable_File(EntryLength 0xE0);SphereGridNodeType.amount@0x14bestätigtIncreaseAmount;SphereGridNodeTypeInfo→SphereGridNodeTypeUiInfo(lpamngnode_type_infos-Array ist UI-only). - Dokumentiert (zukünftige Writer):
Sphere(ACTIVATOR/MODIFIER + 11-Stat-Bitmask + NORMAL/UNLIMITED-Bereich),Rate,WeaponName,HelpText/NameHelpText,Treasure. - Baseline: 245/245 PASS · Build 0 Fehler. Doc:
docs/reverse/FFX_GHIDRA_FAHRENHEIT_SYMBOL_IMPORT_2026-07-31.md§fahrenheit-excel. ### PATCH
v2.198.2.0
v2.198.3.0BETAPATCH
Seymour31. Juli 2026
P3-L4: Release — `scripts/release_manifest.ps1` (verifizierbares Manifest) + Prozessdokument
scripts/release_manifest.ps1(neu, operativ): Release-Manifest — Version aus<Version>im csproj (Source of Truth), SHA-256 jedes.exe/.dll-Build-Artefakts (+.sha256-Sidecars via .NET SHA256 — kompatibel mit dem PS dieser Maschine), erster Changelog-Eintrag (Cross-Check),gitCommit/gitDirty(dirty-worktree-Release = Alert) undsigning: "not-signed"(Signatur nie ohne Ausführung als erledigt deklariert). Validier: 103 Artefakte aus dem Release-Build mit korrekten Hashes.docs/ai/P3_RELEASE_2026-07-31.md(neu): 7-Schritte-Release-Flow (build → tests → offline_ci → deploy all targets → manifest → hash verification → signing);.gitignore-Audit (coverage bereits vorhanden — bin/obj/work/.vs, keine Änderungen nötig; kein destruktives Cleanup in einem Worktree mit fremder Arbeit); Signing als PLAN dokumentiert (signtool/Authenticode — nicht ausgeführt, kein Zertifikat importiert).- Keine Editor-Verhaltensänderung — Baseline 245/245 PASS unberührt. ### PATCH
v2.198.3.3
v2.198.3.1BETAREVISION
Seymour31. Juli 2026
P3-L5: kurzer Gemini-Vertrag (UI ↔ Core)
docs/ai/P3_GEMINI_CONTRACT_2026-07-31.md(Vertrag auf Basis der echten Typen): Datei-Eigentum (Core = Backend / Modules+AXAML = UI); öffentliche DTOs (CapabilityDescriptor, OperationPlanPreview/ChangeSetSummary, OperationProgress, CommitReceipt, ValidationResult, OperationResult, FilePreviewSummary/OperationPreview, GameEnvironmentReport); Befehle (EditSession fluent, OperationExecutorV2, OperationPreview, ReceiptBuilder, GameEnvironmentProbe); typisierte Zustände loading/empty/unavailable/warning/blocked/failure mit echten Ursprüngen; ValidationIssue-Codes; die 10 echten Capability-IDs; Mock/Provisional (heuristische Steam-Erkennung, LAB FfxProbe_Service, Opt-in LlmHttpAdapter, OperationProgress ohne vollständige Verkabelung); harte Regeln (UI erstellt nie einen Writer außerhalb von OperationPlan; Meldungen bereits redigiert; AXAML/Themes nur mit Koordination). Read-only — Baseline 245/245 PASS unberührt. ### PATCH
v2.198.3.0
v2.198.3.2BETAREVISION
Seymour31. Juli 2026
P3-L6: Pro-Familie-RT2-Protokoll (reproduzierbar, geloggt)
docs/ai/P3_RT2_PROTOCOL_2026-07-31.md(Protokoll; Ausführung = menschliche Laufzeit): unterscheidet RT0/RT1/RT2 mit Exit-Gates (RT0 = CLI-Byte-Identitäts-Gates; RT2 = reproduzierbares Vorher/Nachher-Log + Wegwerf-Save); Sitzungs-Voraussetzungen (Probe deployed,ffxprobectl mon, Wegwerf-Save, Editor geschlossen); Phase-Rotation-Familie-Pilot in 7 Schritten (Rezept anwenden → Hash H2 → mit Vanilla-Backup H1 deployen → Battle → 5 beobachtete Turns → Read-only-Counter-Var-Read → H1 wiederherstellen → Promotion nur mit Log); Pro-Familie-Checkliste (Probe PROVEN/Force Battle 1 Szenario/Phase Rotation pending/Hooks partial/Read-only-Probes); Promotionsregeln (nie RT0→Produktion ohne RT2; nie den Haupt-Save; nie CreateRemoteThread); Force-Battle-Widerspruch referenziert (PROVEN-Mechanismus / LAB-Experiment). Read-only — Baseline 245/245 PASS unberührt. ### REVISION ### REVISION
v2.198.3.1
v2.198.3.3BETAREVISION
Seymour1. Aug. 2026
Gemini-Prompt aktualisiert: volles P3-Backend reflektiert (245/245, Executor-Cancel/Rollback/Journal/Lock, echte Adapter-IDs, Pflicht-Vertrag UI↔Core)
docs/ai/PROMPT_GEMINI_UI_UX_FINAL_2026-08-01.md(aktualisiert): Header mit Version2.198.3.2+ 245/245 PASS; Pflichtlektüre umfasst jetztP3_GEMINI_CONTRACT_2026-07-31.md(Punkt 5 — der offizielle UI↔Core-Vertrag); Core-Tabelle mit aktualisiertemOperationExecutorV2(CancellationToken 4 Checkpoints, automatisches Rollback, journal.json, PromoteGate, redigierte Meldungen) + neue TypenOperationPreview/FilePreviewSummary(3-Schicht-Diff); Adapter-Tabelle korrigiert (10 registriert — war "8" mit 10 Zeilen — und ECHTE IDs:ability-commandundatel-recipe-phase-rotation, die falsch waren);GameEnvironmentProbemit Discovery (env/registry/libraryfolders.vdf); neuer "Backend state"-Block (245/245, vertrauenswürdiger Executor, bereits redigierte Meldungen, ausnahmefreier Health-Check, 3-Schicht-Vorschau, Release-Manifest, RT2-Protokoll, andere-Lane-Änderungen — FfxSaveSphereGrid-Bounds-Guard, fahrenheit-Umbenennungen, bekannte annotierte FAILmcyt00_21); Limits umfassen jetzt selektive Commits (Lane-Race — niegit add -A). Kein Verhaltensänderung — Baseline 245/245 unberührt. ### REVISION ### REVISION
v2.198.3.2
v2.198.3.4BETAPATCH
Seymour1. Aug. 2026
SphereGrid sphere.bin an die fahrenheit-`Sphere`-Struktur angepasst (echte Namen + Enums + im Korpus bewiesener Validator-Fix)
FfxLib/SphereGrid/SphereGrid_File.cs(+Write.cs) (rename+enums):SphereGridSphereTypeEntryActionValue/ActivationBitfield/RangeValue/AlwaysZero→Behavior/Activates/Range/Reserved0x0E(Ghidra/fahrenheitSphere-Namen); neue EnumsSphereBehavior(Nichts., Activator, Modifier),SphereTargets[Flags] (11 Stats,All=0x07FF— Bitreihenfolge nicht bewiesen, Vanilla-Werte dokumentiert),SphereRange(Nichts., Normal, Unlimited=0x20); abgeleitete PropsBehaviorKind/ActivatesTargets/RangeKind;ActionLabelgefixt („Mutator"→„Modifier").Core/Writers/SphereGridAdapter.cs(fix+hardening): Keys umbenannt (Behavior/Activates/Range/Reserved0x0E);SpecialRole-Validator gefixt 0x0F→0x1F (Vanilla-Corpus nutzt Special-Rollen bis 24 — sphere.bin-Slots 14..29; der alte Validator lehnte legitime Grids ab);Behaviorvalidiert 0..2 (Corpus beweist nur 0..2); Meldungen zitieren die Enums.SphereGridExplorer(rename): VMSphereGridSphereTypeEditorRow+ State + Helpers + XAML aktualisiert;SetSelectedOptions/diffs/baseline umbenannt.- Corpus-Beweis (jppc
battle\kernel\sphere.bin, 50 Einträge, elem 0x10): ACTIVATOR=1 (Ability/Power/Mental/Speed/Fortuna + Key L1–L4 special 8..11 + Friend 0x07FF), MODIFIER=2 (Return=1, Teleport=2, Clear=3, Master=4), range 0x01 NORMAL / 0x20 UNLIMITED; Indizes passen zuSphereGridNodeSphereRequirementKind(Ability=0..Fortuna=4). Doc:docs/reverse/FFX_GHIDRA_FAHRENHEIT_SYMBOL_IMPORT_2026-07-31.md§sphere.bin. - Baseline: 245/245 PASS · Build 0 Fehler. Status:
validated(byte-idempotente Renames + RT0/RoundTrip intakt). ### REVISION
v2.198.3.3
v2.198.4.0BETAPATCH
Seymour1. Aug. 2026
Sauberer RT2-Testpfad ohne Hook für True New Node + Korrektur der Crash-Theorie + externe Community-Bestätigung (1024/1024/128)
SphereGridDeployPolicy.cs(Revision): der Befund „no-hook 861/882 crashes on exit" stammte aus RT2-Läufen des ausgemusterten v5-Hook-Stacks (manifest/sidecar/SEH) — nie aus einem sauberen Deploy. Mit der heutigen RE (header-driven engine; statischesLpAbilityMapEngine1024/1024/128; nativer Save 1280/1280) brauchen counts ≤ 1024 keinen Hook. Vermutete echte Obergrenze: Render (681DB0861×48-Buffer +7F4900n861 >= 861-Gate). Neuer Opt-in-Overridebuilder.AllowRuntimeTestDeploy(Standard OFF) entsperrt SaveToProject/SaveSquareToProject mit geänderten counts für den sauberen Test.SphereGrid_File.Builder.cs:AllowRuntimeTestDeploy-Property + Docs.SphereGridCanvas_DataModel.cs+SphereGridCanvas_Control.axaml: Toolbar-Checkbox „Allow RT2 test deploy (no-hook)";RefreshTopologySafetySummaryzeigt den Testzustand (🧪 released mit Wegwerf-Save-Warnung / 🚫 blocked mit korrigierter Erklärung).- Externe Bestätigung: EvelynTSMG (fahrenheit-crew) bestätigte die Obergrenze 1024 Knoten / 1024 Links / 128 Cluster — exakte Übereinstimmung mit dem
LpAbilityMapEngine, das wir bewiesen haben (Arrays bei 0x808/0xA808/0x8,.data-Buffer 0x16AD870). Dragoon (Community) testet add/tie/expand in seinem Editor. - Sauberes RT2-Testprotokoll dokumentiert (doc RE §external confirmation): Standard → Square Mode → +1 node/+1 link → Checkbox → Save → deploy → Wegwerf-Save → open/move/exit → kein Crash = Obergrenze überschritten (repeat 900/1024); Crash = Render ist die Obergrenze (2-Byte-Patch, kein Hook).
- Baseline: 245/245 PASS · Build 0 Fehler. Status:
Needs Testing(menschliches RT2). ### PATCH
v2.198.3.4
v2.198.4.1BETAPATCH
Seymour1. Aug. 2026
semantischer Fix der ATEL-Vergleichs-Opcodes (0x0A/0x0B/0x0E/0x0F) — durch Interpreter-Decompile bewiesen
- Entdeckung (Quelle: noclip.website
src/FinalFantasyX/script.ts— Field-Script-Opcode-Enum): das Codec-Mapping (GT=0x0A, LT=0x0B, GE=0x0E, LE=0x0F) war invertiert vs. noclip (LT=0x0A, GT=0x0B...). Durch Decompile bewiesen vonFFX_Atel_InterpretWorkerOpcodes@0x864180+FFX_FieldVM_PopOperand@0x86DE90(pop = top): mit Stack[A(base), B(top)]testet 0x0BA < B, 0x0A testetA <= B(0x0E/0x0F = Float-Varianten). Es gibt kein direktes "größer als" — der Compiler drücktA > Bals[B, A] + 0x0Baus (B < A). Das RT0-Gate (struktureller Roundtrip) kann semantische Fehler nicht fangen — nur der Decompile legt sie offen. - Fix:
AiVarConditionBuilder(GreaterThan/GreaterOrEqual emittieren jetzt getauschte Reihenfolge[N, var]+ LT/LE; LessOrEqual korrigiert 0x0F→0x0A),AiAutomation(Field/Status/Overdrive-Guards:[threshold, field]+ LT; GT/GE-Konstanten entfernt),AiPhaseRotationRecipe(Final-Phase-Guard:[FinalLimit, counter]+ LT),AiBibleCatalog(0x0A–0x0F-Tabelle mit echten Semantiken korrigiert)..i64an den Fällen kommentiert (0x8646E4/0x864759) — GOLDENE REGEL. Doc:docs/reverse/FFX_ATEL_COMPARISON_OPCODE_SEMANTICS_2026-08-01.md(3 Quellen: Interpreter = Wahrheit, noclip = Richtung, fahrenheit = Benennung). - Validierung:
--phase-rotation-rt0319/319 PASS · AI + Plattform-Tests 64/64 PASS · Baseline 254 (1 Fehler ist ein neuer SphereGrid-Lane-Test in Arbeit, außerhalb des Rahmens). ### PATCH
v2.198.4.0
v2.198.4.2BETAREVISION
Lulu1. Aug. 2026
C3-1: Katalog der Magic-DLL-Ressourcenschlüssel VALIDIERT — Entwurfsthese widerlegt (0/149 Schlüssel indizieren die Root-Tabelle; echte Semantik = globale Host-Tabelle, zur Laufzeit befüllt)
v2.198.4.1