Atualização 2.207
02/08/2026
v2.207.0.0BETAMINOR
Seymour1 de ago. de 2026
F5-L4: painel de script high-level ATEL no Monster AI Editor (dry-run com diff)
MonsterAiEditor_DataModel.AtelScriptLab.cs(novo parcial): observáveisAtelScriptText/AtelScriptResult/AtelScriptDiffSummary/AtelScriptDiffLines+CompileAtelDryRun()— parseia/compila o script contra o monstro SELECTED (AiAutomation.PickCombatWorker/PickMainEntrypoint) e mostra o diff (AiScript_Diff.Compare, Added/Modified/Removed). Dry-run: nada é salvo (save fica nos canais existentes do editor). Erros acionáveis (syntax/emission).MonsterAiAtelScriptLab_Window.axaml+.cs(novo): janela com editor de script (Consolas), botão "Compile (dry-run)", resumo + diff ListBox. Botão "Script ATEL (F5)" adicionado à toolbarMonsterAiEditor_Control.- Baseline: 332/332 PASS (329 + 3 de outra lane). ### MINOR ### MINOR
v2.206.0.0
v2.207.0.1BETAREVISION
Seymour1 de ago. de 2026
F6: structs de battle/save cross-validation (fahrenheit PS2 × nossos offsets HD)
docs/reverse/PPP_FAHRENHEIT_STRUCTS_CROSSREF_F6_2026-08-01.md: inventário fahrenheit (PS2 ChrRam 0x1EC com stats @0x68–0x77 e equip @0x52/0x53; CtbEntry 4B + CtbBaseData tick_speed; save_impl/ply_save) vs o nosso (HD MemoryChr com ponteiros de script +0xF78.., FfxSaveSphereGrid com guard de bounds, fila HD CTB descompilada). Veredito honesto: PS2 ≠ HD (o HD MemoryChr inclui a camada script/VM; PS2 executa MIPS) — stats PS2 são candidatos de validação field-by-field contra o agregador HD (0x7B2DD0); CtbBaseData é referência de semântica para a fila CTB; nada promovido sem prova HD. Read-only — baseline 332/332 intocado. ### REVISION ### MINOR
v2.207.0.0
v2.207.0.2BETAREVISION
Seymour1 de ago. de 2026
F7: cross-validation dos codecs ATEL (fahrenheit ↔ nossos) — 3/3 validados
docs/reverse/PPP_FAHRENHEIT_CODEC_CROSSVALIDATION_F7_2026-08-01.md: F7-A nossa sintaxe → parser deles (var x = 0;aceito; bug do lexer EOF deles documentado — crash em trailing newline, lexer.cs:74); F7-B nosso AiFile gerado (324 instruções via AtelLangLab) → walk com a regra de fetch deles (bit 0x80 = operando): fechou exatamente, 0 opcodes fora do enum AtelOp deles; F7-C nosso KnownOpcode (49) ⊆ enum deles (123): 0 faltando. Limites: o compilador deles não NOT emite bytes (AtelAssembler nunca chamado); a validação cobre dialect/fetch/table, não o layout completo do worker. Conclusão: ambos os codecs falam o mesmo dialeto — nossa semântica fixa (v2.198.4.1) é a verdade executável. Read-only — baseline 332/332 intocado. ### REVISION ### REVISION
v2.207.0.1
v2.207.0.2BETAREVISION
Seymour1 de ago. de 2026
Operação Demonio sessão 2: inventário completo do novo F8 (InGameMenu de FfxHooksDll)
docs/reverse/F8_UNX_INCONSISTENCY_REGISTER_2026-08-01.md(+45 linhas): o novo F8 = switchboard de plugins do nosso ecossistema (reimplementação UnX sobre nossa camada de hook). Arquitetura mapeada em dllmain.cpp: gateingame_menu.flag/FFXHOOKS_ENABLE_INGAME_MENU/Aurora config; infra = overlay AuroraD3D11 (Present vtable[8]); input = GetAsyncKeyState (poll no Present) + subclass WndProc (WM_KEYDOWN/SYSKEYDOWN, debounce 90/150ms) - sem DirectInput, zero conflito com o probe (contraste com o UnX legado que crashava em GetDeviceState); linhas 0-2 = labels/detalhe/refresh do Aurora, 3+ = plugins (Running/Disk-on/Disk-off/Absent); toggle de plugin READ-ONLY (staging via editor; unload ao vivo bloqueado); refresh de 1.5s; draw puro GDI em memDC.- Veredito: o novo F8 NOT escreve na memória do jogo (zero escritas — sem Btl.battle_trigger/HP/patch .text do UnX legado) — classes de offset/ABI/save-corruption não se aplicam. Riscos R-ING-01..05 (baixos): GetAsyncKeyState por frame no Present; subclass WndProc vs overlays third-party (DiscordHook/SpecialK); F8/INSERT sempre consumidos; refresh de 1.5s I/O; R-ING-05 (RT2 pendente): Present vtable[8] = mesmo alvo do UnX SK_BeginBufferSwap — coexistência não testada. Softlock gate conhecido já documentado no código: field_scout* x native_menu = titl00. Sem mudança de comportamento — baseline intocado.
v2.207.0.1
v2.207.0.3BETAREVISION
Seymour1 de ago. de 2026
IDA GOLDEN RULE: tabelas ATEL call-target verificadas no db canônico + comentários cross-reference + fix de doc F2
- Verificação (sem nome sem prova): os endereços fahrenheit (0x850050 Common, 0x842618 Battle...) pertencem ao binário PS2 — lookup no db canônico mostrou nomes vazios + dwords non-pointer → NOT renomeado no HD. As tabelas reais HD já estão nomeadas:
AtelCallTargetsCommon@0xC50050,AtelCallTargetsBattle@0xC42618,AtelCallTargets@0x1328518(nomenclatura fahrenheit já aplicada por outra lane — valida a nomenclatura, não os endereços). - Comentários Cross-reference aplicados nas 3 tabelas HD (struct 16B +0 init/+4 exec/+8 ret_float/+0xC ret_int; refs PS2 com contagens) — GOLDEN RULE cumprido.
docs/reverse/PPP_FAHRENHEIT_ATEL_IMPORT_2026-08-01.mdcorrigido com a nota de verificação (endereços PS2 = referência do outro binário, não alvos de rename HD). Baseline 332/332 intocado. ### REVISION ### REVISION
v2.207.0.2
v2.207.0.4BETAREVISION
Seymour1 de ago. de 2026
F6.1: verificação de stats field-by-field PS2×HD no agregador (0x7B2DD0) + comentário IDA
- Decompile de
FFX_Battle_PoolActorByTargetType_structural(0x7B2DD0) — dispatcher READ/WRITE com 346 casos actor-property. Casos 0x0A–0x13 acumulam 8 bytes empad_0764[331..337/348](região HDFFXBattleActorRecord+0x79B..) = bloco candidato de 8 stats (strength/defense/magic/magic_defense/agility/luck/evasion/accuracy). - Confirmado: offsets PS2 (ChrRam +0x68..0x77) NOT batem com HD (o record HD é muito maior; o dispatcher indexa por CASE ID, não por offset).
- GOLDEN RULE: comentário cross-reference aplicado no caso 0x0A (0x7B2F9D) no db canônico.
PPP_FAHRENHEIT_STRUCTS_CROSSREF_F6atualizado (§4b). Pendente: fixar a ordem dos 8 stats (nomes de caso — trabalho futuro). Baseline 332/332 intocado. ### REVISION ### REVISION
v2.207.0.3
v2.207.0.5BETAREVISION
Seymour1 de ago. de 2026
F6.2: mapa de casos FULL do dispatcher 0x7B2DD0 + correção do F6.1
- Correção da entrega anterior: o bloco candidato real de 8 stats é 338..345 (casos 0x12C–0x135, 8 bytes contíguos) — não "331..337/348" (7B + 1B de outro bloco).
- Semântica real da função: AVERAGE da propriedade por tipo de alvo (
total /= counterno fim), não soma bruta de stats. - Mapa completo caso→offset documentado (14 blocos: 331..337, 338..345, 346–351, 380–383, 426–434, 436–438, 483–508, 606–643, 674, 698/699, 82–93, 158–176, 326...) no doc F6 §4b.
- GOLDEN RULE: comentários IDA aplicados (função 0x7B2DD0 + caso 0x0A 0x7B2F9D). ⚠️ MCP 13337 ocupado/salvando após
set_func_cmt— verificar post-save; reaplicarwork/_ida_set_comments.pyse necessário. - Baseline 332/332 intocado. ### REVISION ### REVISION
v2.207.0.4
v2.207.0.6BETAREVISION
Seymour1 de ago. de 2026
plano de reconciliação F7/F8 (handoff para a lane Jarvis-HOOK)
docs/reverse/F7F8_RECONCILIATION_PLAN_2026-08-01.md(novo, ~250 linhas): consolidação final dos achados da Operação Demonio para a lane de hooks. P1 (provado): o novo F8 (dashboard, 56 linhas, UnX/ProjectX) foi removido do dllmain no commit53d82b2a(07/27) e o build ativo 09:05 não tem dashboard — F8 caiu de volta no switchboard InGameMenu (legado); fonte recuperável (blobsc66aa478/a14f8732/76887427/d9516135+ buildsRT2OFF/pre_magic_ppp_trace+ .obj). P2-P8: contenção de chave F7 (NativeMenu x LabMenu) e F8 (dashboard x InGameMenu), gates duplicados (ingame_menu_v2.flag), gate field_scout x native_menu a verificar, ffx-hooks.ini faltando no dir do jogo, ordem de detour Present vtable[8]. Mapa de recuperação em 6 passos (git show + 11 diff blocks + vcxproj + config + lab build + gates), target architecture com single key owner (F7=NativeMenu RAM intocado; F8=dashboard; InGameMenu=fallback), classified UnX parity (port cheats/dialog-skip/language via clean hooks; NEVER hardcoded .text patches 0x392930/0x30B040/Btl.battle_trigger/Sleep-5s thread), 4 waves com gates (RT2 on _isolated, baseline 283/283). No behavior change - baseline intocado.
v2.207.0.5
v2.207.0.7BETAREVISION
Seymour1 de ago. de 2026
Conhecimento externo do Sphere Grid cross-checked (fahrenheit-crew Discord + FFXRando) + 2 testes de regressão de âncora
docs/reverse/SPHERE_GRID_EXTERNAL_KNOWLEDGE_2026-08-01.md(novo): thread do Discord (Titan/Dragoon/peppy) cross-checked com o nosso RE: (1) Anchor idx = o control de curva do link node (ourAnchorNode;Validate()catches OOB;RemoveNodefixes anchors — link anchored on the removed node becomes straight 0xFFFF); (2) LOCK 3 = content 0x00 é the game's default when it can't find the node (sgelems.cs L215) — our flow never emits it (EmptyContent=0xFF + validated picker); (3) header↔structs coherence (Dragoon) = what our WriteLayout/Validate already guarantee; (4) limits são per-grid (peppy "per-grid") = confirms our RE (static LpAbilityMapEngine 1024/1024/128 per grid); (5) FFXRando (nyterage/FFXRando, MIT, C++):SphereGridRandomizer.cppshuffles CONTENT somente (topology/counts preserved; NODE_NULL=skip) — validates the Safe Transplant directive (content edit = safe; new topology = risk, gated by DeployPolicy).- 2 novos testes em
SphereGridAddNodeReproTests.cs(4/4 PASS na área):RemoveNode_WithAnchorLinks_KeepsGraphValid(o Standard vanilla tem 411 links curvos; remover a âncora node keeps the grid valid, no orphan anchors, round-trip OK) +Validate_CatchesOutOfRangeAnchor. No product behavior change. ### REVISION
v2.207.0.6
v2.207.0.8BETAREVISION
Seymour1 de ago. de 2026
auditoria de escrita do editor de Sphere Grid formalizada ("o segredo para não explodir")
docs/reverse/SPHERE_GRID_EDITOR_WRITE_AUDIT_2026-08-01.md(novo): resposta YES a "nosso editor faz exatamente a coisa segura?" — mapa operação→bytes (drag = pos + Unknown6 recomputado; content = 1 byte no dat1X + RedundantContent; cluster; add/remove node/link com reindex completo; repoint de link) e os 7 invariantes aplicados porValidate()antes da escrita ANY: (1) contagens de header == tamanhos reais de tabela; (2) Unknown6 == bucket espacial; (3) RedundantContent == content; (4) cluster < clusterCount; (5) Node1/Node2 < nodeCount; (6) AnchorNode 0xFFFF ou < nodeCount; (7) content na faixa (0xFF=vazio). Caminho de escrita único: UI → builder → Build() (lança se inválido) → WriteLayout → projeto; nada é escrito sem validação. Safe Transplant = byte-local (contagens preservadas) = zona segura provada; topologia nova = gated por DeployPolicy até o RT2 limpo. Riscos residuais: SphereGridAdapter escreve sphere.bin (arquivo diferente), PanelGrowWriter estende panel.bin. Sem mudança de comportamento. ### REVISION
v2.207.0.7
v2.207.1.0BETAPATCH
Seymour2 de ago. de 2026
F7 In-Live v2: multi-column DIFF (presets + BASE + AUTO + WEAK + RESIST + ABSORB multi-select), input numérico, HP até 10x, Music com Preview/nomes reais/Save/Reset, fix black-screen, LabMenu → F6
- DIFF redesenhado (multi-column): presets viraram chips proeminentes no topo (Off/Hunter/Sombra de Sin/True Nightmare); colunas side-by-side BASE STATUS (HP..LCK — 9 stats, ACC/EVA/LCK agora também editáveis) / AUTO STATUS (25 statuses, checkboxes multi-select) / WEAK / RESIST / ABSORB (5 elementos cada, multi-select); coluna ACTIONS (Apply Now/Save/Back); L/R navega colunas e U/D linhas; faixa HP até 10x (100..10000) e stats até 5x (100..5000).
- Entrada numérica: Confirm num stat BASE abre o modo de edição — digite 0-9, Backspace, Confirm aplica (clampado), Esc cancela (vira "custom").
- Music: novas linhas Preview (toca a trilha do Music Lock via override lab-proved+SOUNDCMD), Save (persiste f7_inlive.json) e Reset (volta ao default: sem lock/battle/randomizer/fade); confirmar em "Music Lock"/"Battle Entry" também faz preview; nomes reais das 181 faixas (F7TrackName agora delega ao crosswalk
LabMusicRuntimeName: "Battle Theme", "Thunder Plain", "Crisis"...). - Fix Black-screen: retorno submenu→hub agora usa o caminho de pump (
g_nativeWantSpawn) em vez deSpawnMenu()direto;F7_DifficultyApplyNowganhou validação enemy-list (range check) +__try/__except— nunca mata o pump em contexto inválido (loga SEM-LISTA/LISTA-INVALIDA/EXCECAO). - Legado LabMenu movido para F6 (era F7/F8 dependendo de InGameMenu) — F7 agora é exclusivo do Editor FFX In-Live; F8 é o InGameMenu (switchboard de plugins).
- Novas APIs F7InLive:
F7_MusicPreview(track),F7_ResetMusic(),F7_StatusName(i)+ getterGetArenaBattleMusicSoundCmdFn()em MusicHook. - Build
-WithPolyHook -ReleasePASS; LabDeploy para Steam; RT2Needs Testing(colunas DIFF, edição numérica, preview audível, Apply em batalha). ### REVISION
v2.207.0.8
v2.207.2.0BETAPATCH
Seymour1 de ago. de 2026
Editor do Sphere Grid: removido o que não faz sentido diante das novas verdades (código v5 morto) + handoff de congelamento para a lane Jarvis-HOOK
- Removido do editor:
SaveSquareToProject()(código morto — perdeu seu único caller no cleanup SUPERMD;SaveToProjectcom re-baseline já cobre) + fallback dev-path mortowork/nul_ward_pack/command.binemResolveCommandBinPath(o arquivo não existe; o corpus cobre). A área do editor de Sphere Grid agora está 100% livre de conceitos v5 (hook/manifest/sidecar/square). docs/ai/HANDOFF_JARVIS-HOOK_SPHEREGRID_V5_FREEZE_2026-08-01.md(novo): instrução para a lane Jarvis-HOOK para congelar a stack v5 (SphereGridFullGridCompilerHook.{cpp,h}+SphereGridTrueNewNodeHook.{cpp,h}→legacy/) sem quebrar a fábrica dos outros hooks; pontos de contato do dllmain (includes L49-50, externs L97-98, Enabled L870-876, installs 11900-11931, removes 12168-12169); critério RT2 (pass → excluir; falha → lab isolado); ffx-probe.dll é NOT um hook (manter).- Validação: build Release 0 erros; testes SphereGrid 4/4 PASS (com âncoras). Baseline da área intacto.
v2.207.1.0
v2.207.2.1BETAREVISION
Seymour2 de ago. de 2026
lane do Sphere Grid closure (handoff + PORT_STATUS)
docs/ai/SESSION_HANDOFF.md: handoff lane-closure — os 5 commits da sessão (cleanup SUPERMD, bits sphere.bin PROVEN, forense de crash, auditoria de escrita 7 invariantes, remoção de código morto v5) + estado (editor 100% v5-free, jogo pronto para o RT2 limpo) + itens pendentes (RT2 limpo humano, smoke UI, congelamento de stack v5 na lane Jarvis-HOOK) + próximo passo seguro.PORT_STATUS.md: atualização de fechamento — status da área consolidado; RT2 limpoNeeds Testing. ### PATCH
v2.207.2.0
v2.207.3.0BETAPATCH
Seymour2 de ago. de 2026
Correções do F7 In-Live: layout AUTO (25 statuses visíveis), Force baseado em ticks (sem Sleep), gate RT0 offline
- Fix de layout: coluna AUTO STATUS com rowH 0.020 — todos os 25 statuses agora cabem na tela (Haste/Slow estavam cortados).
- Fix de Force:
F7_ForceLastBattleagora agenda por ticks (g_forceRepeatLeft+ ~10 frames entre forces, processados emF7_TickMainThread) — o main-threadSleep(120)(stutter ~1s com repeat 9) sumiu. - Gate RT0 offline:
RuntimeTools/FfxHooksDll/f7_config_rt0.ps1— valida o contratof7_inlive.json(24 chaves, faixas de clamp, máscaras de status/elemento, key-value round-trip) sem lançar o jogo. PASS. - Build PASS + LabDeploy para Steam (junto com 2.207.4.0). ### REVISION
v2.207.2.1
v2.207.4.0BETAPATCH
Seymour2 de ago. de 2026
Stack de hooks do Sphere Grid v5 CONGELADO (legacy)
- Freeze executado (handoff
HANDOFF_JARVIS-HOOK_SPHEREGRID_V5_FREEZE_2026-08-01.md): os 4 arquivos v5-stack (SphereGridFullGridCompilerHook.{cpp,h}+SphereGridTrueNewNodeHook.{cpp,h}) movidos paraRuntimeTools/FfxHooksDll/legacy/spheregrid_v5/;dllmain.cpplimpo (includes, externs,Enabled(), installs, removes, chamadas fault-handler) — zero referências restantes;vcxproj+build_hooks.ps1limpos. Suspeito #1 do crash0xc0000374(08-01, hooks ativos + grid limpo) fora do build. - Fault global VEH agora sempre armado (
FaultProbe VEH armed (global fault diagnosis)) — diagnóstico de crash mantido, independente do hook SG. - Critério RT2 mantido: RT2 limpo (save descartável, counts+1) PASS → excluir
legacy/spheregrid_v5/+ flagssg_*+ manifest; FAIL → volta como lab isolado (FFXHOOKS_SG_861_LAB_OVERRIDE). - Build
-WithPolyHook -ReleasePASS; LabDeploy para Steam. ### PATCH
v2.207.3.0
v2.207.5.0BETAPATCH
Seymour2 de ago. de 2026
Correção da tela preta do submenu DIFF: valor falso de O_COUNT >0 no objeto de menu nativo
- Causa raiz (meu bug v2.207.1.0): o multi-column DIFF seta
g_f7RowCount = 0(sem linhas 1D) eF7Sub_SpawnMenuescreviaO_COUNT = 0no objeto de menu nativo — o tick de draw do jogo via count 0 e nunca chamava nosso draw → submenu "aberto" mas invisível → tela preta (gate forçado sem render 3D e sem menu) → só F7 (force close) voltava ao jogo. - Fix:
O_COUNT = g_f7RowCount > 0 ? g_f7RowCount : 8no spawn (fake count 8 para DIFF — nosso draw/input multi-column não usam O_COUNT). - Extra (diagnóstico de log): o global VEH capturou 2 AVs reais no boot (
FAULT AV READ pc=0x796B11D7/0x796B3908 accessed=0x10CDCDCD— heap liberado; módulo 0x796B = provavelmente fmodex chamando um callback FFX no rva 0x291488) — suspeito #1 do crash ocioso do usuário ("jogo fechando aleatório enquanto ocioso"); investigar0x291488em IDA na próxima rodada. - Build PASS + LabDeploy para Steam (15:32→v4). ### PATCH
v2.207.4.0
v2.207.6.0BETAPATCH
Seymour2 de ago. de 2026
F7 DIFF: navegação espacial 2D real (presets com L/R, Down para BASE, Up na linha 0 para voltar) + edição numérica do zero + chip Custom
- Navegação corrigida (mapa mental do usuário): PRESETS agora navega com L/R (chips horizontais) e Down vai para a coluna BASE; nas colunas de dados, L/R troca de coluna e U/D move linhas; Up na BASE linha 0 volta para os presets. Antes: L/R trocavam de coluna até nos presets (você tinha que ir de lado para "descer").
- Edição numérica corrigida: entra com o campo zerado (digite o valor NEW do zero — antes acumulava sobre o valor atual: digitar '0' virava 10000/max); sem dígitos + Confirm = mantém o atual; placeholder
>> value _mostra o atual até digitar; footer contextual ("digite 0-9 / Backspace / X aplica / Esc cancela"). - Chip "Custom" (5º): visível e navegável — vira ACTIVE em qualquer tweak manual (toggle/edit) (antes: nenhum chip aceso = confuso). Selecioná-lo mantém os valores atuais. Off (vals[0]=0) = desabilitado; custom (4) = habilitado no commit.
- Build PASS + LabDeploy para Steam. ### PATCH
v2.207.5.0