Mise à jour 2.79
10/06/2026
updatesin
SIN Chain Builder Gate 5 : sandbox de sauvegarde/application opérateur-gated — applique à une COPIE jetable et la DÉFAIT byte-identique ; SIN reste BLOQUÉ pour l'écriture publique. Voie Jarvis-PENANCE (MAGIC/SIN). Ouvre Gate 5 du SIN Chain Builder : il prouve qu'un `SinApplyPlan` validé (Gate 3/NEMESIS) et revu AEON (Gate 4/OMEGA) peut être appliqué et annulé dans une sandbox/copie contrôlée — sans toucher le jeu, sans toucher aucun vrai fichier utilisateur, sans RT2 et sans bouton public. La sandbox de sauvegarde/application n'est pas de l'édition publique. Nouvelles classes sandbox-only dans `FfxLib/Ai/Sin` : `SinSandboxApplyGate` (`SinSandboxEligibility` — les 8 conditions en lecture seule : structurellement valide · `ApplyAcceptable` reste false · une permission explicite SÉPARÉE `AllowSandboxApply` · AEON ADDED-only · aucun bloqueur critique hors de l'échafaudage effaçable, la règle qui sépare les bloqueurs que Gate 5 lui-même résout (`plan-blocker`/`rung-ladder`) des vrais (payload candidat/bloqué, `divmul-integrity`, `jump-slots`, step-blocker)), `SinSandboxApplySession` (orchestrateur : copie → backup-before-write → émission réelle vers la copie uniquement → diff réel → vérifier que l'original est intact → restaurer → byte-identique), `SinSandboxBackup` (`.prev.bak` de la copie + hash de pré-image + `Restore`), `SinSandboxRestoreVerifier` (SHA-256 + comparaison d'octets) et `SinSandboxApplyResult` (résultat inspectable + template de sortie). APPLICATION RÉELLE via le codec prouvé : pour la recette éligible, il charge une copie jetable d'un vrai monstre (lecture seule depuis le corpus → `work/`), construit le corps linéaire via `AppendGuardedAction`(garde toujours-vraie `PUSHII 1`) — la seule méthode propre et auto-relocalisante qui ajoute à la fin du code (offsets existants stables), exécute `SpliceAiFileIntoMonsterGrow`, relit (re-parse propre = rung `offline-emittable`), exécute un VRAI `AiScript_Diff.Compare(original, edited)` (seulement le bloc ADDED prévu, 0 modifié / 0 supprimé = rung `AEON-reviewed`, pas de dérive) + `AiValidator.ValidateRebuilt` (rung `AiScriptLab-clean`), et seulement alors écrit vers la COPIE (après le `.prev.bak` = rung `backup-ready`). 3 recettes pilotes (une décision d'honnêteté, jamais forcée au vert) : SIN-006 (Véu de Bevelle, auto-buff tour-1 ; cible Self prouvée, pas de payload de commande, pas de 0x16/0x17) = la SEULE éligible → application sandbox réelle (`m201`, OnTurn résolu via `AiWorkerMapping.TryResolveCombatOnTurn`, diff +15 ~0 -0, restauration byte-identique, hash original/corpus inchangé) ; SIN-009 (Mandato do Maester ; payload candidat) = BLOQUÉ conservateur (une copie jetable n'est pas une excuse pour écrire un payload malhonnête ; décision documentée) ; SIN-010 (Farplane Toll, HP%) = BLOQUÉ par le `0x16` DIV vs le HP% multiply prévu (`divmul-integrity`) — 0x16/0x17 est un PATCH dédié sur une autre voie, JAMAIS corrigé ici. Preuves supplémentaires : sans la permission `AllowSandboxApply` même SIN-006 est BLOQUÉ (opérateur-gated) ; un diff inattendu (altéré) est rejeté par le même prédicat conservateur (`+0 ~1 -0 → conservative=False`) ; l'original n'est jamais écrit (`AppliedToOriginal=NO`, prouvé en hachetant la copie de référence ET la source réelle du corpus). Nouvelle porte `--sin-sandbox-rt0` : exécute les 3 recettes, prouve backup/restore/isolation, et une garde de fichiers (rien n'est écrit hors `work/`, pas de `.prev.bak`/`monster_.bin` dans le dossier de sortie, chaque fixture réelle en lecture seule avec un hash inchangé, le dossier sandbox nettoyé à la fin — aucun résidu, jamais committé). MINOR (NOUVELLE capacité exécutable : couche d'application sandbox + porte ; traverse les rungs hors ligne-emittable/AiScriptLab-clean/AEON-reviewed/backup-ready sur une copie). Périmètre/honnêteté : SIN reste BLOQUÉ pour l'écriture publique — Gate 5 s'applique seulement à une sandbox/copie, ce n'est PAS RT2 et PAS un bouton public ; `PublicApplyAllowed=NO`/`Rt2=NO` par construction. Il ne fait PAS d'écrivain/save/runtime/RT2/UI/button public dans `MonsterAiEditor` ; il ne touche PAS un vrai `monster_.bin`/Aurora/native-menu/Blitzball/Shop/Mix/Sphere/`Common`(ANIMA) ; il réutilise `SinDryRunPlanner`/`SinPlanValidator`/`SinAeonDiffPlanner` + `AiScript_File.AppendGuardedAction`/`SpliceAiFileIntoMonsterGrow`/`AiScript_Diff`/`AiValidator` (le round-trip déjà prouvé 345/345 par `--aiasm-rt0`). Build 0 erreur ; `--sin-sandbox-rt0` + `--sin-aeon-preview-rt0` (Gate 4) + `--sin-validate-rt0` (Gate 3) + `--sin-dryrun-rt0` (Gate 2) + `--aicmdmeta-rt0` + `--spiraatlas-rt0` + `--aiasm-rt0` tous PASS. Docs : `docs/ai/SIN_PENANCE_BACKUP_APPLY_SANDBOX_RESULT_2026-06-10.md` + `docs/ai/HANDOFF_PENANCE_SIN_RT2_PILOT_NEXT_2026-06-10.md`.
Lire les notes