LifePlay-Revival/Docs/Migration/28_Synthese_Migration_UE58.md
edujiro5972 d4d9726c38 U1 : cartographie 5.5 vers 5.8 (mods, correctifs, reliquats 4.27, releve Blueprint), pin addon f0af432 (CHG-251)
- plan 27 : decisions utilisateur U2 (dossiers _5.8, references 5.8, libelles LPStringCompat, TAA garde, ReimportCorrectif adapte), actions U3/U5 issues de U1
- synthese 28 : section 2.7 cartographie U1, contradictions C12-C14, points ouverts
- 21_Sandbox_Addon.md : pin addon f0af432 consigne ici (etat/ local)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 20:31:13 +02:00

340 lines
32 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 28 — Synthèse de la migration UE 5.5 → 5.8 (audit UA, porte G-U, lot SK)
Fiche U0-DOC1 — Niveau N1 — Modèle prévu sonnet | utilisé sonnet — Agent lp-writer — Skills sk-protocol, lp-doc, lp-lot
Mise à jour U1-DOC — Niveau N1 — Modèle prévu sonnet | utilisé claude-sonnet-5-5 — Agent lp-writer
Date : 2026-10-08. Complète le plan [27_Plan_Migration_UE58.md](27_Plan_Migration_UE58.md) (décisions et lots : on n'y
revient pas ici). Ce document se suffit à lui-même : il reprend les constats de l'audit UA, l'effort et les risques, les
décisions de la porte G-U, l'arbre de compétences des sous-agents (lot SK) et tient le journal des lots U0 à U9.
## 1. Objet et statut des sources
- Les fiches de travail de l'audit UA et du lot SK vivent dans le dossier `Docs/Migration/etat/`, **local et hors git**
(décision de l'utilisateur, 2026-10-08) ; copie de sûreté : `D:\Game\LifePlay_Backup_5.5\etat\`. Ce document les remplace
dans le dépôt ; il ne renvoie à aucune d'elles par lien.
- Sources de synthèse : fiches UA-T1 à UA-T7 (jeu, plugins, mods, moteur, essai de compilation, synthèse, outils),
UA-FAB, fiches SK-T1 à SK-T4. L'essai de compilation 5.8 (UA-ESSAI) **fait foi** sur les audits antérieurs.
- Conventions (comme les docs 25 à 27) : **établi** = constaté dans un fichier ou un journal, avec référence ;
**estimé** = déduit, méthode dite ; **incertain** = ne se tranche que par un essai nommé. Les décisions appartiennent à
l'utilisateur. Unité d'effort : 1 séance ≈ une demi-journée ≈ 3 h de travail orchestré, builds compris.
- Moteurs : 5.5.4 (projet actuel) et 5.8.3 (CL 58210709, installé le 2026-10-08) ; 4.27.2 abandonné.
## 2. Audit UA — constats établis par domaine
### 2.1 Jeu (UA-T1)
| Constat | Statut | Preuve |
|---|---|---|
| Module `LifePlay` : 51 fichiers, 9 212 lignes, 25 UCLASS dont 16 sous-systèmes ; 17 fonctions exposées aux Blueprints | établi | `Source/LifePlay/*.h` (UA-JEU § 1) |
| Module `LifePlayEditorTools` : 69 fichiers, 7 915 lignes, 32 UCLASS (tous des commandlets) | établi | `Source/LifePlayEditorTools/` (UA-JEU § 1) |
| Cibles en `BuildSettingsVersion.V5` et `Unreal5_5` : elles bloquent la cible éditeur sous 5.8 | établi | `Source/LifePlay.Target.cs:11-13`, `Source/LifePlayEditor.Target.cs:11-13` ; essai A (voir 2.5) |
| 40 lignes `FTSTicker` dans 14 sous-systèmes ; `FTSTicker`, `FSavePackageArgs`, `IPluginManager::GetEnabledPlugins*` inchangés en 5.8 | établi | `LPColorGradeSubsystem.cpp:76,81` ; en-têtes 5.8 (UA-MOTEUR c20) |
| 32 commandlets : 18 classés « portage 4.27 », 1 portage/optimisation, 3 diagnostics ponctuels, 10 outils actifs | établi (décompte) ; classement à confirmer par le propriétaire | en-têtes des `*Commandlet.h` (UA-JEU § 3) |
| `Content` : 9 068 `.uasset` dont 8 270 sous `Heavy` (6 219,3 Mo) et 798 hors `Heavy` ; `BPs/GI` 51,9 Mo | établi | `find Content -name '*.uasset'` (UA-JEU § 4) |
| Rendu verrouillé : TAA (`r.AntiAliasingMethod=2`), sans Lumen, sans VSM, SSR ; DX12 | établi | `Config/DefaultEngine.ini` (UA-JEU § 5.2) |
| Empaquetage pak + IoStore, `StagingDirectory` codé en dur, clé `bUseZenStore` absente (le défaut moteur s'applique) | établi | `Config/DefaultGame.ini` (UA-JEU § 5.3, UA-MOTEUR (a)) |
| `r.TranslucencyLightingVolumeDim` renommée `r.TranslucencyLightingVolume.Dim` (alias déprécié, appliqué avec avertissement) | établi | `UE_5.8/Engine/Source/Runtime/Renderer/Private/TranslucentLighting.cpp:3398` |
| `r.PostProcessAAQuality` et `r.MinScreenRadiusForCSMDepth` introuvables dans le code des deux moteurs (clés probablement déjà sans effet en 5.5) | incertain | essai : lire la valeur par la console (UA-MOTEUR c11, c12) |
| 10 scripts codent le chemin `UE_5.5` (2 côté jeu, 8 côté addon) | établi | `Tools/BuildDebug.ps1:19`, `Tools/RunCommandlet.ps1:20` (UA-OUTILS § 2) |
| Graphes Blueprint : nœuds dépréciés par 5.6 à 5.8 sur `GI`, `Person`, `UI/ModManager`, `UI/ModuleTick`, `UI/MainMenu`, `CharGen` | incertain | aucun `.uasset` ouvert en UA ; Blueprint Reader en 5.5 puis `CompileAllBlueprints` en 5.8 |
### 2.2 Plugins (UA-T2, corrigé par l'essai)
| Constat | Statut | Preuve |
|---|---|---|
| `LPAnimCore` : 5 fichiers, 783 lignes ; `ModdingExtra` : 6 fichiers, 655 lignes, 12 assets y font référence | établi | `Plugins/LPAnimCore`, `Plugins/ModdingExtra` (UA-PLUGINS § 1-2) |
| `UAnimSequence::GetCompressedTrackToSkeletonMapTable` n'existe plus : rupture certaine | établi | `Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:127` (essai A1/A2) |
| `GetBoneTransform(..., double Time, ...)` à `LPCoupleSimCore.cpp:155` : probablement sans correction (le même appel compile) | incertain | `LPPoseMeasure.cpp:1283` compile (`essai-A1.log:99-100`) ; masqué par l'erreur de `:127` |
| `StreetMap` (tiers, MIT) compile : 0 erreur, 7 C4996 ; 310 assets du jeu le référencent ; amont figé depuis 2023 | établi (compilation) ; estimé (amont) | `StreetMapSceneProxy.cpp:21`, `StreetMapComponentDetails.cpp:36,51,157,165,173,299` ; recherche web UA-PLUGINS |
| Rendu du proxy `StreetMap` sous le renderer 5.8 identique à 5.5 | incertain | captures même cadrage (U5/U6), `LPCheckStreetMap` 280/280 |
| `McpAutomationBridge` compile sous 5.8 (0 erreur) mais ajoute ≈ 20 min à un build complet | établi | durée 25,5 min (A2) contre 4,9 min (B) |
| `Fab` et `Bridge` sont présents dans 5.8 (l'hypothèse « absents » est infirmée) | établi | UA-ESSAI § 4 ; le `.uproject` ne les marque pas `Optional` |
| Addon : `LPSandbox`, `LPAnimMeasure`, `LPModTools` compilés ; 1 C4996 | établi | `essai-A1.log:81-304` ; `LPHairFromStaticMeshCommandlet.cpp:430` |
### 2.3 Mods — contrat figé (UA-T3)
| Constat | Statut | Preuve |
|---|---|---|
| Le contrat compte 17 surfaces (S1-S17) : fichiers texte (`.lpmod`, `.lphair`, données de module, `GI.ModEnableds`, `GameSettings.sav`), gestionnaire de mods, plugin `Mods/<id>/`, conteneur cuit, version de référence | établi | UA-MODS § 1 ; ex. `Source/LifePlay/LPModInfoSubsystem.cpp:49-72` |
| Aucune surface texte ne change de format avec le moteur ; le code lecteur est à recompiler, les Blueprints à réenregistrer | établi | UA-MODS § 2 |
| Tout conteneur cuit pour 5.5 est à recuire : cuisson sans version, le chargeur applique alors la version du moteur courant | établi | `ProjectParams.cs:1989`, `CookCommand.Automation.cs:44-46`, `AsyncLoading2.cpp:6525-6528` |
| Un conteneur 5.5 monté par 5.8 : refus propre, erreur de chargement ou plantage (le TOC 5.5 serait accepté) | incertain | test T4 de U7 (`IoStore.cpp:1140-1147`) |
| L'avertissement de version ne couvre que les modules cochés, 2 s après le démarrage | établi | `LPModInfoSubsystem.cpp:124-150` |
| Versions de référence présentes : `Releases/2026.10.1.5` et `2026.10.1.6` (1,3 Go chacune) ; il faut recréer `2026.10.2.0` | établi | UA-MODS S12 ; `.gitignore:46` |
| 3 mods d'assets à recuire (1 de coiffures, 2 d'animations) ; mods texte inchangés | établi | UA-MODS § 1 |
| Interaction du Zen store avec `-createreleaseversion` / `-basedonreleaseversion` | incertain | neutralisée par la décision D1 ; sinon test R1 de UA-MODS |
| Une sauvegarde `GameSettings.sav` 5.5 est relue par 5.8 | estimé | en-tête versionné (`GameplayStatics.cpp:123-141`) ; test T6 |
### 2.4 Moteur (UA-T4)
| Constat | Statut | Preuve |
|---|---|---|
| Cible Windows minimale : Windows 10 (`0xA00`) ; Windows 7/8 exclus | établi | `UE_5.8/Engine/Config/Windows/Windows_SDK.json:89` |
| MSVC `14.44.35207` **n'est pas banni** (le ban vise la version du compilateur 19.44.0-35210) ; 5.8 préfère 14.50.35717+ puis 14.44.35207+ | établi | `MicrosoftPlatformSDK.cs:1156` ; `Windows_SDK.json:31-46` (correction apportée à UA-MOTEUR) |
| Zen store activé par défaut en 5.8 (5.5 : `False`) | établi | `UE_5.8/Engine/Config/BaseGame.ini:95` |
| `FJsonObject` : clés `FStringView`, `Values` n'est plus un `TMap<FString,...>` sauf `UE_JSONOBJECT_LEGACY_STRING_KEYS=1` | établi | `UE_5.8/.../Json/Public/Dom/JsonObject.h:36-53,153-183` |
| Audio Windows par défaut : WASAPI (5.5 : XAudio2) | établi | `UE_5.8/Engine/Config/Windows/WindowsEngine.ini` |
| Substrate, Lumen, MegaLights : défauts inchangés pour un projet existant ; TAA reste disponible | établi | `RenderUtils.cpp:2069` ; `RendererSettings.h:194-199` (UA-MOTEUR c14-c16) |
| Navigation, registre d'assets, `FString::ParseIntoArray` / `Find` : API présentes, sémantique non modifiée | établi (code) ; incertain (corps non comparé ligne à ligne) | `String.cpp.inl:479,1356-1365` ; test `LPTestStringCompat` en U3 |
| Nouvelles clés de scalabilité de base (`r.Fog.SeparateComposition`, volumes hétérogènes) peuvent changer les brouillards aux niveaux 0-1 | établi (clés) ; estimé (effet visuel) | diff de `BaseScalability.ini` 5.5/5.8 ; contrôle en U6 |
| Notes officielles 5.6 et 5.7 lues en entier seulement pour « Upgrade Notes » et « Platform SDK Upgrades » (reste filtré par mots-clés) | incertain | diff ciblé du code moteur en U1 |
### 2.5 Essai de compilation 5.8 (UA-T5) — copie jetable, aucune correction
Commande commune : `Build.bat LifePlayEditor Win64 Development -Project=<copie> -WaitMutex -NoHotReload` sur 5.8.3 complet ;
toolchain retenue par UBT : `14.50.35739` (VS 2026), SDK 22621, .NET 10 embarqué.
| Passage | Réglage de la copie | Résultat | Durée |
|---|---|---|---|
| A | cibles d'origine (V5) | code 6, blocage de règle de cible avant compilation, 0 erreur C++ | 9,9 s |
| A1 | `bOverrideBuildEnvironment = true` | 5 lignes d'erreur (2 causes), 9 C4996 ; 120 compilations lancées sur 143 | 26,5 min |
| A2 | `BuildSettingsVersion.Latest` | mêmes erreurs et avertissements que A1 : le mode strict n'ajoute rien | 25,5 min |
| B | A2 sans `McpAutomationBridge` | mêmes erreurs ; 7 C4996 (2 modules non atteints) | 4,9 min |
**Les 2 erreurs de compilation** (établies, identiques en A1, A2 et B) :
| # | Cause | Fichier:ligne | Erreurs |
|---|---|---|---|
| 1 | `UAnimSequence::GetCompressedTrackToSkeletonMapTable` supprimée du moteur | `Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:127` | C2039, C2530, 2 × C2143 |
| 2 | `TMap<FString,...>::Contains` appelé avec le nouveau type de clé `FJsonObject` | `Plugins/ModdingExtra/Source/ModdingExtra/Private/LPDataCache.cpp:198` | C2664 |
9 avertissements C4996 (établi) : 7 dans `StreetMap` (`GetMaterialRelevance`, `GetDetailsView` ×2, `FSlateFontInfo` ×3,
`ImportVersion`), 1 dans `LPDumpAssetsCommandlet.cpp:110` (`GetObjectsWithPackage(bool)`), 1 dans l'addon
(`LPHairFromStaticMeshCommandlet.cpp:430`). Statuts : toutes les unités de compilation des 9 modules ont été compilées
(établi, `essai-A1.log:81-304`) ; les 23 actions non exécutées sont des éditions de liens et la cible (estimé) ; le
bilan complet des avertissements des modules non atteints reste incertain.
### 2.6 Outils et chaîne (UA-T7, UA-FAB)
| Constat | Statut | Preuve |
|---|---|---|
| VS 2022 17.14 (`D:\Game\VS2022`) et VS 2026 18.10 coexistent ; MSVC 14.38.33130, 14.44.35207 et 14.50 installés | établi | `vswhere` (UA-OUTILS) ; UA-SYNTHESE § 6 |
| UBT 5.5 retient 14.38 ; UBT 5.8 retient 14.50.35739 depuis VS 2026 | établi | journal UBT 5.5 du 2026-10-07 ; `essai-A1.log` |
| Un build 5.5 reste sur le toolset 14.38 après l'ajout de VS 2026 | incertain | build 5.5 de contrôle en U0-T2b |
| GPU RX 6600M (8 Go), pilote 26.8.1 conforme (suggéré 26.2.2) ; RAM 63,3 Go ; 8 cœurs | établi | `BaseHardware.ini:85-87` (UA-OUTILS § 1) |
| `D:` est un NVMe en boîtier USB (moteurs, projet, DDC) : latence d'E/S plus forte | établi | UA-OUTILS § 1 |
| Zen commun : installation 5.6.6, remplacée par 5.8.13 au premier lancement de l'éditeur 5.8, puis utilisée par 5.5 | estimé | `Common\Zen\Install` ; test : lancer l'éditeur 5.5 après 5.8 |
| Bibliothèque Fab : 394 éléments acquis, 11 outils retenus en priorité 1 (Blueprint Reader, Blueprint Backup & Restore…) | établi | UA-FAB (lecture seule, rien installé) |
Bilan du § 2 : **48 constats étiquetés** (45 lignes des tableaux 2.1 à 2.4 et 2.6, plus les 3 statuts de l'essai 2.5) :
33 établis, 3 estimés, 9 incertains, 3 mixtes (deux statuts dans la même ligne). Les passes, erreurs et avertissements
de l'essai (tableaux 2.5) sont des mesures établies, non recomptées ici.
### 2.7 Cartographie U1 (2026-10-08, lecture seule ; hors du bilan des 48 constats ci-dessus)
Contrat des mods et moteur (U1-T1) :
| Constat | Statut | Preuve |
|---|---|---|
| Contrat des mods inchangé en 5.8 : découverte `Mods/`, activation par défaut, montage pak ordre 0, point de montage, registre d'assets dans le paquet, `-basedonreleaseversion` ; risque R2 de UA-MODS écarté par le code, confirmation en build empaqueté (test T-M1, U7) | établi (code) ; incertain (empaqueté) | lecture des sources 5.8 ; test T-M1 |
| Formats cuits : pak 11 → 12, en-tête de conteneur 4 → 5, version d'objet UE5 1013 → 1018 : recuisson obligatoire | établi | en-têtes 5.5 / 5.8 |
| Un mod cuit pour 5.8 dans le jeu 5.5 : arrêt fatal au démarrage | estimé | `PakFile.cpp:300` |
| `bUseZenStore` : False (5.5) → True (5.8) ; le projet ne le fixe pas : écriture explicite en U3 (D1) | établi | `BaseGame.ini:95` |
Correctifs de compilation (U1-T2) : ni compilés ni appliqués (statut « proposé, non compilé »).
| # | Site | Correctif retenu | Garde | Équivalence |
|---|---|---|---|---|
| R1 | `LPCoupleSimCore.cpp:127` (fichier CRLF) | `GetCompressedData().Get().CompressedTrackToSkeletonMapTable` (`AnimSequence.h:885`, `AnimCompressionTypes.h:780`) ; même migration chez Epic (`MovieSceneSkeletalAnimationSection.cpp:722-723`) | `UE_VERSION_OLDER_THAN(5, 8, 0)` | jeu cuit : établi ; éditeur : estimé |
| R2 | `LPDataCache.cpp:198` | `FString(File.Key.ToView())` (`SharedString.h:92-95`) ; variante sans garde `FString(*File.Key)` | oui (forme recommandée pour D11) | établi (mêmes caractères) |
| `:155` | `LPCoupleSimCore.cpp:155` | aucun : conversion implicite `double` → `FAnimExtractContext` (constructeur non `explicit`, `AnimationAsset.h:303`) | non | estimé ; preuve au premier build U3 |
Piste `IAnimationDataModel` écartée : API réservée à l'éditeur. Repli D11 (b) par macro `UE_JSONOBJECT_LEGACY_STRING_KEYS`
impossible avec le moteur installé (`TargetRules.cs:2776-2778`, DLL Json compilée avec la valeur 0) : seul le correctif de
code vaut. Autres clés `FJsonObject` du jeu et de l'addon : compilent, copies silencieuses sans effet (établi).
Reliquats 4.27 (U1-T3) : 32 commandlets dont 16 à retirer (15 `LPFix*` et `LPConvertAtmosphericFog`) et 2 gardés
(`LPResavePackages`, `LPTestStringCompat`) ; 3 réglages de chemin moteur (`LifePlay.uproject:3`, `Tools/BuildDebug.ps1:19`,
`Tools/RunCommandlet.ps1:20`) ; environ 411 mentions 4.27 dans 28 docs (établi, décompte). Décisions : plan 27, § U2.
Blueprints (U1-T4, commandlet en lecture seule `LPAuditBlueprintCalls` de l'addon, relevé en 5.5 puis croisé avec les
en-têtes 5.8) :
| Mesure | Valeur | Statut |
|---|---|---|
| Relevé 5.5 | 110 Blueprints (27 Blueprint, 73 Widget, 7 Anim, 3 ControlRig), 977 graphes, 46 617 nœuds, 498 membres natifs (449 fonctions, 49 propriétés), 63 classes de nœud, 0 échec | établi |
| Croisement 5.8 | 458 membres inchangés, 25 propres au projet, 15 à signature changée (931 nœuds) ; aucun redirigé ni retiré | établi |
| 15 signatures changées | surtout 11 `Array_*` passés en `UPARAM(ref)` : tolérés par `AllowedMutableContainerFunctions` (`BaseEditor.ini:197-215`, « REMOVE IN UE 5.9 ») | établi (tolérance) ; fin en 5.9 |
| Classes de nœud dépréciées | `K2Node_InputAction`, `K2Node_InputAxisEvent` : 38 nœuds dans `/Game/BPs/PC`, sans effet tant que `DeprecatedActionAndAxisNames` est vide | estimé |
| Nœud à corriger en 5.8 | aucun | estimé |
| Non couverts | `.umap`, nœuds Make/Break, AnimGraph, RigVM | incertain (U5) |
## 3. Effort et risques (UA-SYNTHESE)
Marge : bornes hautes = bornes basses × 1,5 (première exécution en 5.8) + une escalade de niveau par lot ; scénario
noir (échec de T4 **et** Blueprint cassé **et** écart StreetMap) : +3 à +5 séances. Méthode : UA-SYNTHESE § 7 (postes
décomposés, cycles de build mesurés, durées 5.5 × facteur 5.8).
| Lot | Contenu | Séances | Niveaux | Durée machine |
|---|---|---|---|---|
| U0 Préparation | VS Installer, épinglage 5.5, build de contrôle, tag `ue5.5-final`, copie 5.8, décisions | 1 - 1,5 | N0, N1, N2 | copie 5-15 min |
| U1 Cartographie | diff moteur ciblé, spec des 2 correctifs, relevé Blueprint Reader | 1 - 2 | N1, N3 | — |
| U2 Retrait 4.27 | 16 commandlets, point unique du chemin moteur | 1 - 1,5 | N1, N0 | build < 1 min |
| U3 Bascule et compilation | 2 correctifs, 9 C4996, premier lancement éditeur 5.8, `LPTestStringCompat` | 1,5 - 3 | N3, N0, N4 | 4-8 builds de 8-12 min (estimé) |
| U4 Plugins et addon | StreetMap, Mcp, scripts de l'addon, tournée Mesure | 2 - 3,5 | N3, N1, N2 | 2-4 builds |
| U5 Contenu | resave hors `Heavy`, `CompileAllBlueprints`, `LPCheckStreetMap`, cuisson à froid | 2 - 4 | N1, N0, N3 | resave 0,2-3 h ; cook à froid 1-3 h (incertain) |
| U6 Comportement en jeu | build Development 5.8, A/B `LogStats`, VQ, audio | 2 - 3 | N1, N3 | 15-30 min |
| U7 Mods | version de référence, 3 cuissons DLC, tests T1-T7 dont T4 | 2,5 - 4 | N1, N0, N3 | 3 × 5-15 min |
| U8 Shipping et publication | build Shipping, archives, évaluation, porte de publication | 1,5 - 2,5 | N1, N2 | ≈ 10 min + cook 15-30 min |
| U9 Voie UE5 native | interrupteurs des correctifs de sémantique (différé) | 2 - 4 | N3, N1 | — |
| **Total U0-U8** | | **14,5 - 25** | | ≈ 7 à 16 h ; actions utilisateur ≈ 6 à 10 h |
| avec U9 | | 16,5 - 29 | | |
Constantes mesurées (établi) : build éditeur 5.8 complet avec Mcp 26,5 min (A1) ; build 5.5 incrémental 13 s
(`AP7_Build_20261006-212651.txt:74`) ; cook 5.5 à chaud 8 884 paquets en 6,0 min (`AP7_Ship_20261007-023526.txt:3697`) ;
`CompileAllBlueprints` 115 s ; `LPCheckStreetMap` 25 s ; resave de la liste CX-B07 86 s.
| # | Risque | P×I | Parade principale |
|---|---|---|---|
| R1 | Mod cuit pour 5.5 monté dans le jeu 5.8 (plantage possible) | 3×3 = 9 | test T4 ; garde `MODULE_GAME_VERSION` (D2) |
| R2 | Resave de masse (ERR-019), `GI` 51,9 Mo, nœuds dépréciés | 2×3 = 6 | Blueprint Backup & Restore, resave par lots hors `Heavy` (D10) |
| R3 | Zen store par défaut change la chaîne de cuisson | 3×2 = 6 | `bUseZenStore=False` avant le premier cook (D1) |
| R4 | Contrat JSON / `LPDataCache` altéré silencieusement | 2×3 = 6 | conversion explicite des clés (D11) + diff des caches |
| R5 | Proxy de rendu StreetMap sous 5.8 | 2×3 = 6 | `LPCheckStreetMap`, captures même cadrage |
| R6-R10 | Cook à froid très long (4) ; modules non mesurés (2, réduit) ; Zen server commun 5.5/5.8 (4) ; MSVC partagé (4) ; disque USB (3) | 2 à 4 | tâche de fond ; toolset épinglé par projet, jamais globalement ; `Snapshot.ps1` et git avant tout resave |
| R11-R16 | Mcp bêta (2) ; pont IA expérimental (2) ; erreur résiduelle `:155` (1) ; sémantique `FString` (3) ; sauvegardes 5.5 (2) ; rendu / audio par défaut (2) | 1 à 3 | Mcp désactivé (D4) ; `LPTestStringCompat` dès U3 ; test T6 ; écoute et captures en U6 |
Points de non-retour : réenregistrement des assets (U5, uniquement dans la copie 5.8, réversible par `git checkout` et
`Snapshot.ps1`) ; recuisson et republication des 3 mods (U7) ; publication V2.0 (U8, derrière une porte utilisateur
explicite) ; désinstallation de 4.27 (reportée après V2.0, D6). Tout ce qui précède U7 est jetable depuis le tag
`ue5.5-final`. Portes intermédiaires : **G-U3** (0 erreur, `LPTestStringCompat` vert, éditeur 5.8 ouvert) et
**G-U6** (A/B et contrôle visuel équivalents à DC4).
## 4. Décisions de la porte G-U (2026-10-08)
Décision : **GO séquencé U0-U8, U9 différé après V2.0** (détail dans le plan 27, section « Porte G-U »). Décisions
déjà verrouillées avant la porte : cible 5.8, abandon de 4.27, mods figés, règles PUB, P2 à P5, P8.
| # | Décision retenue | État |
|---|---|---|
| D1 | `bUseZenStore=False` explicite pour toute la migration ; Zen en lot dédié après V2.0 | tranchée |
| D2 | Garde C++ `MODULE_GAME_VERSION` : décidée après le test T4 (U7) | en attente de T4 |
| D3 | Retirer 16 commandlets de portage ; garder `LPResavePackages` et `LPTestStringCompat` | tranchée |
| D4 | `McpAutomationBridge` désactivé pour V2.0 ; MCP officiel Epic évalué hors chemin critique, sur copie jetable | tranchée |
| D5 | Référence de comportement : `LifePlay_Build_5.5_DC4` et V1.5 | tranchée |
| D6 | Désinstallation et archivage de 4.27 après la publication V2.0 | tranchée |
| D7 | Mcp désactivé « pour V2.0 » (motif : coût et bêta, non plus l'absence de version 5.8) | tranchée avec D4 |
| D8 | Blueprint Reader activé en 5.5 (Editor, non commité) avant U1 | tranchée |
| D9 | U9 après V2.0 | tranchée |
| D10 | Réenregistrement hors `Heavy` (798 assets) ; `Heavy` reste au format 5.5, converti à la volée | tranchée |
| D11 | Correctif `LPDataCache` : code ou macro de compatibilité ; décision en U3 (recommandation : conversion explicite des clés) | à prendre en U3 |
| D12 | Réglages stricts `Latest` et sort des 9 C4996 ; décision en U3 (recommandation : `Latest` et corriger les 9) | à prendre en U3 |
| D13 | `Fab` et `Bridge` en `Optional: true` dans le `.uproject` de la copie 5.8 | tranchée |
Préalable demandé par l'utilisateur : lot SK avant U0 (§ 5).
## 5. Lot SK — arbre de compétences des sous-agents
### 5.1 Niveaux de modèles (règle du 2026-10-08, plan 27)
Opus en effort high orchestre ; il délègue vers le bas et vers le haut. Niveau (note a-f) : **N0** Haiku (0-2 :
compilation, copies, inventaires) ; **N1** Sonnet (3-4 : outillage spécifié, retraits mécaniques, docs, commits) ;
**N2** Opus high, orchestrateur (5-6 : fiches, arbitrages) ; **N3** Opus xhigh (7-8 : portage d'API, diagnostic sur
graphe d'appels) ; **N4** Opus max (9-10 : portage transversal, échec de N3) ; **N5** Fable (11-12 : enjeu maximal).
Grille de complexité : six critères de 0 à 2 (étendue, couplage, incertitude, coût d'erreur, difficulté de
vérification, jugement). La fiche comporte 9 rubriques plus la rubrique 2b « agent + skills ».
### 5.2 Agents (option C : un agent par rôle, escalade par les agents de niveau)
| Agent | Rôle | Niveau par défaut |
|---|---|---|
| `lp-builder` | compile, lance commandlets et cuissons, rapporte le journal | N0 |
| `lp-inventory` | inventaires chiffrés, états git | N0-N1 |
| `lp-cart` | cartographie C++ / Blueprint, audit de sous-système | N3 |
| `lp-research` | recherche externe et sources moteur | N3 |
| `lp-spec` | spécification exécutable | N3 |
| `lp-impl` (+ variante `-max`) | C++, portage, refactor, configuration | N3 (N4) |
| `lp-tooling` | commandlets, Python éditeur, PowerShell | N1 |
| `lp-content` | chaînes de contenu, cuisson DLC des mods | N1 |
| `lp-validator` | validation statique, smoke, diff, preuve par l'échec | N1 |
| `lp-measure` | mesure A/B, préparation des tests utilisateur | N1 |
| `lp-debugger` (+ variante `-max`) | diagnostic sémantique, runtime, plantage | N3 (N4) |
| `lp-integrator` | commits par phase, pins, simulation de publication ; jamais de push | N1 |
| `lp-writer` | journal, registre, docs numérotées, fiches | N1 |
| `opus-xhigh`, `opus-max`, `fable-top` | agents d'escalade N3, N4, N5 (socle de méthode préchargé) | N3-N5 |
Le niveau descend par la surcharge `model` de l'appel ; il monte par l'agent d'escalade. Les agents d'audit et de
validation n'ont pas l'outil d'édition. Chaque agent précharge au plus 4 skills (≤ 6 000 jetons estimés).
### 5.3 Skills par couche (33 prévus)
| Couche | Préfixe | Emplacement | Contenu |
|---|---|---|---|
| 1 — socle de méthode (9) | `sk-` | `C:\Users\<compte>\.claude\skills\` (hors dépôt) | preuve établi / estimé / incertain, interdits et arrêt, recompte, orchestration, sécurité des changements, comparabilité, shell Windows, estimation, spécification, données web |
| 2 — domaine générique (8) | `ue-`, `git-`, `debug-` | idem | build C++ et UBT, cuisson et empaquetage, patron de commandlet, UMG / Slate, lecture d'un plantage, commits par phase, débogage systématique, vérification avant clôture |
| 3 — projet LifePlay (16) | `lp-` | dépôt addon privé, `Tools/claude/skills/`, exposé par une jonction vers `.claude/skills` | build, cuisson, mods, commandlets, mesure, diagnostic, git, publication, docs, lots, chemins, environnement, compatibilité UE4, chaînes de contenu, profils de validation |
Règles d'adoption : revue intégrale avant toute copie tierce, licence MIT ou Apache-2.0 seulement, révision épinglée
par SHA, SKILL.md ≤ 120 lignes, skills et agents en français, aucun contenu de jeu dans un skill, rien dans le dépôt
public (`/.claude/` est ignoré, `.gitignore:72`). Rédaction en 4 vagues : V1 avant U0, V2 avant U4, V3 avant U7, V4 à
l'évaluation de U8 (effort total estimé 3,5 à 5 séances).
### 5.4 Livré en V1 (constaté par présence des fichiers)
| Livrable | État | Fiche |
|---|---|---|
| Couche 1-2 (7 skills) : `sk-protocol`, `sk-recount`, `sk-orchestrate`, `sk-change-safety`, `sk-windows-shell`, `debug-verification`, `ue-cpp-build` (adapté d'un dépôt MIT, révision épinglée) | établi | SK-T4-V1a, V1c |
| Couche 3 (7 skills) : `lp-build`, `lp-commandlets`, `lp-doc`, `lp-lot`, `lp-paths`, `lp-env`, `lp-ue-compat` | établi | SK-T4-V1b, V1c |
| Agents : `lp-builder`, `lp-inventory`, `lp-cart`, `lp-impl`, `lp-impl-max`, `lp-validator`, `lp-writer` (+ les 3 agents de niveau existants) | établi (fichiers présents) | `C:\Users\<compte>\.claude\agents\` |
| Témoin de préchargement : skill et agent `sk-probe` | établi (fichiers présents) | SK-T5 |
Reste à écrire : V2 à V4 (19 skills, 6 agents de rôle dont `lp-spec`, `lp-research`, `lp-tooling`, `lp-measure`,
`lp-debugger`, `lp-integrator`, `lp-content`). Résultat des tests SK-T5 (préchargement par l'application de bureau,
jonction, surcharge de `model` sans effort) : non relevé dans les sources de cette synthèse, donc **incertain**.
## 6. Journal des lots U0 à U9
À compléter à chaque clôture de lot (une ligne par lot : date, résultat, CHG). Les lots UA, la porte G-U et le lot SK
sont décrits aux § 2, 4 et 5.
| Lot | Date de clôture | Résultat | CHG |
|---|---|---|---|
| U0 Préparation | 2026-10-08 | VS 2026 en coexistence ; 5.5 épinglé `CompilerVersion=14.38.33130` (compilation de contrôle code 0, éditeur démarré sans erreur) ; toolset 5.8 `14.50.35717` non banni (cl.exe 14.50.35739) ; tag `ue5.5-final` ; copie `LifePlay-master 5.8` sur `ue5.8` ; P1, P6, P7 verrouillées ; VAL PASS (T2, T2b, T3, doc 28) | CHG-249, CHG-250 |
| U1 Cartographie | 2026-10-08 | Contrat des mods inchangé (recuisson obligatoire : pak 12, conteneur 5, objet 1018) ; 2 correctifs spécifiés avec garde de version (R1 `GetCompressedData()`, R2 `FString(File.Key.ToView())`), pistes `IAnimationDataModel` et macro D11 (b) écartées ; 32 commandlets (16 à retirer) et 3 réglages de chemin moteur ; audit Blueprint 5.5 : 110 BP, 46 617 nœuds, 15 signatures changées (931 nœuds), aucun nœud à corriger (estimé) | CHG-251 |
| U2 Retrait 4.27 et chemin moteur | — | — | — |
| U3 Bascule et compilation (porte G-U3) | — | — | — |
| U4 Plugins tiers et addon | — | — | — |
| U5 Contenu | — | — | — |
| U6 Comportement en jeu (porte G-U6) | — | — | — |
| U7 Mods | — | — | — |
| U8 Shipping, publication, évaluation | — | — | — |
| U9 Voie UE5 native (différé après V2.0) | — | — | — |
## 7. Points ouverts
Incertains à trancher par un essai :
1. Nature de l'échec d'un conteneur de mod 5.5 monté dans 5.8 : test T4 (U7) ; conditionne D2.
2. Durée du premier cook 5.8 à froid et réussite du resave de `GI` : U5, dans la copie.
3. Nœuds Blueprint dépréciés 5.6-5.8 : Blueprint Reader en 5.5 (D8) puis `CompileAllBlueprints` en 5.8.
4. Rendu du proxy `StreetMap` sous 5.8 : captures même cadrage en U5/U6.
5. Zen store × version de référence : neutralisé par D1, sinon test R1 de UA-MODS.
6. Zen commun 5.5/5.8 : lancer l'éditeur 5.5 après le premier lancement de l'éditeur 5.8.
7. Sémantique `FString` : `LPTestStringCompat` en U3 ; ligne 155 de `LPCoupleSimCore.cpp` : premier build de U3.
8. ~~Toolset 14.38 conservé par 5.5 après l'ajout de VS 2026~~ : **tranché en U0-T2b** — `CompilerVersion=14.38.33130`
épinglé, compilation de contrôle code 0 avec `D:\Game\VS2022\VC\Tools\MSVC\14.38.33130\bin\Hostx64\x64\cl.exe` (établi).
9. Résultats des tests SK-T5 et vagues V2 à V4 du lot SK.
10. Boîte englobante du couple (`LPCoupleSimCore`, chemin « animations ») : aucune référence 5.5 en jeu cuit ; à relever sur le build DC4 avant G-U3.
11. `bUseZenStore=False` à écrire explicitement dans la configuration du projet en U3 (D1) : le défaut moteur passe à True en 5.8.
12. Blueprints : `.umap`, nœuds Make/Break, AnimGraph et RigVM non couverts par l'audit U1 ; `CompileAllBlueprints` en U5.
Contradictions entre sources (la plus récente retenue) :
| # | Contradiction | Retenu |
|---|---|---|
| C1 | UA-OUTILS : UBT 5.8 retient 14.44.35207 ; UA-ESSAI : 14.50.35739 | UA-ESSAI (après l'installation de VS 2026) |
| C2 | UA-MOTEUR : 14.44.35207 banni ; UA-OUTILS : non banni (`MicrosoftPlatformSDK.cs:1156`) | non banni (UA-SYNTHESE § 6) |
| C3 | UA-MOTEUR, UA-PLUGINS, UA-OUTILS : `Fab` / `Bridge` absents de 5.8 ; UA-ESSAI : présents | présents |
| C4 | UA-PLUGINS : rupture certaine à `LPCoupleSimCore.cpp:155` ; essai : à `:127` | `:127` (essai) |
| C5 | UA-PLUGINS : 21 plugins moteur activés ; UA-MOTEUR : 26 | les deux justes : 26 entrées activées au `.uproject`, dont 5 hors moteur (`LPAnimCore`, `LPSandbox`, `ModdingExtra`, `StreetMap`, `McpAutomationBridge`) → 21 plugins moteur (recompté en U0) |
| C6 | UA-JEU : 18 commandlets de portage ; décision D3 : 16 retirés | 16 (2 gardés volontairement) |
| C7 | UA-SYNTHESE et UA-OUTILS : épingler `ToolchainVersion` ; plan 27 (P8) : c'est `CompilerVersion` qui choisit MSVC, `ToolchainVersion` ne sert qu'à Clang (`VCEnvironment.cs` 5.5 l. 463-485) | plan 27, **confirmé en U0-T2b** (journal UBT : toolset 14.38.33130 retenu par `CompilerVersion`) ; en 5.8, `CompilerVersion` est comparé à la version du `cl.exe` ou au nom du dossier (`MicrosoftPlatformSDK.cs:581`, `:1147`) |
| C8 | Lot SK : 45 types de tâche annoncés, 49 recomptés ; 28 skills annoncés, 33 au catalogue ; « 12 agents de rôle », 13 lignes de rôle au tableau | recomptes (49 types, 33 skills, 13 rôles) |
| C9 | UA-MOTEUR (c8) cite `LPDataCache.cpp:52,196` ; l'essai place l'erreur à `:198` | `:198` (essai) |
| C10 | Plan 27 (U0) : le toolset VS 2026 `14.50.35717` serait banni ; U0-T2 : le bannissement porte sur la version du `cl.exe` (`MicrosoftPlatformSDK.cs:1156`, `:1416`), ici 14.50.35739, hors plage `14.50.0-14.50.35722` (`Windows_SDK.json:41`) | non banni ; épingle 5.8 : `CompilerVersion=14.50.35717` |
| C11 | UA-OUTILS : `Log.txt` UBT issu d'un run 5.8, version de 14.44 « 19.44.35228 » ; U0-T2 : run 5.5, version 14.44.35228 | U0-T2 |
| C12 | UA-PLUGINS / UA-SYNTHESE : piste `IAnimationDataModel` pour R1 ; U1-T2 : API réservée à l'éditeur (`AnimSequenceBase.h:238-281`), inutilisable dans le module Runtime | U1-T2 : piste écartée |
| C13 | UA-SYNTHESE, `lp-ue-compat` : macro `UE_JSONOBJECT_LEGACY_STRING_KEYS` comme repli D11 (b) ; U1-T2 : impossible avec le moteur installé (`TargetRules.cs:2776-2778`, DLL Json compilée avec 0) | U1-T2 : pas de repli par macro, correctif de code seul |
| C14 | UA-MODS : attendu du test T5 (mod 5.8 monté dans le jeu 5.5) = TOC « Too new » refusé (`IoStore.cpp:1145-1147`) ou avertissement de version ; U1-T1 : la version de TOC n'a pas changé, le pak 12 provoque un arrêt fatal au démarrage (`PakFile.cpp:300`, estimé) | U1-T1 (attendu T5 corrigé) |