JARVIS-ARENA
Update 2.130
6/16/2026
v2.130.0.0MINORJarvis-ARENA
Arena+ Multi Dark Aeon tier-lock report CLI (`--print-tier-lock`) + sidecar schema v1
- (new capability: first offline report cross-checking catalog v2 + progress sidecar; new canonical schema for the LOCKED/READY/CLEARED snapshot). New
RuntimeTools/ArenaMultiBossLab/TierLockReport.cs+ 4 flags inProgram.cs:--print-tier-lock,--progress <path>,--out <json>,--json. Default mode prints a human report grouped by tier with gate reasons (← needs: arena.dark.valefor, ...for LOCKED rows) and a fallbackrt2:<status> risk:<...> token:<mode>for non-provedrows.--outor--jsonemits strict JSON matching the newmods/Spira Reforge/arena/spira-arena-tier-lock-state.schema.jsonv1 (format,format_version,generated_utc,summary{total,cleared,ready,locked},rows[]withstateenumLOCKED|READY|CLEARED+unlock_requires/missing_requires). Gating rules already documented in the schema (same ones the future F7 menu hook will apply). Current run vs catalog + empty sidecar: 13 total rows -> 9 READY (solos) + 4 LOCKED (duo/trio/quartet/penta gated by the solos), 0 CLEARED.mods/Spira Reforge/arena/README rewritten with full table of the 5 sidecars + worked examples of--print-tier-lockand--validate. Lints clean. Build PASS
v2.129.0.0
v2.130.1.0PATCHJarvis-MAGIC
Ronso Mana (7th pass): read the `DIAG`/`BLOB-PATCH` lines from the `hudSafe=24` RT2 that I had SKIPPED → the blob patch was writing an INVALID node (`subIdx=0x00`); rewrote it to pick a VALID node + added an `ODBLOB` deep dump
- (fixes the broken heuristic in
PatchCase2BlobForKimahri+ new read-only instrumentation on an already-shipped/RT2 hook; code is ready, build/deploy on the next DLL release — another room is using it). The finding (theDIAG/BLOB-PATCHlines in%TEMP%\ffx-hooks.logI had never read — I only greppedB0 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— i.e.PatchCase2BlobForKimahrialready existed and already ran (setblob[45]from0xFF→0x00) yetResolve(2,1,43)still returned −1. ⇒ the old fallback (maxUsed→almost always0x00) pointed treeId 43 at a structurally-invalid node: it passesWalkMenuBlobIndex's primary gate (idx!=0xFF,43<count) but the secondaryringKindselector blows up (v4>=node.entryCountorentry[v4]==0xFFFF) →*a3=−1. More proof from the same log:count=138(43 is in range → NOT the "small count"/43>=countcase);slots 41/42 = 0xFF(no party OD registered in this a2=1 blob → no sibling donor);DIAG G0-finalize slot=2 od=3065 3064 3066 311A(the layer-A ring buffer DOES contain311A=cmd282 Ronso Rage — confirming the gate is 100% the layer-B menu-tree resolve, not the content). The fix (code,hudSafe=25): (1)PatchCase2BlobForKimahrirewritten — it now decodes the node in the EXACTWalkMenuBlobIndexformat (v6=(count+1)/2+2*subIdx;nodeOff=*(i16)(blob+2*v6+4);entryCount=*(u16)(blob+nodeOff);entry[k]=*(u16)(blob+nodeOff+2+2*k), all bounds-clamped) and picksblob[2+43]by priority: (a) a node that contains0x311A(the exact OD signature) and supportsringKind=1; (b) a sibling party-OD treeId 41..47 already registered with a selector-capable node; (c) the richest node that supportsringKind=1(ideally also 12). If NOTHING qualifies it leaves0xFF(a2=1 has no usable OD node → it's fix-C/redirect to a2=0) and logsNO viable node, instead of writing garbage0x00like before. (2) newDumpOdBlobStructureOnce(read-only, fires once even in log-only) — dumps the a2=1 party-OD index row 41..47, theentryCount+first entries of nodes 0..23 (flagging the one with<<OD311A>>), and the a2=0 (MainRing) index row 41..47/109..115 → 1 RT2 nails the rightsubIdxOR reveals it's a redirect to a2=0. New helpers (allstatic, bounds-clamped, no PolyHook dependency):OdBlobNode/OdBlobEntry/OdNodeSupportsSelector/OdNodeContainsEncodedOd/ReadMainRingBlobPtr(a2=0 =_BASE0xD2A994). BannerhudSafe=24→25(confirms the new DLL in the log). Did NOT build/deploy (DLL in use by another room — respected);ReadLintsclean; code ready forbuild_hooks.ps1 -WithPolyHook -Release. Touched file: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 of "nothing showed up in the White Magic menu" FOUND + FIXED — the party-wide bank is RELOADED from `party_data` on EVERY battle init, wiping the grant before the menu builds
- (fixes the behavior bug that blocked Nul Ward surfacing — same feature/lab as
v2.123.4.0/v2.124.0.2; decisive RE proven on the real.i64+ a new re-assert detour inNulWardTeachHook; DLL released by Halyson, rebuild+deploy done). Symptom: even after the multi-site menu-bound fix (v2.124.0.2) + on-load grant (logNulWardTeach grant ch=0..6 radiant=1 umbral=1), the wards did not appear in white magic in battle. The RE that closed it (idalib MCP, byte-verified viadisasm):sub_7817D0("* BTL INIT") callsFFX_Btl_PrepareSaveCommandState@0x786BC0("-- SAVE RAM CLEAR -- Preparing save game data") on every battle init; at0x786CA3it doesmov ecx,21h; mov edi,offset dst__0; rep movsd— copies0x84(132) bytes from theparty_datakernel (table id 4) intodst__0=0x11307D8, range[0x11307D8,0x113085C)which fully coversg_PartyWideCommandBank@0x11307FC(offset+0x24inside the copy; bank = 16 words, ids 96..351). ⇒ the entire party-wide command bank is overwritten fromparty_dataevery battle, andparty_datahas no ward bit → word14=0 →IsCommandAvailable(320/321)=0→ the placement loop skips the wards → "nothing showed up". Suspects ruled out:FFX_Btl_InitPartyWideCommandBank@0x784960onlyORs bits 0..130 and is debug-gated (if(unk_112A905){ DebugMaxAll(); Init(); }— not normal play);sub_78F0B0(Lancet/blue) and the grant only touch single bits. §H mental-model correction:PrepareSaveCommandStateis not merely a persistence concern — it is the active per-battle reload of the bank fromparty_data; any id≥96 grant absent fromparty_data(sphere-grid teach included) is reset every battle. Categorization corrected (empirical): dumping the deployedcommand.binshows the Nul donors (NulShock id48, NulTide id49) and the wards (320/321) all carrySubMenuCategorization (byte +24) = 0x02— wards are templated from the donors, so they land in the same white-magic category as the Nul spells that already appear (categorization correct-by-construction; only the live availability bit was missing). The FIX (labteach_grant, deployed):NulWardTeachHooknow installs aPLH::x86DetouronFFX_Btl_PrepareSaveCommandState; the shim calls the original (lets it reload the bank fromparty_data) then re-assertsg_PartyWideCommandBank[word14] |= 0x3(Radiant bit0 + Umbral bit1) on return — i.e. right after the wipe and beforeFFX_Btl_BuildActorCommandMenuseeds the actor. Direct bank write (not a grant call) avoids re-entering the menu builder from inside the init path. Diag log (first 4 fires):NulWardTeach reassert #n post-PrepareSaveCmdState: bank word14 0xPRE->0xPOST. One-shot startup grant kept for field/pre-battle menus. Design consequence (production): sinceparty_datais the per-battle source of truth for ids≥96, the clean path for an always-available ward is adding the bit to theparty_datakernel itself (innate, party-wide), not the sphere grid — a grid-taught id≥96 cannot persist past init without either (a) theparty_databit or (b) a runtime re-assert like this lab detour. Build/deploy:build_hooks.ps1 -WithPolyHook -ReleasePASS (12/12 cpp), deployinstall_to_modules.ps1 -EnableApply -EnableTeach(backupffx-hooks.dll.backup-nul-ward-20260616-081633, new SHA-prefix0DE302BDF13D5B14). Gate--nul-ward-staticVERDICT: PASS (no regression; command.bin/exe/flags intact). Real.i64: comments at0x786BC0+0x786CA3(GOLDEN RULE). 2 new RVAs inshared/ffx_addresses.h(RVA_FFX_BTL_PREPARE_SAVE_COMMAND_STATE,RVA_FFX_PARTY_WIDE_COMMAND_BANK). In-game RT2: open a battle and confirm Radiant/Umbral Ward in white magic + check logreassert ... word14 0x0000->0x0003. Open risk:ply_savewidth for bit 224/225 (§H) — lab re-applies each load. Files: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: Extended Black Magic — design lockdown (Multi-Skill family > -ja tier; `-ja` parked as backlog niche; Lulu Fury include-all)
- (design doc + VISION integration; no writer/behavior/RT2 in this pass). Halyson opened brainstorm on creating new Black Magic. I compared two routes: (a)
-jatier (Firaja/Blizzaja/Thundaja/Waterja = clone -ga with +Power, exclude Fury) vs (b) Multi-Skill (AoE versions of vanilla single-target spells that lack AoE equivalent). Decision (Halyson): Multi-Skill wins as main path;-japarked as backlog niche (1 per element, brutal MP ~80–120, post-Celestial, cherry-on-top — does not compete with-gabuff inVISION §10.5); Lulu Fury includes EVERYTHING ("Fury Drainga 16× is beautiful chaos, OD fantasy"). Why Multi-Skill wins: (1)TargetFlags.Multiis already engine-native (FfxLib/Ability/Ability_Command.cs:125) — single → multi = 1 bit in command row; (2) spells fill real vanilla gaps (no AoE poison, AoE drain, AoE osmose) and have identity; (3)-jais redundant withVISION §10.5plan which already buffs-gawith Ignore MDEF / Power scaling ("Firaga reforged" not "Firaja"); (4)VISION §10.11already parked Holyra/Holyga/Wildra as "funny, maybe never" for the same reason (bloats pool without identity); (5) Drainga/Osmose-ga feed other fronts (Capture Cascade T7 long fights, Modo SIN curses, mob OD multicast). First-wave spells (v0.5+) technically validated: Biora (AoE poison + dmg, 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× sequential Firaga AoE triple MP — direct Halyson idea: "Multi-Firaga for example>>>>>>" — scalable sub-family for Multi-Blizzaga/Thundaga/Waterga/Ultima). Second wave (v0.6+): Slowga, Reflectga, Demi-fall ("Dimensional Crush" 75% HP single expensive MP), Quartera (25% HP AoE cheap MP). Honest blockers documented: (a) spell ID slot0..95— cross-audit withFFX_SPELL_FREE_ID_AUDIT_2026-06-12.mdto identify donors; (b) Lulu Fury rows#12408–#12422dump pending; (c) Drainga cap balance RT2-dependent (no cap = healer-by-offense OP, tight cap = useless spell); (d) Multi-Firagahit_countplayer-cast RE spike pending; (e) VFX visually identical to single (ok for v0.5, recolor v0.6+ via Flan Flood engine already provenv2.114.0.0); (f) Sphere Grid wire separate decision. Incremental tech plan (§6.2 of doc): Phase A donor ID audit (no code, this doc), Phase B offline authoring (clone rows + flip Multi + tune Power/MP + text entries), Phase C writer LAB, Phase D in-game RT2, Phase E Fury integration, Phase F-jabacklog niche (v0.7+). Mod integration: complements§10.5black magic buff, feeds§10.6Lulu Fury, preserves§10.11elemental puzzle, answers§10.13mob OD multicast with Drainga/Osmose-ga, supports§11Capture Cascade T7 fights. VISION_AND_ROADMAP.md updated: new §12 "Magia Negra Estendida — Multi-Skill family" (design decision + first/second-wave spells + roadmap tie-in + full doc link); References renumbered §13. Open questions for continued brainstorm: Multi-Firaga mechanic A/B/C (Doublecast hardwired vs random distribution vs hybrid element — recommendation A), Drainga cap per-target vs per-cast, Sphere Grid wire, Demita vs vanilla Demi coexistence, white magic AoE (Esuna-ga?), donor tier choice. Untouched: no writer, no hook, no probe, no DLL, no offline/RT2 gate. Only docs + roadmap integration. New doc:docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md(10 sections, ~300 lines). Files touched:FFXProjectEditor/FFXProjectEditor.csproj(4-tuple bump),mods/Spira Reforge/VISION_AND_ROADMAP.md(new §12 + renumber References §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`): the blob write no longer guesses a node (it was `via=rich>=1 subIdx=0x01` → crash); the write is now OPT-IN + safe-node-only + node reads are SEH-guarded
- (fixes a behavior crash introduced by the
hudSafe=25ofv2.130.1.0once the DLL was rebuilt/deployed by the Nul Ward lane'sv2.130.2.0). Root cause (RT2 log%TEMP%\ffx-hooks.log):RonsoMana BLOB-PATCH2 #1 treeId=43 set subIdx=0x01 via=rich>=1 nodeOff=0x1B4 ec=24 (was 0xFF)— myhudSafe=25fallback (3) "richest node" wrote a GUESSED node index (0x01,ec=24) intoblob[2+43]. That madeResolve(2,1,43)"succeed" on a node that is not the OD ring →finishMenuTreebuilt/displayed bogus content → the game crashed. (The old0x00ofhudSafe<=24merely returned −1, hence no crash: it never calledfinishMenuTree.) My guess "turned a broken-but-safe state into a crash". The hotfix (hudSafe=26): (1) the blob write is now OPT-IN — it only writesblob[2+treeId]when envFFXHOOKS_RONSO_OD_BLOBWRITE=1is set; default = writes NOTHING (crash-safe build, purely diagnostic viaODBLOB); (2) even when opted-in, it only writes a PRINCIPLED node — (a) a node whose entries contain the encoded OD command0x311A, or (b) a sibling party-OD treeId 41..47 the game already registered; it never auto-writes the "richest node" guess (that stays log-only, for a possible hardcode after reading the dump); (3) all node reads (OdBlobNode/OdBlobEntry) and the a2=0 block ofDumpOdBlobStructureOnceare now SEH-guarded (__try/__except) — any access violation from an OOB offset becomes a clean "invalid node" instead of a crash; (4) the a2=0mainPtrgets a sanity-check (> 0x10000). The log now emitsBLOB-PATCH2 #n ... write=0|1 safe=0xXX(how) risky=0xXX(how,ec=..)(shows what it would do without writing) and, when opt-in + safe node,BLOB-PATCH2 WROTE .... BannerhudSafe=25→26. Reversibility: without the env, behavior = vanilla-safe (OD hidden, no crash). Did NOT build/deploy (DLL shared with other Jarvis-MAGIC lanes) — the nextffx-hooks.dllrebuild (by any lane) picks up the hotfix;ReadLintsclean. File: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: Extended Black Magic — 4 final decisions cravadas Halyson (Multi-Firaga opção B, Drainga per-target cap supremo, Demita coexists with Demi, Fury include-all with nuances)
- cascading after
v2.130.3.0(parallel Jarvis-MAGIC Ronso Mana hotfix MINOR). Immediate continuation ofv2.130.2.1design doc: brainstorm with Halyson sealed the 4 remaining open questions. (1) Multi-Firaga mechanic — option B (random distribution) + MP 3-5× base: Halyson: "Option B, but 'Multi Firaga', 'Multi-Fodase' will cost 3-5x the base skill MP to compensate, an absolute beatdown". Mechanic = 1 cast → N hits (5-7), each hit picks random enemy (engine native via Holy/Comet/Doublecast formula). Enemies may take 1, 2, 3+ hits of the same Multi-Firaga via RNG. MP cost = 4× base default (Multi-Firaga = 64 MP), Multi-Ultima = 200 MP. Jarvis suggestion: start with 4× MP + 6 hits, tune via RT2. Scalable family (incremental rollout): 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 confirmed knowingly. 4 enemies alive = up to 39,996 HP heal per cast = supreme healer-by-offense. ⚠ May break long arena — intentional, it's Halyson's mod, endgame fantasy. Compensation: MP cost can scale up to ~30 post-RT2 if it breaks everything. (3) Demita vs vanilla Demi — coexist: Keep BOTH. Demi single (16 MP, boss-killer) + Demita multi (24 MP, wave-clear). Player picks tool. Cost: 1 extra slot ID. (4) Lulu Fury include-all with nuances (§4 updated decisions): Biora 16× = ok (poison wave); Drainga 16× = Fury-only cap 9999/pick (not per-target in Fury, otherwise up to 639,936 HP heal — "stops making sense"); Osmose-ga 16× = ok (MP cap 9999 = hard wall); Demita 16× = ok (Demi can't hit dead target); Multi-Firaga 16× = 96 potential hits ⇒ Fury Multi- uses hit_count=1 (back to single-cast in Fury)* OR excludes Multi-* from Fury pool (sole exception to "include all"). Final decision tunes via RT2. Open questions updated in §8 of doc: §8.1 decided (4 sealed); §8.2 still open (Sphere Grid wire, white magic AoE scope, element absorb confusion, donor tier0..95blocks Phase A, Multi-* random distributioncommand.binfield via spike). Doc updated:docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md§2.2 Drainga (per-target cap sealed), §2.4 Demita (coexist sealed), §2.5 Multi-Firaga (option B + MP 3-5× sealed + full elemental table), §4 Fury (per-spell nuances), §8 open questions (4 decided, 5 still open), §9 Version updated. Next safe step: Phase A spell ID donor audit cross-referenced withFFX_SPELL_FREE_ID_AUDIT_2026-06-12.md— Halyson decides whether to start now or park until v0.5 nears. Untouched: writer/hook/probe/DLL/gate. Files: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 updated),CHANGELOG.md+changelogUS.md+docs/governance/VERSIONING.md+docs/ai/SESSION_HANDOFF.md
v2.130.3.0
v2.130.3.2REVISIONJarvis-MAGIC
Spira Reforge: ARCHITECTURAL PIVOT — front "Extended Black Magic" renamed to "Per-Character Extended Commands" (RE D01 prove + expanded distribution across 7 chars)
- (immediate continuation
v2.130.3.1; no writer/behavior). Halyson proposed: "What if instead of these skills being learnable by 'everyone', we make them 'only X character'?" — I cross-referenced existing RE and DISCOVERED that the vanilla engine ALREADY SUPPORTS NATIVE per-character ownership for ids0..95. Critical discovery (RE D01 —FFX_SPELL_LEARN_ABIMAP_INFERNO_2026-06-15.md):FFX_GrantCommandToCharacter @ 0x785D10has SPLIT AT INDEX 96: ids< 96go to per-char bankword_11307FC[74*char+3151+(id&0xFFF)/16](stride 74 words =ply_saveper character); ids>= 96go to FLAT party-wide bank (no stride). ⇒ per-character learnable space is EXACTLY 96 bits, ids 0..95. ids ≥ 96 cannot be a per-char learned spell. Implication: repurposing ids0..95= vanilla engine filters WHO sees each spell without any hook. Old path (ids ≥96 + Nul Ward-style detour to restrict) discarded. Expanded distribution (decision Halyson 2026-06-16, quotes preserved): Lulu (6 spells, burst caster + HP drain) — Multi-Firaga family × 4 + Drainga + Osmose-ga (moved from Yuna to Lulu), eventual Demita; Yuna (5 spells, White/Buff AoE) — Reflectga + Protectga + Shellga + Esuna-ga + Dispelga ("Reflectga, Protectga, Shellga, Esunaga, Dispelga for Yuna"); Rikku (3 spells, Steal master) — Copycat becomes exclusive to her + Mugra (2-hit single, 2× steal) + Mugga (AoE 2-hit, low damage, "can steal 6 times!!!!"); Wakka (TBD, "more skills involving status and crazier things"); Kimahri (TBD, "Blue Mage. Skills of monsters and even his own overdrivers being learnable to use with mana" — coordination Ronso Mana lane); Tidus (TBD, "0 ideas, but maybe multi-hit skills"); Auron ("THE FUCKING TANKER OF THE GAME. Evolution of Sentinel, maybe area Breaks with more action force"). Total estimated: 28-31 spells of 96 slots = ~30% budget, leaves 65+ slots for-jabacklog v0.7+ + future. 9 decisions sealed in doc §9.1, 10 still open in §9.2 (Demita owner, Wakka/Tidus/Auron pools, Rikku Copycat substitute, Sphere Grid wire, donor 0..95 audit, Multi-Firaga random-hit field, steal-per-hit Mugra/Mugga, Kimahri Blue Mage coord Ronso lane). Advantages of the model: (a) zero custom hook — vanilla engine native; (b) Sphere Grid trees gain real meaning (traveling to another tree = real trade-off); (c) Lulu Fury simplifies drastically — Fury pool is per-char vanilla, "exclude Multi-* from Fury" stops being a problem; (d) Capture Cascade §11 and SIN Mode §10.13 gain distinct tactical answers per char. Technical plan (§7.2): Phase 0 seal TBD pools → Phase A donor audit (blocks start) → Phase B authoring per char (B Lulu pilot, B.1 Yuna White AoE, B.2 Rikku Mug family with steal-per-hit spike, B.3 TBD pools) → Phase C/D RT0/RT1/RT2 → Phase E Sphere Grid wire (Spira Grid editor expansion) → Phase F Lulu Fury rows → Phase G Kimahri Blue Mage (depends on Ronso lane) → Phase H -ja backlog v0.7+. VISION_AND_ROADMAP.md §12 rewritten: "Extended Black Magic" → "Per-Character Extended Commands" + distribution table per char + blockers + updated roadmap. Doc conceptually renamed (filepath kept for version history):docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md— 11 sections, §1 Per-character ownership model with byte-verified RE D01 decompile sealed, §3 distribution per character (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 summary). Does not touch: writer/hook/probe/DLL/gate. Only design + roadmap integration. Files:FFXProjectEditor/FFXProjectEditor.csproj(v2.130.3.1→v2.130.3.2),docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md(major rewrite: new §1 RE D01, §3 expanded distribution 7 chars, §5/§7/§8/§9/§10/§11 renumbered and updated),mods/Spira Reforge/VISION_AND_ROADMAP.md(§12 rewritten),CHANGELOG.md+changelogUS.md+docs/governance/VERSIONING.md+docs/ai/SESSION_HANDOFF.md
v2.130.3.1
v2.130.3.3REVISIONJarvis-MAGIC
Spira Reforge: PHASE 0 COMPLETE — Halyson sealed ALL TBD pools per char in a single pass (Demita→Kimahri, Wakka 5 spells, Auron MAX pack 6 spells, Tidus multi-hit + self-buff, Rikku +1 new Thief skill)
- (third pass of the day 2026-06-16, immediate continuation
v2.130.3.2; no writer/behavior). 4 more decisions sealed (from 9 → 13): (1) Demita owner = Kimahri (gimmick "bizarre monsters" + Blue Mage theme; frees Lulu to focus on elemental burst); (2) Wakka pool = A+B combined, 5 spells — Biora (AoE poison + damage) + 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 + crazier stuff"; (3) Auron pool = MAX pack, 6 spells — Mass Power Break + Mass Armor Break + Mass Magic Break + Mass Mental Break + Sentinel++ (Sentinel + blocks physical+magic + party-wide 1 turn) + Provokeja (Provoke + auto-Sentinel + taunt all enemies) — "Auron is the FUCKING TANKER of the game"; (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 turn) + Aurochs Rush (signature, +solid AGI + Haste 3 turns) + optional Cheer-strike (2-hit + Cheer self). "Tidus has always been the speedster. Quick Hit WILL BE NERFED, so multi-hit skills that grant buffs that increase his own" — direct compensation for QH nerf §10.6; (5) Rikku +1 new Thief skill — Halyson asked for "invented Thief skill" to complete pool; Jarvis suggestions: Sleight of Hand (refined Mug), Pickpocket (steal without turn cost; Jarvis default), Sticky Fingers (stack +25%/cast), Backstab (ignore PDEF), Cache (steal pool directly), Smoke Bomb (party skip CTB). Final complete distribution (Phase 0): Lulu 6 + Yuna 5 + Wakka 5 + Rikku 4 + Kimahri 3 + Tidus 4-5 + Auron 6 = 33-34 spells of 96 slots = ~35% budget (62+ leftover for-jabacklog v0.7+ + white magic extras). Emergent inter-char combos: Auron Mass Mental Break + Lulu Multi-Firaga (wave-burst without MDEF); Auron Sentinel++ + Yuna Protectga/Shellga (2 turns almost-total invulnerability); Auron Provokeja + Wakka Quad Foul (tank + mass-status); Tidus Bladestorm + Auron Mass Armor Break (Tidus burst + targets without DEF). Risk added by Tidus self-buff: infinite STR/AGI stack = QH-like degeneracy; mitigation stack cap (5 STR / 4 AGI) + decay per battle end (doesn't persist between fights). 11 open questions remaining in §9.2 — all are fine sub-decisions (final Thief skill name Rikku, 4 vs 5 spells Tidus) or 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) — they do NOT block overall design, they block specific authoring phases. Donor audit0..95(§9.2 q18) now has concrete scope: ~33-34 slots demanded. Doc updated: §3.1.4 Demita moves to §3.5.1 Kimahri; §3.3 Wakka 5 spells sealed; §3.4 Rikku +1 Thief skill with 6 suggestions; §3.5 Kimahri complete pool (Demita + Blue Mage extension 2-3); §3.6 Tidus pool 4-5 multihit + self-buff with combos vs QH nerf; §3.7 Auron MAX pack 6 spells with inter-char combos + risk/mitigation; §3.8 total summary 33-34 spells = 35% budget; §9.1 13 decisions; §9.2 11 sub-decisions/spikes; §10 entryv2.130.3.3. VISION §12 updated: final distribution table per char + emergent combos. Does not touch: writer/hook/probe/DLL/gate. Files: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 moved + §3.3/§3.4/§3.5/§3.6/§3.7/§3.8/§9/§10 updated),mods/Spira Reforge/VISION_AND_ROADMAP.md(§12 final pool table + 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 reversals — Path 4 (`CharacterUser` native field) sealed + Sphere Grid learnability sealed. Halyson saw what I missed
- (4th pass of the day 2026-06-16, continuation
v2.130.3.3; no writer/behavior). Sequence of architectural iterations in this session: (1) v2.130.3.2 pivot: discovered RE D01 showed ids0..95are per-char native, painted as "zero hook + 62 slots leftover". (2) Halyson openedFFX_SPELL_FREE_ID_AUDIT_2026-06-12.mdand asked "What do you mean?": audit from 2026-06-12 already proved0/96free slots — all 96 ids are occupied by vanilla commands. My "62 leftover" narrative was FALSE. (3) v2.130.3.4 Path 3: proposed append≥96+ per-char whitelist hook (Nul Ward-style generalized), Halyson approved. (4) Halyson saw Path 4: "In CommandBin wouldn't I just select CHARACTER USER (e.g. TIDUS) for a skill, and problem solved? Wouldn't need any hook". I HADN'T SEEN the native field[Data] public Character_Enum CharacterUserinAbility_Command.cs:29— signed byte incommand.binthat restricts who uses each command. Byte-exact proof:FFX_SPELL_FREE_ID_AUDIT_2026-06-12.mdline 86 cites Yojimbo Dismiss (id 87) hasCharacterUser=0x0E(14=Yojimbo) — vanilla engine filters menu by itself via that field. UI already exists (KernelCommands_Control.axaml:434ComboBox). Path 4 replaces 1/2/3 — append≥96withCharacterUserper char set via editor UI directly. ZERO hook for menu filter. (5) Halyson sealed: "The skills will be learnable via Sphere Grid" — this reactivates the Nul Ward §H caveat for ids≥96(party-wide bank reload-by-init overwrites grid grant). Solution: 1 generalized hook extendingNulWardTeachHook.cpp(already proven inv2.130.2.0) — (a)PrepareSaveCommandStatedetour re-asserts ≥96 bits reading from sidecar; (b) panel_teach detour writes sidecar when node activates. Net hook count: 1 (generalization, not new hook). Sidecar JSON extendsspira-reforge-flags.schema.jsonfrom Capture Cascade. Updated technical plan (15 honest blockers cataloged): Phase 0 ✅ → Phase A appendcommand.bin≥96 withCharacterUser(A.1-A.7 per char pool) → Phase B sidecar schema → Phase C Sphere Grid editor scope expansion (LearnedMove = 0x3000 | id≥96) → Phase D generalized hook → Phase E RT0/RT1 writer LAB → Phase F RT2 in-game pilot → Phase G Lulu Fury rows → Phase H-jabacklog v0.7+. Small pending blockers (spikes): panel_teach runtime addr, sidecar JSON schema design,CharacterUserfilter side-effects (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. Path 4 advantages vs alternatives: (a) zero vanilla sacrifice (total coexistence Firaga + Multi-Firaga, Demi + Demita, Mug + Mugra/Mugga, Sentinel + Sentinel++); (b) net 1 hook (vs 0 of the false pivot, vs 2-3 of Path 3); (c) infrastructure ALREADY EXISTING (NulWardTeach hook + Capture Cascade sidecar + editor UI ComboBox); (d) vanilla identity untouched. Documented honest lesson: "whenever 'zero hook' sounds too good, open existing audits before propagating the narrative". Updated doc: §0 short truth (3 reversals + 4th grid decision), §1 ownership model (Path 4 + grid teach), §7.2 technical plan (Phases 0-H), §7.3 15 honest blockers, §10 entriesv2.130.3.5andv2.130.3.6. Does not touch: writer/hook/probe/DLL. Files:FFXProjectEditor/FFXProjectEditor.csproj(v2.130.3.3→v2.130.3.6, skipped.4/.5since those were reversals within the same design session),docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md(§0/§1/§7.2/§7.3/§10 rewritten),CHANGELOG.md+changelogUS.md+docs/governance/VERSIONING.md+docs/ai/SESSION_HANDOFF.md
v2.130.3.3
v2.130.3.7REVISIONJarvis-MAGIC
Reference doc: consolidated catalog of the 96 player commands (IDs `0..95`) with `Power`/`MP`/`Formula`/`Acc`/`Hits`/element/effect + AbiMap × party-wide bank architecture
- (doc-of-record / reference catalog; no writer/behavior/RT2; only consolidates in 1 doc the knowledge already scattered across
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 requested the 96-ability table in MD form for operational reference of the mod. New docdocs/reverse/FFX_PLAYER_COMMAND_CATALOG_0_TO_95_2026-06-16.md(8 sections, ~250 lines): §0 TL;DR fixing the 95 border (AbiMap 96 physical bits) + cross-referenced RE proofs; §1 how the engine decides the menu (FFX_Btl_IsCommandAvailable @ 0x39BB70per-char vs party-wide withCharacterUserfilter); §2LearnedMove = 0x3000 | idencoding frompanel.bin(referenceSphereGridExplorer_DataModel.cs:30-31); §3 full 0..95 catalog split into 9 groups (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) with canonical FFX HD Remaster (US/JP) values — MP/Power/Formula/Acc/Hits/element/effect; §4 decisive playbook for "what the magic IS" via 3 flags (DamageFlags+DamageFormula_Enum+PreviewFlags) with Heal/Revive/Cleanse/Phys/Magic/Status/Buff/Gravity/Drain table; §5 the 11 grid-unteachable IDs (missing=[0,1,2,3,4,5,33,84,85,86,87]in all 10 regions — system/Defend/Aeon/Yojimbo); §6 party-wide IDs 96+ (Overdrives, Aeons, Mortes, Mix, pseudo-AI) with 3 design reasons for the split; §7 consequences for Spira Reforge tying back to Path 4 ofv2.130.3.6; §8 cross references. Does not touch: writer/hook/probe/DLL/gate. Files:FFXProjectEditor/FFXProjectEditor.csproj(v2.130.3.6→v2.130.3.7),docs/reverse/FFX_PLAYER_COMMAND_CATALOG_0_TO_95_2026-06-16.md(new),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 sealed — 16 skills offensive buff + Auto-Ability cleanup + MP Sphere bump
- (design only / decisions sealed by Halyson; no writer/behavior in this pass). Halyson opened
FFX_PLAYER_COMMAND_CATALOG_0_TO_95_2026-06-16.mdand sealed: "magic does its job, including healing. But the rest? PATHETIC. Full Break? F me, barely hits AND ridiculous damage for 99 MP." Raw diagnosis: 20 vanilla offensive skills withPower = 16(= 1.0× multiplier = Attack base) orPower < 16(= worse than Attack); Auron Full Break Power 16 / Acc 36 / MP 99 = crime against the player. Sealed final package (3 fronts in 1 pass): (1) Damage buff of 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 sealed by 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. Philosophy: Power ≥ 18 always when skill costs MP; premium MP ⇒ premium Power; Breaks Acc 36-50% rise to 65-90%. (2) Auto-Ability cleanup: Slot 12 Half MP Cost STAYS (Halyson justification: Lulu Magic Booster + high costs = still pays Ether/Elixir = natural balance). Slot 13 (ex-One MP Cost, universal 1-MP cheese) REMOVED → becomes Mana Spring (+5 MP/turn in battle; passive regen tick; replaces economy without becoming cheese — in a 10-turn battle = +50 MP cumulative). Slot 23 (ex-Break HP Limit) becomes "Break Limits" (bits0x0200 | 0x0400OR inability_flags_64, HP cap + MP cap together via vanilla engine; pure byte-edit, zero hook); VISION §10.8 sealed. Slot 24 (ex-Break MP Limit) becomes "Devil's Bargain" (+50% damage dealt / +50% damage received — symmetric glass cannon switch; 2-pass: Pass 1 functional placeholder now with bit reassignment, Pass 2 damage calc hook later with RT2). (3) MP Sphere node bump (scope B sealed by Halyson "B simplesmente B"): Standard Grid MP +40 → +60, Expert Grid MP +20 → +30 (proportional 1.5× cross-grid scaling). Trivial edit viaSphereGridNodeTypeEntry.IncreaseAmount(offset 0x14, ushort) inSphereGrid_File.cs:519. Sealed decision sequence in this session: (a) Halyson opened catalog, identified the problem; (b) proposed buff table 20 skills + 4 auto-ability categories; (c) Halyson sealed Extracts out + Full Break 3×; (d) sealed One MP removed + Mana Shield no (creates new meta); (e) corrected VISION §10.8 inverting Slot 23 becomes Break Limits and Slot 24 becomes repurpose ("xereca"); (f) sealed Devil's Bargain Slot 24 + understood 2-pass caveat; (g) refined Mana Spring slot 13 + Spell Spring backlog. Cataloged technical caveats: Devil's Bargain needs damage calc hook + RE addrFFX_DamageCalc_*pending; Mana Spring needs turn-tick hook + identify free bit inability_flags_64; hit Acc vs status-rider Acc spike pending RT2; Triple Foul Acc 100→90 spike pending (validate "triple guarantee" doesn't break); Full Break MP scaling in late game OK (75 still expensive with Half MP); auto-ability bit reassignment slot 24 needs free flag scan inAutoAbilityHardcodedFlagCatalog.cs. Technical plan Phase 1 (pure byte-editv2.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 pilot. 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. Synergy with VISION: §10.4 QH nerf (complementary — skill buff + QH nerf = diversified offense), §10.5 magic (no touch, next pass), §10.6 OD Lulu Fury (next pass), §10.8 Break HP+MP merged (SEALED this pass 1.2), §10.9 Auron secret ability (REINFORCED — Break Limits + Devil's Bargain + Breaks buff = "Auron the unkillable risk-taker"), §10.10 magic speed (Spell Spring backlog), §10.11/§10.13 (next pass), Path 4 Black Magic Extended (indirect — vanilla baseline creates context for ≥96 spells). Open questions backlog: Spell Spring awaits next free slot (sacrifice candidates: Slot 18 Double AP, 19 Triple AP, 21 Pickpocket, 22 Master Thief — progression/loot cheese); Status/Break Sharpness for next per-char identities §10.9. Doesn't touch: writer/hook/probe/DLL/csproj writer-side. Files:FFXProjectEditor/FFXProjectEditor.csproj(v2.130.3.7→v2.130.3.8);docs/reverse/FFX_SPIRA_REFORGE_VANILLA_OFFENSIVE_REBALANCE_2026-06-16.md(new, ~280 lines, 7 sections: §0 short truth, §1 vanilla carnage diagnosis, §2 consolidated package with 16-skill table + auto-ability cleanup + MP Sphere, §3 6 technical caveats, §4 Phase 1+2 implementation plan, §5 open questions, §6 delivery version, §7 cross refs);CHANGELOG.md+changelogUS.md+docs/governance/VERSIONING.md+docs/ai/SESSION_HANDOFF.md+mods/Spira Reforge/VISION_AND_ROADMAP.md(next pass). [previous:v2.130.3.7reference catalog]