U-PLAN-2 : audit avant depart (lot UA, porte G-U), orchestration Opus high avec delegation jusqu'a Fable (CHG-248)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
edujiro5972 2026-10-08 09:34:41 +02:00
parent f953e0393f
commit a47b4791a7
2 changed files with 60 additions and 22 deletions

View file

@ -2,6 +2,12 @@
name: Migration UE 5.5 → UE 5.8 (U) name: Migration UE 5.5 → UE 5.8 (U)
overview: Porter LifePlay Revival d'Unreal Engine 5.5 vers 5.8 (dernière version majeure d'UE5). La référence de comportement devient le jeu 5.5 validé ; tout ce qui sert à la comparaison avec UE 4.27 est abandonné ; seule la gestion des mods est figée (contrat inchangé, mods recuits). overview: Porter LifePlay Revival d'Unreal Engine 5.5 vers 5.8 (dernière version majeure d'UE5). La référence de comportement devient le jeu 5.5 validé ; tout ce qui sert à la comparaison avec UE 4.27 est abandonné ; seule la gestion des mods est figée (contrat inchangé, mods recuits).
todos: todos:
- id: lot-ua
content: Lot UA — Audit avant départ (jeu, plugins, mods, moteur ; essai de compilation 5.8 ; effort et risques)
status: pending
- id: gate-gu
content: Porte G-U — go / no-go de l'utilisateur sur la base de l'audit (aucun portage avant)
status: pending
- id: lot-u0 - id: lot-u0
content: Lot U0 — Préparation (moteur 5.8, chaîne de compilation, copie de travail, décisions) content: Lot U0 — Préparation (moteur 5.8, chaîne de compilation, copie de travail, décisions)
status: pending status: pending
@ -83,29 +89,60 @@ le même, mais **chaque mod d'assets doit être recuit** contre la nouvelle vers
(`lpr_hair_pocolov`, `lpr_anim_quaternius`, `lpr_anim_freeanims`) ; les mods texte (`Content/Modules`) ne changent pas. (`lpr_hair_pocolov`, `lpr_anim_quaternius`, `lpr_anim_freeanims`) ; les mods texte (`Content/Modules`) ne changent pas.
L'avertissement de version du gestionnaire signale déjà un mod cuit pour une autre version. L'avertissement de version du gestionnaire signale déjà un mod cuit pour une autre version.
## Matrice modèles IA ↔ complexité ## Orchestration et niveaux de modèles (règle utilisateur du 2026-10-08)
| Palier | Complexité | Modèle | Profil | **Opus en effort high est l'orchestrateur principal** (découpage, évaluation de complexité, fiches, vérification,
communication). Il délègue vers le bas les tâches simples et **vers le haut les plus lourdes, jusqu'à Fable**.
| Niveau | Modèle (agent) | Note de complexité | Profil |
|---|---|---|---| |---|---|---|---|
| M0 | mécanique | haiku | installation vérifiée, compilation + journal, cuisson, copies | | N0 | Haiku (`haiku`) | 0–2 | compilation + journal, copies, inventaires en lecture seule |
| M1 | exploration large | haiku (Explore) | inventaires, recherches multi-chemins | | N1 | Sonnet (`sonnet`) | 3–4 | outillage spécifié, retraits mécaniques, docs, commits, VAL bornées, A/B de journaux |
| M2 | raisonnement ciblé | sonnet | specs bornées, retraits, docs, VAL, A/B de journaux, commits | | N2 | Opus high (orchestrateur, session principale) | 5–6 | fiches, arbitrages courants, vérification, code moyen ; pas de build |
| M3 | refactor | opus (session principale) | correctifs d'API 5.8, plugins, sous-systèmes | | N3 | Opus xhigh (`opus-xhigh`) | 7–8 | portage d'API, refactor multi-fichiers, diagnostic sur graphe d'appels, audit d'un sous-système |
| M4 | synthèse / décision | opus (session principale) | portes, arbitrages, évaluation | | N4 | Opus max (`opus-max`) | 9–10 | portage transversal, diagnostic sans piste, synthèse sur de nombreuses sources ; échec de N3 |
| N5 | Fable (`fable-top`) | 11–12 | enjeu maximal ou échec de N4 |
Règles de secours et pièges : comme `21_Sandbox_Addon.md` (fiche « n'écris aucun script ; en cas d'échec, recopie **Grille de complexité** (chaque critère de 0 à 2, total 0–12) : (a) étendue, (b) couplage (graphe d'appels, Blueprints,
l'erreur ») ; mémoire `lifeplay-build-pitfalls` ; mesures en build empaqueté Development seulement ; tests d'empaquetage données partagées), (c) incertitude, (d) coût d'erreur / réversibilité, (e) difficulté de vérification, (f) jugement
avec nouvelle partie (liste des villes) et Continuer. requis. Ajustement d'un niveau seulement avec motif écrit ; escalade d'un niveau sur échec ou réponse incertaine.
**Fiche obligatoire (9 rubriques)** : objectif ; note de complexité et niveau ; contexte minimal ; entrées / commandes
exactes ; pièges ; interdits ; livrable (établi / estimé / incertain) ; critère d'acceptation ; conditions d'arrêt et
d'escalade. Détail : mémoire `feedback-subagents-by-task`.
Pièges : mémoire `lifeplay-build-pitfalls` ; mesures en build empaqueté Development seulement ; tests d'empaquetage
avec nouvelle partie (liste des villes) et Continuer ; une preuve par l'échec n'est jamais confiée à N0.
## Lots et fiches ## Lots et fiches
### UA — Audit avant départ (aucun fichier du projet modifié)
But : une vision claire des impacts, de l'effort et des risques **avant** toute action de portage. Livrables sous
`etat/U58/UA/`. Les tâches T1 à T4 sont indépendantes (parallèles) ; T5 exige UE 5.8 installé ; T6 les consomme toutes.
| Fiche | Objet | Note a–f (total) | Niveau | Livrable |
|---|---|---|---|---|
| UA-T1 | **Jeu** : modules C++ (`LifePlay`, `LifePlayEditorTools`), sous-systèmes, API moteur utilisées (inventaire par module UE : includes, classes, fonctions), volume Blueprints (nombre, taille, nœuds natifs appelés), configuration (`Config/*.ini` : rendu, empaquetage, IoStore, scalabilité), cibles de build | 1-1-0-0-1-0 (3) | N1 | `UA-JEU.md` |
| UA-T2 | **Plugins** : `StreetMap` (origine, version, API utilisées, maintenance), `ModdingExtra`, `LPAnimCore`, `McpAutomationBridge`, plugins moteur activés par le `.uproject`, addon `LifePlay-Sandbox` (`LPSandbox`, `LPAnimMeasure`, `LPModTools`) ; compatibilité 5.8 connue | 1-1-2-0-1-1 (6) +1 recherche externe | N3 | `UA-PLUGINS.md` |
| UA-T3 | **Mods (contrat figé)** : toutes les surfaces du contrat — lecture des `.lpmod` (`GI`, `LPModInfoSubsystem`, `LPDataCache`), `ModdingExtra`, `GI.ModEnableds`, gestionnaire de mods, `LPHairstyleSubsystem`, `LPModDailies`, montage des plugins `Mods/` (paquets, registre d'assets dans le paquet), chaîne de cuisson DLC contre la version de référence (atelier de l'addon), avertissement de version ; ce qu'un changement de moteur casse ou non ; mods existants à recuire | 2-2-1-2-1-1 (9) | N4 | `UA-MODS.md` |
| UA-T4 | **Moteur** : installation 5.5 actuelle (binaire Launcher, plugins ajoutés au moteur, configuration machine), chaîne de compilation ; changements 5.6, 5.7, 5.8 tirés des notes officielles (API retirées / dépréciées, modules renommés, empaquetage, rendu par défaut, Blueprints, sémantique des chaînes et conteneurs) croisés avec UA-T1/T2 | 2-1-2-1-1-2 (9) | N4 | `UA-MOTEUR.md` |
| UA-T5 | **Essai de compilation 5.8** (prérequis : UE 5.8 installé) : copie jetable de `Source/`, `Plugins/`, `.uproject` hors du projet, association 5.8, compilation éditeur ; décompte des erreurs et avertissements par cause, sans aucune correction (« l'échec EST le résultat ») | 1-0-1-0-0-0 (2) +1 preuve par l'échec | N1 | `UA-ESSAI.md` |
| UA-T6 | **Effort et risques** : pour chaque lot U0–U9, effort estimé (nombre de séances, niveaux de modèles mobilisés, durées de build/cuisson, actions utilisateur) avec méthode d'estimation ; registre des risques (probabilité × impact, signal, parade, plan de repli) ; points de non-retour ; recommandation go / no-go argumentée | 2-2-2-1-2-2 (11) | N5 | `UA-SYNTHESE.md` |
Vérification de chaque livrable par l'orchestrateur (preuves, cohérence entre T1–T5, distinction établi / estimé).
### Porte G-U — Go / no-go (utilisateur)
- Entrée : `UA-SYNTHESE.md` et les cinq rapports. Sortie : go (U0 démarre), go partiel (lots reportés), ou no-go
(le jeu reste en 5.5). **Aucun lot U0–U9 ne démarre avant cette porte.**
### U0 — Préparation (Orch + utilisateur) ### U0 — Préparation (Orch + utilisateur)
- **U0-T1 (utilisateur)** : installer UE 5.8 par l'Epic Games Launcher dans `D:\Game\Launcher\Engine\UE_5.8`. - **U0-T1 (utilisateur)** : installer UE 5.8 par l'Epic Games Launcher dans `D:\Game\Launcher\Engine\UE_5.8`.
- **U0-T2 (M0 haiku)** : vérifier l'installation (`Build.bat -help`), relever la chaîne exigée par 5.8 (Visual Studio, MSVC, SDK Windows) depuis les notes officielles et la comparer à l'existant ; livrable `etat/U58/U0/U0-ENV.md`. - **U0-T2 (N0)** : vérifier l'installation (`Build.bat -help`), relever la chaîne exigée par 5.8 (Visual Studio, MSVC, SDK Windows) depuis les notes officielles et la comparer à l'existant ; livrable `etat/U58/U0/U0-ENV.md`.
- **U0-T3 (M2 sonnet)** : tag local `ue5.5-final` sur `main` ; copie de travail P4 (robocopy, exclusions) ; branche `ue5.8` ; dépôt des modules recopié ; contrôle `git status` propre. - **U0-T3 (N1)** : tag local `ue5.5-final` sur `main` ; copie de travail P4 (robocopy, exclusions) ; branche `ue5.8` ; dépôt des modules recopié ; contrôle `git status` propre.
- **U0-T4 (M4)** : décisions P1–P7 validées par l'utilisateur → section « verrouillées ». - **U0-T4 (N2, orchestrateur + utilisateur)** : décisions P1–P7 validées par l'utilisateur → section « verrouillées ».
### U1 — Cartographie (M2 sonnet, + M1 haiku pour les recherches) ### U1 — Cartographie détaillée (N1 ; N3 pour un point que l'audit UA laisse ouvert) — complète UA, fichier par fichier
- notes de mise à niveau officielles 5.6, 5.7, 5.8 (API C++ dépréciées / retirées, modules renommés, réglages de projet, - notes de mise à niveau officielles 5.6, 5.7, 5.8 (API C++ dépréciées / retirées, modules renommés, réglages de projet,
empaquetage, IoStore, Substrate, Lumen/MegaLights par défaut) croisées avec nos sources (`Source/`, `Plugins/`, addon) ; empaquetage, IoStore, Substrate, Lumen/MegaLights par défaut) croisées avec nos sources (`Source/`, `Plugins/`, addon) ;
- état de chaque plugin (`StreetMap` : origine et compatibilité 5.8 ; `ModdingExtra`, `LPAnimCore` ; addon) ; - état de chaque plugin (`StreetMap` : origine et compatibilité 5.8 ; `ModdingExtra`, `LPAnimCore` ; addon) ;
@ -113,38 +150,38 @@ avec nouvelle partie (liste des villes) et Continuer.
- chemins moteur codés en dur (`UE_5.5` dans `Tools/`, lanceurs `.bat`, mémoire) ; - chemins moteur codés en dur (`UE_5.5` dans `Tools/`, lanceurs `.bat`, mémoire) ;
- livrable `etat/U58/U1/U1-CART.md` ; handoff → U2/U3. - livrable `etat/U58/U1/U1-CART.md` ; handoff → U2/U3.
### U2 — Retrait 4.27 et chemin moteur (M2 sonnet) ### U2 — Retrait 4.27 et chemin moteur (N1)
- retrait des commandlets P3 et de leurs entrées Build.cs ; `Config` et `Tools` sans référence 4.27 ; - retrait des commandlets P3 et de leurs entrées Build.cs ; `Config` et `Tools` sans référence 4.27 ;
- un seul point de configuration du moteur (`Tools/Engine.ps1` lu par tous les scripts et lanceurs) ; - un seul point de configuration du moteur (`Tools/Engine.ps1` lu par tous les scripts et lanceurs) ;
- docs : bandeau « historique 4.27 » sur les docs concernés (pas de réécriture du passé) ; - docs : bandeau « historique 4.27 » sur les docs concernés (pas de réécriture du passé) ;
- compilation 5.5 inchangée (A-BUILD haiku) avant bascule. - compilation 5.5 inchangée (A-BUILD haiku) avant bascule.
### U3 — Bascule moteur et compilation (M3 opus + M0 haiku) ### U3 — Bascule moteur et compilation (N3 pour les correctifs, N4 en cas de blocage ; N0 pour les compilations)
- `EngineAssociation` 5.8, régénération des fichiers de projet, compilation `LifePlayEditor` ; boucle erreurs → - `EngineAssociation` 5.8, régénération des fichiers de projet, compilation `LifePlayEditor` ; boucle erreurs →
correctifs (opus) → compilation (haiku) ; cible : 0 erreur, avertissements de dépréciation listés. correctifs (opus) → compilation (haiku) ; cible : 0 erreur, avertissements de dépréciation listés.
### U4 — Plugins tiers et addon (M3 opus + M2 sonnet) ### U4 — Plugins tiers et addon (N3 + N1)
- `StreetMap`, `ModdingExtra`, `LPAnimCore` compilés 5.8 ; `McpAutomationBridge` selon P7 ; - `StreetMap`, `ModdingExtra`, `LPAnimCore` compilés 5.8 ; `McpAutomationBridge` selon P7 ;
- addon `LifePlay-Sandbox` : branche `ue5.8`, compilation, tournée Mesure (non-régression des JSON/CSV contre la - addon `LifePlay-Sandbox` : branche `ue5.8`, compilation, tournée Mesure (non-régression des JSON/CSV contre la
référence 5.5, comme SB2-T5). référence 5.5, comme SB2-T5).
### U5 — Contenu (M2 sonnet + M0 haiku) ### U5 — Contenu (N1 + N0)
- ouverture du projet, `LPResavePackages` sur tout `Content`, journal de chargement sans erreur ; cuisson sans - ouverture du projet, `LPResavePackages` sur tout `Content`, journal de chargement sans erreur ; cuisson sans
avertissement ; `LPCheckStreetMap` (280 villes) ; relevé des nœuds Blueprint dépréciés et correctifs. avertissement ; `LPCheckStreetMap` (280 villes) ; relevé des nœuds Blueprint dépréciés et correctifs.
### U6 — Comportement en jeu (M2 sonnet + utilisateur) ### U6 — Comportement en jeu (N1 + utilisateur ; N3 pour un écart inexpliqué)
- build empaqueté Development 5.8 ; A/B contre le build 5.5 sur le même parcours (nouvelle partie + Continuer, - build empaqueté Development 5.8 ; A/B contre le build 5.5 sur le même parcours (nouvelle partie + Continuer,
`LogStats`) ; réglages vidéo (VQ) revus pour 5.8 ; contrôle visuel utilisateur ; registre des erreurs mis à jour. `LogStats`) ; réglages vidéo (VQ) revus pour 5.8 ; contrôle visuel utilisateur ; registre des erreurs mis à jour.
### U7 — Mods (M2 sonnet + utilisateur) ### U7 — Mods (N1 + utilisateur ; N3 si une surface du contrat bouge)
- version de référence `Releases/2026.10.2.0` ; recuisson des 3 mods d'assets dans l'atelier (addon) ; contrôle que - version de référence `Releases/2026.10.2.0` ; recuisson des 3 mods d'assets dans l'atelier (addon) ; contrôle que
le contrat est inchangé (structure, `.lpmod`, gestionnaire, avertissement de version) ; essai en jeu. le contrat est inchangé (structure, `.lpmod`, gestionnaire, avertissement de version) ; essai en jeu.
### U8 — Shipping, publication, évaluation (M2 sonnet + M4) ### U8 — Shipping, publication, évaluation (N1 + N2)
- build Shipping, archives (règles de publication), README ; évaluation multi-agents (modèle prévu / utilisé) ; - build Shipping, archives (règles de publication), README ; évaluation multi-agents (modèle prévu / utilisé) ;
porte de publication (utilisateur). porte de publication (utilisateur).
### U9 — Voie alternative UE5 native (M3 opus + M2 sonnet), en parallèle de U5–U6 ### U9 — Voie alternative UE5 native (N3 + N1), en parallèle de U5–U6
- pour chaque correctif (`LPStringCompat` : ParseIntoArray, Find / Contains / Split ; `LPMeshCompat` ; - pour chaque correctif (`LPStringCompat` : ParseIntoArray, Find / Contains / Split ; `LPMeshCompat` ;
`LPNavigationHelpers` ; padding des boutons) : inventaire des Blueprints appelants et des cas où les sémantiques UE4 `LPNavigationHelpers` ; padding des boutons) : inventaire des Blueprints appelants et des cas où les sémantiques UE4
et UE5 divergent ; et UE5 divergent ;

View file

@ -1131,6 +1131,7 @@ Validation L7c/L7d (2026-10-02, parc, même cadrage) : la nuit reste claire (sol
| CHG-155 | 2026-10-05 | ShowCouple | Un lit est reconnu par son nom. Il ne bloque un déplacement que vers le bas, pour se poser ; le retour horizontal n'est plus arrêté et le contact ne renvoie plus la boîte | après avoir quitté le lit, la boîte ne pouvait plus y revenir | revenir au test `DoesPackageExist` et au filtre du flanc seul | | CHG-155 | 2026-10-05 | ShowCouple | Un lit est reconnu par son nom. Il ne bloque un déplacement que vers le bas, pour se poser ; le retour horizontal n'est plus arrêté et le contact ne renvoie plus la boîte | après avoir quitté le lit, la boîte ne pouvait plus y revenir | revenir au test `DoesPackageExist` et au filtre du flanc seul |
| CHG-156 | 2026-10-05 | Clavier | `LPKeyboardSubsystem` : bouton « Clavier » ajouté à l'exécution dans `MainMenu.SettingsScrollBox` ; panneau pour changer, ajouter ou retirer une touche (actions et axes clavier). Écrit dans `Saved/Config/Windows`, pas dans `GameSettings.sav` | pouvoir réaffecter les touches, dont Q, sans modifier les Blueprints | retirer `LPKeyboardSubsystem.h/.cpp` et la dépendance `UMG` | | CHG-156 | 2026-10-05 | Clavier | `LPKeyboardSubsystem` : bouton « Clavier » ajouté à l'exécution dans `MainMenu.SettingsScrollBox` ; panneau pour changer, ajouter ou retirer une touche (actions et axes clavier). Écrit dans `Saved/Config/Windows`, pas dans `GameSettings.sav` | pouvoir réaffecter les touches, dont Q, sans modifier les Blueprints | retirer `LPKeyboardSubsystem.h/.cpp` et la dépendance `UMG` |
| CHG-158 | 2026-10-05 | Réglages | `LPSettingsSubsystem` : onglets Audio, Video, Lewd, General, Keyboard, Misc au-dessus de `SettingsScrollBox`. Les lignes du Blueprint restent en place et sont montrées selon leur texte ; le reste va dans Misc. Keyboard affiche la liste des touches | la liste unique ne montrait pas le clavier | retirer `LPSettingsSubsystem.h/.cpp` | | CHG-158 | 2026-10-05 | Réglages | `LPSettingsSubsystem` : onglets Audio, Video, Lewd, General, Keyboard, Misc au-dessus de `SettingsScrollBox`. Les lignes du Blueprint restent en place et sont montrées selon leur texte ; le reste va dans Misc. Keyboard affiche la liste des touches | la liste unique ne montrait pas le clavier | retirer `LPSettingsSubsystem.h/.cpp` |
| CHG-248 | 2026-10-08 | U-PLAN-2 | `Docs/Migration/27_Plan_Migration_UE58.md` | lot UA (audit jeu, plugins, mods, moteur, essai de compilation 5.8, effort et risques) et porte G-U avant tout portage ; orchestration révisée : Opus high orchestre, délègue jusqu'à Fable (niveaux N0–N5, grille de complexité a–f, fiche à 9 rubriques) ; agents `opus-xhigh`, `opus-max`, `fable-top` dans `~/.claude/agents/` | document seul : `git revert` du commit |
| CHG-247 | 2026-10-08 | U-PLAN | `Docs/Migration/27_Plan_Migration_UE58.md` (nouveau), index `Docs/Migration/README.md` | plan de migration UE 5.5 → 5.8 (lots U0–U9) ; décisions utilisateur : 4.27 abandonné, gestion des mods figée, correctifs UE4 gardés avec voie UE5 préparée (U9), commandlets du portage 4.27 retirés (U2), dossier séparé `LifePlay-master 5.8`, V2.0 (2026.10.2.0) | document seul : `git revert` du commit | | CHG-247 | 2026-10-08 | U-PLAN | `Docs/Migration/27_Plan_Migration_UE58.md` (nouveau), index `Docs/Migration/README.md` | plan de migration UE 5.5 → 5.8 (lots U0–U9) ; décisions utilisateur : 4.27 abandonné, gestion des mods figée, correctifs UE4 gardés avec voie UE5 préparée (U9), commandlets du portage 4.27 retirés (U2), dossier séparé `LifePlay-master 5.8`, V2.0 (2026.10.2.0) | document seul : `git revert` du commit |
| CHG-246 | 2026-10-08 | DOCNUM | `Docs/Migration/23_Video_Quality.md` → `25_Video_Quality.md`, `24_Eval_Agents_VideoQuality.md` → `26_Eval_Agents_VideoQuality.md` (`git mv`, titres « 25 — », « 26 — »), références mises à jour (journal CHG-237 à 240, `etat/VQ/VQ5/VQ5-VAL.md`, docs 25/26), index `Docs/Migration/README.md` complété (20, 21, 22, 24, 25, 26), report « numéros en double » de `21_Sandbox_Addon.md` coché | numéros de docs en double (23, 24) ; renumérotation par ordre de création | `.\Tools\Restore.ps1 -Lot DOCNUM` | | CHG-246 | 2026-10-08 | DOCNUM | `Docs/Migration/23_Video_Quality.md` → `25_Video_Quality.md`, `24_Eval_Agents_VideoQuality.md` → `26_Eval_Agents_VideoQuality.md` (`git mv`, titres « 25 — », « 26 — »), références mises à jour (journal CHG-237 à 240, `etat/VQ/VQ5/VQ5-VAL.md`, docs 25/26), index `Docs/Migration/README.md` complété (20, 21, 22, 24, 25, 26), report « numéros en double » de `21_Sandbox_Addon.md` coché | numéros de docs en double (23, 24) ; renumérotation par ordre de création | `.\Tools\Restore.ps1 -Lot DOCNUM` |
| CHG-245 | 2026-10-07 | DC4 | `LifePlay.uproject` (plugin `McpAutomationBridge` `"Optional": true`), `Source/LifePlay/LifePlay.Build.cs` (dépendance `Json` retirée), docs (`09_Commandes_Utiles.md`, `18_Build_Debug.md`, `21_Sandbox_Addon.md`, `24_Plan_Decouplage_Sandbox.md`, `etat/sandbox/DC4/*`) (commit code `fbbcee1`) | preuve « jeu seul » : clone strictement propre sans addon compile (éditeur + Development, code 0), build Development empaqueté sans addon (BUILD SUCCESSFUL), test en jeu utilisateur (nouvelle partie, sauvegarde, Continuer) ; défaut trouvé : `McpAutomationBridge` (ignoré par git) bloquait un clone propre ; piège UBT `Makefile.bin` documenté dans `09`/`18`. Motif : prouver que le jeu public compile et tourne sans l'addon `LifePlay-Sandbox` | pin inchangé `79f0205` | `.\Tools\Restore.ps1 -Lot DC4` | | CHG-245 | 2026-10-07 | DC4 | `LifePlay.uproject` (plugin `McpAutomationBridge` `"Optional": true`), `Source/LifePlay/LifePlay.Build.cs` (dépendance `Json` retirée), docs (`09_Commandes_Utiles.md`, `18_Build_Debug.md`, `21_Sandbox_Addon.md`, `24_Plan_Decouplage_Sandbox.md`, `etat/sandbox/DC4/*`) (commit code `fbbcee1`) | preuve « jeu seul » : clone strictement propre sans addon compile (éditeur + Development, code 0), build Development empaqueté sans addon (BUILD SUCCESSFUL), test en jeu utilisateur (nouvelle partie, sauvegarde, Continuer) ; défaut trouvé : `McpAutomationBridge` (ignoré par git) bloquait un clone propre ; piège UBT `Makefile.bin` documenté dans `09`/`18`. Motif : prouver que le jeu public compile et tourne sans l'addon `LifePlay-Sandbox` | pin inchangé `79f0205` | `.\Tools\Restore.ps1 -Lot DC4` |