Atualização 2.65
10/06/2026
v2.65.0BETA
Seymour
Crescimento PC/de Jogador no Spira Data Atlas (read-only, `proved-candidate`, byte-grounded, independente de work/)
- Plug a fonte REAL de crescimento/stats PC no provider: novo
SpiraDataAtlasDetailKind.PlayerGrowthStat+ accessor value-guardedSpiraDataAtlasCatalog.TryGetPlayerGrowthStat(source, characterIndex, field, currentRawValue). Fonte =ply_save.bin(stats base/atuais) +ply_rom.bin(crescimento ROM: curva AP-requirementApReq A/B/C/Max+ coeficientes per-stat auto-growth*CoefA/B), as tabelas SAME que oPlayerGrowthEditoredita (parserPlayerKernel_File, RT0-proved por--player-rt0). Os 20 slots (0–6 PC, 7 convidado=Seymour, 8–17 Aeons, 18–19 não mapeados) vêm de uma tabela compilada byte-grounded (FfxLib/SpiraDataAtlas/PlayerGrowthData.cs, gerada portools/ffxdataparser_bridge/build_player_growth_index.ps1 -EmitCSharpdos arquivos.bin), então existem no build ANY WITHOUTwork/(diferente dePcAeonFineStat, que depende dework/pc_save_stats_catalog.csve é só um snapshot). Labels resolvem em runtime viaCharacter_Enum(fonte única de verdade). Honestidade (non-obvious): os coeficientes stat-growth são Aeon-only — slots PC/convidado carregam coeficientes ZERO (PCs crescem stats via o Sphere Grid); o único knob de crescimento PC neste ROM é a curva AP-requirement. Este é um eixo DIFFERENT dosum_grow.binde BRASKA (auto-level ≠ receita de customização). REGION-SPECIFIC:ply_save/ply_romsão NOT locale-invariant (a seção de dadosnew_uspcdifere de jppc/inpc; tabela compilada =new_uspc, a região que o editor carrega). A fórmula de ganho in-game AP-per-level / per-coefficient éRT2-pending(bytes/campos provados, aritmética de runtime não revertida). Value-guard = mesma value-space que o editor edita → editar o campo (mismatch cru), ou slot/fonte/campo desconhecido → accessorfalse→ o badge esconde (espelho de Aeon/Shop/Mix). Gate--spiraatlas-rt021296 → 21316(+20; todos únicos) + 18 novos asserts (count 20/8/10/2; coef PC zero; coef Aeon non-zero; região uspc; lookup Tidus BaseHp 520 / ply_rom AP max 22000 / Valefor HpCoef 6; value-guard9999esconde; miss de slot/fonte/campo out-of-range; busca de domínio; BIBLE domínio player-growth). Read-only: sem writer/UI/runtime/SIN; não tocaWriteSave/WriteRom, oPlayerGrowthEditorUI, o engineCommonde ANIMA (só consumido), nem BRASKA/AURON/JECHT/RIKKU/WAKKA/VALEFOR/AURORA/SIN. Build 0 erros / 361 avisos;--player-rt0+--spiraatlas-rt0+--aicmdmeta-rt0PASS. Docs:docs/ai/ATLAS_TIDUS_PC_GROWTH_PROVIDER_RESULT_2026-06-10.md+ scoutdocs/ai/ATLAS_TIDUS_PC_GROWTH_SCOUT_RESULT_2026-06-10.md
v2.64.3
v2.65.1BETAPATCH
Seymour
Badge de evidência do Atlas no PlayerGrowthEditor + labels honestos de Sphere None/Passive (read-only, value-guarded, hide-on-edit)
- Atlas UI Sweep. (1) PlayerGrowthEditor: novo
<common:AtlasEvidenceBadgeStrip>no card "Growth Curves" (ply_rom.bin) consumindo o accessor already-builtSpiraDataAtlasCatalog.TryGetPlayerGrowthStat(source, characterIndex, field, currentRawValue)(v2.65.0, TIDUS). NovoAtlasEvidenceInfo? SelectedCharacterEvidenceemPlayerGrowthEditor_DataModel, recomputado na troca de slot e emCharacterRowChanged(editar) → hide-on-edit: o badge ancora em 3 valores de crescimento gate-proven abrangendo ambos os arquivos/cards (ply_saveBase HP +ply_romAP max + HP coef A — os mesmos lookups que--spiraatlas-rt0prova: 520 / 22000 / 6); se qualquer âncora divergir do corpus byte-grounded, a faixa self-hides (mesma profundidade de ancoragem dos badges Mixv2.64.1/Aeonv2.64.3). (2) Labels de Sphere (honestos,partial):sphere.bin ActionValue=0x0000agora lê "None / Passive" eRangeValue=0x00lê "None" em vez de "Unknown" —0x00é o terceiro valor legítimo do corpus (~40% das esferas não têm efeito on-touch, scout Jarvis-AURON), não unknown; uma opção "None" é semeada no dropdown + o label de fallback corrigido. (3)AiBibleWhereAppears.For: casos read-onlyplayer-growthemix(texto honesto "onde aparece", sem promoção runtime-effect;sphere-grid-nodejá existia). (REUSE de capacidade existente: UI consumindo o accessor already-built + o engineCommonde ANIMA + polimento de label; precedente direto: os badges Mixv2.64.1/Aeonv2.64.3/Shopv2.61.2foram PATCH; tie-breaker dúvida→PATCH). Sem writer novo: o badge SphereGridExplorer já shipou (v2.60.1); o caminho de writer/save player-growth e a topologia de esfera estão intocados. Não toca o provider/gate (--spiraatlas-rt0intacto), o engineCommonde ANIMA (só consumido), runtime/Aurora/native-menu/SIN, nem TIDUS/BRASKA/JECHT/RIKKU/WAKKA/VALEFOR/AURORA. Build 0 erros / 361 avisos;--spiraatlas-rt0+--player-rt0+--spheregrid-layout-rt0+--aicmdmeta-rt0PASS. Doc:docs/ai/ATLAS_LULU_PLAYER_GROWTH_SPHERE_BADGE_UI_RESULT_2026-06-10.md
v2.65.0
v2.65.2BETAPATCH
Seymour
Sphere Grid: RedundantContent preservado em nó vazio (0xFFFF) + polimento do Atlas onde aparece
- Polimento do Atlas / Organização de evidências (Jarvis-BARTHELLO). (A) endurecimento do Sphere Grid (fidelidade de bytes): em
SphereGrid_File.Builder.cs(o writer de LAYOUT v2, protegido por--spheregrid-layout-rt0), os caminhos de AUTORIA/EDIÇÃOAddNode/NodeWithgravavamRedundantContent = (ushort)(contentIndex & 0xFF)→ para um nó vazio (conteúdo0xFF) que produzia0x00FF, divergindo dos dados distribuídos. O corpus (reconhecimento do Jarvis-AURON, 3,444/3,444 nós: byte baixo == ContentIndex, byte alto definido somente nos 23 nós Expert vazios) prova que um nó vazio =0xFFFF, um nó preenchido =0x00<content>. Novo auxiliar privadoRedundantContentFor(contentIndex)reproduz a convenção distribuída (vazio→0xFFFF, preenchido→0x00NN).FromExisting/Cloneainda copiamRedundantContentliteralmente → o round-trip sem edição permanece idêntico byte a byte (intocado, revalidado pelo gate). Nova asserção em--spheregrid-edit-rt0(sintético + os 3 grids do corpus):SetNodeContent(idx, 0xFF)→ o layout grava0xFFFFem node+0x06 + byte de conteúdo0xFF+ relê como vazio. O risco de gameplay é baixo (campo redundante; o jogo lê o conteúdo dedat09/10/11+ listas de alcance — comprovado pela IDA do AURON em ambos os binários), mas isso é uma divergência de fidelidade em um writer já publicado. (B) Polimento deAiBibleWhereAppears.For(somente leitura): adicionou o casoaeon-growth(um domínio do Atlas fechado emv2.64.0que estava caindo na alternativa vazia) com texto honesto de "onde aparece / mapeamento"; atualizousphere-grid-node(estava desatualizado: "Unknown6 permanece bruto/desconhecido") para refletir a redução de pendências do AURON —Node.Unknown6é inerte para o gameplay (comprovado pela IDA em ambos os binários), o possível resíduo = layout/visual do menu (somente metadados), sem inventar semântica de gameplay. (corrige um bug latente de fidelidade em um writer já publicado — "um consumidor se beneficiaria" → sim, fidelidade de bytes — além do polimento do texto somente leitura; no desempate, dúvida→PATCH). Nenhum writer novo, nenhuma UI nova, nenhuma mudança no provider/contagem de gates (--spiraatlas-rt0intacto), noCommonengine (ANIMA), runtime/AURORA/VALEFOR/menu nativo/SIN, CHAPPU/salvamento, ou a topologia real do grid (criar/mover/reconectar um nó continua sendo uma fronteira) foi tocada. Compilação com 0 erros / 361 avisos;--spheregrid-edit-rt0+--spheregrid-layout-rt0+--spiraatlas-rt0+--aicmdmeta-rt0PASS. Documento:docs/ai/ATLAS_BARTHELLO_POLISH_RESULT_2026-06-10.md
v2.65.1
v2.65.3BETAPATCH
Seymour
auditoria SEYMOUR: as 124 linhas ATEL `unknown-call-shape` do Atlas resolvidas em classes honestas (read-only, byte-proven)
- Auditoria ATEL Call-Shape (pre-SIN). Os
124field-writes que o pass semântico v8 não conseguiu classificar (field-write-unknown-call-shape) foram auditados no nível de bytecode sobre o corpus inteiro (alvo/texto do FFXDataParser, 346 scripts) e decompõem inteiramente em classes provadas TWO, 0 restantes. (1)0x70A8 btlSetMotionData— 116 linhas (100%): forma uniformePUSHII actor · PUSHII field · (PUSHII|PUSHF) value · CALLPOPA=(actor, field, value)no namespace motionProperty (campos0x00..0x09, todos nomeados emAiMotionPropertyNames); o actor é um ref REAL (113× Self0xFFF3+ Monster#01/#02/#030x15/16/17h), por 25 monstros → classeset-motion-data-actor-field-value(o irmão explicit-actor de0x70B2 setMotionField; NOTsetStatField). (2)0x7032 setActorFacingAngle— 8 linhas: NOT uma escrita de campo — é(actor, angle), uma chamada de 2 pushes sem field-id; vazaram para o catálogo de campo como um falso positivo de regex false-positive (só ângulos FLOAT renderizam.facingAngle = 90.0 [42B40000h]e a regex v7 casou o.0 [hex]do decimal; os 63 sites irmãos integer-angle= 90 [5Ah]não vazaram) → classenot-field-write. Mudanças: a pontetools/ffxdataparser_bridge/build_atel_semantic_catalog.ps1(Get-FieldWriteSemanticKind+ notas de risco) reclassifica ambos call-ids; v8 regenera com0unknown (116+8 nas novas classes); a contagemAtelFieldWriteShapefica202(o relabel preserva a cardinalidade da chavecallId|fieldHex|fieldName|semanticKind|fieldCategory, provada antes/depois); o passunknown-healthdescarta199 → 75(os 124 ATEL saem do bucket "blocked-until-audited"); as narrativasSpiraDataAtlasCatalog(atlas:field-call-shapes+ guardrail +atlas:unknown-health) são atualizadas; os asserts--spiraatlas-rt0se movem (detail entries 21316→21192,Unknown health rows 199→75) + 2 novos lock-asserts (0unknown restante call-shapes +0x70A8motion-data presente). Honestidade: classificar ≠ autorizar um writer — todoAtelFieldWriteShapeficaread-only;not-writer-authority,70A8ainda não tem botão/escrita, nada é promovido a SIN. Achado de fidelidade Read-only: o decoder EDITOR (AiScript_File.cs) não glossaa70A8(ausente deFieldArgBack/FieldNameForFunc) eAiStackModelcarece de sua aridade → um gap de exibição entregue à lane MAGIC (docs/ai/HANDOFF_SEYMOUR_ATEL_DECODER_GLOSS_GAP_2026-06-10.md), sem efeito de gameplay. PATCH (refina/classifica um catálogo read-only existente, resolve um SIN data-blocker; precedentev2.61.3/v2.62.1; tie-breaker dúvida→PATCH). Sem writer novo; não toca runtime/AURORA/VALEFOR/native-menu/SIN-chain-builder/CHAPPU/save. Verificado por um workflow adversarial (3 refutadores + crítico de completude). Build 0 erros / 361 avisos;--spiraatlas-rt0+--aicmdmeta-rt0+AiScriptLab --ai2(346/346) PASS. Doc:docs/ai/ATLAS_SEYMOUR_ATEL_CALL_SHAPE_AUDIT_RESULT_2026-06-10.md
v2.65.2