Aggiornamento 2.65
10/06/2026
v2.65.0BETA
Seymour
PC/Player Growth nello Spira Data Atlas (read-only, `proved-candidate`, byte-grounded, work/-independent)
- Collega la VERA fonte di crescita/stat PC nel provider: nuovo (letterale tecnico: REAL)
SpiraDataAtlasDetailKind.PlayerGrowthStat+ accessor value-guardedSpiraDataAtlasCatalog.TryGetPlayerGrowthStat(source, characterIndex, field, currentRawValue). Fonte =ply_save.bin(stat base/current) +ply_rom.bin(ROM crescita: curva AP-requirementApReq A/B/C/Max+ coefficienti auto-growth per-stat*CoefA/B), le STESSE tabelle che il (letterale tecnico: SAME)PlayerGrowthEditormodifica (parserPlayerKernel_File, RT0-proved da--player-rt0). Gli 20 slot (0–6 PC, 7 guest=Seymour, 8–17 Aeon, 18–19 non mappati) vengono da una tabella compilata byte-grounded (FfxLib/SpiraDataAtlas/PlayerGrowthData.cs, generata datools/ffxdataparser_bridge/build_player_growth_index.ps1 -EmitCSharpdai file.bin), quindi esistono in QUALSIASI build SENZA (letterale tecnico: ANY) (letterale tecnico: WITHOUT)work/(a differenza diPcAeonFineStat, che dipende dawork/pc_save_stats_catalog.csved è solo uno snapshot). Le etichette si risolvono a runtime viaCharacter_Enum(single source of truth). Onestà (non ovvio): (letterale tecnico: non-obvious) i coefficienti di crescita stat sono (letterale tecnico: stat-growth)Aeon-only — gli slot PC/guest portano ZERO coefficienti (i PC crescono le stat via lo Sphere Grid); l'unica manopola di crescita PC in questa ROM è la curva AP-requirement. Questo è un asse DIVERSO da (letterale tecnico: DIFFERENT)sum_grow.bindi BRASKA (auto-level ≠ ricetta customizzazione). REGION-SPECIFIC:ply_save/ply_romNON sono locale-invariant (letterale tecnico: NOT) (la sezione datinew_uspcdifferisce da jppc/inpc; tabella compilata =new_uspc, la regione che l'editor carica). La formula in-game AP-per-level / guadagno per-coefficiente èRT2-pending(byte/campi provati, aritmetica runtime non invertita). Value-guard = stesso value-space che l'editor modifica → modificare il campo (raw mismatch), o uno slot/source/field sconosciuto → accessorfalse→ badge nascosto (mirror di Aeon/Shop/Cocktail). Gate--spiraatlas-rt021296 → 21316(+20; tutti unici) + 18 nuovi assert (count 20/8/10/2; PC coef zero; Aeon coef non-zero; region uspc; lookup Tidus BaseHp 520 / ply_rom AP max 22000 / Valefor HpCoef 6; value-guard9999nasconde; slot/source/field out-of-range miss; domain search; BIBLE domain player-growth). Read-only: no writer/UI/runtime/SIN; non toccaWriteSave/WriteRom, la UIPlayerGrowthEditor, il motoreCommondi ANIMA (solo consumato), o BRASKA/AURON/JECHT/RIKKU/WAKKA/VALEFOR/AURORA/SIN. Build 0 errori / 361 warning;--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 evidenza Atlas nel PlayerGrowthEditor + etichette oneste Sphere Niente/Passive (read-only, value-guarded, hide-on-edit)
- Atlas UI Sweep. (1) PlayerGrowthEditor: nuovo
<common:AtlasEvidenceBadgeStrip>nella card "Growth Curves" (ply_rom.bin) che consuma l'accessor già costruito (letterale tecnico: already-built)SpiraDataAtlasCatalog.TryGetPlayerGrowthStat(source, characterIndex, field, currentRawValue)(v2.65.0, TIDUS). NuovoAtlasEvidenceInfo? SelectedCharacterEvidenceinPlayerGrowthEditor_DataModel, ricalcolato al cambio slot e inCharacterRowChanged(edit) → hide-on-edit: il badge si ancora su 3 valori di crescita gate-proven che attraversano entrambi i file/card (ply_saveBase HP +ply_romAP max + HP coef A — le stesse lookup che--spiraatlas-rt0prova: 520 / 22000 / 6); se un'ancora diverge dal corpus byte-grounded la strip si auto-nasconde (stessa profondità di ancoraggio dei badge Cocktail (letterale tecnico: self-hides)v2.64.1/Aeonv2.64.3). (2) Etichette Sphere (oneste,partial):sphere.bin ActionValue=0x0000ora legge "Niente / Passive" eRangeValue=0x00legge "Niente" invece di "Sconosciuto" —0x00è il terzo valore corpus legittimo (~40% degli sphere non hanno effetto on-touch, scout Jarvis-AURON), non unknown; un'opzione "Niente" è seminata nel dropdown + l'etichetta fallback corretta. (3)AiBibleWhereAppears.For: casi read-onlyplayer-growthemix(testo onesto "where it appears", nessuna promozione runtime-effect;sphere-grid-nodegià esisteva). (RIUSO di capability esistente: UI che consuma l'accessor già costruito + il motore (letterale tecnico: already-built) (letterale tecnico: REUSE)Commondi ANIMA + polish etichette; precedente diretto: i badge Cocktailv2.64.1/Aeonv2.64.3/Shopv2.61.2erano PATCH; tie-breaker dubbio→PATCH). Nessun nuovo writer: il badge SphereGridExplorer è già distribuito (v2.60.1); il writer/save player-growth e la topologia sphere sono intatti. Non tocca il provider/gate (--spiraatlas-rt0intatto), il motoreCommondi ANIMA (solo consumato), runtime/Aurora/native-menu/SIN, o TIDUS/BRASKA/JECHT/RIKKU/WAKKA/VALEFOR/AURORA. Build 0 errori / 361 warning;--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: empty-node RedundantContent preserved (0xFFFF) + Atlas where-appears polish
- Atlas Polish / Evidence Housekeeping (Jarvis-BARTHELLO). (A) Sphere Grid hardening (byte fidelity): in
SphereGrid_File.Builder.cs(the v2 LAYOUT writer, gated by--spheregrid-layout-rt0), the AUTHORING/EDIT pathsAddNode/NodeWithwroteRedundantContent = (ushort)(contentIndex & 0xFF)→ for an empty node (content0xFF) that produced0x00FF, diverging from shipped data. The corpus (Jarvis-AURON scout, 3,444/3,444 nodes: low byte == ContentIndex, high byte set only on the 23 empty Expert nodes) proves an empty node =0xFFFF, a filled node =0x00<content>. New private helperRedundantContentFor(contentIndex)mirrors the shipped convention (empty→0xFFFF, filled→0x00NN).FromExisting/Clonestill copiesRedundantContentverbatim → the no-edit round-trip stays byte-identical (untouched, re-proved by the gate). New assert in--spheregrid-edit-rt0(synthetic + the 3 corpus grids):SetNodeContent(idx, 0xFF)→ layout writes0xFFFFat node+0x06 + contents byte0xFF+ re-reads empty. Gameplay risk low (redundant field; the game reads content fromdat09/10/11+ reach-lists — IDA-proved by AURON on both binaries), but it is a fidelity divergence in an already-shipped writer. (B)AiBibleWhereAppears.Forpolish (read-only): added theaeon-growthcase (an Atlas domain closed inv2.64.0that was falling through to the empty fallback) with honest "where it appears / mapping" text; updatedsphere-grid-node(was stale: "Unknown6 stays raw/unknown") to reflect AURON's burn-down —Node.Unknown6is gameplay-inert (IDA-proved on both binaries), the possible residual = menu layout/visual (metadata-only), with no invented gameplay semantics. (fixes a latent fidelity bug in an already-shipped writer — "a consumer would benefit" → yes, byte fidelity — plus read-only text polish; tie-breaker doubt→PATCH). No new writer, no new UI, no provider/gate-count change (--spiraatlas-rt0intact), noCommonengine (ANIMA), runtime/AURORA/VALEFOR/native-menu/SIN, CHAPPU/save, or real grid topology (create/move/relink node stays a frontier) touched. Build 0 errors / 361 warnings;--spheregrid-edit-rt0+--spheregrid-layout-rt0+--spiraatlas-rt0+--aicmdmeta-rt0PASS. Doc:docs/ai/ATLAS_BARTHELLO_POLISH_RESULT_2026-06-10.md
v2.65.1
v2.65.3BETAPATCH
Seymour
audit SEYMOUR: le 124 righe ATEL `unknown-call-shape` dell'Atlas risolte in classi oneste (read-only, byte-proven)
- Audit Call-Shape ATEL (pre-SIN). I
124field-write che il pass semantico v8 non poteva classificare ( (letterale tecnico: field-writes)field-write-unknown-call-shape) sono stati auditati a livello bytecode su tutto il corpus (target/text FFXDataParser, 346 script) e si decompongono interamente in DUE classi provate, (letterale tecnico: TWO)0 rimanenti. (1)0x70A8 btlSetMotionData— 116 righe (100%): forma uniformePUSHII actor · PUSHII field · (PUSHII|PUSHF) value · CALLPOPA=(actor, field, value)nel namespace motionProperty (campi0x00..0x09, tutti nominati inAiMotionPropertyNames); l'attore è un ref REALE (113× Self0xFFF3+ Monster#01/#02/#030x15/16/17h), su 25 mostri → classeset-motion-data-actor-field-value(il sibling esplicito-attore di (letterale tecnico: explicit-actor)0x70B2 setMotionField; NOTsetStatField). (2)0x7032 setActorFacingAngle— 8 righe: NON un field-write — è (letterale tecnico: NOT)(actor, angle), una call a 2 push senza field-id; sono filtrate nel catalogo field come falso-positivo regex (letterale tecnico: false-positive) (solo gli angoli FLOAT renderizzano.facingAngle = 90.0 [42B40000h]e la regex v7 ha matchato il.0 [hex]del decimale; i 63 siti fratelli angolo-integer (letterale tecnico: integer-angle)= 90 [5Ah]non sono filtrati) → classenot-field-write. Cambiamenti: il pontetools/ffxdataparser_bridge/build_atel_semantic_catalog.ps1(Get-FieldWriteSemanticKind+ note di rischio) riclassifica entrambi i call-id; v8 rigenera con (letterale tecnico: call-ids)0unknown (116+8 nelle nuove classi); il conteggioAtelFieldWriteShaperesta202(il relabel preserva la cardinalità della chiavecallId|fieldHex|fieldName|semanticKind|fieldCategory, provata prima/dopo); il passunknown-healthscende199 → 75(i 124 ATEL lasciano il bucket "blocked-until-audited"); le narrativeSpiraDataAtlasCatalog(atlas:field-call-shapes+ guardrail +atlas:unknown-health) sono aggiornate; gli assert--spiraatlas-rt0si spostano (detail entries 21316→21192,Unknown health rows 199→75) + 2 nuovi lock-assert (letterale tecnico: lock-asserts) (0remaining unknown call-shapes +0x70A8motion-data presente). Onestà: classificare ≠ autorizzare un writer — ogniAtelFieldWriteShaperestaread-only;not-writer-authority,70A8ancora non ha button/write, nulla è promosso a SIN. Finding di fedeltà read-only: (letterale tecnico: Read-only) il decoder EDITOR (AiScript_File.cs) non gloss70A8(assente daFieldArgBack/FieldNameForFunc) eAiStackModelnon ha la sua arity → un gap di display consegnato alla lane MAGIC (docs/ai/HANDOFF_SEYMOUR_ATEL_DECODER_GLOSS_GAP_2026-06-10.md), senza effetto gameplay. PATCH (affina/classifica un catalogo read-only esistente, risolve un data-blocker SIN; precedentev2.61.3/v2.62.1; tie-breaker dubbio→PATCH). Nessun nuovo writer; non tocca runtime/AURORA/VALEFOR/native-menu/SIN-chain-builder/CHAPPU/save. Verificato da un workflow avversario (3 refuter + critico completezza). Build 0 errori / 361 warning;--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