Mise à jour 2.65
10/06/2026
v2.65.0BETA
Seymour
Croissance PC/Joueur dans le Spira Data Atlas (lecture seule, `proved-candidate`, byte-grounded, work/-indépendant)
- Branche la VRAIE source de la croissance/stats du PC dans le provider : nouveau
SpiraDataAtlasDetailKind.PlayerGrowthStat+ accesseur value-guardedSpiraDataAtlasCatalog.TryGetPlayerGrowthStat(source, characterIndex, field, currentRawValue). Source =ply_save.bin(stats de base/actuelles) +ply_rom.bin(ROM de croissance : courbe d'exigence APApReq A/B/C/Max+ coefficients d'auto-croissance par stat*CoefA/B), les MÊMES tables que lePlayerGrowthEditorédite (parserPlayerKernel_File, RT0-prouvé par--player-rt0). Les 20 slots (0–6 PC, 7 guest=Seymour, 8–17 Aeons, 18–19 non mappés) viennent d'une table compilée byte-grounded (FfxLib/SpiraDataAtlas/PlayerGrowthData.cs, générée partools/ffxdataparser_bridge/build_player_growth_index.ps1 -EmitCSharpdepuis les.bin), donc ils existent dans TOUT build SANSwork/(contrairement àPcAeonFineStat, qui dépend dework/pc_save_stats_catalog.csvet n'est qu'un instantané). Les étiquettes se résolvent au runtime viaCharacter_Enum(source unique de vérité). Honnêteté (non-obvious) : les coefficients de croissance de stats sont Aeon-only — les slots PC/guest portent ZÉRO coefficients (les PC croissent via la Sphere Grid) ; le seul bouton de croissance PC dans cette ROM est la courbe d'exigence AP. C'est un axe DIFFÉRENT dusum_grow.binde BRASKA (auto-level ≠ recette de customisation). RÉGION-SPÉCIFIQUE :ply_save/ply_romne sont PAS invariants de locale (la section de donnéesnew_uspcdiffère de jppc/inpc ; table compilée =new_uspc, la région que l'éditeur charge). La formule de gain AP-par-niveau / par-coefficient en jeu estRT2-pending(octets/champs prouvés, arithmétique runtime non inversée). Value-guard = le même espace de valeur que l'éditeur édite → éditer le champ (mismatch brut), ou un slot/source/champ inconnu → accesseurfalse→ badge caché (miroir de Aeon/Shop/Alchimie). Porte--spiraatlas-rt021296 → 21316(+20 ; tous uniques) + 18 nouvelles assertions (compte 20/8/10/2 ; PC coef zéro ; Aeon coef non-zéro ; région uspc ; lookup Tidus BaseHp 520 / ply_rom AP max 22000 / Valefore HpCoef 6 ; value-guard9999caché ; slot/source/champ hors plage manqué ; recherche de domaine ; domaine BIBLE player-growth). Lecture seule : aucun writer/UI/runtime/SIN ; ne touche pasWriteSave/WriteRom, l'UIPlayerGrowthEditor, le moteurCommond'ANIMA (consommé seulement), ni BRASKA/AURON/JECHT/RIKKU/WAKKA/VALEFOR/AURORA/SIN. Build 0 erreur / 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 de preuve Atlas dans le PlayerGrowthEditor + étiquettes honnêtes Sphere Rien/Passive (lecture seule, value-guarded, hide-on-edit)
- Atlas UI Sweep. (1) PlayerGrowthEditor : nouveau
<common:AtlasEvidenceBadgeStrip>dans la carte « Growth Curves » (ply_rom.bin) consommant l'accesseur déjà construitSpiraDataAtlasCatalog.TryGetPlayerGrowthStat(source, characterIndex, field, currentRawValue)(v2.65.0, TIDUS). NouveauAtlasEvidenceInfo? SelectedCharacterEvidencedansPlayerGrowthEditor_DataModel, recalculé au changement de slot et dansCharacterRowChanged(edit) → hide-on-edit : le badge s'ancre sur 3 valeurs de croissance prouvées par porte couvrant les deux fichiers/cartes (ply_saveBase HP +ply_romAP max + HP coef A — les mêmes lookups que--spiraatlas-rt0prouve : 520 / 22000 / 6) ; si un ancre diverge du corpus byte-grounded, la bande se cache (même profondeur d'ancrage que les badges Alchimiev2.64.1/Aeonv2.64.3). (2) Étiquettes Sphere (honnêtes,partial) :sphere.bin ActionValue=0x0000lit désormais "Rien / Passive" etRangeValue=0x00lit "Rien" au lieu de "Inconnu" —0x00est la troisième valeur légitime du corpus (~40% des sphères n'ont pas d'effet au toucher, scout Jarvis-AURON), pas inconnue ; une option "Rien" est semée dans le dropdown + l'étiquette de repli corrigée. (3)AiBibleWhereAppears.For: casplayer-growthetmixen lecture seule (texte honnête « où il apparaît », pas de promotion d'effet runtime ;sphere-grid-nodeexistait déjà). (RÉUTILISATION de capacité existante : UI consommant l'accesseur déjà construit + le moteurCommond'ANIMA + polish d'étiquette ; précédent direct : les badges Alchimiev2.64.1/Aeonv2.64.3/Shopv2.61.2étaient PATCH ; doute→PATCH). Aucun nouvel écrivain : le badge SphereGridExplorer a déjà été livré (v2.60.1) ; le chemin d'écriture de croissance joueur et la topologie de sphère sont intacts. Ne touche pas le provider/porte (--spiraatlas-rt0intact), le moteurCommond'ANIMA (consommé seulement), runtime/Aurora/native-menu/SIN, ni TIDUS/BRASKA/JECHT/RIKKU/WAKKA/VALEFOR/AURORA. Build 0 erreur / 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 : nœud vide RedundantContent préservé (0xFFFF) + polish Atlas where-appears
- Atlas Polish / Housekeeping de preuve (Jarvis-BARTHELLO). (A) Durcissement Sphere Grid (fidélité d'octets) : dans
SphereGrid_File.Builder.cs(l'écrivain de mise en page v2, gated par--spheregrid-layout-rt0), les chemins AUTHORING/EDITAddNode/NodeWithécrivaientRedundantContent = (ushort)(contentIndex & 0xFF)→ pour un nœud vide (contenu0xFF) cela produisait0x00FF, divergeant des données livrées. Le corpus (scout Jarvis-AURON, 3,444/3,444 nœuds : octet bas == ContentIndex, octet haut défini seulement sur les 23 nœuds Expert vides) prouve qu'un nœud vide =0xFFFF, un nœud rempli =0x00<content>. Nouveau helper privéRedundantContentFor(contentIndex)reflète la convention livrée (vide→0xFFFF, rempli→0x00NN).FromExisting/Clonecopient toujoursRedundantContentverbatim → le round-trip no-edit reste byte-identique (intact, re-prouvé par la porte). Nouvelle assertion dans--spheregrid-edit-rt0(synthétique + les 3 grilles du corpus) :SetNodeContent(idx, 0xFF)→ la mise en page écrit0xFFFFà nœud+0x06 + octet de contenu0xFF+ re-lit vide. Risque de gameplay faible (champ redondant ; le jeu lit le contenu depuisdat09/10/11+ listes de portée — IDA-prouvé par AURON sur les deux binaires), mais c'est une divergence de fidélité dans un écrivain déjà livré. (B)AiBibleWhereAppears.Forpolish (lecture seule) : ajouté le casaeon-growth(un domaine Atlas fermé dansv2.64.0qui tombait dans le repli vide) avec un texte honnête « où il apparaît / mapping » ; mis à joursphere-grid-node(obsolète : « Unknown6 reste brut/inconnu ») pour refléter le burn-down d'AURON —Node.Unknown6est gameplay-inert (IDA-prouvé sur les deux binaires), le résidu possible = mise en page de menu/visuel (metadata-only), sans sémantique de gameplay inventée. (corrige un bug de fidélité latent dans un écrivain déjà livré — « un consommateur bénéficierait » → oui, fidélité d'octets — plus un polish de texte en lecture seule ; doute→PATCH). Aucun nouvel écrivain, aucune nouvelle UI, aucun changement de provider/porte (--spiraatlas-rt0intact), aucun moteurCommon(ANIMA), runtime/AURORA/VALEFOR/native-menu/SIN, CHAPPU/save, ni topologie de grille réelle (create/move/relink node reste une frontière) touché. Build 0 erreur / 361 warning ;--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 : les 124 rangées ATEL `unknown-call-shape` de l'Atlas résolues en classes honnêtes (lecture seule, byte-prouvé)
- Audit de forme d'appel ATEL (pré-SIN). Les
124écritures de champ que la passe sémantique v8 ne pouvait pas classifier (field-write-unknown-call-shape) ont été auditées au niveau bytecode sur tout le corpus (cible/texte FFXDataParser, 346 scripts) et se décomposent entièrement en DEUX classes prouvées, 0 restante. (1)0x70A8 btlSetMotionData— 116 rangées (100%) : forme uniformePUSHII actor · PUSHII field · (PUSHII|PUSHF) value · CALLPOPA=(actor, field, value)dans l'espace de noms motionProperty (champs0x00..0x09, tous nommés dansAiMotionPropertyNames) ; l'acteur est une vraie réf (113× Self0xFFF3+ Monster#01/#02/#030x15/16/17h), sur 25 monstres → classeset-motion-data-actor-field-value(le frère acteur-explicite de0x70B2 setMotionField; PASsetStatField). (2)0x7032 setActorFacingAngle— 8 rangées : PAS une écriture de champ — c'est(actor, angle), un appel 2-push sans id de champ ; elles ont fui dans le catalogue de champs comme un faux positif de regex (seuls les angles FLOAT rendent.facingAngle = 90.0 [42B40000h]et la regex v7 a fait correspondre le.0 [hex]du décimal ; les 63 sites frères d'angle entier= 90 [5Ah]n'ont pas fui) → classenot-field-write. Changements : le ponttools/ffxdataparser_bridge/build_atel_semantic_catalog.ps1(Get-FieldWriteSemanticKind+ notes de risque) reclassifie les deux ids d'appel ; v8 régénère avec0inconnu (116+8 dans les nouvelles classes) ; le compteAtelFieldWriteShapereste202(le relabel préserve la cardinalité de clécallId|fieldHex|fieldName|semanticKind|fieldCategory, prouvée avant/après) ; la passeunknown-healthchute199 → 75(les 124 ATEL quittent le bucket « bloqué-jusqu'à-audit ») ; les récitsSpiraDataAtlasCatalog(atlas:field-call-shapes+ garde-fou +atlas:unknown-health) sont mis à jour ; les assertions--spiraatlas-rt0se déplacent (detail entries 21316→21192,Unknown health rows 199→75) + 2 nouvelles assertions de verrou (0formes d'appel inconnues restantes +0x70A8motion-data présent). Honnêteté : classifier ≠ autoriser un écrivain — chaqueAtelFieldWriteShaperesteread-only;not-writer-authority,70A8n'a toujours pas de bouton/écriture, rien n'est promu à SIN. Finding de fidélité en lecture seule : le décodeur de l'ÉDITEUR (AiScript_File.cs) ne glose pas70A8(absent deFieldArgBack/FieldNameForFunc) etAiStackModelmanque son arité → un écart d'affichage passé à la voie MAGIC (docs/ai/HANDOFF_SEYMOUR_ATEL_DECODER_GLOSS_GAP_2026-06-10.md), sans effet de gameplay. PATCH (affine/classifie un catalogue en lecture seule existant, résout un data-bloqueur SIN ; précédentv2.61.3/v2.62.1; doute→PATCH). Aucun nouvel écrivain ; ne touche pas runtime/AURORA/VALEFOR/native-menu/SIN-chain-builder/CHAPPU/save. Vérifié par un workflow adversaratif (3 réfuteurs + critique de complétude). Build 0 erreur / 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