Update 2.197
7/31/2026
v2.197.0.0BETAMINOR
SeymourJul 31, 2026
P2 L2: AtelPhaseRotationAdapter (offline byte-local writer) + OperationPreview (consumable 3-layer diff) + source/IDA validation
Core/Writers/AtelPhaseRotationAdapter.cs(atel-recipe-phase-rotation, registered in catalog, 10 tests): appliesAiPhaseRotationRecipe.Apply(real API, in-memory) over the AiFile sliced from the monster bin; WHOLE-bin hash precondition viaValidateMonsterBinHash(mismatch → throw before touching staging); pre-validationCodeWalkClosedExactly; triple post-validation (CodeWalkClosedExactly+UnknownOpcodes == 0+RoundTripsByteIdentical); re-insertion viaSpliceAiFileIntoMonsterGrow(real codec API) with re-slice verification; allowlist mirroring the real recipe shape (BattleStart/AfterAnyValidTurn triggers blocked — honest Class B/grow);ComputeDryRunDiff(3 layers on sliced AiFiles). Validated on real fixtures: m001 (5 vars + 2 entrypoints) applies; m000 (0 vars) honestly rejects.Core/OperationPreview.cs(5 tests):OperationPreview/FilePreviewSummary— 3-layer diff (bytes/disassembly/semantics) exposed PER FILE, null-safe provider (a failure on one file never kills the preview);BuildFromPlanuses the same staging convention as the executor (post-stage preview = exactly what would be promoted). Full e2e test: EditSession → OperationPlan → OperationExecutorV2 → ReceiptBuilder → output carrying the edit (CostMp=7) — simulate→review→apply→receipt works end-to-end on the real Core.docs/ai/P2_VALIDACAO_SOURCE_2026-07-31.md(source/IDA validation): the game loads the WHOLE monster bin and resolves partitions by fixed header offsets (FFX_Battle_LoadMonsterFilesIntoMemoryChr@0x783730,InstallMonsterFileSectionPointers@0x783BB0 — pointer-trust, no runtime hash) → whole-bin hash precondition confirmed correct; ATEL dispatch in IDA (FFX_Atel_InterpretWorkerOpcodes@0x864180,DispatchNativeCall@0x877720, Battle table @0xC42618); opcodes 0xAE/0x9F/0xA0/0xB5/0xD8 corpus-proven; RT0 gate validates structural round-trip (not in-game behavior — RT2 still pending by design);ffx-reconstructedbattle is stub-level (runtime truth lives in the IDA docs).- Baseline: 223/223 PASS (207 → 223). ### MINOR
v2.196.0.0
v2.197.1.0BETAPATCH
SeymourJul 31, 2026
`--phase-rotation-rt0` gate fix (stale shape check) + integration into `offline_ci.ps1`
RuntimeTools/AiScriptLab/Program.cs(PhaseRotationRt0): the shape check expectedD8 0x700B(PerformCommand) in the appended block, butAiPhaseRotationWriteremitsD8 0x705A(ForcePerformCommand —CommandCallFor) in the current recipe →queued=Falseon 319/319 corpus entries (last documented run was v2.85.x, before the switch). Fixed to0x705Aand renamedhasForcedPerform. Methodical diagnosis: apply/validator/splice already passed 319/319; the only false flag wasqueued(identical across all 319 failures via--json).RuntimeTools/offline_ci.ps1:--phase-rotation-rt0gate added to the AiScriptLab section — closes the Goal-4 "family RT0 gate before Build" requirement, which existed in AiScriptLab but was not wired into the official CI.- Result:
--phase-rotation-rt0PASS (recipe apply 319/319, validator 319/319, splice 319/319, shape check 319/319, var1 store 300/300). offline_ci: 1 remaining pre-existing unrelated FAIL —BattleCompanionActivationLab(mcyt00_21drift sentinel: theFFX Extractedcorpus is back to vanilla — slot0=m213, formation 213/37/37 — while the sentinel documents the Arena+ lane Dark Aeons 334/335/336 variant; pending decision: restore the Arena+ artifact, update the sentinel, or accept the documented drift). - Baseline: 223/223 PASS (suite unchanged; fix is tooling-gate only). ### MINOR ### MINOR
v2.197.0.0
v2.197.1.1BETAREVISION
SeymourJul 31, 2026
P3-L1: runtime/integrations/release contracts foundation
docs/ai/P3_RUNTIME_CONTRACTS_2026-07-31.md(governance doc, read-only — no bytes changed): per-resource runtime contract —FfxDinput8Probe(master main-thread key, MMFLocal\FFXProbeBlock_v1, STANDBY default, RT2 PROVEN 2026-06-03, diagnostic modesmon/read/arena-flags),FfxHooksDll(23 hooks, F7 flags, per-layer contracts), 11 read-only RT2 probes (diagnostic mode per probe); Force Battle contradiction resolved by evidence (crash = off main thread →CreateRemoteThreadretired; main-thread bridge PROVEN on-screen as mechanism / LAB as product — productization gated); install/config/fallback/actionable-error contract for external tools (probe, hooks, ctl, corpus); compatibility matrix (FFX.exe = single target; ffxoficial = IDA reference; PS2 = offline corpus); P3 batches L2–L6 with measurable goals (GameEnvironmentProbe, 12-item operations suite, release manifest+hashes, Gemini contract, per-family RT2).- No behavior change — baseline 223/223 PASS untouched. ### PATCH
v2.197.1.0