Aggiornamento 2.197
31/07/2026
v2.197.0.0BETAMINOR
Seymour31 lug 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
Seymour31 lug 2026
Fix gate `--phase-rotation-rt0` (check forma stale) + integrazione in `offline_ci.ps1`
RuntimeTools/AiScriptLab/Program.cs(PhaseRotationRt0): il check della forma si aspettavaD8 0x700B(PerformCommand) nel blocco aggiunto, maAiPhaseRotationWriteremetteD8 0x705A(ForcePerformCommand —CommandCallFor) nella recipe attuale →queued=Falsesu 319/319 voci del corpus (l'ultimo run documentato era v2.85.x, prima dello switch). Corretto a0x705Ae rinominatohasForcedPerform. Diagnosi metodica: apply/validator/splice passavano già 319/319; l'unica bandiera falsa eraqueued(identica su tutti i 319 fallimenti via--json).RuntimeTools/offline_ci.ps1: il gate--phase-rotation-rt0aggiunto alla sezione AiScriptLab — chiude il requisito Goal-4 "gate RT0 famiglia prima della Build", che esisteva in AiScriptLab ma non era cablato nella CI ufficiale.- Risultato:
--phase-rotation-rt0PASS (apply recipe 319/319, validator 319/319, splice 319/319, check forma 319/319, store var1 300/300). offline_ci: resta 1 FAIL pre-esistente non correlato — (letterale tecnico: pre-existing)BattleCompanionActivationLab(mcyt00_21drift sentinel: il corpusFFX Extractedè tornato vanilla — slot0=m213, formazione 213/37/37 — mentre il sentinel documenta la variante Dark Aeons 334/335/336 della lane Arena+; decisione in sospeso: ripristinare l'artefatto Arena+, aggiornare il sentinel, o accettare il drift documentato). - Baseline: 223/223 PASS (suite invariata; il fix è solo tooling-gate). ### MINOR ### MINOR
v2.197.0.0
v2.197.1.1BETAREVISION
Seymour31 lug 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