# 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//`, 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` 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= -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::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\\.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\\.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é) |