Atualização 2.11
05/06/2026
v2.11.0BETA
Seymour
🧠 AI ASSEMBLER PRODUCTIZED (um editor de monster-AI utilizável):
- o "editar o AI 100% livre" do codec virou um FEATURE. Novo na lane
FfxLib/Ai+Modules/MonsterAiEditor: - Biblioteca de comportamento (
AiSnippetLibrary): templates parametrizados cujos bytes MIRROR idioms de corpus provados — lineares (force-cmd/perform-cmd/grant-field/set-stat/raw-call) e condicionais (rotação RNG 1-in-K, on-event force-command para counter/phase). - Validador Pre-flight (
AiValidator): opcode∈48, HasOperand vs 0x80, branch/entrypoint pendurado (nomeia qual, em vez do throw opaco), faixas de operando, RT0 self-check, Rebuild dry-run, grow/shrink;SaveAssembleragora é defensivo (recusa escrever com erros). - Seletor amigável de comando (
AiCommandId): operando performCommand ↔ nome via(cat<<12)|idsobreCommandCharacter/CommandMonster1_Dictionary; dropdown UI (sem mais hex cru). - Novas primitivas de codec (
AiScript_File):GrowWorkerJumpTable(adiciona slots ao jump-table de um worker — habilita um branch NEW) +AppendGuardedAction(prepende uma ação guardada a um entrypoint, preservando o handler original) +OperandKindOf. - UI em
MonsterAiEditor: card Behavior Library + botão Validate/report + dropdown de comando. - Gate
AiScriptLab --ai2PASS (corpus real, 361): jump-grow 898/898 workers, guarded-action 692/692 (primeiro+último entrypoint) + sentinela sintético 1/1, validador limpo 346/346, AiCommandId 620/620, positive-catch 8/8/8 (jumpOOB via o caminho do editor). Gate original--RT0 361/361 intacto. - A review adversarial de 4 agentes A achou + corrigiu 2 bugs (sentinela one-past-end self-loop;
OperandKindderrubado no caminho de save do editor), agora travados pelo gate. Docs:docs/reverse/FFX_AI_JUMPTABLE_GROW_PROVEN_2026-06-05.md+docs/ai/FFX_AI_ASSEMBLER_PRODUCTIZED_2026-06-05.md. - ⚠️ Estrutura provada OFFLINE; comportamento in-game (RT2) pendente da OK do Halyson (probe). Templates "heal ally < 25% HP" e "enrage on turn N" NOT shipados (HP-field / âncora turn-counter não byte-confirmed).
SUCESSOR_FFX_HD_MODELOS_MASTER_2026-06-05.mdfechados para sum/npc. - Texturas (manifest-driven):
extract-texture-batchemRuntimeTools/PhyreModelExportLabganhou--from-manifest, que lê o<id>.ahwin32g_fileNames[](manifest de ativos autoritativo) e extrai a textura EXACT que o jogo carrega. 305 PNGs (pc/npc/sum), mapa de proveniênciatexture-provenance-map.json, 0 mismatch silencioso. RE: oahwin32é um header C legível — resolve cross-refs (c906←c106,c908←c108,c806←c805) AND multi-texture (c101+c101_01,n238+n238_hair,n356←n238_hair) sem IDA. Achado bônus: a chave NPC rig-inheritance =0x6NNNno.chr(mapa nXXX→kNNN, 222/222 válidos). Docdocs/reverse/FFX_AHWIN32_ASSET_MANIFEST_2026-06-05.md. - Bake (mesh+texture+anim): driver
work/_scratch_mgrp/bake_cast.pyviaphyre_chr_gate. Estático 253/253 (elenco inteiro texturizado, limpo). Animado: sum motion próprio, npc herdaskl/<base>. - QA visual (workflow, 21 agentes de visão): 248 animados triados via F3D — 157 limpos / 58 torção / 33 explodidos. O picker de bind (rest/A1) nos 33 não corrigiu.
- 🔧 Blender CORRECTION (2026-06-06): F3D estava LYING na animação skinned. Diagnóstico Blender (mesh
EXPLODE_RATIO≈1.0, sem crescimento) + render Eevee verdadeiro provou que os "explodidos" têm um corpo intacto, só um membro/acessório esticado. Re-QA (8 agentes sobre renders Blender) corrige para 175 limpos (71%) / 59 torção (24%) / 14 explodidos (6%) — 20 modelos resgatados, o bake offline sempre foi ~94% utilizável. Os 14 genuínos = 11 Aeons + 3 npc (rig non-humanoid; precisam de mocap/parent-map RE). Regra atualizada: a tela BLENDER decide, F3D mente. Pipelinework/_scratch_mgrp/blender_{diagnose,render_anim,batch_render}.py. - 🎯 RETARGET SOLVED via
--retarget-delta(2026-06-06): 175→215 limpos (87%). Nova flagphyre_chr_gateque aplica a motion herdada como delta do frame0 sobre o REST do npc (M=restLocal·inv(m0)·mf), preservando as proporções do npc em vez de impor as da base. IDA RE provou que o remap.chr@0x30já estava aplicado — a causa era o retarget rest-pose, não o remap (docFFX_INHERITED_MOTION_REMAP_RUNTIME_2026-06-06.md). Piloto+batch de 73 fudidos + Blender re-QA + per-model keep-best: +40 limpos, 44 resgatados, regressão ZERO (1 mantido porque regrediria). NPC animado = 200/222 limpos (90%), 0 explodidos; 8 Aeons ainda explodidos (mesh imune → mocap). Resolve o MASTER §2.4 "A1-universal" sem A1's risk. - 🐉 WHOLE CAST fechado offline (2026-06-06): 498/643 limpos (77%), 90% utilizável. Estendeu truthful-Blender-QA + retarget-delta + keep-best para o resto: obj/wep/pc (46 limpos/55, party limpo) AND os 340 MONSTERS. O antigo QA de monstro (bbox) alegava "0 explosões" = uma mentira; o Blender QA verdadeiro (29 agentes) achou 127 fudidos reais; retarget-delta nos 66 herdados → 36 promovidos, monstros 206→237 limpos. Total animado (643): 498 limpos / 86 torção / 51 explodidos / 8 em branco. Residual (9%) = mesh divergente / bind degenerado → mocap/mesh-RE, não retarget.
- obj/wep/pc (2026-06-06): mesmo pipeline estendido — estático obj 110/110 + wep 79/79 + pc 34/49 (15 falhas de pc = slots dummy
c8xxsem PS2.chr). Elenco HD estático inteiro = 476 modelos. obj/wep principalmente rígidos (anim esparsa 25/7); spot-check de tela: f001/w001/c004=Auron limpos. - Galeria
work/cast_hd_gallery.html(model-viewer, toggle static/anim, filtro sum/npc/obj/wep/pc). Tudo emwork/(gitignored): só os COMMANDS são código. Sem bump de csproj (lab/RE em RuntimeTools).FFX_TOOLBOX_DISCOVERY_PLAYBOOK_2026-06-05.md): uma varredura online + vetting de licença do tooling externo FFX HD/PS2 (VBF, Phyre, kernel.bin, ATEL, FMOD, TM2, FMV) e editor NuGets. Achados-chave vetados: External File Loader (ffgriever, BSD-2) loose-file sem repack, Kaitai Struct (runtime C# MIT) para gerar readers C#+JS, fahrenheit (MIT, C#) framework de mod hook+DLL, e a confirmação de que o FFXDataParser tem NO LICENSE (só estudo). A colunatested?ainda está❌— o teste de oráculo contra o corpus local está pendente, plano incluído no próprio doc. Doc-only: sem bump de csproj (regra lab/RE doc-only). 58dossiês empacotados;- um manifest por dossiê;
- uma cópia espelhada Git-safe sob
docs/history/DOSSIÊ FFX 01-06-2026/; - um relatório de exclusão para o único binário externo gigante bloqueado pelos limites de tamanho GitHub.
- bases de conhecimento workshop-range separadas;
- um atlas master agregado;
- a raiz
KNOWLEDGE_BASE.mdcomo entrypoint único; - um plano oficial de merge;
- um anexo
Pt6/Pt9dependent-workshops; - linhas formais de família técnica para o projeto.
merge in docsExtras nowExtras laterfrozen researchhistorical cleanupps3dataffx_ps2- closeout executivo
- compêndio child-workshop
- atlas de runtime/AI
- bootstrap do sucessor
- quadro curto de maturidade
Extras nowvereditoExtras laterveredito- fronteiras de pesquisa congeladas
- papel de produto derivado
Pt67do produto ps3datavsffx_ps2divisão- regras de proveniência
- facetas de citação obrigatória ### Adicionado
important.bina_ability.binReadNo-Edit Byte IdentityReread- contratos aditivos de token de texto em
FFXProjectEditor/FfxLib/Text/* - uma utilidade pura de validação / decisão round-trip
TextLabTools/TextContractHarnesscomo o primeiro consumidor de smoke production-sidedocs/history/BATTLE_AI_FRONTIER_2026-05-31.mddocs/history/MODELVIEWER_BINDING_FRONTIER_2026-05-31.mddocs/history/PT23_TO_PT34_KNOWLEDGE_BASE.mddocs/history/PT23_TO_PT34_CHANGELOGS.mddocs/history/PT23_TO_PT34_BRANCH_MAP.mddocs/history/PT23_TO_PT45_CODE_KNOWLEDGE_BASE.mddocs/history/PT23_TO_PT45_CHANGELOGS.mddocs/history/PT23_TO_PT45_BRANCH_MAP.mdKNOWLEDGE_BASE.mddocs/history/PT2_TO_PT11_KNOWLEDGE_BASE.mddocs/history/PT12_TO_PT22_KNOWLEDGE_BASE.mddocs/history/PT23_TO_PT45_KNOWLEDGE_BASE.mddocs/history/PT2_TO_PT45_MASTER_KNOWLEDGE_BASE.mddocs/history/PT6_PT9_DEPENDENT_WORKSHOPS_ANNEX.mddocs/history/NON_FFX_EDITOR_THREADS_ANNEX.mddocs/history/PT_FAMILY_LINES_ANNEX.mddocs/history/OFFICIAL_MERGE_PLAN_2026-05-31.mddocs/history/PS3DATA_FULL_TREE_RESEARCH_PLAN.mddocs/history/PS2_FULL_TREE_RESEARCH_PLAN.mddocs/history/PT50_TO_PT58_ABSORPTION_PLAN.mddocs/history/PT52_TO_PT58_CLOSEOUT_REPORT_2026-05-31.mddocs/history/PT50_PT51_HISTORICAL_CLEANUP_2026-05-31.mddocs/history/PT6_TEMPORARY_CLOSEOUT_2026-05-31.mddocs/history/PT6_CHILD_WORKSHOPS_COMPENDIUM.mddocs/history/PT6_RUNTIME_AI_DISCOVERY_ATLAS.mddocs/history/PT6_SUCCESSOR_BOOTSTRAP.mdhistory/pt23-battleai-structurehistory/pt24-exactlaunch-seamhistory/pt25-selectorbank-materializationhistory/pt26-battlestate-diffhistory/pt27-routereplay-truthhistory/pt28-battlecapacity-prephistory/pt29-keyitem-crashfixhistory/pt30-autoability-crashfixhistory/pt31-geometryviewport-blockhistory/pt32-chrcarrier-decodehistory/pt33-aislice-payloadhistory/pt34-legacybridge-narrowing### AlteradoCurrentWorkspaceOverviewCurrentMonsterEditorCurrentItemsCurrentBattleExplorerCurrentLiveBattleLabCurrentStringExplorerEncodeSafeDecodeOnlyRawPreserveUnknownRiskReuseOriginalBytesReencodeAllowedBlocked- wrappers operacionais para a
Extras / ps3datalinha - úteis
Pt6 / Pt23AI micro-workshops com conhecimento preservado e status archive-safe merge nowmerge laterExtras/read-onlyknowledge onlyPt56,Pt52,Pt54,Pt58= atacar agora no softwarePt57e partes dePt53/Pt55= atacar depois, ainda read-onlyPt53,Pt55,Pt57= pesquisa agressiva sem overclaimPt50,Pt51= cleanup histórico antes de contarem como fontes limpasMagicPackageViewerBatEffPackageViewerMagicEffectCrosswalkExplorernever blind merge### Validado- purpose
- utility
- probabilidade de merge
- minichangelog per-workshop
binding truthlinguagem- narrowing forte para
owner/target/parentage/commit - base de guardrail para
Pt6ePt23 formation 0..7enemy actor rows 0..10rawMonsterId -> corpuscomposition truthvsactor-surface truthPt46 / AIBlobParityGrammarLabPt47 / AIRuntimeDispatchLabPt48 / SafeAIMicroProbeLabcomo parte do legado runtime/AI, mesmo sem claims de writer ou patcher.- base old-wave
Pt2..Pt11 - base middle-wave
Pt12..Pt22 - base heavy-wave
Pt23..Pt45 - um único atlas agregado com memória/runtime/binding/guardrails
- satélites de
Pt6 - satélites de
Pt9 - exceções production-side
Pt29/30 Model Viewer / BindingBattle / AI / Runtime TruthText SafetyKernel / ShopTooling / Safety / ReleaseProduction Crashfixes### Notas ### Planejado ### BacklogTextSourceCapabilityIndex*StringExplorerUI wiring0x10 + 0x120x13### Bloqueado ## [v2.13.0] - 2026-06-05 ### Adicionado ### Notas ## [v2.12.0] - 2026-06-05 ### AdicionadoFfxLib/BattleMap/BattleArenaPositionWriter.csre-stamps o X/Y/Z de cada actor no array de âncoras do chunk3 IN PLACE (on-field monstros = ponteiro+0x20; também party/aeon/staging porrole), value-only: nunca toca no header/ponteiros/contagem/outros chunks, preserva W verbatim. Como a transform batalha→cena é IDENTITY (IDA-proven, v2.10.0.1), uma coord escolhida no espaço de cena é escrita verbatim. Mesmo padrão slot-safe queFormationSlotWriter(guard + backup-onceWriteLooseFile). ### Validado RT0 (no-edit == byte-identical) 862/862, POSITION-ONLY (diff confinado ao array+0x20) 862/862, RE-READ 862/862, + SAVE LIFECYCLE (no-edit/edit/restore numa cópia temp) PASS. BiancaCatalogLab + AuroraChamberLab + BattleArenaPositionLab (antes deixados de fora). CI completo PASS (7/7 gates): ReverseHarness, AiScriptLab, FormationSlotLab, AbilityCommandLab + os 3 novos. ### Adiado offline; a tela in-game é o árbitro. Add/remove de slot de monstro (variar a contagem) = estrutural (Rebuild), próximo. ## [v2.11.1] - 2026-06-05 ### Adicionado caixa que filtra as linhas de diálogo pelo conteúdo do texto, e (2) um filtro de idioma (English/Japanese checkboxes, English por default) — antes JP e EN eram despejados na lista SAME (Japanese primeiro = uma parede de japonês). RefatorouEventExplorer_DataModel(allTextRows+ApplyTextFilter, English-first) + axaml (busca TextBox + JP/US CheckBoxes). NOT toca o writer (Tier 1 fica--event-rt0397/397 + edit 12/12). ### Notas injeção de tradução, fora do escopo do writer). A busca de palavra é dentro do evento selecionado. ## [v2.10.0.1] - 2026-06-05 ### Provado (RE / IDA, offline) copia as coords do chunk3 (battle-local) VERBATIM para o mundo node — no flip-Z, scale, ou do actor rotação; só Y ganha um per-actor model-height (actor+0x534). Como a cena.dae.phyre== o vertex frame Phyre cru 1:1, **. Cadeia provada: vertex frame 1:1, P_scene(X,Y,Z) = P_battle(X,Y,Z) (s=1, R=I, T=0). Proven chain:FFX_Battle_AreaChunk_GetSetPosition(0x7AC000; base do chunk30x112A9B0; copia 4 floats verbatim; pos do actor no mundo @+0x3B0) →FFX_Battle_ResolveActorPlacement(0x7A9AE0) →FFX_Battle_GetActorByIndex(0x794030, stride0xF90== inimigo RT2). O palpite flip-Z era um artefato de incluir linhas de staging off-field (party-back Z≈-168). Doc:docs/reverse/FFX_AURORA_BATTLE_TO_SCENE_TRANSFORM_IDA_PROVEN_2026-06-05.md(+ rename-queue para o.i64real). ### Alterado (Aurora Chamber — honestidade) plota âncoras diretamente em coords de cena (o default já era identidade) e o toggle flip-Z vira DISPROVEN/comparação;aurora-actors.jsoncoordSpace=scene_world_identity_ida_proven. ### Adiado≈ chunk3(residual ~0) + medir o termo exato Y. Probe AUTHORIZED do Halyson; pendente só o jogo aberto (READ via a probe existente, sem código novo). SPIRA FORGE permanece pausado. ## [v2.10.0] - 2026-06-05 ### Adicionado não é mais read-only. Editar diálogo de cutscene/evento agora é uma BUTTON.FfxLib/Event/Event_File.Write.cs(novo): byte-faithful EV01 repack de container — cada chunk re-aligned para0x40, a tabela de offsets absolutos + terminador EOF recomputados (magic + sentinela0xFFFFFFFFpreservados). No-edit = VERBATIM garantido; texto editado reutilizaTextTable_File.Write(chunks JP=1/EN=4); script ATEL (0), Unknown 2 e FTCX (3) preservados byte-for-byte. Hook Tier 2ScriptChunkOverride(re-stitch de um chunk-0 editado).Event_File.cs: captura o header cru + tabelas de texto; tolera entradas null-pointer field-string (8 arquivos) preservando o chunk verbatim (fronteira text-editable documentada).TextTable_File.Writeoverload aditivo (includeTrailingPadding): emite tabela+pool sem padding interno (o container re-pads para 0x40). NOT quebra--textstr-rt0(default = comportamento legado).Modules/EventExplorervirou um editor EDITOR de diálogo: strings JP/EN editáveis (TwoWay TextBox) + um botão "Save dialogue" que re-packs e escreve o.ebp. (FfxLib/Ai/AiScript_File.cs, usado read-only como doador) lê/edita o script de evento (mesma família AiFile).- patch de operando Byte-local PATCH PROVEN (12/12): editar um operando chunk-0 muda só esses bytes; o container re-stitches identicamente em outro lugar; o re-read carrega o novo operando.
- GROW (AppendCode) é uma fronteira documentada: o doador
AppendCode(feito para batalha, descritores em DATA) não reloca os descritores header-resident que os scripts de evento usam ([0x38..scriptStart)) — precisa de relocação event-aware (coordenar com a lane do Assembler AI). ### Validado round-trip 12/12** (trocar uma string → repack → re-read: string editada bate, chunks intocados verbatim, idempotente). 397/397; patch de operando byte-local 12/12. O editor compila 0 erros. (0 quebras), EOF==filesize, sentinela0xFFFFFFFF. Docs emdocs/reverse/FFX_EVENT_*_2026-06-05.md. ### Honestidade / Adiado text-editable ainda). Tier 2 = patch provado; append/grow + autoria estrutural = Tier 3, documentado não fechado. Verificação preferida offline byte-RT0; in-game RT2 do diálogo editado ainda é recomendada. ## [v2.9.0] - 2026-06-05 ### Adicionado ao MapViewer e eleva as coordenadas de actor para fora do chunk3. Dedicado à Aurora & Bianca. 💛 - Scene Picker consome
BattleMapCatalog_File/BattlefieldSceneResolver(read-only) — lista/seleciona cenas por área e map-key. - Render dirige
PhyreMapExportLab(export on-demand glTF da cena btlmap) e abreFFXMapViewerWebvia a?catalog=/?map=/?actors=deep-link — um per-scene mini-catalog, nunca tocando ocatalog.jsoncompartilhado nem reescrevendoapp.js. - Coordinates via o novo reader
FfxLib/BattleMap/BattleArenaAnchors_File.cs(puro/Avalonia-free): decodifica o chunk3 (area-record de 96B, ponteiros+0x10..+0x2C, monstros vivos+0x20, elementos XYZW Y-up de 16B), lista as âncoras battle-local e exporta JSON para Encounter Authoring. gizmos de âncora de?actors=+ um modo "pick" (raycast no plano y=0 → coords de mundo). Non-intrusive (hookswindow.ffxMapViewerDebug; no-ops sem?actors/pick; nunca editaapp.js). ### Validado klyt00_00/sins02_00/mihn00_00 == coords doc-proven); corpus 862/862 limpo (0 NaN/Inf, W==0 nos monstros vivos); determinístico; pipeline BIANCA→cena→batalha→âncoras 52/52 cenas mapeadas carregam âncoras. 10.804 triângulos,gatePass: true). O editor compila com 0 erros (verificado numa worktree HEAD isolada). ### Honestidade / Adiado UNCALIBRATED** (P_scene = R·s·P_battle + T; flip-Z/yaw-180 não resolvidos) — âncoras são battle-local cruas, não engine-exact. Calibração de probe = Wave 3 (precisa da OK do Halyson). SPIRA FORGE fica PAUSED; a Aurora só CONSUMES MapViewer + BIANCA (read-only/aditivo), nunca inicia o hub. ## [v2.8.0] - 2026-06-05 ### Adicionado (cataloga as 25 áreas / 56 cenas de HDps3data/btlmap—<area>NN_<variant>commdl/d3d11/<leaf>.dae.phyre) +FfxLib/BattleMap/BattlefieldSceneResolver.cs. Puro/Avalonia-free, compila dentro o editor (0 erros). "azit03"), NOT o u16battlefield(que é um id global de arena, compartilhado entre mapas —bf=1061abrange nagi/test/tori/zzzz). Doc:docs/reverse/FFX_BATTLEFIELD_SCENE_BRIDGE_2026-06-05.md. ponteiro+0x20(float32 X,Y,Z,W; Y-up; W=0; stride de 16 bytes; slot de formação ↔ entrada). Party+0x10, aeon+0x18, câmera+0x2C. Doc:docs/reverse/FFX_BATTLE_FORMATION_POSITION_CHUNK3_DECODED_2026-06-05.md. (-- export --ps3-root <ps3data> --area btlmap/azit/azit03_a). Plano Actor-overlay + calibração de coordenadas do probe (DESIGN):docs/ai/FFX_AURORA_COORDINATE_SYSTEM_AND_CALIBRATION_2026-06-05.md(probe só com a OK do Halyson). ### Validado determinístico; 56/56 cenas com exatamente um modelo primário; ponte com 0 misses inexplicados (22 mapas HD-orphan = PS2-only de corte/EXPECTED; 4 cenas órfãs bika04/grid00/nagi03/sfia00 = EXPECTED de boss/story). ### Adiado a probe DINPUT8 precisa da OK do Halyson e SPIRA FORGE é PAUSED. ## [v2.7.1] - 2026-06-05 ### Adicionado / Validado WeaponNameTable, MacroDictionary, NameDescriptionTextTable, NameDescriptionTextPrefixTable, BtlTextTable, SphereGrid, ShopGearCatalog, BukiGetTreasureCatalog, AlBhedDictionary, PointerScriptTable, BattleTextTable, ShopTable. Padrão Preserve-only (WriteIdentitypara os lossy-rebuild). Novo gate-sweepTools/Wave1Rt0.cs. ## [v2.7.0] - 2026-06-05 ### Adicionado troca a partição AiFile por uma de comprimento DIFFERENT, faz 16-pad no AiFile, desloca seções posteriores e reescreve os ponteiros de seção do header (m###.bin), escrevendo o AiFile verbatim (sem clobber codeLength). O Assembler AI UI agora SAVES grow/shrink (era só length-preserving). Causa do clobber documentada + corrigida por design (Opção B: superfície mínima, NOT tocaMonster_File.Write→--monster-rt0fica 361/361). VM a partir de contagens de worker + datalen per-worker (arredondado para 16) (partição NOT/DeclaredLength/codeLength) e confia nos ponteiros in-file → a relocação de grow é honrada e o pad final é seguro. (regra de ouro: rename-queue.) ### Validado (insert → splice grow-aware → re-read limpo + cauda/header preservados verbatim + 16-alinhado + idempotente), SHRINK 346/346 (remover uma instr non-targeted → delta negativo → re-read limpo + cauda preservada).--monster-rt0361/361 (sem regressão). Alinhamento do corpus: 16/32/64/128/256, 0 pad final. (free-edit)"** renderizado com a lista de instruções editável (opcode/operando/remove) + Insert/Save Structural + preview. Screenshotwork/spira_forge_qa/monster_ai_assembler_v01.png. ### Adiado probe DINPUT8 (compartilhada) — sob a OK explícita do Halyson. Offline + RE provam o byte/game-safety; a tela in-game é o árbitro final. ## [v2.6.0] - 2026-06-05 ### Adicionado (insert / remove / modify) em cima do editor de operando byte-local. O AiFile reconstruído vem deAiScript_File.Rebuild(RT0-proven: reloca entrypoints + jump tables via um mapa old→new). Lista editável (opcode/operando hex + checkbox de remove), insert-after-selected, preview de delta. Save só é habilitado para edições length-preserving (codeLength inalterado) → splice byte-safe viaSpliceAiFileIntoMonster. GROW/SHRINK é LAB (mensagem honesta): o save loose-file precisa de relayout de monstro header-aware + padding de alinhamento + prova in-game. --ctbbase-rt0→CtbBase_File(ctb_base.bin), preserve-only.--mixtable-rt0→MixTable_File(prepare.bin), preserve-only.--aiasm-rt0→ prova o save estrutural do Assembler AI (Rebuild no-edit + relayout + splice byte-identical) e mede o alinhamento AiFile→WorkerFile do corpus. ### Validado edição length-preserving é byte-safe. Grow=LAB (causa: o header 0x34 deMonster_FilesobrepõeAiFile[0..4)=codeLength + uma mudança de comprimento quebra o alinhamento WorkerFile; o corpus é 16/32/64/128/256-alinhado, 0 pad final). ### Bloqueado / LAB ## [v2.5.0] - 2026-06-05 ### Adicionado locais (Open Spector,Capture Next Frame,Export Last Capture) mais um primeiro painelMaterial Debugcom inventário ao vivo dos materiais glTF carregados, um seletor, chips de fato e cards de textura per-slot (map,normalMap,aoMap,envMap, etc.). registra o que aterrissou, o que foi validado e o que permanece explicitamente fora da prova. ### Validado controles apareceram, e o painelMaterial Debugpopulou a partir do glTF carregado. confiável, o viewer degrada paraFrame preview unavailable/Texture preview unavailable on this source surfaceem vez de fingir mostrar evidência visual válida. ## [v2.4.4] - 2026-06-05 ### Adicionado batalhas selecionáveis do campo; escolher uma publica paraFieldContext.SelectedBattleIde o Formation Editor pula direto para aquela batalha (carrega a formação dela). Realiza o "click a zone, swap the formation" via a spine compartilhada, sem plumbing de shell.FieldContextganhouSelectedBattleId/SelectBattle. ### Validado 37 BattleIds sem pasta + 37 pastas nunca referenciadas (batalhas especiais/evento) — o handoff filtra para as as que existem. Editor pulou para a batalha carregada). Screenshotwork/spira_forge_qa/handoff_encounter_to_formation_v04.png. ## [v2.4.3.1] - 2026-06-05 ### Reverso / Prova do handoff (CONTINUE_AQUI_PERNAS_HD): o mapa "52m_skeletonMatrices→ 79 joints" vive no arquivo Phyre, não em IDA.- A paleta de skin é
PMatrix4[0..51](linkada do campo 12 dePMesh); ela iguala om_skeletonMatricesvivo byte-for-byte (maxDist=0.00000). - O slot→node map é the
intat offset 12 of eachPSkeletonJointBounds[j](52 slots → 52 nodes, bijection). - Compor
m_defaultPoseatravés dem_matrixParentsreproduz o inverse-bind autorado EXACTLY: os nós0/52divergem. Então--hd-defpose+--hd-parentsjá é o bind real do jogo. - Causa raiz da espiral histórica: um bake sem
--hd-defpose/--hd-parentscai parainvBind = PMatrix4[52+b](matriz LOCAL crua) → o mesh explode. A receita defpose+parents é o fix e já é o default da galeria. - Novas probes read-only:
work/_scratch_mgrp/phyre_palette_probe(localiza a paleta, prova que o bind é exato, emitenode_to_slot.json) ephyre_legs_probe(matcher; ilustra a armadilha coincident-translation). ### Validado c007 (Rikku) — em rest forçado, batalha (id5_c4318 t0.0–0.9), 4 ângulos de panturrilha num crouch profundo, e multi-clip (c4333/c4365/c4886). Numericamente: matrizes leg-joint local/world são rigids perfeitas (scale=1, det=+1, ortho 0.0000). Sem IDA. Prova completa emdocs/reverse/FFX_HD_SKIN_PALETTE_DECODED_LEGS_NOT_BIND_2026-06-05.md. ## [v2.4.3] - 2026-06-05 ### Adicionado existiam mas nunca tinham sido byte-gated, fechando mais 4 famílias editable-base concretas: --keyitem-rt0(Tools/KeyItemRt0) →KeyItem_File(important.bin), writer preserve-only (clona os bytes originais + só re-stampsPrimerByte10/OrderingByte13).--treasure-rt0(Tools/TreasureRt0) →Treasure_File(takara.bin), full-decode round-trip (4 bytes/entrada).--customization-rt0(Tools/CustomizationRt0) → gearCustomization_Filekaizou.bin + aeon sum_grow.bin (preserva o prefixo/cauda do header + re-emits as entradas decodificadas).--autoability-rt0(Tools/AutoAbilityRt0) →AutoAbility_File.WriteAbilities(a_ability.bin, seção DATA ), writer preserve-only. (Lêarms_rate.binsó para satisfazer o contrato de leitura; NOT escreve arms_rate e NOT cobre repackWriteAbilitiesAndText/text.) ### Validado takara.bin (503 entradas, 2012 B), kaizou.bin (125) + sum_grow.bin (77), a_ability.bin (134 entradas, 19590 B). save No-edit = byte-identical; edit = byte-local (mesmo padrão preserve-only que fechou Monster/Encounter). Levanta parcialmente o caveat histórico "important.bin/a_ability.bin bloqueados para claims de writer mutation-safe": a edição de campo (data-section) agora está provada; repack text-pool permanece não reclamado (mesmo risco de drift monmagic-style risco — fora do escopo deste gate). ## [v2.4.2] - 2026-06-05 ### Adicionado inline (e.g.[m003 - Murussu, m003 - Murussu, m009 - Dingo]). Lazy-loaded + cacheado + com cap (≤90 batalhas visíveis; com a lista cheia ele pede para filtrar por área). Read-only; traz o "zonas pintadas com os monstros que spawnam lá" para o editor (fusão encontro↔formação tornada visível). ## [v2.4.1] - 2026-06-05 ### Adicionado de produção** (guard slot-only + backup-once.spiraforge.bak+ write). Agora usado pelo Formation Editor (PersistSnapshot) AND testado pelo gate headless — mesmo código no editor e no teste, sem duplicação. ### Validado workspace/asset, read-only respeitado): (a) no-edit Save = disco byte-identical + backup==original; (b) edit Save = slot-only no disco + reread bate + backup preservado; (c) restore do backup = byte-identical. PASS. Fecha o gap de honestidade v0.2 (save in-app provado no disco, reversível). Corpus ainda 858/858; 4 gatesoffline_ciPASS. ## [v2.4.0] - 2026-06-05 ### Adicionado Entries/Groups/Formations (contagens VARIABLE + tabelas de create), atribui dataOffsets frescos, reconstrói o chunk0 + a tabela de chunks, preserva block-sharing + padding. Gate--encounter-rebuild-rt0. A base estrutural para "CREATE ENCOUNTERS". ### Validado (4096/4096)** + grow-test (add 1 formação, fim 0x1000→0x1002, 2 chunks intactos) válido. corrigiu o drift de padding final. Nota honesta: os registros StringExplorerhelp_txt.binsão DEAD nesta extração (arquivo ausente) — o writer é provado num field-string real (spcodedic.bin). ## [v2.3.2] - 2026-06-05 ### Adicionado (Ability_Command.ReadList→WriteList), que oKernelCommandsjá usa para Save mas nunca foi byte-gated. Referencia o projeto do editor (árvore de deps profunda), chama só métodos FfxLib estáticos. Ligado emoffline_ci.ps1. ### Validado (1 byte) 4/4. PASS. Esta é a fundação provada para a feature sonho "Black magic nova" (vive em command.bin). ### Bloqueado monmagic original compartilha/deduplica texto enquantoWriteListre-appends (FfxEncoding.WriteBytesIntoTextFilesó anexa; command/item são pure-append → eles batem). Risco: o Save KernelCommands de MonMagic infla o arquivo — gate até um writer dedup-aware passar. Alvo de auditoria + fix:docs/reverse/FFX_ABILITY_WRITER_AUDIT_2026-06-05.md. ## [v2.3.1] - 2026-06-04 ### Adicionado além de EOF (kino03_*,mihn05_*,cdsp00_02): trata o chunk past-EOF (e além) como ausente em vez de rejeitar o arquivo inteiro; chunks anteriores (incl. formação @2) permanecem válidos. Essas batalhas agora são editáveis no Formation Editor. ### Validado re-read 858/858 PASS. Os 843 anteriores inalterados. ## [v2.3.0] - 2026-06-04 ### Adicionado monstros (16 bytes) de uma formação btl_* viaBattle_File.WriteWithFormationSlots, byte-safe slot-only. Consome a spineFieldContext(pre-filters batalhas pela área de campo selecionada do Hub). Monster picker (Monster_Dictionary+ Empty, preserva o nibble alto cru). Save escreve um loose-file de workspace com backup.spiraforge.bak+ guardAssertSlotOnlyDiff, viaByteSnapshotEditorSession(Undo/Discard). Offline, sem probe.offline_ci.ps1(param-BtlRoot). Membros read-only aditivos emBattle_File(FormationChunkOffset/FormationSlotsOffset/FormationSlotsLength). ### Validado (15 btl_* não parseáveis pelo reader na época — corrigido em v2.3.1.) ## [v2.2.0] - 2026-06-04 ### Adicionado chaveada porfield_token. Field picker alimentado pela ponte CSV (ps3data-map-btlmap-fieldid-bridge.csv, 357 campos, structural-candidate). Selecionar um campo publica paraFieldContext(singleton observável) e 2 consumidores reagem read-only: mapa deep-link (?map=map/<area>/<field>para o FFXMapViewerWeb) + encounter peek (lêbtl.binviaEncounterTable_File, join candidato área↔mapa). CSV copiado para o output via csproj<Content>. Offline; o picker roda sem projeto. Sem writer, sem probe. ### Validado Screenshotwork/spira_forge_qa/field_hub_v01.png. ## [v2.1.1] - 2026-06-04 ### Validado gate--player-rt0:ply_save.bin(3098) +ply_rom.bin(2161) -> no-edit RT0 byte-identical. (Writers já existiam slot-only; agora gated.) ## [v2.1.0] - 2026-06-04 ### Adicionadobtl.binbyte-for-byte e toca re-stamps só os campos editáveis (tabelaId/Unknown0C, grupoBattlefield/Danger/TotalWeight, formaçãoId/Weight). Gate--encounter-rt0no editor. ### Validado ## [v2.0.0] - 2026-06-04 > NEW ERA — MAJOR. O editor cruzou de "edição de arquivo offline" para PROVEN LIVE RUNTIME EDITING: > editar o bytecode AI de um monstro em RAM e ver a mudança de comportamento na tela, sem crash, reversível — > o objetivo supremo #1 do projeto, realizado. MAJOR = uma nova classe de capacidade (não é quebra de contrato/save/build > — só adicionamos e endurecemos).-betaporque RT2/God-Mode ainda não estão productizados em UI gated. > Marco da onda Claude Code / VSCode + a união com a 2ª conta Codex. ### Destaques muda na tela — Flame Flan Firaga→Thundaga, sem crash, reversível. Cadeia:enemy-list(0xD34460) ->MemoryChr.Ptr_script_chunks(+0xF78) -> AiFile ao vivo ===m0NN.binbyte-identical de disco. habilidade global — o monstro não precisa "possuir" ela. Prova: um Skoll cuspiu o Hellfire do Ifrit na tela. revive de dados (flags de morte + KO), tudo viaMemoryChr+ probe. ### Adicionado offset** (+delta) -> um AiFile maior válido (o caminho para "ADD AI", além do orçamento byte-local). labels de jump + tipo de worker inferido), edição de operando + Save loose-file.FFX_MUSIC_SYSTEM_AND_MOD_IDEA(Music Remapper),FFX_AI_BYTECODE_OPCODE_TABLE_PROVEN,CODEX_MAPVIEWER_WATCH_JARVIS,FFX_MAP_DEVELOPMENT_TOOL_MASTERPLAN(Spira Forge). ### Alterado / Validado StatSheet/Loot + preservar Signature/Padding do header (o Padding sobrepunhaAiFile[0..3]). ### Bloqueado / Adiado (honesto) (rebuild game-closed). Player encontrado:FFX_FmodMusic_PlayTrackByIndex(181 faixas); o PS2 SPU FIFO é stub em HD. ### Absorvido dos Labs / Multi-agent união com a 2ª conta Codex (lane MapViewer / model-texture): o exporter agora expõe sinais material-role (TextureSampler1/normalMap/reflexão/água/PhyreWaterShader), comparação external-viewer (glTF-Sample-Viewer como oráculo; gap provado exporter-side, não do shell), e o kickoff do masterplan Spira Forge. Coordenação Multi-agent logada emdocs/ai/CODEX_MAPVIEWER_WATCH_JARVIS.md. ## [v1.7.0] - 2026-06-04 ### AdicionadoAppendCode: anexa instruções no fim + reloca a seção de dados.Rebuild: insert/remove/modify uma instrução ANYWHERE + AUTOMATICALLY reloca todos jumps + entrypoints (mapa de linker old→new) + a seção de dados. Branch órfã (instr removida) -> erro honesto. ### Validado workers resolvem, entrypoint post-insertion relocado0x2D1→0x2D4sozinho; grow-test (AppendCode) RT0. ## [v1.6.0] - 2026-06-04 ### Validado StatSheet/Loot + preservarSignature/Paddingdo header (o Padding sobrepunhaAiFile[0..3]). ## [v1.5.0] - 2026-06-04 ### Validado / Bloqueado ao vivo BLOCKED** (FMOD API__thiscall, probe cdecl-only). DocFFX_MUSIC_SYSTEM_AND_MOD_IDEA(Music Remapper). ## [v1.4.0] - 2026-06-04 ### Validado (ao vivo) — o monstro não precisa "possuir" ela. Prova: um Skoll cuspiu o Hellfire do Ifrit na tela. ## [v1.3.1] - 2026-06-04 ### Corrigido / Validado (ao vivo) ). Auto-scan (statusScan) alternado ao vivo. ## [v1.3.0] - 2026-06-04 ### Validado (ao vivo) (POINTER_BATTLE_ENEMY_LIST 0xD34460, stride0xF90) + probe. ## [v1.2.0] - 2026-06-04 ### Adicionado labels de jump) + edição de operando + Save loose-file. ## [v1.1.0] - 2026-06-04 ### Validado (🏆 TÍTULO — objetivo supremo #1) o comportamento muda na tela (Flame Flan Firaga→Thundaga), sem crash, reversível. Cadeia:enemy-list 0xD34460->MemoryChr.Ptr_script_chunks +0xF78-> live AiFile === diskm0NN.binbyte-identical. Doc:docs/reverse/FFX_AI_RT2_LIVE_EDIT_PROVEN_2026-06-04.md. ## [v1.0.0] - 2026-06-01 Marco de maturidade para o editor como uma plataforma real de leitura, validação e knowledge-navigation, com superfície de produtoExtrassuficiente para justificar um1.0honesto mesmo com runtime, AI e bosses body-playback ainda em aberto. ### DestaquesPS2 KnowledgeTextures (TM2 + TXC/CLT/FMT/SPS2 support lane)BIN-FTC AtlasProject / PipelineMagic EffectsPresentation ContainersBattle Corpus Crosswalk### AdicionadoMagicPackageViewerBatEffPackageViewerMagicEffectCrosswalkExplorerFtcHeaderInspectorBinSidecarGraphSignature Groupno shellTxcCltPairExplorer- metadados
fmt/sps2frios ### Alterado ### Validado read-onlydo not promoteno runtime proofonde aplicávelpipeline/support onlyonde aplicável ### Notasmagic solvedAI solvedModelViewer playback solved- autorização ampla de writer ## [v0.11.0-beta.2] - 2026-06-01 Evolução real de produto para a linha
Extrasemmain. ### Destaques masterffx_ps2ps3dataPS2 KnowledgeTextures (TM2)BIN-FTC AtlasProject / Pipeline### AdicionadoExtrasSourceResolverExtrasEvidenceBadgeModelExtrasProvenanceModelExtrasReadonlyBoundaryModelExtrasFileOpenServiceCdIndexExplorerProjectDescriptorViewerAbmapSupportGraphdocs/history/PT52_BIN_FTC_FILE_MEANING_GUIDE_2026-06-01.mddocs/history/PT53_BATTLE_MAGIC_FILE_MEANING_GUIDE_2026-06-01.mddocs/history/PT54_PROJECT_ABMAP_FILE_MEANING_GUIDE_2026-06-01.mddocs/history/PT56_TEXTURE_PALETTE_FILE_MEANING_GUIDE_2026-06-01.mddocs/history/PT57_PRESENTATION_CONTAINER_FILE_MEANING_GUIDE_2026-06-01.mddocs/history/PT58_FFX_PS2_OWNERSHIP_AND_LINKAGE_GUIDE_2026-06-01.md### Alterado ### Validado- sem writer
- sem repack
- sem claims de decode final
- sem misturar pesquisa fria com prova de runtime ### Notas
kernel -> mag_* -> bat_eff## [v0.10.0-beta.1] - 2026-05-31 Main-branch beta de consolidação depois da primeira onda forte de absorção de workshop curada. ### Destaques ### AdicionadoShop ExplorerFfxLib/ShopAssets/Shop- um writer guardado para
item_shop.binearms_shop.bin NameDescriptionTextPrefixTable_Filereader + no-edit guardparaimportant.binreader + no-edit guardparaa_ability.bin### Alterado ### Validado ### Adiado ### Bloqueado ## [v0.9.0-beta.1] - 2026-05-31 Primeira versão que assume honestamente o tamanho real do editor e do ecossistema ao redor dele. ### Destaques da Main ### Superfície de Produção Presente na Main ### Absorvido dos WorkshopsTextLabTools;ProductionAuditTools;- conservative text/monster harness e release.
PlayerGrowthEditor;CtbBaseEditor;MixTableEditor;- a linha histórica que depois sustentou
KeyItemEditor. AutoAbilityEditor;- parsers conservadores de
AutoAbility_File.cseArms_Rate.cs. Shop Explorer;FfxLib/Shop;Assets/Shop;- writer guardado para
item_shop.binearms_shop.bin. ### Governança e Versionamento ### Validado ### Ainda Bloqueado ### Por Que Isto Ainda É Beta ## Reconstrução Semântica Histórica Observação editorial importante: ## [v0.8.0-beta.1] - reconstrução histórica (pre-Git oficial SemVer) Marco onde o ecossistema já opera como um editor modular grande com múltiplas frentes especializadas vivas ao mesmo tempo. ### Superfície Principal Nesta Etapa ### Pressão do Ecossistema ### Ainda Faltando ## [v0.7.0] - reconstrução histórica (pre-Git oficial SemVer) Marco onde a linha principal muda de “mais módulos” para “mais prova”. ### Adicionado ### Alterado ### Ainda Não Seguro ## [v0.6.0] - reconstrução histórica (pre-Git oficial SemVer) Marco onde a linha de kernel e o hardening conservador de sistemas secundários deixam de ser promessa e viram parte de um editor sério. ### Adicionado ### Alterado ### Ainda Faltando ## [v0.5.0] - reconstrução histórica (pre-Git oficial SemVer) Marco da onda forteKernelTablesLab. ### Adicionado ### Alterado ### Ainda Faltando ## [v0.4.0] - reconstrução histórica (pre-Git oficial SemVer) Marco onde o projeto aprende a dizer “sim” e “não” em texto, com critérios reais. ### Adicionado ### Alterado proven reader;conservative writer;blocked; ### Ainda Faltando ## [v0.3.0] - reconstrução histórica (pre-Git oficial SemVer) Marco onde o editor deixa de ser só um navegador de arquivos e começa a tocar superfícies de gameplay AI, runtime e high-value. ### Adicionado ### Alterado ### Ainda Faltando ## [v0.2.0] - reconstrução histórica (pre-Git oficial SemVer) Marco da expansão estrutural do editor para sistemas grandes e visíveis. ### Adicionado ### Alterado ### Ainda Faltando ## [v0.1.0] - reconstrução histórica (pre-Git oficial SemVer) Marco mínimo honesto em que já existia um editor real, muito acima de um protótipo descartável. ### Adicionado ### Alterado ### Ainda Faltando ## [baseline-2026-05-31] - 2026-05-31 Importação inicial honesta da produção para o Git. ### Adicionado ### Preservado ### Validado ### Notas ## Histórico de Mini-Versões dos Workshops Observação: ## [pt2-v0.3.0-superseded.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt3-v0.8.0-freeze.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt4-v0.5.0-hold.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt5-v0.9.0-final.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt6-v0.7.0-beta.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt7-v0.9.0-final.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt8-v0.7.0-freeze.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na MainShop Explorer;FfxLib/Shop;Assets/Shop;- guardrails documentados em
docs/history/PT8_SHOP_GUARDRAILS.md. ### Status Final ## [pt9-v0.6.0-alpha.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt10-v0.2.0-final.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt11-v0.3.0-blocked.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt12-v0.3.0-package.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt13-v0.3.0-package.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt14-v0.2.0-architecture.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt15-v0.2.0-architecture.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt16-v0.2.0-architecture.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt17-v0.3.0-guardrail.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt18-v0.3.0-governance.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt19-v0.3.0-surface.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt20-v0.2.0-strategy.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ##v2.227.0.0(2026-08-08) — Infra visual QA: modelos opencode FREE emverboo_router.py(limites honestos + comparação de poder). MINOR. Lane Jarvis-CLINE. [previous:v2.226.0.0] ##v2.226.0.0(2026-08-08) — Infra visual QA: integração Go OpenCode (gpt-5.6-luna) + mododesc+ prompt UX humanizado + fix de relatório. MINOR. Lane Jarvis-CLINE. [previous:v2.225.2.0] ##v2.225.2.0(2026-08-06) — F7 Monster AI Swap: status-on-ability via RAM. MINOR. Lane Jarvis-HOOK. [previous:v2.225.1.0] ##v2.225.1.0(2026-08-06) — Treasure Map: parse de header ATEL + fix de glossário. PATCH. Lane Jarvis-CLINE. [prev:v2.225.0.0]
v2.11.0BETA
Seymour
🧠 AI ASSEMBLER PRODUCTIZED (um editor de monster-AI utilizável):
- o "editar o AI 100% livre" do codec virou um FEATURE. Novo na lane
FfxLib/Ai+Modules/MonsterAiEditor: - Biblioteca de comportamento (
AiSnippetLibrary): templates parametrizados cujos bytes MIRROR idioms de corpus provados — lineares (force-cmd/perform-cmd/grant-field/set-stat/raw-call) e condicionais (rotação RNG 1-in-K, on-event force-command para counter/phase). - Validador Pre-flight (
AiValidator): opcode∈48, HasOperand vs 0x80, branch/entrypoint pendurado (nomeia qual, em vez do throw opaco), faixas de operando, RT0 self-check, Rebuild dry-run, grow/shrink;SaveAssembleragora é defensivo (recusa escrever com erros). - Seletor amigável de comando (
AiCommandId): operando performCommand ↔ nome via(cat<<12)|idsobreCommandCharacter/CommandMonster1_Dictionary; dropdown UI (sem mais hex cru). - Novas primitivas de codec (
AiScript_File):GrowWorkerJumpTable(adiciona slots ao jump-table de um worker — habilita um branch NEW) +AppendGuardedAction(prepende uma ação guardada a um entrypoint, preservando o handler original) +OperandKindOf. - UI em
MonsterAiEditor: card Behavior Library + botão Validate/report + dropdown de comando. - Gate
AiScriptLab --ai2PASS (corpus real, 361): jump-grow 898/898 workers, guarded-action 692/692 (primeiro+último entrypoint) + sentinela sintético 1/1, validador limpo 346/346, AiCommandId 620/620, positive-catch 8/8/8 (jumpOOB via o caminho do editor). Gate original--RT0 361/361 intacto. - A review adversarial de 4 agentes A achou + corrigiu 2 bugs (sentinela one-past-end self-loop;
OperandKindderrubado no caminho de save do editor), agora travados pelo gate. Docs:docs/reverse/FFX_AI_JUMPTABLE_GROW_PROVEN_2026-06-05.md+docs/ai/FFX_AI_ASSEMBLER_PRODUCTIZED_2026-06-05.md. - ⚠️ Estrutura provada OFFLINE; comportamento in-game (RT2) pendente da OK do Halyson (probe). Templates "heal ally < 25% HP" e "enrage on turn N" NOT shipados (HP-field / âncora turn-counter não byte-confirmed).
SUCESSOR_FFX_HD_MODELOS_MASTER_2026-06-05.mdfechados para sum/npc. - Texturas (manifest-driven):
extract-texture-batchemRuntimeTools/PhyreModelExportLabganhou--from-manifest, que lê o<id>.ahwin32g_fileNames[](manifest de ativos autoritativo) e extrai a textura EXACT que o jogo carrega. 305 PNGs (pc/npc/sum), mapa de proveniênciatexture-provenance-map.json, 0 mismatch silencioso. RE: oahwin32é um header C legível — resolve cross-refs (c906←c106,c908←c108,c806←c805) AND multi-texture (c101+c101_01,n238+n238_hair,n356←n238_hair) sem IDA. Achado bônus: a chave NPC rig-inheritance =0x6NNNno.chr(mapa nXXX→kNNN, 222/222 válidos). Docdocs/reverse/FFX_AHWIN32_ASSET_MANIFEST_2026-06-05.md. - Bake (mesh+texture+anim): driver
work/_scratch_mgrp/bake_cast.pyviaphyre_chr_gate. Estático 253/253 (elenco inteiro texturizado, limpo). Animado: sum motion próprio, npc herdaskl/<base>. - QA visual (workflow, 21 agentes de visão): 248 animados triados via F3D — 157 limpos / 58 torção / 33 explodidos. O picker de bind (rest/A1) nos 33 não corrigiu.
- 🔧 Blender CORRECTION (2026-06-06): F3D estava LYING na animação skinned. Diagnóstico Blender (mesh
EXPLODE_RATIO≈1.0, sem crescimento) + render Eevee verdadeiro provou que os "explodidos" têm um corpo intacto, só um membro/acessório esticado. Re-QA (8 agentes sobre renders Blender) corrige para 175 limpos (71%) / 59 torção (24%) / 14 explodidos (6%) — 20 modelos resgatados, o bake offline sempre foi ~94% utilizável. Os 14 genuínos = 11 Aeons + 3 npc (rig non-humanoid; precisam de mocap/parent-map RE). Regra atualizada: a tela BLENDER decide, F3D mente. Pipelinework/_scratch_mgrp/blender_{diagnose,render_anim,batch_render}.py. - 🎯 RETARGET SOLVED via
--retarget-delta(2026-06-06): 175→215 limpos (87%). Nova flagphyre_chr_gateque aplica a motion herdada como delta do frame0 sobre o REST do npc (M=restLocal·inv(m0)·mf), preservando as proporções do npc em vez de impor as da base. IDA RE provou que o remap.chr@0x30já estava aplicado — a causa era o retarget rest-pose, não o remap (docFFX_INHERITED_MOTION_REMAP_RUNTIME_2026-06-06.md). Piloto+batch de 73 fudidos + Blender re-QA + per-model keep-best: +40 limpos, 44 resgatados, regressão ZERO (1 mantido porque regrediria). NPC animado = 200/222 limpos (90%), 0 explodidos; 8 Aeons ainda explodidos (mesh imune → mocap). Resolve o MASTER §2.4 "A1-universal" sem A1's risk. - 🐉 WHOLE CAST fechado offline (2026-06-06): 498/643 limpos (77%), 90% utilizável. Estendeu truthful-Blender-QA + retarget-delta + keep-best para o resto: obj/wep/pc (46 limpos/55, party limpo) AND os 340 MONSTERS. O antigo QA de monstro (bbox) alegava "0 explosões" = uma mentira; o Blender QA verdadeiro (29 agentes) achou 127 fudidos reais; retarget-delta nos 66 herdados → 36 promovidos, monstros 206→237 limpos. Total animado (643): 498 limpos / 86 torção / 51 explodidos / 8 em branco. Residual (9%) = mesh divergente / bind degenerado → mocap/mesh-RE, não retarget.
- obj/wep/pc (2026-06-06): mesmo pipeline estendido — estático obj 110/110 + wep 79/79 + pc 34/49 (15 falhas de pc = slots dummy
c8xxsem PS2.chr). Elenco HD estático inteiro = 476 modelos. obj/wep principalmente rígidos (anim esparsa 25/7); spot-check de tela: f001/w001/c004=Auron limpos. - Galeria
work/cast_hd_gallery.html(model-viewer, toggle static/anim, filtro sum/npc/obj/wep/pc). Tudo emwork/(gitignored): só os COMMANDS são código. Sem bump de csproj (lab/RE em RuntimeTools).FFX_TOOLBOX_DISCOVERY_PLAYBOOK_2026-06-05.md): uma varredura online + vetting de licença do tooling externo FFX HD/PS2 (VBF, Phyre, kernel.bin, ATEL, FMOD, TM2, FMV) e editor NuGets. Achados-chave vetados: External File Loader (ffgriever, BSD-2) loose-file sem repack, Kaitai Struct (runtime C# MIT) para gerar readers C#+JS, fahrenheit (MIT, C#) framework de mod hook+DLL, e a confirmação de que o FFXDataParser tem NO LICENSE (só estudo). A colunatested?ainda está❌— o teste de oráculo contra o corpus local está pendente, plano incluído no próprio doc. Doc-only: sem bump de csproj (regra lab/RE doc-only). 58dossiês empacotados;- um manifest por dossiê;
- uma cópia espelhada Git-safe sob
docs/history/DOSSIÊ FFX 01-06-2026/; - um relatório de exclusão para o único binário externo gigante bloqueado pelos limites de tamanho GitHub.
- bases de conhecimento workshop-range separadas;
- um atlas master agregado;
- a raiz
KNOWLEDGE_BASE.mdcomo entrypoint único; - um plano oficial de merge;
- um anexo
Pt6/Pt9dependent-workshops; - linhas formais de família técnica para o projeto.
merge in docsExtras nowExtras laterfrozen researchhistorical cleanupps3dataffx_ps2- closeout executivo
- compêndio child-workshop
- atlas de runtime/AI
- bootstrap do sucessor
- quadro curto de maturidade
Extras nowvereditoExtras laterveredito- fronteiras de pesquisa congeladas
- papel de produto derivado
Pt67do produto ps3datavsffx_ps2divisão- regras de proveniência
- facetas de citação obrigatória ### Adicionado
important.bina_ability.binReadNo-Edit Byte IdentityReread- contratos aditivos de token de texto em
FFXProjectEditor/FfxLib/Text/* - uma utilidade pura de validação / decisão round-trip
TextLabTools/TextContractHarnesscomo o primeiro consumidor de smoke production-sidedocs/history/BATTLE_AI_FRONTIER_2026-05-31.mddocs/history/MODELVIEWER_BINDING_FRONTIER_2026-05-31.mddocs/history/PT23_TO_PT34_KNOWLEDGE_BASE.mddocs/history/PT23_TO_PT34_CHANGELOGS.mddocs/history/PT23_TO_PT34_BRANCH_MAP.mddocs/history/PT23_TO_PT45_CODE_KNOWLEDGE_BASE.mddocs/history/PT23_TO_PT45_CHANGELOGS.mddocs/history/PT23_TO_PT45_BRANCH_MAP.mdKNOWLEDGE_BASE.mddocs/history/PT2_TO_PT11_KNOWLEDGE_BASE.mddocs/history/PT12_TO_PT22_KNOWLEDGE_BASE.mddocs/history/PT23_TO_PT45_KNOWLEDGE_BASE.mddocs/history/PT2_TO_PT45_MASTER_KNOWLEDGE_BASE.mddocs/history/PT6_PT9_DEPENDENT_WORKSHOPS_ANNEX.mddocs/history/NON_FFX_EDITOR_THREADS_ANNEX.mddocs/history/PT_FAMILY_LINES_ANNEX.mddocs/history/OFFICIAL_MERGE_PLAN_2026-05-31.mddocs/history/PS3DATA_FULL_TREE_RESEARCH_PLAN.mddocs/history/PS2_FULL_TREE_RESEARCH_PLAN.mddocs/history/PT50_TO_PT58_ABSORPTION_PLAN.mddocs/history/PT52_TO_PT58_CLOSEOUT_REPORT_2026-05-31.mddocs/history/PT50_PT51_HISTORICAL_CLEANUP_2026-05-31.mddocs/history/PT6_TEMPORARY_CLOSEOUT_2026-05-31.mddocs/history/PT6_CHILD_WORKSHOPS_COMPENDIUM.mddocs/history/PT6_RUNTIME_AI_DISCOVERY_ATLAS.mddocs/history/PT6_SUCCESSOR_BOOTSTRAP.mdhistory/pt23-battleai-structurehistory/pt24-exactlaunch-seamhistory/pt25-selectorbank-materializationhistory/pt26-battlestate-diffhistory/pt27-routereplay-truthhistory/pt28-battlecapacity-prephistory/pt29-keyitem-crashfixhistory/pt30-autoability-crashfixhistory/pt31-geometryviewport-blockhistory/pt32-chrcarrier-decodehistory/pt33-aislice-payloadhistory/pt34-legacybridge-narrowing### AlteradoCurrentWorkspaceOverviewCurrentMonsterEditorCurrentItemsCurrentBattleExplorerCurrentLiveBattleLabCurrentStringExplorerEncodeSafeDecodeOnlyRawPreserveUnknownRiskReuseOriginalBytesReencodeAllowedBlocked- wrappers operacionais para a
Extras / ps3datalinha - úteis
Pt6 / Pt23AI micro-workshops com conhecimento preservado e status archive-safe merge nowmerge laterExtras/read-onlyknowledge onlyPt56,Pt52,Pt54,Pt58= atacar agora no softwarePt57e partes dePt53/Pt55= atacar depois, ainda read-onlyPt53,Pt55,Pt57= pesquisa agressiva sem overclaimPt50,Pt51= cleanup histórico antes de contarem como fontes limpasMagicPackageViewerBatEffPackageViewerMagicEffectCrosswalkExplorernever blind merge### Validado- purpose
- utility
- probabilidade de merge
- minichangelog per-workshop
binding truthlinguagem- narrowing forte para
owner/target/parentage/commit - base de guardrail para
Pt6ePt23 formation 0..7enemy actor rows 0..10rawMonsterId -> corpuscomposition truthvsactor-surface truthPt46 / AIBlobParityGrammarLabPt47 / AIRuntimeDispatchLabPt48 / SafeAIMicroProbeLabcomo parte do legado runtime/AI, mesmo sem claims de writer ou patcher.- base old-wave
Pt2..Pt11 - base middle-wave
Pt12..Pt22 - base heavy-wave
Pt23..Pt45 - um único atlas agregado com memória/runtime/binding/guardrails
- satélites de
Pt6 - satélites de
Pt9 - exceções production-side
Pt29/30 Model Viewer / BindingBattle / AI / Runtime TruthText SafetyKernel / ShopTooling / Safety / ReleaseProduction Crashfixes### Notas ### Planejado ### BacklogTextSourceCapabilityIndex*StringExplorerUI wiring0x10 + 0x120x13### Bloqueado ## [v2.13.0] - 2026-06-05 ### Adicionado ### Notas ## [v2.12.0] - 2026-06-05 ### AdicionadoFfxLib/BattleMap/BattleArenaPositionWriter.csre-stamps o X/Y/Z de cada actor no array de âncoras do chunk3 IN PLACE (on-field monstros = ponteiro+0x20; também party/aeon/staging porrole), value-only: nunca toca no header/ponteiros/contagem/outros chunks, preserva W verbatim. Como a transform batalha→cena é IDENTITY (IDA-proven, v2.10.0.1), uma coord escolhida no espaço de cena é escrita verbatim. Mesmo padrão slot-safe queFormationSlotWriter(guard + backup-onceWriteLooseFile). ### Validado RT0 (no-edit == byte-identical) 862/862, POSITION-ONLY (diff confinado ao array+0x20) 862/862, RE-READ 862/862, + SAVE LIFECYCLE (no-edit/edit/restore numa cópia temp) PASS. BiancaCatalogLab + AuroraChamberLab + BattleArenaPositionLab (antes deixados de fora). CI completo PASS (7/7 gates): ReverseHarness, AiScriptLab, FormationSlotLab, AbilityCommandLab + os 3 novos. ### Adiado offline; a tela in-game é o árbitro. Add/remove de slot de monstro (variar a contagem) = estrutural (Rebuild), próximo. ## [v2.11.1] - 2026-06-05 ### Adicionado caixa que filtra as linhas de diálogo pelo conteúdo do texto, e (2) um filtro de idioma (English/Japanese checkboxes, English por default) — antes JP e EN eram despejados na lista SAME (Japanese primeiro = uma parede de japonês). RefatorouEventExplorer_DataModel(allTextRows+ApplyTextFilter, English-first) + axaml (busca TextBox + JP/US CheckBoxes). NOT toca o writer (Tier 1 fica--event-rt0397/397 + edit 12/12). ### Notas injeção de tradução, fora do escopo do writer). A busca de palavra é dentro do evento selecionado. ## [v2.10.0.1] - 2026-06-05 ### Provado (RE / IDA, offline) copia as coords do chunk3 (battle-local) VERBATIM para o mundo node — no flip-Z, scale, ou do actor rotação; só Y ganha um per-actor model-height (actor+0x534). Como a cena.dae.phyre== o vertex frame Phyre cru 1:1, **. Cadeia provada: vertex frame 1:1, P_scene(X,Y,Z) = P_battle(X,Y,Z) (s=1, R=I, T=0). Proven chain:FFX_Battle_AreaChunk_GetSetPosition(0x7AC000; base do chunk30x112A9B0; copia 4 floats verbatim; pos do actor no mundo @+0x3B0) →FFX_Battle_ResolveActorPlacement(0x7A9AE0) →FFX_Battle_GetActorByIndex(0x794030, stride0xF90== inimigo RT2). O palpite flip-Z era um artefato de incluir linhas de staging off-field (party-back Z≈-168). Doc:docs/reverse/FFX_AURORA_BATTLE_TO_SCENE_TRANSFORM_IDA_PROVEN_2026-06-05.md(+ rename-queue para o.i64real). ### Alterado (Aurora Chamber — honestidade) plota âncoras diretamente em coords de cena (o default já era identidade) e o toggle flip-Z vira DISPROVEN/comparação;aurora-actors.jsoncoordSpace=scene_world_identity_ida_proven. ### Adiado≈ chunk3(residual ~0) + medir o termo exato Y. Probe AUTHORIZED do Halyson; pendente só o jogo aberto (READ via a probe existente, sem código novo). SPIRA FORGE permanece pausado. ## [v2.10.0] - 2026-06-05 ### Adicionado não é mais read-only. Editar diálogo de cutscene/evento agora é uma BUTTON.FfxLib/Event/Event_File.Write.cs(novo): byte-faithful EV01 repack de container — cada chunk re-aligned para0x40, a tabela de offsets absolutos + terminador EOF recomputados (magic + sentinela0xFFFFFFFFpreservados). No-edit = VERBATIM garantido; texto editado reutilizaTextTable_File.Write(chunks JP=1/EN=4); script ATEL (0), Unknown 2 e FTCX (3) preservados byte-for-byte. Hook Tier 2ScriptChunkOverride(re-stitch de um chunk-0 editado).Event_File.cs: captura o header cru + tabelas de texto; tolera entradas null-pointer field-string (8 arquivos) preservando o chunk verbatim (fronteira text-editable documentada).TextTable_File.Writeoverload aditivo (includeTrailingPadding): emite tabela+pool sem padding interno (o container re-pads para 0x40). NOT quebra--textstr-rt0(default = comportamento legado).Modules/EventExplorervirou um editor EDITOR de diálogo: strings JP/EN editáveis (TwoWay TextBox) + um botão "Save dialogue" que re-packs e escreve o.ebp. (FfxLib/Ai/AiScript_File.cs, usado read-only como doador) lê/edita o script de evento (mesma família AiFile).- patch de operando Byte-local PATCH PROVEN (12/12): editar um operando chunk-0 muda só esses bytes; o container re-stitches identicamente em outro lugar; o re-read carrega o novo operando.
- GROW (AppendCode) é uma fronteira documentada: o doador
AppendCode(feito para batalha, descritores em DATA) não reloca os descritores header-resident que os scripts de evento usam ([0x38..scriptStart)) — precisa de relocação event-aware (coordenar com a lane do Assembler AI). ### Validado round-trip 12/12** (trocar uma string → repack → re-read: string editada bate, chunks intocados verbatim, idempotente). 397/397; patch de operando byte-local 12/12. O editor compila 0 erros. (0 quebras), EOF==filesize, sentinela0xFFFFFFFF. Docs emdocs/reverse/FFX_EVENT_*_2026-06-05.md. ### Honestidade / Adiado text-editable ainda). Tier 2 = patch provado; append/grow + autoria estrutural = Tier 3, documentado não fechado. Verificação preferida offline byte-RT0; in-game RT2 do diálogo editado ainda é recomendada. ## [v2.9.0] - 2026-06-05 ### Adicionado ao MapViewer e eleva as coordenadas de actor para fora do chunk3. Dedicado à Aurora & Bianca. 💛 - Scene Picker consome
BattleMapCatalog_File/BattlefieldSceneResolver(read-only) — lista/seleciona cenas por área e map-key. - Render dirige
PhyreMapExportLab(export on-demand glTF da cena btlmap) e abreFFXMapViewerWebvia a?catalog=/?map=/?actors=deep-link — um per-scene mini-catalog, nunca tocando ocatalog.jsoncompartilhado nem reescrevendoapp.js. - Coordinates via o novo reader
FfxLib/BattleMap/BattleArenaAnchors_File.cs(puro/Avalonia-free): decodifica o chunk3 (area-record de 96B, ponteiros+0x10..+0x2C, monstros vivos+0x20, elementos XYZW Y-up de 16B), lista as âncoras battle-local e exporta JSON para Encounter Authoring. gizmos de âncora de?actors=+ um modo "pick" (raycast no plano y=0 → coords de mundo). Non-intrusive (hookswindow.ffxMapViewerDebug; no-ops sem?actors/pick; nunca editaapp.js). ### Validado klyt00_00/sins02_00/mihn00_00 == coords doc-proven); corpus 862/862 limpo (0 NaN/Inf, W==0 nos monstros vivos); determinístico; pipeline BIANCA→cena→batalha→âncoras 52/52 cenas mapeadas carregam âncoras. 10.804 triângulos,gatePass: true). O editor compila com 0 erros (verificado numa worktree HEAD isolada). ### Honestidade / Adiado UNCALIBRATED** (P_scene = R·s·P_battle + T; flip-Z/yaw-180 não resolvidos) — âncoras são battle-local cruas, não engine-exact. Calibração de probe = Wave 3 (precisa da OK do Halyson). SPIRA FORGE fica PAUSED; a Aurora só CONSUMES MapViewer + BIANCA (read-only/aditivo), nunca inicia o hub. ## [v2.8.0] - 2026-06-05 ### Adicionado (cataloga as 25 áreas / 56 cenas de HDps3data/btlmap—<area>NN_<variant>commdl/d3d11/<leaf>.dae.phyre) +FfxLib/BattleMap/BattlefieldSceneResolver.cs. Puro/Avalonia-free, compila dentro o editor (0 erros). "azit03"), NOT o u16battlefield(que é um id global de arena, compartilhado entre mapas —bf=1061abrange nagi/test/tori/zzzz). Doc:docs/reverse/FFX_BATTLEFIELD_SCENE_BRIDGE_2026-06-05.md. ponteiro+0x20(float32 X,Y,Z,W; Y-up; W=0; stride de 16 bytes; slot de formação ↔ entrada). Party+0x10, aeon+0x18, câmera+0x2C. Doc:docs/reverse/FFX_BATTLE_FORMATION_POSITION_CHUNK3_DECODED_2026-06-05.md. (-- export --ps3-root <ps3data> --area btlmap/azit/azit03_a). Plano Actor-overlay + calibração de coordenadas do probe (DESIGN):docs/ai/FFX_AURORA_COORDINATE_SYSTEM_AND_CALIBRATION_2026-06-05.md(probe só com a OK do Halyson). ### Validado determinístico; 56/56 cenas com exatamente um modelo primário; ponte com 0 misses inexplicados (22 mapas HD-orphan = PS2-only de corte/EXPECTED; 4 cenas órfãs bika04/grid00/nagi03/sfia00 = EXPECTED de boss/story). ### Adiado a probe DINPUT8 precisa da OK do Halyson e SPIRA FORGE é PAUSED. ## [v2.7.1] - 2026-06-05 ### Adicionado / Validado WeaponNameTable, MacroDictionary, NameDescriptionTextTable, NameDescriptionTextPrefixTable, BtlTextTable, SphereGrid, ShopGearCatalog, BukiGetTreasureCatalog, AlBhedDictionary, PointerScriptTable, BattleTextTable, ShopTable. Padrão Preserve-only (WriteIdentitypara os lossy-rebuild). Novo gate-sweepTools/Wave1Rt0.cs. ## [v2.7.0] - 2026-06-05 ### Adicionado troca a partição AiFile por uma de comprimento DIFFERENT, faz 16-pad no AiFile, desloca seções posteriores e reescreve os ponteiros de seção do header (m###.bin), escrevendo o AiFile verbatim (sem clobber codeLength). O Assembler AI UI agora SAVES grow/shrink (era só length-preserving). Causa do clobber documentada + corrigida por design (Opção B: superfície mínima, NOT tocaMonster_File.Write→--monster-rt0fica 361/361). VM a partir de contagens de worker + datalen per-worker (arredondado para 16) (partição NOT/DeclaredLength/codeLength) e confia nos ponteiros in-file → a relocação de grow é honrada e o pad final é seguro. (regra de ouro: rename-queue.) ### Validado (insert → splice grow-aware → re-read limpo + cauda/header preservados verbatim + 16-alinhado + idempotente), SHRINK 346/346 (remover uma instr non-targeted → delta negativo → re-read limpo + cauda preservada).--monster-rt0361/361 (sem regressão). Alinhamento do corpus: 16/32/64/128/256, 0 pad final. (free-edit)"** renderizado com a lista de instruções editável (opcode/operando/remove) + Insert/Save Structural + preview. Screenshotwork/spira_forge_qa/monster_ai_assembler_v01.png. ### Adiado probe DINPUT8 (compartilhada) — sob a OK explícita do Halyson. Offline + RE provam o byte/game-safety; a tela in-game é o árbitro final. ## [v2.6.0] - 2026-06-05 ### Adicionado (insert / remove / modify) em cima do editor de operando byte-local. O AiFile reconstruído vem deAiScript_File.Rebuild(RT0-proven: reloca entrypoints + jump tables via um mapa old→new). Lista editável (opcode/operando hex + checkbox de remove), insert-after-selected, preview de delta. Save só é habilitado para edições length-preserving (codeLength inalterado) → splice byte-safe viaSpliceAiFileIntoMonster. GROW/SHRINK é LAB (mensagem honesta): o save loose-file precisa de relayout de monstro header-aware + padding de alinhamento + prova in-game. --ctbbase-rt0→CtbBase_File(ctb_base.bin), preserve-only.--mixtable-rt0→MixTable_File(prepare.bin), preserve-only.--aiasm-rt0→ prova o save estrutural do Assembler AI (Rebuild no-edit + relayout + splice byte-identical) e mede o alinhamento AiFile→WorkerFile do corpus. ### Validado edição length-preserving é byte-safe. Grow=LAB (causa: o header 0x34 deMonster_FilesobrepõeAiFile[0..4)=codeLength + uma mudança de comprimento quebra o alinhamento WorkerFile; o corpus é 16/32/64/128/256-alinhado, 0 pad final). ### Bloqueado / LAB ## [v2.5.0] - 2026-06-05 ### Adicionado locais (Open Spector,Capture Next Frame,Export Last Capture) mais um primeiro painelMaterial Debugcom inventário ao vivo dos materiais glTF carregados, um seletor, chips de fato e cards de textura per-slot (map,normalMap,aoMap,envMap, etc.). registra o que aterrissou, o que foi validado e o que permanece explicitamente fora da prova. ### Validado controles apareceram, e o painelMaterial Debugpopulou a partir do glTF carregado. confiável, o viewer degrada paraFrame preview unavailable/Texture preview unavailable on this source surfaceem vez de fingir mostrar evidência visual válida. ## [v2.4.4] - 2026-06-05 ### Adicionado batalhas selecionáveis do campo; escolher uma publica paraFieldContext.SelectedBattleIde o Formation Editor pula direto para aquela batalha (carrega a formação dela). Realiza o "click a zone, swap the formation" via a spine compartilhada, sem plumbing de shell.FieldContextganhouSelectedBattleId/SelectBattle. ### Validado 37 BattleIds sem pasta + 37 pastas nunca referenciadas (batalhas especiais/evento) — o handoff filtra para as ones that exist. Editor pulou para a batalha carregada). Screenshotwork/spira_forge_qa/handoff_encounter_to_formation_v04.png. ## [v2.4.3.1] - 2026-06-05 ### Reverso / Prova do handoff (CONTINUE_AQUI_PERNAS_HD): o mapa "52m_skeletonMatrices→ 79 joints" vive no arquivo Phyre, não em IDA.- A paleta de skin é
PMatrix4[0..51](linkada do campo 12 dePMesh); ela iguala om_skeletonMatricesvivo byte-for-byte (maxDist=0.00000). - O slot→node map é the
intat offset 12 of eachPSkeletonJointBounds[j](52 slots → 52 nodes, bijection). - Compor
m_defaultPoseatravés dem_matrixParentsreproduz o inverse-bind autorado EXACTLY: os nós0/52divergem. Então--hd-defpose+--hd-parentsjá é o bind real do jogo. - Causa raiz da espiral histórica: um bake sem
--hd-defpose/--hd-parentscai parainvBind = PMatrix4[52+b](matriz LOCAL crua) → o mesh explode. A receita defpose+parents é o fix e já é o default da galeria. - Novas probes read-only:
work/_scratch_mgrp/phyre_palette_probe(localiza a paleta, prova que o bind é exato, emitenode_to_slot.json) ephyre_legs_probe(matcher; ilustra a armadilha coincident-translation). ### Validado c007 (Rikku) — em rest forçado, batalha (id5_c4318 t0.0–0.9), 4 ângulos de panturrilha num crouch profundo, e multi-clip (c4333/c4365/c4886). Numericamente: matrizes leg-joint local/world são rigids perfeitas (scale=1, det=+1, ortho 0.0000). Sem IDA. Prova completa emdocs/reverse/FFX_HD_SKIN_PALETTE_DECODED_LEGS_NOT_BIND_2026-06-05.md. ## [v2.4.3] - 2026-06-05 ### Adicionado existiam mas nunca tinham sido byte-gated, fechando mais 4 famílias editable-base concretas: --keyitem-rt0(Tools/KeyItemRt0) →KeyItem_File(important.bin), writer preserve-only (clona os bytes originais + só re-stampsPrimerByte10/OrderingByte13).--treasure-rt0(Tools/TreasureRt0) →Treasure_File(takara.bin), full-decode round-trip (4 bytes/entrada).--customization-rt0(Tools/CustomizationRt0) → gearCustomization_Filekaizou.bin + aeon sum_grow.bin (preserva o prefixo/cauda do header + re-emits as entradas decodificadas).--autoability-rt0(Tools/AutoAbilityRt0) →AutoAbility_File.WriteAbilities(a_ability.bin, seção DATA ), writer preserve-only. (Lêarms_rate.binsó para satisfazer o contrato de leitura; NOT escreve arms_rate e NOT cobre repackWriteAbilitiesAndText/text.) ### Validado takara.bin (503 entradas, 2012 B), kaizou.bin (125) + sum_grow.bin (77), a_ability.bin (134 entradas, 19590 B). save No-edit = byte-identical; edit = byte-local (mesmo padrão preserve-only que fechou Monster/Encounter). Levanta parcialmente o caveat histórico "important.bin/a_ability.bin bloqueados para claims de writer mutation-safe": a edição de campo (data-section) agora está provada; repack text-pool permanece não reclamado (mesmo risco de drift monmagic-style risco — fora do escopo deste gate). ## [v2.4.2] - 2026-06-05 ### Adicionado inline (e.g.[m003 - Murussu, m003 - Murussu, m009 - Dingo]). Lazy-loaded + cacheado + com cap (≤90 batalhas visíveis; com a lista cheia ele pede para filtrar por área). Read-only; traz o "zonas pintadas com os monstros que spawnam lá" para o editor (fusão encontro↔formação tornada visível). ## [v2.4.1] - 2026-06-05 ### Adicionado de produção** (guard slot-only + backup-once.spiraforge.bak+ write). Agora usado pelo Formation Editor (PersistSnapshot) AND testado pelo gate headless — mesmo código no editor e no teste, sem duplicação. ### Validado workspace/asset, read-only respeitado): (a) no-edit Save = disco byte-identical + backup==original; (b) edit Save = slot-only no disco + reread bate + backup preservado; (c) restore do backup = byte-identical. PASS. Fecha o gap de honestidade v0.2 (save in-app provado no disco, reversível). Corpus ainda 858/858; 4 gatesoffline_ciPASS. ## [v2.4.0] - 2026-06-05 ### Adicionado Entries/Groups/Formations (contagens VARIABLE + tabelas de create), atribui dataOffsets frescos, reconstrói o chunk0 + a tabela de chunks, preserva block-sharing + padding. Gate--encounter-rebuild-rt0. A base estrutural para "CREATE ENCOUNTERS". ### Validado (4096/4096)** + grow-test (add 1 formação, fim 0x1000→0x1002, 2 chunks intactos) válido. corrigiu o drift de padding final. Nota honesta: os registros StringExplorerhelp_txt.binsão DEAD nesta extração (arquivo ausente) — o writer é provado num field-string real (spcodedic.bin). ## [v2.3.2] - 2026-06-05 ### Adicionado (Ability_Command.ReadList→WriteList), que oKernelCommandsjá usa para Save mas nunca foi byte-gated. Referencia o projeto do editor (árvore de deps profunda), chama só métodos FfxLib estáticos. Ligado emoffline_ci.ps1. ### Validado (1 byte) 4/4. PASS. Esta é a fundação provada para a feature sonho "Black magic nova" (vive em command.bin). ### Bloqueado monmagic original compartilha/deduplica texto enquantoWriteListre-appends (FfxEncoding.WriteBytesIntoTextFilesó anexa; command/item são pure-append → eles batem). Risco: o Save KernelCommands de MonMagic infla o arquivo — gate até um writer dedup-aware passar. Alvo de auditoria + fix:docs/reverse/FFX_ABILITY_WRITER_AUDIT_2026-06-05.md. ## [v2.3.1] - 2026-06-04 ### Adicionado além de EOF (kino03_*,mihn05_*,cdsp00_02): trata o chunk past-EOF (e além) como ausente em vez de rejeitar o arquivo inteiro; chunks anteriores (incl. formação @2) permanecem válidos. Essas batalhas agora são editáveis no Formation Editor. ### Validado re-read 858/858 PASS. Os 843 anteriores inalterados. ## [v2.3.0] - 2026-06-04 ### Adicionado monstros (16 bytes) de uma formação btl_* viaBattle_File.WriteWithFormationSlots, byte-safe slot-only. Consome a spineFieldContext(pre-filters batalhas pela área de campo selecionada do Hub). Monster picker (Monster_Dictionary+ Empty, preserva o nibble alto cru). Save escreve um loose-file de workspace com backup.spiraforge.bak+ guardAssertSlotOnlyDiff, viaByteSnapshotEditorSession(Undo/Discard). Offline, sem probe.offline_ci.ps1(param-BtlRoot). Membros read-only aditivos emBattle_File(FormationChunkOffset/FormationSlotsOffset/FormationSlotsLength). ### Validado (15 btl_* não parseáveis pelo reader na época — corrigido em v2.3.1.) ## [v2.2.0] - 2026-06-04 ### Adicionado chaveada porfield_token. Field picker alimentado pela ponte CSV (ps3data-map-btlmap-fieldid-bridge.csv, 357 campos, structural-candidate). Selecionar um campo publica paraFieldContext(singleton observável) e 2 consumidores reagem read-only: mapa deep-link (?map=map/<area>/<field>para o FFXMapViewerWeb) + encounter peek (lêbtl.binviaEncounterTable_File, join candidato área↔mapa). CSV copiado para o output via csproj<Content>. Offline; o picker roda sem projeto. Sem writer, sem probe. ### Validado Screenshotwork/spira_forge_qa/field_hub_v01.png. ## [v2.1.1] - 2026-06-04 ### Validado gate--player-rt0:ply_save.bin(3098) +ply_rom.bin(2161) -> no-edit RT0 byte-identical. (Writers já existiam slot-only; agora gated.) ## [v2.1.0] - 2026-06-04 ### Adicionadobtl.binbyte-for-byte e toca re-stamps só os campos editáveis (tabelaId/Unknown0C, grupoBattlefield/Danger/TotalWeight, formaçãoId/Weight). Gate--encounter-rt0no editor. ### Validado ## [v2.0.0] - 2026-06-04 > NEW ERA — MAJOR. O editor cruzou de "edição de arquivo offline" para PROVEN LIVE RUNTIME EDITING: > editar o bytecode AI de um monstro em RAM e ver a mudança de comportamento na tela, sem crash, reversível — > o objetivo supremo #1 do projeto, realizado. MAJOR = uma nova classe de capacidade (não é quebra de contrato/save/build > — só adicionamos e endurecemos).-betaporque RT2/God-Mode ainda não estão productizados em UI gated. > Marco da onda Claude Code / VSCode + a união com a 2ª conta Codex. ### Destaques muda na tela — Flame Flan Firaga→Thundaga, sem crash, reversível. Cadeia:enemy-list(0xD34460) ->MemoryChr.Ptr_script_chunks(+0xF78) -> AiFile ao vivo ===m0NN.binbyte-identical de disco. habilidade global — o monstro não precisa "possuir" ela. Prova: um Skoll cuspiu o Hellfire do Ifrit na tela. revive de dados (flags de morte + KO), tudo viaMemoryChr+ probe. ### Adicionado offset** (+delta) -> um AiFile maior válido (o caminho para "ADD AI", além do orçamento byte-local). labels de jump + tipo de worker inferido), edição de operando + Save loose-file.FFX_MUSIC_SYSTEM_AND_MOD_IDEA(Music Remapper),FFX_AI_BYTECODE_OPCODE_TABLE_PROVEN,CODEX_MAPVIEWER_WATCH_JARVIS,FFX_MAP_DEVELOPMENT_TOOL_MASTERPLAN(Spira Forge). ### Alterado / Validado StatSheet/Loot + preservar Signature/Padding do header (o Padding sobrepunhaAiFile[0..3]). ### Bloqueado / Adiado (honesto) (rebuild game-closed). Player encontrado:FFX_FmodMusic_PlayTrackByIndex(181 faixas); o PS2 SPU FIFO é stub em HD. ### Absorvido dos Labs / Multi-agent união com a 2ª conta Codex (lane MapViewer / model-texture): o exporter agora expõe sinais material-role (TextureSampler1/normalMap/reflexão/água/PhyreWaterShader), comparação external-viewer (glTF-Sample-Viewer como oráculo; gap provado exporter-side, não do shell), e o kickoff do masterplan Spira Forge. Coordenação Multi-agent logada emdocs/ai/CODEX_MAPVIEWER_WATCH_JARVIS.md. ## [v1.7.0] - 2026-06-04 ### AdicionadoAppendCode: anexa instruções no fim + reloca a seção de dados.Rebuild: insert/remove/modify uma instrução ANYWHERE + AUTOMATICALLY reloca todos jumps + entrypoints (mapa de linker old→new) + a seção de dados. Branch órfã (instr removida) -> erro honesto. ### Validado workers resolvem, entrypoint post-insertion relocado0x2D1→0x2D4sozinho; grow-test (AppendCode) RT0. ## [v1.6.0] - 2026-06-04 ### Validado StatSheet/Loot + preservarSignature/Paddingdo header (o Padding sobrepunhaAiFile[0..3]). ## [v1.5.0] - 2026-06-04 ### Validado / Bloqueado ao vivo BLOCKED** (FMOD API__thiscall, probe cdecl-only). DocFFX_MUSIC_SYSTEM_AND_MOD_IDEA(Music Remapper). ## [v1.4.0] - 2026-06-04 ### Validado (ao vivo) — o monstro não precisa "possuir" ela. Prova: um Skoll cuspiu o Hellfire do Ifrit na tela. ## [v1.3.1] - 2026-06-04 ### Corrigido / Validado (ao vivo) ). Auto-scan (statusScan) alternado ao vivo. ## [v1.3.0] - 2026-06-04 ### Validado (ao vivo) (POINTER_BATTLE_ENEMY_LIST 0xD34460, stride0xF90) + probe. ## [v1.2.0] - 2026-06-04 ### Adicionado labels de jump) + edição de operando + Save loose-file. ## [v1.1.0] - 2026-06-04 ### Validado (🏆 TÍTULO — objetivo supremo #1) o comportamento muda na tela (Flame Flan Firaga→Thundaga), sem crash, reversível. Cadeia:enemy-list 0xD34460->MemoryChr.Ptr_script_chunks +0xF78-> live AiFile === diskm0NN.binbyte-identical. Doc:docs/reverse/FFX_AI_RT2_LIVE_EDIT_PROVEN_2026-06-04.md. ## [v1.0.0] - 2026-06-01 Marco de maturidade para o editor como uma plataforma real de leitura, validação e knowledge-navigation, com superfície de produtoExtrassuficiente para justificar um1.0honesto mesmo com runtime, AI e bosses body-playback ainda em aberto. ### DestaquesPS2 KnowledgeTextures (TM2 + TXC/CLT/FMT/SPS2 support lane)BIN-FTC AtlasProject / PipelineMagic EffectsPresentation ContainersBattle Corpus Crosswalk### AdicionadoMagicPackageViewerBatEffPackageViewerMagicEffectCrosswalkExplorerFtcHeaderInspectorBinSidecarGraphSignature Groupno shellTxcCltPairExplorer- metadados
fmt/sps2frios ### Alterado ### Validado read-onlydo not promoteno runtime proofonde aplicávelpipeline/support onlyonde aplicável ### Notasmagic solvedAI solvedModelViewer playback solved- autorização ampla de writer ## [v0.11.0-beta.2] - 2026-06-01 Evolução real de produto para a linha
Extrasemmain. ### Destaques masterffx_ps2ps3dataPS2 KnowledgeTextures (TM2)BIN-FTC AtlasProject / Pipeline### AdicionadoExtrasSourceResolverExtrasEvidenceBadgeModelExtrasProvenanceModelExtrasReadonlyBoundaryModelExtrasFileOpenServiceCdIndexExplorerProjectDescriptorViewerAbmapSupportGraphdocs/history/PT52_BIN_FTC_FILE_MEANING_GUIDE_2026-06-01.mddocs/history/PT53_BATTLE_MAGIC_FILE_MEANING_GUIDE_2026-06-01.mddocs/history/PT54_PROJECT_ABMAP_FILE_MEANING_GUIDE_2026-06-01.mddocs/history/PT56_TEXTURE_PALETTE_FILE_MEANING_GUIDE_2026-06-01.mddocs/history/PT57_PRESENTATION_CONTAINER_FILE_MEANING_GUIDE_2026-06-01.mddocs/history/PT58_FFX_PS2_OWNERSHIP_AND_LINKAGE_GUIDE_2026-06-01.md### Alterado ### Validado- sem writer
- sem repack
- sem claims de decode final
- sem misturar pesquisa fria com prova de runtime ### Notas
kernel -> mag_* -> bat_eff## [v0.10.0-beta.1] - 2026-05-31 Main-branch beta de consolidação depois da primeira onda forte de absorção de workshop curada. ### Destaques ### AdicionadoShop ExplorerFfxLib/ShopAssets/Shop- um writer guardado para
item_shop.binearms_shop.bin NameDescriptionTextPrefixTable_Filereader + no-edit guardparaimportant.binreader + no-edit guardparaa_ability.bin### Alterado ### Validado ### Adiado ### Bloqueado ## [v0.9.0-beta.1] - 2026-05-31 Primeira versão que assume honestamente o tamanho real do editor e do ecossistema ao redor dele. ### Destaques da Main ### Superfície de Produção Presente na Main ### Absorvido dos WorkshopsTextLabTools;ProductionAuditTools;- conservative text/monster harness e release.
PlayerGrowthEditor;CtbBaseEditor;MixTableEditor;- a linha histórica que depois sustentou
KeyItemEditor. AutoAbilityEditor;- parsers conservadores de
AutoAbility_File.cseArms_Rate.cs. Shop Explorer;FfxLib/Shop;Assets/Shop;- writer guardado para
item_shop.binearms_shop.bin. ### Governança e Versionamento ### Validado ### Ainda Bloqueado ### Por Que Isto Ainda É Beta ## Reconstrução Semântica Histórica Observação editorial importante: ## [v0.8.0-beta.1] - reconstrução histórica (pre-Git oficial SemVer) Marco onde o ecossistema já opera como um editor modular grande com múltiplas frentes especializadas vivas ao mesmo tempo. ### Superfície Principal Nesta Etapa ### Pressão do Ecossistema ### Ainda Faltando ## [v0.7.0] - reconstrução histórica (pre-Git oficial SemVer) Marco onde a linha principal muda de “mais módulos” para “mais prova”. ### Adicionado ### Alterado ### Ainda Não Seguro ## [v0.6.0] - reconstrução histórica (pre-Git oficial SemVer) Marco onde a linha de kernel e o hardening conservador de sistemas secundários deixam de ser promessa e viram parte de um editor sério. ### Adicionado ### Alterado ### Ainda Faltando ## [v0.5.0] - reconstrução histórica (pre-Git oficial SemVer) Marco da onda forteKernelTablesLab. ### Adicionado ### Alterado ### Ainda Faltando ## [v0.4.0] - reconstrução histórica (pre-Git oficial SemVer) Marco onde o projeto aprende a dizer “sim” e “não” em texto, com critérios reais. ### Adicionado ### Alterado proven reader;conservative writer;blocked; ### Ainda Faltando ## [v0.3.0] - reconstrução histórica (pre-Git oficial SemVer) Marco onde o editor deixa de ser só um navegador de arquivos e começa a tocar superfícies de gameplay AI, runtime e high-value. ### Adicionado ### Alterado ### Ainda Faltando ## [v0.2.0] - reconstrução histórica (pre-Git oficial SemVer) Marco da expansão estrutural do editor para sistemas grandes e visíveis. ### Adicionado ### Alterado ### Ainda Faltando ## [v0.1.0] - reconstrução histórica (pre-Git oficial SemVer) Marco mínimo honesto em que já existia um editor real, muito acima de um protótipo descartável. ### Adicionado ### Alterado ### Ainda Faltando ## [baseline-2026-05-31] - 2026-05-31 Importação inicial honesta da produção para o Git. ### Adicionado ### Preservado ### Validado ### Notas ## Histórico de Mini-Versões dos Workshops Observação: ## [pt2-v0.3.0-superseded.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt3-v0.8.0-freeze.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt4-v0.5.0-hold.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt5-v0.9.0-final.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt6-v0.7.0-beta.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt7-v0.9.0-final.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt8-v0.7.0-freeze.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na MainShop Explorer;FfxLib/Shop;Assets/Shop;- guardrails documentados em
docs/history/PT8_SHOP_GUARDRAILS.md. ### Status Final ## [pt9-v0.6.0-alpha.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt10-v0.2.0-final.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt11-v0.3.0-blocked.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt12-v0.3.0-package.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt13-v0.3.0-package.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt14-v0.2.0-architecture.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt15-v0.2.0-architecture.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt16-v0.2.0-architecture.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt17-v0.3.0-guardrail.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt18-v0.3.0-governance.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt19-v0.3.0-surface.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final ## [pt20-v0.2.0-strategy.1] - 2026-05-31 ### Missão ### Evolução ### Resultado na Main ### Status Final