JARVIS-ARENA
Atualização 2.130
16/06/2026
v2.130.0.0MINORJarvis-ARENA
Arena+ Multi Dark Aeon tier-lock report CLI (`--print-tier-lock`) + sidecar schema v1
- (capacidade nova: primeiro report offline cruzando catalog v2 + progress sidecar; novo schema canonico do snapshot LOCKED/READY/CLEARED). Novo
RuntimeTools/ArenaMultiBossLab/TierLockReport.cs+ 4 flags noProgram.cs:--print-tier-lock,--progress <path>,--out <json>,--json. Modo padrao imprime relatorio humano agrupado por tier com motivo de gate (← needs: arena.dark.valefor, ...em rows LOCKED) e fallbackrt2:<status> risk:<...> token:<mode>em rows nao-proved. Modo--outou--jsonemite JSON estrito que casa com o novo schemamods/Spira Reforge/arena/spira-arena-tier-lock-state.schema.jsonv1 (format,format_version,generated_utc,summary{total,cleared,ready,locked},rows[]comstateenumLOCKED|READY|CLEARED+unlock_requires/missing_requires). Regras de gating ja documentadas no schema (sao as mesmas que o futuro hook de menu F7 vai aplicar). Run atual contra catalog + sidecar vazio: 13 rows total -> 9 READY (solos) + 4 LOCKED (duo/trio/quartet/penta gateados pelos solos), 0 CLEARED. README demods/Spira Reforge/arena/reescrito com tabela completa dos 5 sidecars + comandos--print-tier-locke--validateexemplificados. Lints clean. Build PASS
v2.129.0.0
v2.130.1.0PATCHJarvis-MAGIC
Ronso Mana (7ª passada): li o `DIAG`/`BLOB-PATCH` do RT2 `hudSafe=24` que eu tinha PULADO → o patch do blob escrevia NÓ INVÁLIDO (`subIdx=0x00`); reescrito pra escolher nó VÁLIDO + `ODBLOB` deep dump
- (corrige a heurística quebrada do
PatchCase2BlobForKimahri+ nova instrumentação read-only num hook já shippado/RT2; código pronto, build/deploy na próxima liberação da DLL — outra sala está usando). A descoberta (linhasDIAG/BLOB-PATCHdo%TEMP%\ffx-hooks.logque eu nunca tinha lido — só grepavaB0 resolve):BLOB-PATCH #1 treeId=43 set entry=0x00 (was 0xFF)+DIAG G0-ring-post blob2=0x1B5C8D70 hdr=[03 8A] maxE=138 treeId=43 entry=0x00 slots41/42/43=[FF FF 00] OK— ou seja oPatchCase2BlobForKimahrijá existia e já rodava (setoublob[45]de0xFF→0x00) mas oResolve(2,1,43)continuou −1. ⇒ o fallback antigo (maxUsed→quase sempre0x00) apontava o treeId 43 pra um nó estruturalmente inválido: passa o gate primário doWalkMenuBlobIndex(idx!=0xFF,43<count) mas o seletor secundárioringKindestoura (v4>=node.entryCountouentry[v4]==0xFFFF) →*a3=−1. Provas adicionais do mesmo log:count=138(43 está no range → NÃO é o caso "count pequeno"/43>=count);slots 41/42 = 0xFF(nenhum OD de party registrado nesse blob a2=1 → não há doador sibling);DIAG G0-finalize slot=2 od=3065 3064 3066 311A(o ring buffer layer-A TEM311A=cmd282 Ronso Rage — confirma que o gate é 100% o resolve da menu-tree layer-B, não o conteúdo). O fix (código,hudSafe=25): (1)PatchCase2BlobForKimahrireescrito — agora decodifica o nó no formato EXATO doWalkMenuBlobIndex(v6=(count+1)/2+2*subIdx;nodeOff=*(i16)(blob+2*v6+4);entryCount=*(u16)(blob+nodeOff);entry[k]=*(u16)(blob+nodeOff+2+2*k), tudo bounds-clamped) e escolheblob[2+43]por prioridade: (a) nó que contém0x311A(assinatura exata do OD) e suportaringKind=1; (b) sibling party-OD 41..47 já registrado com nó selector-capaz; (c) nó mais rico que suportaringKind=1(de preferência também 12). Se NADA qualifica, deixa0xFF(a2=1 não tem nó OD usável → é fix-C/redirect pro a2=0) e logaNO viable node, em vez de escrever lixo0x00como antes. (2) novoDumpOdBlobStructureOnce(read-only, dispara 1× mesmo em log-only) — dumpa os índices party-OD 41..47 do a2=1, oentryCount+primeiras entradas dos nós 0..23 (marcando o que tem<<OD311A>>), e os índices 41..47/109..115 do a2=0 (MainRing) → 1 RT2 crava osubIdxcerto OU revela que é redirect pro a2=0. Helpers novos (todosstatic, bounds-clamped, sem dep de PolyHook):OdBlobNode/OdBlobEntry/OdNodeSupportsSelector/OdNodeContainsEncodedOd/ReadMainRingBlobPtr(a2=0 =_BASE0xD2A994). BannerhudSafe=24→25(confirma DLL nova no log). NÃO buildei/deployei (DLL em uso por outra sala — respeitado);ReadLintsclean; código pronto probuild_hooks.ps1 -WithPolyHook -Release. Arquivo tocado:RuntimeTools/FfxHooksDll/hooks/RonsoManaHook.cpp. Doc:docs/reverse/FFX_RONSO_MANA_COMMAND_RING_PIPELINE_RE_2026-06-16.md§13
v2.130.0.0
v2.130.2.0PATCHJarvis-MAGIC
Nul Ward: ROOT CAUSE do "não apareceu nada no menu de White Magic" ACHADO + CORRIGIDO — o banco party-wide é RECARREGADO do `party_data` a CADA init de batalha, apagando o grant antes do menu montar
- (corrige o bug de comportamento que impedia o surfacing do Nul Ward — mesma feature/lab do
v2.123.4.0/v2.124.0.2; RE decisiva provada na.i64real + novo detour de re-assert noNulWardTeachHook; DLL liberada pelo Halyson, rebuild+deploy feitos). O sintoma: mesmo depois do fix multi-site do menu-bound (v2.124.0.2) + grant on-load (logNulWardTeach grant ch=0..6 radiant=1 umbral=1), as wards não apareciam na magia branca em batalha. A RE que fechou (idalib MCP, byte-verificada viadisasm):sub_7817D0("* BTL INIT") chamaFFX_Btl_PrepareSaveCommandState@0x786BC0("-- SAVE RAM CLEAR -- Preparing save game data") a cada init de batalha; em0x786CA3ela fazmov ecx,21h; mov edi,offset dst__0; rep movsd— copia0x84(132) bytes do kernelparty_data(table id 4) pradst__0=0x11307D8, faixa[0x11307D8,0x113085C)que cobre inteiro og_PartyWideCommandBank@0x11307FC(offset+0x24dentro da cópia; banco = 16 words, ids 96..351). ⇒ o banco party-wide inteiro é sobrescrito doparty_datatoda batalha, eparty_datanão tem bit de ward → word14=0 →IsCommandAvailable(320/321)=0→ o loop de placement pula as wards → "nada apareceu". Suspeitos descartados:FFX_Btl_InitPartyWideCommandBank@0x784960só dáORem bits 0..130 e é debug-gated (if(unk_112A905){ DebugMaxAll(); Init(); }— não roda em jogo normal);sub_78F0B0(Lancet/blue) e o grant só mexem bit individual. Correção mental do §H:PrepareSaveCommandStatenão é só "persistência" — é o reload ATIVO por-batalha do banco a partir doparty_data; qualquer grant de id≥96 ausente doparty_data(sphere-grid teach incluído) reseta toda batalha. Categorização corrigida (empírica): dump docommand.bindeployado mostra os doadores Nul (NulShock id48, NulTide id49) e as wards (320/321) todos comSubMenuCategorization (byte +24) = 0x02— wards são templatadas dos doadores, então caem na mesma categoria de magia branca dos Nul que já aparecem (categorização correta-por-construção; faltava só o bit de disponibilidade vivo). O FIX (labteach_grant, deployado):NulWardTeachHookagora instala umPLH::x86DetournoFFX_Btl_PrepareSaveCommandState; o shim chama o original (deixa recarregar o banco doparty_data) e re-afirmag_PartyWideCommandBank[word14] |= 0x3(Radiant bit0 + Umbral bit1) no retorno — ou seja, logo após o wipe e antes doFFX_Btl_BuildActorCommandMenusemear o ator. Escrita direta no banco (não chamada de grant) pra não re-entrar no menu builder de dentro do init. Log diag (4 primeiros disparos):NulWardTeach reassert #n post-PrepareSaveCmdState: bank word14 0xPRE->0xPOST. Grant one-shot mantido pros menus de field/pré-batalha. Consequência de design (produção): comoparty_dataé a fonte por-batalha pra ids≥96, o caminho limpo pra uma ward sempre-disponível é adicionar o bit no próprio kernelparty_data(innata, party-wide), não no sphere grid — um id≥96 ensinado no grid não persiste pós-init sem (a) o bit doparty_dataou (b) re-assert em runtime como esse detour de lab. Build/deploy:build_hooks.ps1 -WithPolyHook -ReleasePASS (12/12 cpp), deployinstall_to_modules.ps1 -EnableApply -EnableTeach(backupffx-hooks.dll.backup-nul-ward-20260616-081633, novo SHA-prefix0DE302BDF13D5B14). Gate--nul-ward-staticVERDICT: PASS (sem regressão; command.bin/exe/flags intactos)..i64real: comentários em0x786BC0+0x786CA3(REGRA DE OURO). 2 novos RVAs emshared/ffx_addresses.h(RVA_FFX_BTL_PREPARE_SAVE_COMMAND_STATE,RVA_FFX_PARTY_WIDE_COMMAND_BANK). RT2 in-game: abrir batalha e confirmar Radiant/Umbral Ward na magia branca + checar logreassert ... word14 0x0000->0x0003. Risco aberto: largura doply_savepro bit 224/225 (§H) — lab re-aplica a cada load. Arquivos:RuntimeTools/FfxHooksDll/hooks/NulWardTeachHook.cpp,shared/ffx_addresses.h. Doc:docs/reverse/FFX_NUL_WARD_TEACH_SURFACE_RE_VERDICT_2026-06-16.md§I
v2.130.1.0
v2.130.2.1REVISIONJarvis-MAGIC
Spira Reforge: Magia Negra Estendida — design lockdown (Multi-Skill family > -ja tier; `-ja` vira backlog niche; Lulu Fury include-all)
- (design doc + integração no VISION; nenhum writer/comportamento/RT2 nesta passada). Halyson abriu brainstorm sobre criar novas Black Magic. Comparei duas rotas: (a)
-jatier (Firaja/Blizzaja/Thundaja/Waterja = clone -ga com +Power, exclude Fury) vs (b) Multi-Skill (versões AoE de spells single-target vanilla que não têm equivalente AoE). Decisão (Halyson): Multi-Skill ganha como caminho principal;-japarqueado como backlog niche (1 por elemento, MP brutal ~80–120, post-Celestial, cherry-on-top — não compete com buff de-gaemVISION §10.5); Lulu Fury inclui TUDO ("Fury Drainga 16× é caos lindo, fantasia OD"). Por quê Multi-Skill vence: (1)TargetFlags.Multijá é nativo da engine (FfxLib/Ability/Ability_Command.cs:125) — single → multi = 1 bit no command row; (2) spells preenchem gap real do vanilla (sem AoE poison, AoE drain, AoE osmose) e dão identidade; (3)-jaé redundante com planoVISION §10.5que já vai buffar-gacom Ignore MDEF / Power scaling ("Firaga reforjada" não "Firaja"); (4)VISION §10.11já parqueou Holyra/Holyga/Wildra como "engraçado, talvez nunca" pelo mesmo motivo (infla pool sem identidade); (5) Drainga/Osmose-ga alimentam outras frentes (Capture Cascade T7 long fights, Modo SIN curses, mob OD multicast). Spells primeira leva (v0.5+) validadas tecnicamente: Biora (AoE poison + dano, clone Bio + Multi), Drainga (AoE drain HP cap 9999/cast), Osmose-ga (AoE drain MP cap 99/cast), Demita (AoE 50% HP cap 9999/target), Multi-Firaga family (3× Firaga AoE sequencial MP triplo — ideia direta do Halyson: "Multi-Firaga por exemplo>>>>>>" — sub-família escalável pra Multi-Blizzaga/Thundaga/Waterga/Ultima). Segunda leva (v0.6+): Slowga, Reflectga, Demi-fall ("Dimensional Crush" 75% HP single MP caro), Quartera (25% HP AoE MP barato). Bloqueios honestos documentados: (a) spell ID slot0..95— audit cruzado comFFX_SPELL_FREE_ID_AUDIT_2026-06-12.mdpra identificar donors; (b) Lulu Fury rows#12408–#12422dump pendente; (c) Drainga cap balance RT2-dependent (sem cap = healer-by-offense OP, cap apertado = spell inútil); (d) Multi-Firagahit_countplayer-cast RE spike pendente; (e) VFX visual idêntica ao single (ok pra v0.5, recolor v0.6+ via engine Flan Flood já provadav2.114.0.0); (f) Sphere Grid wire decisão separada. Plano técnico incremental (§6.2 do doc): Fase A audit ID donors (sem código, este doc), Fase B authoring offline (clone rows + flip Multi + ajustar Power/MP + text entries), Fase C writer LAB, Fase D RT2 in-game, Fase E Fury integration, Fase F-jabacklog niche (v0.7+). Integração com mod: complementa§10.5Magia black buff, alimenta§10.6Lulu Fury, preserva§10.11puzzle elemental, responde§10.13mob OD multicast com Drainga/Osmose-ga, suporta§11Capture Cascade T7 fights. VISION_AND_ROADMAP.md atualizado: nova §12 "Magia Negra Estendida — Multi-Skill family" (decisão de design + spells primeira/segunda leva + roadmap tie-in + doc completa); Referências renumerada §13. Open questions pra brainstorm contínuo: Multi-Firaga mechanic A/B/C (Doublecast hardwired vs random distribution vs hybrid element — recomendação A), Drainga cap per-target vs per-cast, Sphere Grid wire, Demita vs Demi vanilla coexistência, white magic AoE (Esuna-ga?), tier dos donors. Não toca: nenhum writer, nenhum hook, nenhum probe, nenhuma DLL, nenhum gate offline/RT2. Apenas docs + integração de roadmap. Doc novo:docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md(10 seções, ~300 linhas). Arquivos tocados:FFXProjectEditor/FFXProjectEditor.csproj(bump 4-tuple),mods/Spira Reforge/VISION_AND_ROADMAP.md(nova §12 + renumber Referências §13),CHANGELOG.md+changelogUS.md+docs/governance/VERSIONING.md+docs/ai/SESSION_HANDOFF.md
v2.130.2.0
v2.130.3.0PATCHJarvis-MAGIC
Ronso Mana CRASH HOTFIX (`hudSafe=26`): o write do blob deixou de chutar nó (era `via=rich>=1 subIdx=0x01` → crash); agora a escrita é OPT-IN + só nó seguro + leituras blindadas por SEH
- (corrige crash de comportamento introduzido pelo
hudSafe=25dav2.130.1.0quando a DLL foi rebuildada/deployada nav2.130.2.0da lane Nul Ward). Causa-raiz (log RT2%TEMP%\ffx-hooks.log):RonsoMana BLOB-PATCH2 #1 treeId=43 set subIdx=0x01 via=rich>=1 nodeOff=0x1B4 ec=24 (was 0xFF)— o fallback (3) "nó mais rico" do meuhudSafe=25escreveu um índice de nó CHUTADO (0x01,ec=24) emblob[2+43]. Isso fezResolve(2,1,43)"ter sucesso" num nó que não é o anel de OD →finishMenuTreemontou/exibiu conteúdo bogus → o jogo crashou. (O0x00antigo dohudSafe<=24apenas devolvia −1 e por isso NÃO crashava: nunca chamavafinishMenuTree.) Meu chute "transformou um estado quebrado-mas-seguro em crash". O hotfix (hudSafe=26): (1) a escrita do blob agora é OPT-IN — só gravablob[2+treeId]quando o envFFXHOOKS_RONSO_OD_BLOBWRITE=1está setado; default = NÃO escreve nada (build à prova de crash, puramente diagnóstico viaODBLOB); (2) mesmo com opt-in, só grava nó PRINCIPIADO — (a) nó cujas entradas contêm o comando OD codificado0x311A, ou (b) sibling party-OD 41..47 que o jogo já registrou; nunca auto-grava o chute "nó mais rico" (esse fica só no log, pra eventual hardcode após ler o dump); (3) todas as leituras de nó (OdBlobNode/OdBlobEntry) e o bloco a2=0 doDumpOdBlobStructureOnceagora são blindados com SEH (__try/__except) — qualquer access-violation por offset OOB vira "nó inválido" limpo em vez de crash; (4)mainPtrdo a2=0 ganha sanity-check (> 0x10000). O log agora emiteBLOB-PATCH2 #n ... write=0|1 safe=0xXX(how) risky=0xXX(how,ec=..)(mostra o que faria sem escrever) e, quando opt-in + nó seguro,BLOB-PATCH2 WROTE .... BannerhudSafe=25→26. Reversibilidade: sem o env, comportamento = vanilla seguro (OD oculto, sem crash). NÃO buildei/deployei (DLL compartilhada com outras lanes Jarvis-MAGIC) — a próxima rebuild deffx-hooks.dll(por qualquer lane) já pega o hotfix;ReadLintsclean. Arquivo:RuntimeTools/FfxHooksDll/hooks/RonsoManaHook.cpp. Doc:docs/reverse/FFX_RONSO_MANA_COMMAND_RING_PIPELINE_RE_2026-06-16.md§14
v2.130.2.1
v2.130.3.1REVISIONJarvis-MAGIC
Spira Reforge: Magia Negra Estendida — 4 decisões cravadas Halyson (Multi-Firaga opção B, Drainga cap per-target supremo, Demita coexiste com Demi, Fury include-all com nuances)
- cascata pós-
v2.130.3.0(Ronso Mana hotfix MINOR de outra Jarvis-MAGIC paralela). Continuação imediata do design doc dev2.130.2.1: brainstorm com Halyson cravou as 4 últimas decisões em aberto. (1) Multi-Firaga mechanic — opção B (random distribution) + MP 3-5× base: Halyson: "Opção B, mas o 'Multi Firaga', 'Multi-Fodase' vai custar 3~5x o MP inicial da skill base pra compensar, uma porradaria do krl". Mecânica = 1 cast → N hits (5-7), cada hit pega inimigo random (engine native via fórmula Holy/Comet/Doublecast). Inimigos podem tomar 1, 2, 3+ hits do mesmo Multi-Firaga conforme RNG. MP cost = 4× base default (Multi-Firaga = 64 MP), Multi-Ultima = 200 MP. Sugestão Jarvis: começa com 4× MP + 6 hits, ajusta RT2. Família escalável (rollout incremental): v0.5 Multi-Firaga + Multi-Blizzaga, v0.6 + Multi-Thundaga + Multi-Waterga, v0.7 + Multi-Ultima (post-Darkness §10.11), v0.8+ backlog Multi-Flare/Multi-Holy. (2) Drainga cap — per target 9999/target (multi-cap): Halyson cravou consciente do impacto. 4 inimigos vivos = até 39.996 HP cura num cast = healer-by-offense supremo. ⚠ Pode quebrar arena longa — intencional, é mod do Halyson, fantasia endgame. Compensação: MP cost pode escalar até ~30 pós-RT2 se quebrar tudo. (3) Demita vs Demi vanilla — coexistem: Manter AMBAS. Demi single (16 MP, boss-killer) + Demita multi (24 MP, wave-clear). Player escolhe ferramenta. Custo: 1 slot ID extra. (4) Fury de Lulu include-all com nuances (decisões §4 atualizadas): Biora 16× = ok (poison wave); Drainga 16× = cap Fury-only 9999/pick (não per-target em Fury, senão até 639.936 HP cura — "para de fazer sentido"); Osmose-ga 16× = ok (MP cap 9999 = hard wall); Demita 16× = ok (Demi para de acertar alvo morto); Multi-Firaga 16× = 96 hits potenciais ⇒ Fury Multi- usa hit_count=1 (volta single-cast em Fury)* OU exclui Multi-* da Fury pool (única exceção ao "include all"). Decisão final ajusta RT2. Open questions atualizadas no §8 do doc: §8.1 decididas (4 cravadas); §8.2 ainda abertas (Sphere Grid wire, white magic AoE scope, element absorb confusion, tier dos donors0..95bloqueia Fase A, Multi-* random distributioncommand.binfield via spike). Doc atualizado:docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md§2.2 Drainga (cap per-target cravado), §2.4 Demita (coexiste cravado), §2.5 Multi-Firaga (opção B + MP 3-5× cravado + tabela elemental completa), §4 Fury (nuances per-spell), §8 open questions (4 marcadas decididas, 5 ainda abertas), §9 Versão de entrega atualizada. Próximo passo seguro: Fase A spell ID donor audit cruzado comFFX_SPELL_FREE_ID_AUDIT_2026-06-12.md— Halyson decide se entra agora ou parqueia até v0.5 chegar perto. Não toca: writer/hook/probe/DLL/gate. Arquivos:FFXProjectEditor/FFXProjectEditor.csproj(cascadev2.130.3.0→v2.130.3.1),docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md(§2.2/§2.4/§2.5/§4/§8/§9 atualizados),CHANGELOG.md+changelogUS.md+docs/governance/VERSIONING.md+docs/ai/SESSION_HANDOFF.md
v2.130.3.0
v2.130.3.2REVISIONJarvis-MAGIC
Spira Reforge: PIVOT ARQUITETURAL — frente "Magia Negra Estendida" renomeada pra "Comandos Per-Character Estendidos" (RE D01 prove + distribuição expandida pra 7 chars)
- (continuação imediata
v2.130.3.1; nenhum writer/comportamento). Halyson propôs: "E se em vez dessas skills poderem ser adquiridas por 'todo mundo', a gente não deixa elas 'only X personagem'?" — eu cruzei com a RE existente e DESCOBRI que o engine vanilla JÁ SUPORTA NATIVAMENTE per-character ownership pra ids0..95. A descoberta crítica (RE D01 —FFX_SPELL_LEARN_ABIMAP_INFERNO_2026-06-15.md):FFX_GrantCommandToCharacter @ 0x785D10tem SPLIT AT INDEX 96: ids< 96vão pro banco per-charword_11307FC[74*char+3151+(id&0xFFF)/16](stride 74 words =ply_savepor personagem); ids>= 96vão pro FLAT party-wide bank (sem stride). ⇒ per-character learnable space é EXATAMENTE 96 bits, ids 0..95. ids ≥ 96 não pode ser per-char learned. Implicação: repurposing de ids0..95= engine vanilla filtra QUEM vê cada spell sem hook nenhum. Caminho antigo (ids ≥96 + Nul Ward-style detour pra restringir) descartado. Distribuição expandida (decisão Halyson 2026-06-16, quotes preservadas): Lulu (6 spells, burst caster + dreno HP) — Multi-Firaga family × 4 + Drainga + Osmose-ga (movida da Yuna pra Lulu), eventual Demita; Yuna (5 spells, White/Buff AoE) — Reflectga + Protectga + Shellga + Esuna-ga + Dispelga ("Reflectga, Protectga, Shellga, Esunaga, Dispelga para Yuna"); Rikku (3 spells, Steal master) — Copycat passa a ser exclusiva dela + Mugra (2-hit single, 2× steal) + Mugga (AoE 2-hit, low damage, "podendo roubar 6 vezes!!!!"); Wakka (TBD, "mais skills de status e coisas mais loucas"); Kimahri (TBD, "Blue Mage. Skills de monstros e até mesmos seus próprios overdrivers poderem ser aprendidos para serem usados com mana" — coordenação Ronso Mana lane); Tidus (TBD, "0 Ideias, mas talvez skills multiHit"); Auron ("A PORRA DO TANKER DO JOGO. Evolução do Sentinel, talvez Breaks em área com mais força"). Total estimado: 28-31 spells de 96 slots = ~30% budget, sobra 65+ slots pra-jabacklog v0.7+ + future. 9 decisões cravadas no doc §9.1, 10 ainda abertas em §9.2 (Demita owner, Wakka/Tidus/Auron pools, Rikku Copycat substituto, Sphere Grid wire, donor 0..95 audit, Multi-Firaga random-hit field, steal-per-hit Mugra/Mugga, Kimahri Blue Mage coord Ronso lane). Vantagem do modelo: (a) zero hook custom — engine vanilla nativo; (b) Sphere Grid trees ganham significado real (viajar pra outra tree = trade-off real); (c) Lulu Fury simplifica drasticamente — Fury pool é per-char vanilla, "exclude Multi-* da Fury" deixa de ser problema; (d) Capture Cascade §11 e Modo SIN §10.13 ganham respostas táticas distintas per char. Plano técnico (§7.2): Fase 0 cravar pools TBD → Fase A donor audit (bloqueia início) → Fase B authoring por char (B Lulu piloto, B.1 Yuna White AoE, B.2 Rikku Mug family com spike steal-per-hit, B.3 pools TBD) → Fase C/D RT0/RT1/RT2 → Fase E Sphere Grid wire (Spira Grid editor expansion) → Fase F Lulu Fury rows → Fase G Kimahri Blue Mage (depende Ronso lane) → Fase H -ja backlog v0.7+. VISION_AND_ROADMAP.md §12 reescrito: "Magia Negra Estendida" → "Comandos Per-Character Estendidos" + tabela distribuição per char + bloqueios + roadmap atualizado. Doc renomeado conceitualmente (filepath mantido pra histórico):docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md— 11 seções, §1 Per-character ownership model com decompile RE D01 byte-verified cravado, §3 distribuição por personagem (3.1 Lulu, 3.2 Yuna, 3.3 Wakka TBD, 3.4 Rikku, 3.5 Kimahri coord, 3.6 Tidus TBD, 3.7 Auron TBD, 3.8 resumo). Não toca: writer/hook/probe/DLL/gate. Só design + roadmap integration. Arquivos:FFXProjectEditor/FFXProjectEditor.csproj(v2.130.3.1→v2.130.3.2),docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md(reescrita major: nova §1 RE D01, §3 distribuição expandida 7 chars, §5/§7/§8/§9/§10/§11 renumerados e atualizados),mods/Spira Reforge/VISION_AND_ROADMAP.md(§12 reescrito),CHANGELOG.md+changelogUS.md+docs/governance/VERSIONING.md+docs/ai/SESSION_HANDOFF.md
v2.130.3.1
v2.130.3.3REVISIONJarvis-MAGIC
Spira Reforge: FASE 0 COMPLETA — Halyson cravou TODOS os pools TBD per char numa única passada (Demita→Kimahri, Wakka 5 spells, Auron MAX pack 6 spells, Tidus multi-hit + self-buff, Rikku +1 Thief skill nova)
- (terceira passada do dia 2026-06-16, continuação imediata
v2.130.3.2; nenhum writer/comportamento). 4 decisões a mais cravadas (de 9 → 13): (1) Demita owner = Kimahri (gimmick "monstros bizarros" + Blue Mage tema; libera Lulu pra focar em elemental burst); (2) Wakka pool = A+B combinado, 5 spells — Biora (AoE poison + dano) + Sleepra (AoE Sleep) + Quad Foul (AoE Triple Foul + Poison = 4 status) + Double Buster (2-hit single, 2 status combo RNG) + Tide Slash (2-hit physical) — "status master + double hit + coisas loucas"; (3) Auron pool = MAX pack, 6 spells — Mass Power Break + Mass Armor Break + Mass Magic Break + Mass Mental Break + Sentinel++ (Sentinel + bloqueia físico+magia + party-wide 1 turno) + Provokeja (Provoke + auto-Sentinel + taunt all enemies) — "Auron é a porra do TANKER do jogo"; (4) Tidus direction = multi-hit + self-buff, 4-5 spells — Spiral Slash (3-hit single, +5 STR/cast cap 25) + Tidal Combo (4-hit AoE, +5 AGI/cast cap 20) + Bladestorm (5-hit random, +Haste self 1 turno) + Aurochs Rush (signature, +AGI sólido + Haste 3 turnos) + opcional Cheer-strike (2-hit + Cheer self). "Tidus sempre foi o rapidinho. Quick Hit VAI LEVAR NERF, então habilidades multihit que dão buffs que aumentam o próprio" — compensação direta do QH nerf §10.6; (5) Rikku +1 Thief skill nova — Halyson pediu "skill de Thief inventada" pra completar pool; sugestões Jarvis: Sleight of Hand (Mug refinado), Pickpocket (steal sem turn cost; default Jarvis), Sticky Fingers (stack +25%/cast), Backstab (ignore PDEF), Cache (steal pool direto), Smoke Bomb (party skip CTB). Distribuição final completa (Fase 0): Lulu 6 + Yuna 5 + Wakka 5 + Rikku 4 + Kimahri 3 + Tidus 4-5 + Auron 6 = 33-34 spells de 96 slots = ~35% budget (sobra 62+ pra-jabacklog v0.7+ + white magic extras). Combos emergentes inter-char: Auron Mass Mental Break + Lulu Multi-Firaga (wave-burst sem MDEF); Auron Sentinel++ + Yuna Protectga/Shellga (2 turnos invulnerabilidade quase total); Auron Provokeja + Wakka Quad Foul (tank + mass-status); Tidus Bladestorm + Auron Mass Armor Break (Tidus burst + alvos sem DEF). Risco adicionado pelo Tidus self-buff: stack STR/AGI infinito = QH-like degeneracy; mitigação stack cap (5 STR / 4 AGI) + decay per battle end (não persiste entre fights). 11 open questions remanescentes em §9.2 — todas são sub-decisões finas (nome final Thief skill Rikku, 4 vs 5 spells Tidus) ou technical spikes (Multi-Firaga random-hitcommand.binfield, steal-per-hit Mugra/Mugga, Wakka status-rider per hit, Tidus self-buff stacking, Auron Sentinel++ party-wide buff, Kimahri Lancet+ persistence) — NÃO bloqueiam design overall, bloqueiam fases específicas de authoring. Donor audit0..95(§9.2 q18) agora tem escopo concreto: ~33-34 slots demandados. Doc atualizado: §3.1.4 Demita move pra §3.5.1 Kimahri; §3.3 Wakka 5 spells cravadas; §3.4 Rikku +1 Thief skill com 6 sugestões; §3.5 Kimahri pool completo (Demita + Blue Mage extension 2-3); §3.6 Tidus pool 4-5 multihit + self-buff com combos vs QH nerf; §3.7 Auron MAX pack 6 spells com combos inter-char + risco/mitigação; §3.8 resumo total 33-34 spells = 35% budget; §9.1 13 decisões; §9.2 11 sub-decisões/spikes; §10 entryv2.130.3.3. VISION §12 atualizado: tabela distribuição final per char + combos emergentes. Não toca: writer/hook/probe/DLL/gate. Arquivos:FFXProjectEditor/FFXProjectEditor.csproj(v2.130.3.2→v2.130.3.3),docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md(§3.1.4 movido + §3.3/§3.4/§3.5/§3.6/§3.7/§3.8/§9/§10 atualizados),mods/Spira Reforge/VISION_AND_ROADMAP.md(§12 pool table final + combos),CHANGELOG.md+changelogUS.md+docs/governance/VERSIONING.md+docs/ai/SESSION_HANDOFF.md
v2.130.3.2
v2.130.3.6REVISIONJarvis-MAGIC
Spira Reforge: REALITY CHECK + 3 reversões — Caminho 4 (`CharacterUser` nativo) cravado + aprendibilidade via Sphere Grid cravada. Halyson enxergou o que eu não vi
- (quarta passada do dia 2026-06-16, continuação
v2.130.3.3; nenhum writer/comportamento). Sequência de iterações arquiteturais nesta sessão: (1) v2.130.3.2 pivot: descobri RE D01 que ids0..95são per-char nativos, pintei como "zero hook + 62 slots sobrando". (2) Halyson abriuFFX_SPELL_FREE_ID_AUDIT_2026-06-12.mde perguntou "Como assim?": audit de 2026-06-12 já provou0/96slots livres — todos os 96 ids estão ocupados com vanilla. Minha narrativa "62 sobrando" era falsa. (3) v2.130.3.4 Caminho 3: propus append≥96+ hook per-char whitelist (estilo Nul Ward generalizado), Halyson aprovou. (4) Halyson percebeu Caminho 4: "No CommandBin não seria só eu selecionar lá: CHARACTER USE (por exemplo TIDUS) de uma habilidade, e cabou o problema? Não precisaria de hook de nada". EU NÃO TINHA VISTO o campo nativo[Data] public Character_Enum CharacterUseremAbility_Command.cs:29— byte signed nocommand.binque restringe quem usa cada command. Prova byte-exata:FFX_SPELL_FREE_ID_AUDIT_2026-06-12.mdlinha 86 cita Yojimbo Dismiss (id 87) temCharacterUser=0x0E(14=Yojimbo) — engine vanilla filtra menu sozinho por esse campo. UI já existente (KernelCommands_Control.axaml:434ComboBox). Caminho 4 substitui 1/2/3 — append≥96comCharacterUserper char setado via editor UI direto. ZERO hook pra filter de menu. (5) Halyson cravou: "As habilidades serão aprendíveis via Sphere Grid" — isso reativa caveat Nul Ward §H pra ids≥96(banco party-wide reload-by-init sobrescreve grant grid). Solução: 1 hook generalizado estendendoNulWardTeachHook.cpp(já provado emv2.130.2.0) — (a) detourPrepareSaveCommandStatere-asserta bits ≥96 lendo sidecar; (b) detour panel_teach escreve sidecar quando node ativa. Net hook count: 1 (generalização, não hook novo). Sidecar JSON extendsspira-reforge-flags.schema.jsondo Capture Cascade. Plano técnico atualizado (15 bloqueios honestos catalogados): Fase 0 ✅ → Fase A appendcommand.bin≥96 comCharacterUser(A.1-A.7 por pool char) → Fase B sidecar schema → Fase C Sphere Grid editor scope expansion (LearnedMove = 0x3000 | id≥96) → Fase D hook generalizado → Fase E RT0/RT1 writer LAB → Fase F RT2 in-game piloto → Fase G Lulu Fury rows → Fase H-jabacklog v0.7+. Bloqueios pequenos pendentes (spikes): addr panel_teach runtime, sidecar JSON schema design, side-effectsCharacterUserfilter (Trio of 9999, Doublecast cross-char), Multi-Firaga random-hit field, steal-per-hit Mugra/Mugga, Wakka status-rider per hit, Tidus self-buff stacking, Auron Sentinel++ party-wide buff. Vantagens Caminho 4 vs alternativas: (a) zero sacrifício vanilla (coexistência total Firaga + Multi-Firaga, Demi + Demita, Mug + Mugra/Mugga, Sentinel + Sentinel++); (b) net 1 hook (vs 0 do pivot falso, vs 2-3 do Caminho 3); (c) infra ALREADY EXISTING (NulWardTeach hook + sidecar Capture Cascade + editor UI ComboBox); (d) identity vanilla intocada. Lição honesta documentada: "sempre que sentir 'zero hook' soando bom demais, abrir os audits existentes antes de propagar a narrativa". Doc atualizado: §0 verdade curta (3 reversões + 4ª decisão grid), §1 ownership model (Caminho 4 + grid teach), §7.2 plano técnico (Fases 0-H), §7.3 15 bloqueios honestos, §10 entriesv2.130.3.5ev2.130.3.6. Não toca: writer/hook/probe/DLL. Arquivos:FFXProjectEditor/FFXProjectEditor.csproj(v2.130.3.3→v2.130.3.6, pulou.4/.5por terem sido reversões dentro da mesma sessão de design),docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md(§0/§1/§7.2/§7.3/§10 reescritos),CHANGELOG.md+changelogUS.md+docs/governance/VERSIONING.md+docs/ai/SESSION_HANDOFF.md
v2.130.3.3
v2.130.3.7REVISIONJarvis-MAGIC
Reference doc: catálogo consolidado das 96 habilidades de personagem (IDs `0..95`) com `Power`/`MP`/`Formula`/`Acc`/`Hits`/elemento/efeito + arquitetura AbiMap × party-wide bank
- (doc-de-registro / reference catalog; nenhum writer/comportamento/RT2; só consolida em 1 doc o conhecimento já espalhado em
FFX_SPELL_FREE_ID_AUDIT_2026-06-12.md+FFX_SPELL_LEARN_ABIMAP_INFERNO_2026-06-15.md+FFX_BATTLE_COMMAND_MENU_INFERNO_2026-06-15.md+CommandCharacter_Dictionary.cs+Ability_Command.cs). Halyson pediu a tabela das 96 habilidades em MD pra referência operacional do mod. Novo docdocs/reverse/FFX_PLAYER_COMMAND_CATALOG_0_TO_95_2026-06-16.md(8 seções, ~250 linhas): §0 TL;DR cravando a borda em 95 (AbiMap 96 bits físicos) + provas RE cruzadas; §1 como o engine decide o menu (FFX_Btl_IsCommandAvailable @ 0x39BB70per-char vs party-wide comCharacterUserfilter); §2 encodingLearnedMove = 0x3000 | iddopanel.bin(referênciaSphereGridExplorer_DataModel.cs:30-31); §3 catálogo completo 0..95 dividido em 9 grupos (Core/Menu 0-5, Skill 6-21, Special 22-25, Cheer 26-31, Kimahri/Def/Social 32-42, Wht Magic 43-64, Blk Magic 65-83, Aeon menu 84-87, Rikku endgame 88-95) com valores canônicos FFX HD Remaster (US/JP) — MP/Power/Formula/Acc/Hits/elemento/efeito; §4 roteiro decisivo de "what the magic IS" via 3 flags (DamageFlags+DamageFormula_Enum+PreviewFlags) com tabela Cura/Revive/Cleanse/Phys/Magic/Status/Buff/Gravity/Drain; §5 os 11 IDs não-ensináveis pelo grid (missing=[0,1,2,3,4,5,33,84,85,86,87]em todas 10 regiões — system/Defend/Aeon/Yojimbo); §6 IDs 96+ party-wide (Overdrives, Aeons, Mortes, Mix, pseudo-IA) com 3 razões de design da separação; §7 consequências pro Spira Reforge ligando ao Caminho 4 dov2.130.3.6; §8 referências cruzadas. Não toca: writer/hook/probe/DLL/gate. Arquivos:FFXProjectEditor/FFXProjectEditor.csproj(v2.130.3.6→v2.130.3.7),docs/reverse/FFX_PLAYER_COMMAND_CATALOG_0_TO_95_2026-06-16.md(novo),CHANGELOG.md+changelogUS.md+docs/governance/VERSIONING.md+docs/ai/SESSION_HANDOFF.md
v2.130.3.6
v2.130.3.8REVISIONJarvis-MAGIC
Spira Reforge: Pass 1 Vanilla Offensive Rebalance cravado — 16 skills offensive buff + Auto-Ability cleanup + MP Sphere bump
- (só design / decisões cravadas por Halyson; nenhum writer/comportamento nesta passada). Halyson abriu
FFX_PLAYER_COMMAND_CATALOG_0_TO_95_2026-06-16.mde cravou: "as magias cumprem seu papel inclusive cura. Mas o resto? PATÉTICO. Full Break? Me dá um tiro no cu, além de quase não pegar, dano ridículo pra 99 de MP." Diagnóstico cru: 20 skills offensive vanilla comPower = 16(= multiplier 1.0× = Attack base) ouPower < 16(= pior que Attack); Auron Full Break Power 16 / Acc 36 / MP 99 = crime contra o jogador. Pacote final cravado (3 frentes em 1 pass): (1) Damage buff de 16 skills (Extracts removed): Wakka 8 status-riders (Sleep/Silence/Dark Attack P16→20 Acc 50→60, Zombie Attack P16→24 Acc 50→60, Busters P16→26 Acc 100, Triple Foul P16→32 Acc 100→90 MP 24→28), Auron 4 Breaks (Power/Magic Break P16→22 Acc 50→80 MP 8→10, Armor/Mental Break P16→24 Acc 36→70 MP 12→14), Full Break P16→48 (3× damage cravado Halyson) Acc 36→90 MP 99→75, Tidus 2 Delays (Delay Attack P12→18 MP 5→6, Delay Buster P14→22 MP 10→12), Rikku Mug P16→20. Filosofia: Power ≥ 18 sempre quando skill paga MP; premium MP ⇒ premium Power; Breaks Acc 36-50% sobem 65-90%. (2) Auto-Ability cleanup: Slot 12 Half MP Cost MANTÉM (justificativa Halyson: Lulu Magic Booster + custos altos = ainda paga Ether/Elixir = balance natural). Slot 13 (ex-One MP Cost, cheese de 1 MP universal) REMOVIDO → vira Mana Spring (+5 MP/turno em batalha; regen tick passivo; substitui economia sem virar cheese — em battle de 10 turnos = +50 MP cumulativo). Slot 23 (ex-Break HP Limit) vira "Break Limits" (bits0x0200 | 0x0400OR emability_flags_64, HP cap + MP cap juntos via engine vanilla; byte-edit puro, zero hook); §10.8 do VISION cravado. Slot 24 (ex-Break MP Limit) vira "Devil's Bargain" (+50% dano dado / +50% dano recebido — glass cannon switch simétrico; 2-pass: Pass 1 placeholder funcional agora com bit reassignment, Pass 2 hook damage calc depois com RT2). (3) MP Sphere node bump (escopo B cravado Halyson "B simplesmente B"): Standard Grid MP +40 → +60, Expert Grid MP +20 → +30 (escala proporcional 1.5× cross-grid). Edit trivial viaSphereGridNodeTypeEntry.IncreaseAmount(offset 0x14, ushort) emSphereGrid_File.cs:519. Sequência de decisões cravadas nesta sessão: (a) Halyson abriu catalog, identificou problema; (b) propus tabela buff 20 skills + 4 categorias auto-ability; (c) Halyson cravou Extracts fora + Full Break 3×; (d) cravou One MP removido + Mana Shield não (cria meta novo); (e) confirmei §10.8 invertendo Slot 23 vira Break Limits e Slot 24 vira repurpose ("xereca"); (f) cravou Devil's Bargain Slot 24 + entendi caveat 2-pass; (g) refinei Mana Spring slot 13 + Spell Spring backlog. Caveats técnicos catalogados: Devil's Bargain precisa hook damage calc + RE addrFFX_DamageCalc_*pendente; Mana Spring precisa turn-tick hook + identificar bit livre emability_flags_64; Acc do hit vs Acc do status-rider spike pendente RT2; Triple Foul Acc 100→90 spike pendente (validar "garantia tripla" não quebra); Full Break MP scaling no late game OK (75 ainda caríssimo com Half MP); auto-ability bit reassignment slot 24 precisa scan flags livres emAutoAbilityHardcodedFlagCatalog.cs. Plano técnico Phase 1 (byte-edit purov2.131.xPATCH): 1.1command.bin16 skills offensive buff, 1.2 Slot 23 Break Limits, 1.3 Slot 13 Mana Spring placeholder, 1.4 Slot 24 Devil's Bargain placeholder, 1.5panel.binMP nodes, 1.6 text pool, 1.7 RT0/RT1 gate byte-identity, 1.8 RT2 piloto. Phase 2 (hooks LABv2.133.x+): 2.1 RE damage calc, 2.2 Mana Spring turn-tick hook, 2.3 Devil's Bargain damage hook, 2.4 RT2 hooks. Sinergia com VISION: §10.4 QH nerf (complementar — buff skills + nerf QH = ofensiva diversificada), §10.5 magia (não toca, próximo pass), §10.6 OD Lulu Fury (próximo pass), §10.8 Break HP+MP fundido (CRAVADO neste pass 1.2), §10.9 habilidade secreta Auron (REFORÇADO — Break Limits + Devil's Bargain + Breaks buff = "Auron the unkillable risk-taker"), §10.10 velocidade magia (Spell Spring backlog), §10.11/§10.13 (próximo pass), Caminho 4 Black Magic Extended (indireto — baseline vanilla cria contexto pra ≥96 spells). Open questions backlog: Spell Spring espera próximo slot vago (candidatos sacrifício: Slot 18 Double AP, 19 Triple AP, 21 Pickpocket, 22 Master Thief — cheese de progression/loot); Status/Break Sharpness pra próximas identidades per-char §10.9. Não toca: writer/hook/probe/DLL/csproj writer-side. Arquivos:FFXProjectEditor/FFXProjectEditor.csproj(v2.130.3.7→v2.130.3.8);docs/reverse/FFX_SPIRA_REFORGE_VANILLA_OFFENSIVE_REBALANCE_2026-06-16.md(novo, ~280 linhas, 7 seções: §0 verdade curta, §1 diagnóstico carnificina vanilla, §2 pacote consolidado com tabela 16 skills + auto-ability cleanup + MP Sphere, §3 caveats técnicos 6 itens, §4 plano implementação Phase 1+2, §5 open questions, §6 versão entrega, §7 refs cruzadas);CHANGELOG.md+changelogUS.md+docs/governance/VERSIONING.md+docs/ai/SESSION_HANDOFF.md+mods/Spira Reforge/VISION_AND_ROADMAP.md(próxima passada). [anterior:v2.130.3.7reference catalog]