Atualização 2.123
16/06/2026
v2.123.0.0BETAMINOR
Wakka
Arena+ Multi Dark Aeon sidecar de progresso + reader/writer em FfxHooksDll
- (a) novo sidecar
mods/Spira Reforge/arena/progress/spira-arena-progress.{json,schema.json}(schema v1 da seção 15 do dossiê) comflags{}cleared/first_clear_utc/last_clear_utc/clear_count/evidence +tier_lock_state{}opcional (LOCKED/READY/CLEARED); chaveado porprogress_flagdo catálogo (arena.dark.<slug>); README documenta regras de uso e mapeamento catálogo<->sidecar. (b) Novo móduloRuntimeTools/FfxHooksDll/hooks/ArenaProgressSidecar.{h,cpp}— reader/writer best-effort JSON (sem deps),ArenaProgress_Initialize/IsRowCleared/RecordClearedgated porarena_plus_progress.flag(off default), busca$FFXHOOKS_ARENAPLUS_PROGRESS_PATH-><DllDir>/mods/Spira Reforge/arena/progress/...-> fallback<DllDir>/spira-arena-progress.json. Persistência atômica via.tmp + MoveFileEx. EnvFFXHOOKS_ARENAPLUS_FAKE_CLEAR=flag1,flag2deixa devs semearem flags manualmente para teste UI. (c)dllmain.cppchamaArenaProgress_InitializeemInstallHooksapós o overlay do catálogo. (d) A detecção real de vitória ainda não está NOT ligada — mantida como TODO documentado; a Fase 6 do plano reconhece essa divisão, e o API públicoArenaProgress_RecordCleared(flag, note)está pronto para um futuro consumidor de hookbattleEnd. Build PolyHook PASS 10/10 cpp. In-game RT2 Needs Test (viaFFXHOOKS_ARENAPLUS_FAKE_CLEAR)
v2.122.0.1
v2.123.0.1BETAREVISION
Wakka
Arena+ Multi Dark Aeon: receita penta stretch + dry-run PASS
- (receita/docs, sem mudança de comportamento shipada). Plano Fase 7 (stretch). Novo
RuntimeTools/ArenaMultiBossLab/recipes/dark_penta_elemental_five.json+ doc de receitamods/Spira Reforge/arena/recipes/dark_penta_elemental_five.mdcobrindoDark Valefor + Dark Ifrit + Dark Ixion + Dark Shiva + Dark Bahamutemnagi05_70(alias Dark Yojimbo, 5 dos 6 monPos vanilla, slot 5 não usado). PipelineArenaMultiBossLab --recipe dark_penta_elemental_five --dry-runPASS contranagi05_70.bin.spiraforge.bak: chunk2 = 5 actors @ 0x18A4 (16 bytes), chunk3 = 6 monLive @ 0x1B04 (96 bytes, position-only), re-read confirma slots. Linha do catálogodark-penta-elemental-fiveatualizada: id renamed,token_modeblocked->alias(alias é tecnicamente legítimo),evidenceanota dry-run PASS,rt2_statuspermaneceblocked(sem prova in-game) — só RT0 byte-safety provado. NOT promove penta a uma feature: permanece stretch até quartet RT2 PASS + tentativa in-game documentada via_RT2_CHECKLIST.md. Plano de promoção 4-way (PASS / blocked-by-camera / blocked-by-ai / blocked-by-crash) na receita MD
v2.123.0.0
v2.123.0.2BETAREVISION
Lulu
Spira Reforge: Capture Cascade Fase A lockdown — 8 decisões travadas + 3 artefatos de preparo
- (design/doc/schema, sem código). Sessão de planejamento do Halyson 2026-06-16 fechou as 8 decisões em aberto do §7 do doc Capture Cascade (
v2.122.0.1): D1 Magus Sisters → Mushroom Rock Road (não Gagazet — nostalgia perversa pela Operação Mi'ihen + 3 fayths trágicos, uma área mid-early que vira T7 endgame); D2 Bestiary F7 → aba dedicada + popup post-battle, com slot para GPT-generated art por DA capturado; D3 patrol non-fleeable; D4 drops = 1× shard temático + 1× consumível raro; D5 captura conta como kill++ (desbloqueia a escada vanilla 1v1 AND SIN); D6 sem prompt de confirmação; D7 safe-zone respeitado tanto pelos mobs T7 quanto pelo patrol DA; buff D8 anunciado só na primeira entrada post-capture. A Fase A entrega 3 artefatos: (a) schema de sidecarmods/Spira Reforge/save-schemas/spira-reforge-flags.schema.jsonv1 (capturas DA +sin_mode.region_overrides+conquistas_seen+capture_cascade.patrol_kills/first_entry_seen— de-conflicted com o sidecar Jarvis-ARENA despira-arena-progress.jsondev2.123.0.0, que é dono dos clears de linha da arena); (b) mapa de regiãomods/Spira Reforge/arena/dark-aeon-region-map.json(8 DA → área canônica + patrol_subzones + safe_zones + notas narrativas); (c) plano de spike da Fase B REdocs/reverse/FFX_SPIRA_REFORGE_CAPTURE_BIT_M_HEADER_RE_PLAN_2026-06-16.md(playbook de 1–2h para localizar o bitcapturableno headerm###via diff hex + IDA opcional). Doc mestre atualizado §7 (lockdown) + §4 (mapa final) + §13 (refs de artefatos). VISION_AND_ROADMAP §11 ganhou bloco "Fase A artefatos". Plano de 4 fases definido (A=lockdown feito, B=spike RE em chat separado, C=writer Cap-1 em v0.5, D=piloto RT2)
v2.123.0.1
v2.123.1.0BETAPATCH
Lulu
Ronso Mana: correção Overdrive re-arm (bug #2) + command-ring RE de 2º pass
- (corrige um bug de comportamento runtime-hook + RE/docs). Bug #2 ("Ronso Rage não re-select indo para a esquerda após um uso"):
RonsoManaHook.cppbaixou o gate de exibição OD degateMin=100(vanilla "barra cheia") para 40 (=kRonsoSkillCosts[0], o custo Jump do Overdrive). Com o gate em 100, após um único uso parcial (drain 40 → charge 60 < 100) toda função de forçareturnsaía cedo e OD sumia até a barra encher para 100 — contradizendo o próprio pool parcial 0–255. Greyout Per-row (G3) ainda bloqueia habilidades inacessíveis (custo > charge atual), então baixar o gate é seguro. Banner de instalação corrigidohudSafe=19→hudSafe=21(o log imprimia a versão errada, atrapalhando o diagnóstico). RE de 2º pass (após RT2hudSafe=20FAIL): decompile completo de79BB70/79B500/7B6BD0/79AD40/7A07D0/797D60+ um offlinecommand.bindump provou: (a) a linha de comando do runtime = header 0x14 + struct de arquivo (âncorabyte[25]=CharacterUser=file+5), entãobyte[22]=MenuFlgs etc; (b) cmd282 (Ronso Rage) IS o header do anel OD (MenuFlgs=0x11→header,MainMenu=True,ODCat=19,MenuLeft) — a leitura antiga "282→leaf cat4 +296" estava errada; (c) em79BB70loop-2, um header comMisc2 MenuLeft (0x10)→dword[28]&0x1000→ cai no array BSS +40, NOT +0 (headers visíveis) — por isso forçar 282 disponível nunca o mostra no anel do meio; (d)resolve=-1é um red herring (o anel principal aparece mesmo com -1); (e)797D60 case 3lê um blob per-actor (actor+0xF7C); (f)79B500escreveactor[0x590]=save[+16]cedo — nosso forcing emRefreshMenu_Shim(Prepare antes do trampolim) é sobrescrito/apagado por esse store → explica por que replicar o save-edit falhou. Renames.i64:7B6BD0→FFX_Btl_UI_BuildOverdriveTargetList,79B500→FFX_Btl_RefreshActorMenuState(+ comentários em79BB70/797D60/79B500). Doc:docs/reverse/FFX_RONSO_MANA_COMMAND_RING_PIPELINE_RE_2026-06-16.md§8. Próximo passo (bug #1): experimento de captura save-edited-vs-forced para diff do delta exato. Fix #2 RT2 Needs Testing
v2.123.0.2
v2.123.1.1BETAREVISION
Lulu
Spira Reforge: prompt de handoff da Fase B do Capture Cascade (spike RE para o bit `capturable`)
- (doc de handoff, sem código). Novo
docs/ai/PROMPT_JARVIS_CAPTURE_BIT_M_HEADER_RE_SPIKE_2026-06-16.md— prompt completo para subir um chat dedicado para o Capture Cascade Fase B. Lane identity: Jarvis-CAPTURE-RE. Missão: localizar offset+bitcapturableno headerm###.binvia diff hex (Sinscale ↔ Dark Valefor + 2 amostras de validação) + IDA opcionalCanCapturecross-check. Entregáveis: tabela de evidência ≥4 linhas + doc RESULT + atualização plan-doc + atualização do doc mestre Cap Cascade + PORT_STATUS + seu próprio bump REVISION. Non-goals explícito (NOT implementa writer, NOT toca runtime, NOT captura in-game). Estimativa honesta 1.5–2h. Desbloqueia Cap-1 (Fase C, v0.5)
v2.123.1.0
v2.123.1.2BETAREVISION
Lulu
Spira Reforge: convenção de nome duplo do Capture Cascade (codename interno + marca player-facing)
- (design/doc, sem código). Halyson travou em 2026-06-16: a feature mantém dois nomes com papéis distintos. Interno (docs técnicos, changelogs, campos de schema, IDs, prompts, lane signatures) permanece Capture Cascade (Cap-1/2/3,
dark_aeons.captured.<id>,capture_cascade.patrol_kills,arena.dark.<id>). Player-facing (popups, README do mod, página do mod) = Yoke of Spira (EN) / Jugo de Spira (PT) — ressonância bíblica/Yevon (Mateus 11:30 "porque o meu jugo é suave") ecoa o tema teocrático do FFX vanilla. Aba F7 Conquests = The Yoke (EN) / O Jugo (PT). String de popup padrão: EN "Besaid é now under the yoke of Dark Valefor" / PT "Besaid está sob o jugo de Dark Valefor"; on-capture battletext EN "Dark Valefor has been tamed. Spira trembles." / PT "Dark Valefor foi domado. Spira sente o tremor." O doc Capture Cascade ganhou §0 (tabela de convenção de nomes + racional Microsoft Threshold/Redstone). VISION_AND_ROADMAP §11 ganhou a tabela de 3 contextos com cross-link
v2.123.1.1
v2.123.2.0BETAPATCH
Lulu
Ronso Mana: root-cause FIX do anel de comando — a base do ring buffer nunca foi dereferenciada (bug #1)
- (corrige um bug de comportamento runtime-hook + RE). O achado: o buffer command-ring é runtime-allocated; seu ponteiro absoluto vive numa célula BSS (
*(u32*)0x2310CD8).7AEFC0/79BB70fazemmov edi,[cell](DEREF) antes de indexar+20592(sort scratch) /+1144*slot(anel per-actor).RonsoManaHook.cppusavaRVA_FFX_BATTLE_COMMAND_RING_BSS_BASE=0x1F0FCD8cru, sem o deref, e errado por 0x1000 — então ALL escritas de anel (template, header per-slot+0, linha OD+296) emhudSafe 11..21caíam numa região estática BSS que nunca era o buffer exibido ao vivo. Isso explica por que nenhuma injeção de anel BSS apareceu, e por queCopyMenuTemplate_Shim(o detour7AEFC0) sempre early-returned (delta = slotPtr - ringBasenunca era múltiplo de 1144). Correção: novoRVA_FFX_BATTLE_COMMAND_RING_BASE_PTR=0x1F10CD8(a célula de ponteiro real, tirada do imm32 demov edi,[..]@0x7AEFC8) +BattleCommandRingUiBase()agora dereferencia (*(u32*)(g_base+RVA), null-checked quando ainda não alocado). Com isso,PatchKimahriCommandRingUi(+0 header),PatchKimahriMainMenuOverdriveRow(+296 OD) eCopyMenuTemplate_Shim(+296 post-sort) escrevem no anel real pela primeira vez. RE provado (IDA):7AD980= ordena um array por prioridade (key=*(u8*)(GetCommandEntryById+92), scratch=ring+20592);7AEFC0o chama 8× (uma por categoria) para ordenar o anel per-slot. Renames.i64:7AEFC0→FFX_Btl_UI_SortCommandRingSlot,7AD980→FFX_Btl_UI_SortCmdRingArrayByPrio+ comentário na célula de ponteiro0x2310CD8. DIAG (hudSafe=22):DumpKimahriRingStateloga um readback do+0/+296real emG0-finalizepara confirmar se o cmd OD codificado (0x311A) cai. Build PolyHook PASS (10/10), deploy apply-mode. RT2 Needs Testing (bug #1: OD no anel do meio). Doc:docs/reverse/FFX_RONSO_MANA_COMMAND_RING_PIPELINE_RE_2026-06-16.md§9
v2.123.1.2
v2.123.3.1BETAREVISION
Seymour
Spira Reforge: Capture Cascade Cap-1 — bit `capturable` em `m###.bin` LOCATED (spike da Fase B RE, doc-only)
- (RE/doc, sem mudança de comportamento; encadeado em cima de
v2.123.3.0MINOR de uma lane paralela — este REVISION é puramente doc/RE e não compete com aquele MINOR). Capture Cascade Fase B spike entregue doc-only: o byte que controlacapturable=true|falseem todom###.binfoi localizado byte-precise e validado com 58 amostras. Veredito: posição =bytes[StatSheetPointer + 0x78](ondeStatSheetPointer = uint32_le(bytes[0x0C])); semântica =0xFF(sbyte -1) significa não capturável,0x00..0x67(sbyte 0..103) significa capturável (índice de slot na tabela de 104 slots do Monster Arena vanilla); paddingbytes[StatSheetPointer + 0x79]é sempre0x00. Cadeia de evidência cruzada (a) editor legado v1.4FFXmon4.ini(rótulo "Capture index" como hex 16-bit,00FF= uncap), (b) struct atual C#FfxLib/Monster/Monster_StatSheet.cslinhas 49-50 ([Data] public sbyte ArenaId+[Data] public byte ArenaIdPadding), (c) binding UI ao vivoMonEditor_Control.axamllinha 466 ("Capture index (Arena)"), (d) layout estrutural completo (MonsterHeaderFileheader de 0x40 bytes + seção StatSheet +Monster_StatSheetStatBlock onde ArenaId fica no offset+0x64relativo ao StatBlock que começa emsection + 0x14→ file-relative+0x78). Prova: 21/21 capturáveis bateram com o slot esperado (incl. match byte-exact comFFXmon4.iniparam044=0x28/m045=0x29/m046=0x2A/m193=0x55/m194=0x56), 16/16 uncap de boss =0xFF, 10/10 Dark Aeons (m334..m343) =0xFF, 3/3 entradas Penance (m344..m346) =0xFF. Correção operacional importante: a suposição antiga "DA vivem emm106..m113" estava WRONG — os DAs reais sãom334..m343(provado emFfxLib/Dictionaries/Monster_Dictionary.cslinhas 343-356), com Magus Sisters como 3 entradas separadas (m341/m342/m343). DOC-ONLY: nada foi escrito emm###.bin/DLL/runtime/save/hook nesta sessão. Não executado: confirmação IDA do gatekeeperCanCapture()(Step 3 opcional do PLAN); cross-validation contraFFX Extracted\tree (recomendado, mas não bloqueante — 58/58 modificados já coincidem the vanilla expectation via the FFXmon4.ini cross-reference). Artifacts:docs/reverse/FFX_SPIRA_REFORGE_CAPTURE_BIT_M_HEADER_RE_RESULT_2026-06-16.md(doc de RESULTADO completo com receita de writer da Fase C),work/_capture_re_2026-06-16/parse_capture_offset.ps1(CLI parser),work/_capture_re_2026-06-16/dump_arena_id_evidence.ps1(bulk dump),work/_capture_re_2026-06-16/capture_re_evidence_summary.json(58 rows),work/_capture_re_2026-06-16/capture_re_evidence_hexdump.txt. O PLAN original ganhou um banner BLOQUEIO RESOLVIDO + IDs de DA corrigidos.PORT_STATUS.mdgot a row "Capture Cascade Cap-1 —capturablebit located" asPrecisa Testar in-game (Phase C writer). Cap-1 writer (Phase C, next session) writes 1 byte per monster while preserving byte-identity of the 8 adjacent identity fields. [previous:v2.123.3.0(lane paralela; a entrada de changelog deles virá quando a lane shipar)]
v2.123.4.0BETAPATCH
Lulu
Nul Ward: superfície de menu de ensino, VEREDITO da RE + CORREÇÃO do hook limitado ao menu (estava corrigindo o `cmp 320` errado)
- (corrige um bug de comportamento em
NulWardTeachHook+ RE provado no.i64real; incremento PATCH → redefinições de revisão; o HEADv2.123.3.1anterior era uma REVISÃO de lane paralela). Passe completo de RE (idalib MCP noFFX_recon.i64real) verificando se ensinar Radiant(320)/Umbral(321) via sphere grid + umcommand.binampliado funciona de ponta a ponta. Cadeia COMPROVADA: (1)FFX_GrantCommandToCharacter@0x785D10roteia id≥96 para o banco para todo o grupog_PartyWideCommandBank@0x11307FC— 16 palavras/256 bits = IDs 96..351; Radiant=word14 bit0, Umbral=word14 bit1; (2)FFX_Btl_BuildActorCommandMenu@0x79BB70SEMEIA o banco inteiro para actor+0x670 (loop de cópia termina emg_CmdAggregateAvailArrays@0x113081C→ banco = 16 words); (3)FFX_Btl_IsCommandAvailable@0x79AD40lê a palavra818+id/16do actor (id320→byte 0x68C bit0) — consistente; (4)FFX_SphereGrid_NodeActivateStateMachine@0x8CC300case21 chama grant(char, node.LearnedMove, 1) → um nó comLearnedMove=0x3140/0x3141ensina isso; (5) persistência viaFFX_IsCommandLearnedPersistent@0x7850E0lê o mesmo bit. BUG ENCONTRADO E CORRIGIDO:BuildActorCommandMenutem 3cmp r32,140h(dois81 FE=esi nos loops agregados, um81 FF=edi no loop PLACEMENT que insere o id no submenu de magia branca). Somente a comparação de posicionamento controla se 320/321 chegam ao menu; o antigoNulWardTeachHookcorrigia apenas a primeira ocorrência (81 FE, uma operação sem efeito para disponibilização). CORREÇÃO: agora ele corrige todas as ocorrências decmp r32,140h→0x142(recompilação do PolyHook PASS). Riscos de RT2 documentados: (a)FFX_Kernel_GetCommandEntryById@0x790AE0→FFX_Table_GetEntryByIdRange@0x7AB890é a tabela de intervalos com a alternativa para cmd 0 — ocommand.binampliado precisa estender o intervalo que cobre 320/321 (caso contrário, Radiant resolve para cmd 0); (b) a persistência depende de o limite/mapa especial deply_saveser amplo o suficiente para cobrir bit 224/225 (palavra 14). Projeto: id≥96 = para todo o grupo (o grupo inteiro aprende isso), não por personagem (limite de 96 bits). Renomeações + comentários aplicados ao.i64(FFX_Btl_IsCommandAvailable,FFX_Btl_InitPartyWideCommandBank,FFX_Btl_PrepareSaveCommandState,FFX_Btl_BuildAggregateChildList,g_PartyWideCommandBank,g_PerCharCmdMenuState, etc.). Documento:docs/reverse/FFX_NUL_WARD_TEACH_SURFACE_RE_VERDICT_2026-06-16.md
v2.123.3.1
v2.123.4.1BETAPATCH
Lulu
Ronso Mana hudSafe=24: PERSISTENT gauge-full PIN (`max:=charge`) — corrige "nem dá para ir LEFT em Overdrive a menos que a barra esteja cheia"
- (corrige um bug de comportamento runtime-hook + RE). O achado (provado por log + decompile): FFX acopla "Overdrive utilizável" a uma barra cheia (
charge==max) e re-checks isso PER-FRAME no renderer HUD/menu — fora dos nossos hooks. O spoof transientehudSafe=23setavamax:=chargeem volta de cada trampolim, mas restauravamax=255logo depois (EndKimahriMaxSpoof), então o frame em que o anel é desenhado viamax=255(barra não cheia) → Overdrive oculto / LEFT bloqueado. Evidência de log RT2 (hudSafe=23):G0 menu charge=100 max=100(o spoof DID funcionou durante o build) mas OD ainda nunca apareceu;IsOdReady ... vanilla=1 ->1(os bits 0x590 estavam setados, até pelo vanilla) e ainda assim foi bloqueado. RE deste pass (idalib MCP):79AF70 = (actor[0x590]>>2)&1,79AEE0 = (actor[0x590]>>3)&1— ambos forçados e =1, NOT o gate;792AB0(FFX_Btl_BattleMenuInputDispatch) constrói o anelkind=12OD quando79AF70(então o anel OD existe);799AD0/799D60/7996E0/799830são resolvers target-mask, não o gate OD-full. Conclusão: o gate vivo é a comparação per-framecharge==maxno renderer — fora do alcance de um spoof transiente. Correção:ApplyKimahriRuntimePoolMaxagora fixa persistentementemax:=chargeenquantocharge>=gateMin(a barra lê 100% cheia para cada verificação per-frame enquanto o menu de comando dele está aberto; o ATB/CTB está pausado durante a entrada de comando, então nenhum ganho de overdrive é perdido); abaixo do limiar devolve o pool real (255) para a barra reencher em direção a 0–255. O spoof transienteBegin/Endestá aposentado (no-ops); o shim de dispatch agora chama o pin persistente. Tradeoff conhecido (RT2): a barra lê cheia enquanto OD é utilizável; o ganho OD pode pausar enquanto a carga fica na faixa utilizável (revisitar se RT2 mostrar um stall de ganho — escopar o pin para menu-only). Build PolyHook PASS (10/10), deploy apply-mode (SHAB092B4C6). RT2 Needs Testing (ir LEFT + usar Ronso Rage com charge parcial). Doc:docs/reverse/FFX_RONSO_MANA_COMMAND_RING_PIPELINE_RE_2026-06-16.md§10
v2.123.4.0
v2.123.5.0BETAPATCH
Lulu
Nul Ward grid-teach: faixa command.bin PROVEN (sem patch de exe) + codificação LearnedMove FIX no editor + verifier offline
- (corrige um bug de comportamento SphereGridExplorer do editor + nova prova/verifier offline + RE). DLL intocado (a lane Ronso Mana é a que usa) — só C#/editor/IDA. RT2 risco #1 ELIMINATED offline: RE provou que
FFX_Kernel_LoadFileToTable@0x781E00(case 0"command") carregacommand.binverbatim num ponteiro global (g_CommandKernelTable@0x112A92C, full-filememcpy) — sem síntese de faixa.FFX_Table_GetEntryByIdRange@0x7AB890lê o header de faixa direto dos bytes do arquivo, mapeando exatamente emEntryListFile:numRanges=int16@0(=Signature=1),lo=PreviousFileCount@8(=0),hi=(EntryCount-1)@10,stride=EntrySize@12(0x60),base=EntryTableFileOffset@16(0x14);record = file + 0x14 + id*0x60. Como ocommand.bincrescido escreveEntryCount-1=321, ids 320/321 ∈ [0,321] → resolvem para exatamente as linhas Radiant/Umbral anexadas. Sem patch de exe/DLL. NovoCommandKernelLookupVerifier(FfxLib/Ability) repete a matemática exata do engine contra os bytes crescidos e é ligado ao gate--nul-ward-static(checkengine_lookup_resolves: prova offline de que GetCommandEntryById(320/321) NOT não cai no fallback cmd0). Editor FIX (SphereGridExplorer): o dropdown LearnedMove guardava o id cru (0x0140), mas on-disk é o id codificado (0x3000|id) — provado empiricamente porSphereGridRt2Lab(Armor Break empanel.bin=0x3012) e exigido pelo gate(cmd & 0xFFFFF000)==0x3000do grant. O dropdown agora emite0x3000|id(Radiant→0x3140, Umbral→0x3141) e resolve nomes mascarando& 0xFFF, então o usuário pode colocar os wards no sphere grid e eles realmente ensinam (antes armazenava 0x0140 e o grant rejeitava). Renames.i64:0x781E00→FFX_Kernel_LoadFileToTable,g_CommandKernelTable/g_KernelFileSizes/g_AAbilityKernelTable/g_ItemKernelTable+ comentários provados em0x781E00/0x7AB890/0x790AE0(salvos viaidalib_save). Build C# PASS (0 erros). Doc:docs/reverse/FFX_NUL_WARD_TEACH_SURFACE_RE_VERDICT_2026-06-16.md§F/§G
v2.123.4.1
v2.123.5.1BETAREVISION
Yuna
Finalização balística Aurora: kickoff da Fase 0 (reconciliação de docs + correção de comentário legado + badge de variante UNVERIFIED)
- (docs + anotação RE/honestidade; sem feature nova; sem bump comportamental). Plano persistido em
.cursor/plans/aurora_balistica.plan.md(10 fases, escopo Halyson-confirmed A+B: 5 RT2s ativos + spike IDA W2S + spike variant-selector IDA). Este REVISION shipa só a Fase 0 (reconciliação de docs antes da instrumentação de probe). Quatro edições: (1) linhaPORT_STATUS.md"Aurora Chamber" — texto Honestidade corrigido: eratransform battle->world is DESIGN/UNCALIBRATED (...) flip-Z is a hypothesis, agora reflete o IDA-proof de 2026-06-05 (X/Z = identity,Y residual RT2 pending, refsFFX_AURORA_BATTLE_TO_SCENE_TRANSFORM_IDA_PROVEN_2026-06-05.md+FFX_AURORA_MASTER_RT2_CHECKLIST_2026-06-15.mdA01/A04/A10). (2)PORT_STATUS.mdtopo — novo blocoAtualizacao 2026-06-16 (Aurora finalizacao balistica)resumindo o estado real da Aurora reconciliado contra A15 + ordem RT2 confirmada (azit03_00 -> klyt00_00 -> drag -> grow -> camera -> photo, depois spike IDA). (3)RuntimeTools/FFXMapViewerWeb/aurora-overlay.js— header JSDoc (linhas 9-10) corrigido: eraRAW battle-local - design-only/UNCALIBRATED, agoraIDA-proven IDENTITY in X/Z; Y residual per area/model height (actor+0x534) RT2 pending; flip-Z stays as comparison/debug only. (4)FFXProjectEditor/Modules/AuroraChamber/AuroraChamber_DataModel.cs—variantNote(mostrado emSceneDetailquando_resolver.ResolveScenes(MapKey)retorna mais de 1 variante) agora anexaruntime selector UNVERIFIEDao lado da lista_a/_b/_c, para os usuários saberem que a Chamber renderiza a variante que o catálogo escolher enquanto o seletor real (story-flag -> variante) não foi RE-proven — veja A04FFX_AURORA_ARENA_VARIANT_SELECTION_RE_2026-06-15.md. Não toca: probe, writers, gates offline, FfxHooksDll. Próximo (Fase 1): implementaraurora-calib-v2emRuntimeTools/FfxDinput8Probe/ctl/Program.cscom saída CSV/JSON (identity_dx/dy/dz/rmsresidual,flipz_*,yaw180_*, enumwinner,height_0x534, rota + id de batalha) — spec emdocs/reverse/FFX_AURORA_CALIBRATION_PROBE_SPEC_2026-06-15.md. Fase 0 RT2: N/A (docs-only + string UI)
v2.123.5.0