Atualização 2.197
31/07/2026
v2.197.0.0BETAMINOR
Seymour31 de jul. de 2026
P2 L2: AtelPhaseRotationAdapter (writer byte-local offline) + OperationPreview (diff consumível de 3 camadas) + validação source/IDA
Core/Writers/AtelPhaseRotationAdapter.cs(atel-recipe-phase-rotation, registrado no catálogo, 10 testes): aplicaAiPhaseRotationRecipe.Apply(API real, in-memory) sobre o AiFile fatiado do bin de monstro; pré-condição de hash WHOLE-bin viaValidateMonsterBinHash(mismatch → throw antes de tocar o staging); pre-validationCodeWalkClosedExactly; post-validation triplo (CodeWalkClosedExactly+UnknownOpcodes == 0+RoundTripsByteIdentical); re-insertion viaSpliceAiFileIntoMonsterGrow(codec real API) com verificação re-slice; allowlist espelhando a forma real da receita (BattleStart/AfterAnyValidTurn triggers bloqueados — Classe B/grow honesta);ComputeDryRunDiff(3 camadas no AiFiles fatiado). Validado em fixtures reais: m001 (5 vars + 2 entrypoints) aplica; m000 (0 vars) rejeita honestamente.Core/OperationPreview.cs(5 testes):OperationPreview/FilePreviewSummary— diff de 3 camadas (bytes/disassembly/semântica) exposto PER FILE, provider null-safe (uma falha num arquivo nunca mata o preview);BuildFromPlanusa a mesma convenção de staging do executor (preview post-stage = exatamente o que seria promovido). Teste e2e completo: EditSession → OperationPlan → OperationExecutorV2 → ReceiptBuilder → output carregando a edição (CostMp=7) — simulate→review→apply→receipt funciona ponta a ponta no Core real.docs/ai/P2_VALIDACAO_SOURCE_2026-07-31.md(validação source/IDA): o jogo carrega o bin de monstro WHOLE e resolve partições por offsets fixos de header (FFX_Battle_LoadMonsterFilesIntoMemoryChr@0x783730,InstallMonsterFileSectionPointers@0x783BB0 — pointer-trust, sem hash de runtime) → pré-condição de hash whole-bin confirmada correta; dispatch ATEL em IDA (FFX_Atel_InterpretWorkerOpcodes@0x864180,DispatchNativeCall@0x877720, tabela Battle @0xC42618); opcodes 0xAE/0x9F/0xA0/0xB5/0xD8 corpus-proven; gate RT0 valida round-trip estrutural (não comportamento in-game — RT2 ainda pendente por design); batalhaffx-reconstructedé stub-level (a verdade de runtime vive nos docs IDA).- Baseline: 223/223 PASS (207 → 223). ### MINOR
v2.196.0.0
v2.197.1.0BETAPATCH
Seymour31 de jul. de 2026
Correção do gate `--phase-rotation-rt0` (verificação de shape obsoleto) + integração em `offline_ci.ps1`
RuntimeTools/AiScriptLab/Program.cs(PhaseRotationRt0): o check de shape esperavaD8 0x700B(PerformCommand) no bloco anexado, masAiPhaseRotationWriteremiteD8 0x705A(ForcePerformCommand —CommandCallFor) na receita atual →queued=Falseem 319/319 entradas do corpus (última execução documentada era v2.85.x, antes da troca). Corrigido para0x705Ae renomeadohasForcedPerform. Diagnóstico metódico: apply/validator/splice já passavam 319/319; a única flag falsa eraqueued(idêntica em todas as 319 falhas via--json).RuntimeTools/offline_ci.ps1: gate--phase-rotation-rt0adicionado à seção AiScriptLab — fecha o requisito Goal-4 "gate da família RT0 antes do Build", que existia em AiScriptLab mas não estava ligado ao CI oficial.- Resultado:
--phase-rotation-rt0PASS (apply de receita 319/319, validator 319/319, splice 319/319, check de shape 319/319, store var1 300/300). offline_ci: 1 preexistente restante não relacionado FAIL —BattleCompanionActivationLab(sentinel de driftmcyt00_21: o corpusFFX Extractedvoltou ao vanilla — slot0=m213, formação 213/37/37 — enquanto o sentinel documenta a variante da lane Arena+ Dark Aeons 334/335/336; pendente decisão: restaurar o artefato do Arena+, atualizar o sentinel ou aceitar o drift documentado). - Baseline: 223/223 PASS (suíte inalterada; fix é só tooling-gate). ### MINOR ### MINOR
v2.197.0.0
v2.197.1.1BETAREVISION
Seymour31 de jul. de 2026
P3-L1: fundação de contratos runtime/integrações/release
docs/ai/P3_RUNTIME_CONTRACTS_2026-07-31.md(doc de governança, read-only — sem bytes mudados): contrato de runtime per-resource —FfxDinput8Probe(chave master main-thread, MMFLocal\FFXProbeBlock_v1, default STANDBY, RT2 PROVEN 2026-06-03, modos de diagnósticomon/read/arena-flags),FfxHooksDll(23 hooks, flags F7, contratos per-layer), 11 probes read-only RT2 (modo de diagnóstico por probe); contradição de Force Battle resolvida por evidência (crash = fora da thread principal →CreateRemoteThreadaposentado; ponte main-thread PROVEN on-screen como mecanismo / LAB como produto — productização gated); contrato de install/config/fallback/actionable-error para ferramentas externas (probe, hooks, ctl, corpus); matriz de compatibilidade (FFX.exe = alvo único; ffxoficial = referência IDA; PS2 = corpus offline); batches P3 L2–L6 com metas mensuráveis (GameEnvironmentProbe, suíte de operações de 12 itens, manifest de release+hashes, contrato Gemini, per-family RT2).- Sem mudança de comportamento — baseline 223/223 PASS intocado. ### PATCH
v2.197.1.0