Mise à jour 2.197
31/07/2026
v2.197.0.0BETAMINOR
Seymour31 juil. 2026
P2 L2 : AtelPhaseRotationAdapter (écrivain local aux octets hors ligne) + OperationPreview (diff 3 couches consommable) + validation source/IDA
Core/Writers/AtelPhaseRotationAdapter.cs(atel-recipe-phase-rotation, enregistré dans le catalogue, 10 tests) : appliqueAiPhaseRotationRecipe.Apply(vraie API, en mémoire) sur l'AiFile découpé du bin de monstre ; précondition de hash du bin ENTIER viaValidateMonsterBinHash(mismatch → throw avant de toucher le staging) ; pré-validationCodeWalkClosedExactly; triple post-validation (CodeWalkClosedExactly+UnknownOpcodes == 0+RoundTripsByteIdentical) ; ré-insertion viaSpliceAiFileIntoMonsterGrow(vraie API codec) avec vérification de re-découpe ; allowlist miroir de la vraie forme de recette (déclencheurs BattleStart/AfterAnyValidTurn bloqués — honnête Class B/grow) ;ComputeDryRunDiff(3 couches sur les AiFiles découpés). Validé sur fixtures réelles : m001 (5 vars + 2 points d'entrée) s'applique ; m000 (0 vars) rejette honnêtement.Core/OperationPreview.cs(5 tests) :OperationPreview/FilePreviewSummary— diff 3 couches (octets/désassemblage/sémantique) exposé PAR FICHIER, fournisseur null-safe (un échec sur un fichier ne tue jamais l'aperçu) ;BuildFromPlanutilise la même convention de staging que l'exécuteur (aperçu post-stage = exactement ce qui serait promu). Test e2e complet : EditSession → OperationPlan → OperationExecutorV2 → ReceiptBuilder → sortie portant l'édition (CostMp=7) — simuler→revue→appliquer→reçu fonctionne de bout en bout sur le vrai Core.docs/ai/P2_VALIDACAO_SOURCE_2026-07-31.md(validation source/IDA) : le jeu charge le bin de monstre ENTIER et résout les partitions par offsets d'en-tête fixes (FFX_Battle_LoadMonsterFilesIntoMemoryChr@0x783730,InstallMonsterFileSectionPointers@0x783BB0 — confiance aux pointeurs, pas de hash runtime) → précondition de hash du bin entier confirmée correcte ; dispatch ATEL dans IDA (FFX_Atel_InterpretWorkerOpcodes@0x864180,DispatchNativeCall@0x877720, table Battle @0xC42618) ; opcodes 0xAE/0x9F/0xA0/0xB5/0xD8 prouvés sur corpus ; la porte RT0 valide le round-trip structurel (pas le comportement en jeu — RT2 toujours en attente par design) ; la bataille deffx-reconstructedest au niveau stub (la vérité runtime vit dans les docs IDA).- Baseline : 223/223 PASS (207 → 223). ### MINOR
v2.196.0.0
v2.197.1.0BETAPATCH
Seymour31 juil. 2026
`--phase-rotation-rt0` correctif de la porte (vérification de forme obsolète) + intégration dans `offline_ci.ps1`
RuntimeTools/AiScriptLab/Program.cs(PhaseRotationRt0) : la vérification de forme attendaitD8 0x700B(PerformCommand) dans le bloc ajouté, maisAiPhaseRotationWriterémetD8 0x705A(ForcePerformCommand —CommandCallFor) dans la recette actuelle →queued=Falsesur 319/319 entrées de corpus (le dernier run documenté était v2.85.x, avant la bascule). Corrigé en0x705Aet renomméhasForcedPerform. Diagnostic méthodique : apply/validator/splice passaient déjà 319/319 ; le seul faux drapeau étaitqueued(identique sur les 319 échecs via--json).RuntimeTools/offline_ci.ps1: porte--phase-rotation-rt0ajoutée à la section AiScriptLab — ferme l'exigence Goal-4 « porte RT0 de famille avant Build », qui existait dans AiScriptLab mais n'était pas câblée dans la CI officielle.- Résultat :
--phase-rotation-rt0PASS (apply de recette 319/319, validateur 319/319, splice 319/319, vérification de forme 319/319, store var1 300/300). offline_ci : 1 FAIL préexistant sans rapport —BattleCompanionActivationLab(sentinelle de dérivemcyt00_21: le corpusFFX Extractedest revenu au vanilla — slot0=m213, formation 213/37/37 — tandis que la sentinelle documente la variante Dark Aeons 334/335/336 de la voie Arena+ ; décision en attente : restaurer l'artefact Arena+, mettre à jour la sentinelle, ou accepter la dérive documentée). - Baseline : 223/223 PASS (suite inchangée ; le correctif est outillage-porte seulement). ### MINOR ### MINOR
v2.197.0.0
v2.197.1.1BETAREVISION
Seymour31 juil. 2026
P3-L1 : fondation des contrats runtime/intégrations/release
docs/ai/P3_RUNTIME_CONTRACTS_2026-07-31.md(doc de gouvernance, lecture seule — aucun octet changé) : contrat runtime par ressource —FfxDinput8Probe(clé main-thread maîtresse, MMFLocal\FFXProbeBlock_v1, défaut STANDBY, RT2 PROUVÉ 2026-06-03, modes de diagnosticmon/read/arena-flags),FfxHooksDll(23 hooks, drapeaux F7, contrats par couche), 11 sondes RT2 en lecture seule (mode de diagnostic par sonde) ; contradiction Force Battle résolue par la preuve (crash = hors main thread →CreateRemoteThreadretiré ; pont main-thread PROUVÉ à l'écran comme mécanisme / LAB comme produit — productisation gardée) ; contrat install/config/fallback/erreur-actionnable pour les outils externes (sonde, hooks, ctl, corpus) ; matrice de compatibilité (FFX.exe = cible unique ; ffxoficial = référence IDA ; PS2 = corpus hors ligne) ; lots P3 L2–L6 avec objectifs mesurables (GameEnvironmentProbe, suite d'opérations à 12 items, manifeste+hashs de release, contrat Gemini, RT2 par famille).- Aucun changement de comportement — baseline 223/223 PASS intacte. ### PATCH
v2.197.1.0