LifePlay-Revival/Docs/27_Plan_Migration_UE58.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

41 KiB
Raw Blame History


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). todos:

  • id: lot-ua content: Lot UA — Audit avant départ (jeu, plugins, mods, moteur ; essai de compilation 5.8 ; effort et risques) status: completed
  • id: gate-gu content: Porte G-U — go / no-go de l'utilisateur sur la base de l'audit (aucun portage avant) status: completed
  • id: lot-u0 content: Lot U0 — Préparation (moteur 5.8, chaîne de compilation, copie de travail, décisions) status: completed
  • id: lot-u1 content: Lot U1 — Cartographie (notes de mise à niveau 5.6/5.7/5.8, API, plugins, outils, reliquats 4.27) status: completed
  • id: lot-u2 content: Lot U2 — Retrait de l'outillage 4.27 et paramétrage du chemin moteur status: completed
  • id: lot-u3 content: Lot U3 — Bascule moteur et compilation (jeu, outils, plugins du dépôt) status: completed
  • id: lot-u4 content: Lot U4 — Plugins tiers et addon (StreetMap, McpAutomationBridge, LifePlay-Sandbox) status: completed
  • id: lot-u5 content: Lot U5 — Contenu (réenregistrement des paquets, avertissements, villes, Blueprints) status: completed
  • id: lot-u6 content: Lot U6 — Comportement en jeu (build Development, A/B contre le build 5.5, contrôle visuel) status: completed
  • id: lot-u7 content: Lot U7 — Mods (contrat figé ; nouvelle version de référence ; mods recuits) status: completed
  • id: lot-u7b content: Lot U7b — Atelier et poses (reports U4, U5, U7 ; tournée Mesure hors écran, garde-fou RetargetPack, 28 poses) status: completed
  • id: lot-u8 content: Lot U8 — Shipping, publication, évaluation (clos sans publication : porte T11 close le 2026-10-11, CHG-325 ; V2.0 = version de migration, livraison au prochain cycle) status: completed
  • id: lot-u9 content: Lot U9 — Voie alternative UE5 native pour les correctifs de sémantique UE4 (préparée, non activée ; après V2.0, D9) status: pending isProject: false

27. Plan de migration UE 5.5 → UE 5.8 (2026-10-08)

Contexte

UE 5.8 est la dernière version majeure prévue d'UE5 avant UE6 (premières préversions annoncées vers fin 2027) ; Epic présente 5.8 comme une version de stabilisation et d'optimisation (Lumen Lite, MegaLights en production, Chaos Hair / Cloth / Flesh). Le jeu a été porté de 4.27 à 5.5 (V1 à V1.5, lots L0–L7, O, H, AP, SB, DC, VQ). La migration 5.8 s'appuie sur ce qui est validé en 5.5 ; la comparaison avec 4.27 n'est plus un critère.

État de départ (2026-10-08) : moteurs installés UE_4.27, UE_5.5 (pas de 5.8) ; MSVC 14.38 et 14.44 ; projet LifePlay.uproject (EngineAssociation 5.5) ; plugins du dépôt LPAnimCore, ModdingExtra, StreetMap, McpAutomationBridge (outil, gitignoré) ; addon privé D:\Game\LifePlay-Sandbox (LPSandbox, LPAnimMeasure, LPModTools, atelier de mods) ; modules de jeu dans Content/Modules (dépôt local, git-dir hors arbre D:\Game\LifePlay_ModulesGit\5.8.git, OBB-T1) ; taille hors Intermediate/Saved ≈ 14 Go ; 2,4 To libres sur D:.

Décisions verrouillées (utilisateur, 2026-10-08)

Décision Choix
Cible UE 5.8
UE 4.27 abandonné : plus de comparaison A/B avec 4.27, plus d'outillage ni de critère d'acceptation fondé sur 4.27
Restrictions 5.5 levées : le projet peut adopter les API, réglages et fonctions de 5.8
Gestion des mods figée : format .lpmod (lignes 1–3 par position, clés existantes), Content/Modules/<mod>/, plugins Mods/<mod>/ cuits en DLC, ModdingExtra, GI.ModEnableds, gestionnaire de mods, avertissement de version : inchangés pour les moddeurs
Publication règles PUB1/PUB2 : GitHub sans contenu de jeu ni contenu sexuel ; rien n'est poussé sans accord
Référence de comportement (P1) build LifePlay_Build_5.5_DC4 + V1.5 publiée (G-U D5, 2026-10-08)
UE 4.27 (P6) archivé après V2.0, et non après U6 (G-U D6, 2026-10-08) ; avancée : exécutée le 2026-10-11 (ARCH427, CHG-332) ; dossiers 4.27 sous D:\Game\LifePlay_Backup_5.5\ARCH427\, moteur UE_4.27 gardé, branches archive/* en bundle
McpAutomationBridge (P7) désactivé pour V2.0 ; MCP Epic évalué hors chemin critique (G-U D4 / D7, 2026-10-08)
Correctifs de sémantique UE4 (P2) gardés pour le moment ; une voie alternative UE5 native est préparée (lot U9), sans être activée
Commandlets du portage 4.27 (P3) retirés (LPTestStringCompat gardé comme test)
Copie de travail (P4) dossier séparé D:\Game\LifePlay-master 5.8, branche ue5.8
Version (P5) V2.0, LifePlay 2026.10.2.0
Chaîne de compilation (P8) Option B en coexistence (2026-10-08) : VS 2026 (≥ 18.3, MSVC ≥ 14.50.35723 ; 14.50.0–14.50.35722 bannie par 5.8) installé à côté de VS 2022 ; chaque projet épingle son toolset par CompilerVersion ([/Script/WindowsTargetPlatform.WindowsTargetSettings] ; avec MSVC c'est CompilerVersion qui choisit le compilateur, ToolchainVersion ne sert qu'à Clang : VCEnvironment.cs 5.5 l. 463-485) : LifePlay-master 5.5 → 14.38.33130 (VS 2022), LifePlay-master 5.8 → 14.50.x (VS 2026, 14.44 en secours). Preuves : UA-OUTILS § 5 ; 5.5 traite un VS plus récent comme 2022 mais préfère 14.38 (MicrosoftPlatformSDK.cs:885, Windows_SDK.json 5.5) ; 5.8 cherche 2026 puis 2022 (MicrosoftPlatformSDK.cs:1540)

Décisions proposées (P1 à P7 toutes tranchées le 2026-10-08, voir ci-dessus ; tableau conservé comme historique des motifs)

# Proposition Motif
P1 Référence de comportement = build 5.5 validé courant (DC4, LifePlay_Build_5.5_DC4) et V1.5 publiée 4.27 abandonné
P2 Les correctifs de sémantique UE4 en place (LPStringCompat, LPMeshCompat, LPNavigationHelpers…) restent : ce sont désormais le comportement du jeu (les Blueprints en dépendent) les retirer changerait le jeu ; rien à voir avec la comparaison 4.27
P3 Les commandlets à usage unique du portage 4.27 → 5.5 (LPFix* : ParseIntoArray, StringSearch, ButtonPadding, NavRandomPoint, AssetRegistry*, SceneCapture, FindCenter, PawnResponse…, LPTestStringCompat gardé comme test) sont retirés du module LifePlayEditorTools (conservés dans l'historique git) surface de portage réduite ; déjà appliqués
P4 Copie de travail séparée D:\Game\LifePlay-master 5.8 (copie du dossier hors Intermediate, Saved, DDC, Binaries ; même dépôt git, branche ue5.8) ; LifePlay-master 5.5 reste utilisable pour les correctifs jeu jouable pendant le portage
P5 Version : LifePlay 2026.10.2.0 (majeur 2 = UE 5.8), publication « V2.0 » changement de moteur = mods recuits obligatoirement
P6 Le moteur 4.27 et le projet LifePlay-master 4.27 sont archivés puis peuvent être désinstallés par l'utilisateur après U6 abandon 4.27
P7 McpAutomationBridge : désactivé tant qu'aucune version 5.8 n'existe (plugin Optional) outil de développement

Conséquence pour les mods (contrat figé)

Un paquet cuit pour 5.5 ne se charge pas dans un jeu 5.8 (format des paquets et versions d'objets). Le contrat reste le même, mais chaque mod d'assets doit être recuit contre la nouvelle version de référence Releases/2026.10.2.0 (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.

Orchestration et niveaux de modèles (règle utilisateur du 2026-10-08)

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
N0 Haiku (haiku) 0–2 compilation + journal, copies, inventaires en lecture seule
N1 Sonnet (sonnet) 3–4 outillage spécifié, retraits mécaniques, docs, commits, VAL bornées, A/B de journaux
N2 Opus high (orchestrateur, session principale) 5–6 fiches, arbitrages courants, vérification, code moyen ; pas de build
N3 Opus xhigh (opus-xhigh) 7–8 portage d'API, refactor multi-fichiers, diagnostic sur graphe d'appels, audit d'un sous-système
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

Grille de complexité (chaque critère de 0 à 2, total 0–12) : (a) étendue, (b) couplage (graphe d'appels, Blueprints, données partagées), (c) incertitude, (d) coût d'erreur / réversibilité, (e) difficulté de vérification, (f) jugement requis. Ajustement d'un niveau seulement avec motif écrit ; escalade d'un niveau sur échec ou réponse incertaine.

Taille des fiches (règle utilisateur du 2026-10-09, lot SEQ1) : une fiche = un résultat vérifiable (au plus un build, une cuisson, une hypothèse de diagnostic ou un domaine de cartographie) ; une chaîne d'étapes = plusieurs fiches, seul le compte rendu passe à la suivante. Budget écrit dans la fiche, par niveau (décision utilisateur du 2026-10-09, lot BUD1, CHG-295) : N0 à N2 ≈ 40 tours, pic de contexte ≤ 150 k jetons, ≈ 20 min ; N3 à N5 ≈ 60 tours, pic ≤ 250 k, ≈ 30 min (hors attente d'un build en tâche de fond) ; budget atteint = arrêt avec état de reprise (rubrique 9). Motif du palier N3 : en OBA, les 4 cartographies lp-cart N3 déjà découpées par domaine restaient à 185-234 k et 44-51 tours (5,4 à 7,5 M de jetons, contre 20 à 69 M en U1 / U7), et la synthèse opus-max OBA-T5 dépassait 150 k en 7 tours (lecture des comptes rendus) ; découper davantage coûterait ≈ 27 k par fiche pour un gain faible (Tools/FicheStats.py --lot OBA). Les inventaires et états git ne se font pas dans la session principale : lp-inventory (N0). Motif (mesuré sur les 77 sous-agents du 2026-10-08 13 h 30 au 2026-10-09) : 23 agents au pic > 150 k = 84 % des jetons des sous-agents, les 5 plus lourds (U7-T7, U5-T3b, U1-T1, U1-T4c, U7-T6) = 43 % ; taux d'erreur d'outil identique (3,0 % contre 3,5 %) : le gain attendu est le coût et le contexte, pas la qualité ; une fiche de plus coûte ≈ 27 k jetons de démarrage, donc pas d'émiettement en dessous d'un résultat vérifiable.

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

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é ; T7 (outils annexes) est indépendante ; 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-T7 Outils annexes (ajout utilisateur 2026-10-08) : Visual Studio et toolsets MSVC, Windows SDK, .NET, DXC / pilote GPU, Python éditeur, Zen / DDC, Insights, Live Coding, IDE, matériel ; exigences minimales et recommandées de 5.8 pour en exploiter les capacités ; scripts et *.Target.cs qui épinglent une version ; mises à jour bloquantes avant U0 et recommandées 1-1-2-0-1-2 (7) N3 UA-OUTILS.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 et T7, 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.
  • Décision (utilisateur, 2026-10-08) : GO séquencé U0–U8, U9 différé après V2.0, avec les recommandations de UA-SYNTHESE.md § 5 : D1 Zen store False pendant la migration ; D3 retirer 16 commandlets de portage (garder LPResavePackages, LPTestStringCompat) ; D4/D7 McpAutomationBridge désactivé pour V2.0, MCP Epic évalué hors chemin critique ; D5 référence LifePlay_Build_5.5_DC4 + V1.5 ; D6 4.27 archivé après V2.0 (avancée : exécutée le 2026-10-11, ARCH427, CHG-332 ; dossiers 4.27 sous D:\Game\LifePlay_Backup_5.5\ARCH427\, moteur UE_4.27 gardé, branches archive/* en bundle) ; D8 Blueprint Reader activé en 5.5 (Editor, non commité) ; D9 U9 après V2.0 ; D10 réenregistrement hors Heavy ; D13 Fab/Bridge Optional. D2 après le test T4 (U7) ; D11, D12 en U3. Portes intermédiaires ajoutées : G-U3 (0 erreur, LPTestStringCompat vert) et G-U6 (A/B + contrôle visuel). Préalable demandé par l'utilisateur : lot SK (arbre de compétences des sous-agents) avant U0.

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-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-T2b (utilisateur, puis N1) : installer VS 2026 (≥ 18.3) avec la charge « Développement de jeux en C++ », MSVC ≥ 14.50.35723 et les composants Unreal ; figer dans VS Installer les composants individuels MSVC 14.38 (VS 2022) et 14.50 (VS 2026). Puis (N1) : épingler CompilerVersion=14.38.33130 dans le projet 5.5 ; compilation de contrôle 5.5 (même toolset au journal UBT qu'avant, code 0) et démarrage de l'éditeur 5.5 ; relever l'état de %LOCALAPPDATA%\UnrealEngine\Common\Zen avant le premier lancement de l'éditeur 5.8 (UA-OUTILS, recommandation 1) ; livrable etat/U58/U0/U0-VS2026.md. Résultat U0-T2/T2b (2026-10-08) : VS 2026 18.10 installe le dossier MSVC\14.50.35717 dont le cl.exe est en 14.50.35739 ; UBT 5.8 teste le bannissement sur la version du cl.exe (MicrosoftPlatformSDK.cs:1156, :1416), donc ce toolset n'est pas banni ; CompilerVersion est comparé à la version ou au nom du dossier (:581, :1147) → valeur à épingler pour le projet 5.8 : CompilerVersion=14.50.35717 (14.51.36231 aussi installé, hors liste préférée). Projet 5.5 : CompilerVersion=14.38.33130 épinglé, compilation de contrôle code 0 avec D:\Game\VS2022\VC\Tools\MSVC\14.38.33130\...\cl.exe. Zen commun 5.6.6 (3,96 Go), éditeur 5.8 pas encore lancé.
  • U0-T3 (N1) : tag local ue5.5-final sur main ; copie de travail P4 (robocopy, exclusions ; le dossier D:\Game\LifePlay-master 5.8 existe déjà avec un .mcp.json utilisateur — serveur Epic « Unreal MCP » http://localhost:8000/mcp — à conserver : exclure .mcp.json de la copie, ne pas écraser, vérifier qu'il reste ignoré par git) ; branche ue5.8 ; dépôt des modules recopié ; contrôle git status propre.
  • U0-T4 (N2, orchestrateur + utilisateur) : décisions P1–P7 validées par l'utilisateur → section « verrouillées ». Résultat U0-T3/T4 (2026-10-08) : tag local ue5.5-final = 1542dfa ; copie D:\Game\LifePlay-master 5.8 sur la branche ue5.8 (robocopy 17 087 fichiers, 10,5 Go, .mcp.json utilisateur conservé, jonction .claude\skills recréée, dépôt Modules ade587f propre) ; P1, P6, P7 passées en « verrouillées » (G-U D5 / D6 / D4-D7).

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, 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) ;
  • reliquats 4.27 (29 docs, Config/DefaultEngine.ini, Tools/AssetHeaders.ps1, commandlets P3) ;
  • 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.
  • Résultat U1 (2026-10-08) : contrat des mods inchangé (recuisson obligatoire, bUseZenStore False → True) ; 2 correctifs spécifiés avec garde de version, pistes IAnimationDataModel et macro D11 (b) écartées ; 32 commandlets (16 à retirer) ; audit Blueprint 5.5 (110 BP, 46 617 nœuds, 15 signatures changées, aucun nœud à corriger, estimé). Détail : doc 28, § 2.7.

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 ;
  • 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é) ;
  • compilation 5.5 inchangée (A-BUILD haiku) avant bascule.
  • Décisions utilisateur (2026-10-08, sur l'inventaire U1-T3) : dossiers de sortie LifePlay_Build_5.5* (Tools/BuildDebug.ps1:25, StagingDirectory de Config/DefaultGame.ini:16) → _5.8 dans la branche ue5.8 (la sauvegarde LifePlay_Backup_5.5 reste) ; contrôles de référence CheckIntegrity.ps1 (-Ref427, -InitRef427, T-STAT-02 « Modules = 4.27 ») → référence 5.8, figée après G-U6 ; README.md:4 → mention 5.8 en U8 (V2.0) ; libellés « 4.27 » de LPStringCompat / LPTestStringCompat (commentaires, messages du test) → « sémantique UE4 conservée en 5.8 », sans changement de comportement ni de nom de fonction. TAA (Config/DefaultEngine.ini:14-17) : justification « comme en 4.27 » obsolète → commentaire réécrit (ERR-032, validé en 5.5) ; la valeur r.AntiAliasingMethod=2 reste (VQ ne règle que sg.AntiAliasingQuality, DefaultScalability.ini:115) ; pas de nouvel essai TSR : on reprend l'existant du lot VQ (TAA verrouillé, VQ1-SPEC), et U6 rejoue les tests VQ en 5.8. Tools/ReimportCorrectif.ps1 : outil générique (protocole doc 05 § 3, commandlet en paramètre), pas ponctuel → adapté en U2 (exemple sans LPFix*, moteur lu dans Tools/Engine.ps1) ; il servira en U5 aux corrections de nœuds dépréciés (U1-T4) ; LPDumpFunction et LPCheckMeshAssignment sont gardés.
  • Résultat U2 (2026-10-08, branche ue5.8) : 16 commandlets retirés ; Tools/Engine.ps1 lit la version dans EngineAssociation (U3 n'a qu'à changer le .uproject) ; compilation de contrôle UE 5.5 code 0, LPTestStringCompat 3120/0/60 ; VAL PASS. Reste pour U3 : commentaire LifePlay.Build.cs:27 (« LifePlayEditorTools l'inclut », périmé), mentions « 5.5 » de LPStringCompat.h / LPTestStringCompatCommandlet.h à relire ; pour U4 : 8 scripts de l'addon avec UE_5.5. Détail : doc 28, § 6.

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 → correctifs (opus) → compilation (haiku) ; cible : 0 erreur, avertissements de dépréciation listés.
  • Actions issues de U1 : appliquer les correctifs D1 (R1, LPCoupleSimCore.cpp:127, fichier CRLF) et D2 (R2, LPDataCache.cpp:198) de la spécification U1 (D11 : forme avec garde recommandée, décision de l'utilisateur en U3) ; écrire bUseZenStore=False explicitement (D1) ; relever la boîte du couple sur le build DC4 avant G-U3.
  • Résultat U3 (2026-10-08, branche ue5.8, CHG-253) : D11 = forme A (garde) ; Target.cs V7 / Unreal5_8 ; MSVC 14.50.35717 ; addon retiré de la copie 5.8 jusqu'à U4 (dossier partagé avec 5.5), Mcp désactivé (P7) ; un build : 0 erreur, 8 C4996 ; CVar r.TranslucencyLightingVolumeDim renommée (ensure 5.7) ; LPTestStringCompat 3120/0/60 ; éditeur 5.8 et PIE, Zen commun 5.8.13 accepté par 5.5 ; porte G-U3 remplie, VAL PASS. Boîte DC4 : seules des lignes boite pose (R1 = repli) → contrôle de R1 en U4 (Sandbox). Outillage figé : Tools/Build.ps1 (-FromLog), skill lp-validate. Pour U4 : addon branche ue5.8 dans une copie ou un worktree propre à 5.8, Makefile.bin à déplacer au retour de l'addon, C4996 StreetMap. Pour U6 : PersonCumming (GI, Set Rate) et Save Preset en PIE.

U4 — Plugins tiers et addon (N3 + N1)

  • 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 référence 5.5, comme SB2-T5).
  • Résultat U4 (2026-10-08, CHG-254) : addon en worktree D:\Game\LifePlay-Sandbox-5.8 (branche ue5.8 depuis f9033a1) ; le checkout 5.5 reste pour le jeu 5.5 ; AdditionalPluginDirectories → ../LifePlay-Sandbox-5.8/Plugins. Scripts de l'addon par Engine.ps1, Target.cs V7, CompilerVersion=14.50.35717. D12 : 9 C4996 corrigés sous garde UE_VERSION_OLDER_THAN(5,8,0) ; LifePlayEditor 0 erreur, 0 avertissement. LPSandbox.uproject autonome corrigé ; piège AP7 confirmé en 5.8 (binaires déplacés). Tournée Mesure : R1 identique au caractère, 44/44 et 73/73 fichiers, PASS-ÉCART (bruit ≤ 3,8e-6, départage d'égalités nulles, estimé) ; VAL PASS, PASS-STATIC pour BuildMod, EditMod, HairPipeline. Pour U5 : rien d'attendu de l'addon. Pour U6 : la tournée et le Sandbox se lancent fenêtre visible (assert D3D12 en fenêtre minimisée) ; capture à rendre indépendante de la fenêtre. Pour U7 : exécuter BuildMod, EditMod, HairPipeline en 5.8. Hors U58 : correction de LPSandbox.uproject en 5.5 (doc 21).

U5 — Contenu (N1 + N0)

  • 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.
  • Diagnostic proposé par U1 (à décider) : bEnableMutableContainerWarnings=True temporaire dans la copie 5.8, puis CompileAllBlueprints (les 11 fonctions Array_* à signature changée sont tolérées jusqu'en 5.9 ; la liste AllowedMutableContainerFunctions compte 13 entrées, relevé U5).
  • Résultat U5 (2026-10-08, CHG-255) : resave D10 de 590 paquets hors Heavy (800 moins 210 acteurs externes orphelins de cartes gabarit absentes, exclus) : LPResavePackages code 0, 590/590, 0 échec, 126 s, pic 8,8 Go, versions 5.5 → 5.8, −125,65 Mo ; 292 fichiers suivis modifiés, rien hors Content. Filet : tag U5-avant et instantané D:\Game\LifePlay_Backup_5.5\U5 (3 092 fichiers Content hors Heavy + Config) ; git ne suit que 292 fichiers de Content, l'instantané est le seul vrai filet (la synthèse 28 disait à tort « réversible par git checkout »). Empreinte LPDumpAssets avant / après : 1 634 lignes = 590 PackageMetaData + propriétés dépréciées des assets d'animation ; diagnostic U5-T3b : conversion par PostLoad 5.8 au chargement, sans perte (9 reciblages identiques au bit près, 3 témoins sensibles) ; 2 drapeaux Stride Warp de RTG_Mannequin (démo Epic, op désactivée) perdus au chargement, pas au resave. CompileAllBlueprints 5.8 avant et après : 410 BP (110 sous /Game), 0 erreur, 0 avertissement BP, 28 avertissements « pose non à jour » inchangés ; bEnableMutableContainerWarnings : 0 nœud, aucun Array_* à corriger avant 5.9. LPCheckStreetMap 280/280, CSV identique à 5.5. Cuisson complète à froid (décision utilisateur) : 8 915 paquets, 0 erreur, 0 avertissement, 6 min 10 (DDC chaude), 2,6 Go. Éditeur 5.8 ouvert sur le contenu réenregistré sans erreur de chargement. VAL PASS (V1–V7). Référence CompileAllBlueprints 5.5 corrigée : L7i (269 BP, 0/0, 121 s), non 115 s (L1). Pour U6 : traiter les 28 avertissements de pose non à jour, surveiller le NaN FRotator::Quaternion vu une fois sur DM_RazDog_0 (non reproduit), comparer le rendu StreetMap par captures. Pour U7 : RetargetPack.py (set_retarget_chain_settings sans effet, 9e argument de duplicate_and_retarget changé) à adapter à 5.8. Hors U58 : retrait des 210 acteurs externes orphelins, décision de l'utilisateur après V2.0 (doc 21).

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, LogStats) ; réglages vidéo (VQ) revus pour 5.8 ; contrôle visuel utilisateur ; registre des erreurs mis à jour.
  • Résultat U6 (2026-10-08, CHG-256) : porte G-U6 franchie (GO de l'utilisateur). Build Development 5.8 OK au 4e essai (2 échecs C1001 / C2206 non déterministes sous UBA, mémoire engagée ~61 / 75 Go ; sans UBA la compilation passe, cause estimée UBA et/ou mémoire) ; UAT code 0, 179 s, 1 avertissement de cuisson (LegacyIterative, bUseZenStore=False). A/B LogStats 5.5 DC4 / 5.8, même carte et même sauvegarde : AccessedNone 442 / 364, erreurs 6 / 5, fatal 0 / 0 ; équivalent (estimé, un parcours). Tools/LogStats.ps1 corrigé (5.8 écrit « (real) property » : 0 avant, 364 après). Menu Video, « Recommended » → High (VRAM 8 146 Mo), niveaux relus après relance, son, reprise de partie et rues : conformes selon l'utilisateur. NaN, PersonCumming, Save Preset, « pose non à jour » : 0 au journal du jeu. VAL PASS. Référence Modules 5.8 figée (2 195 fichiers). Pour U7 : tournée Mesure (fenêtre visible) et 28 poses de démo Manny / Quinn reportées par décision de l'utilisateur ; -NoUBA à porter dans la skill lp-build ; copie d'une sauvegarde = Saved\SaveGames + Content\Saves (SAV1 / ERR-042). Pour U8 : brouillard aux niveaux 0-1 (Effects Low-Med) non comparé 5.5 / 5.8 ; 4 Gamethread hitch sur MapMarkers_C.LPFocusWidgetComponent à surveiller ; Shipping en cuisson à froid.

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 le contrat est inchangé (structure, .lpmod, gestionnaire, avertissement de version) ; essai en jeu.
  • Résultat U7 (2026-10-09, CHG-257) : essais T1–T7 tous passés. T4 (mod 5.5 dans le jeu 5.8) : plantage au démarrage 2/2 (FZenPackageHeader), d'où la garde D2 (décisions de l'utilisateur) : trois contrôles (moteur par en-tête de conteneur + AssetRegistry.bin + EngineVersion du .uplugin ; version min 2026.10.2.0 ; version max = ProjectVersion), mod refusé démonté au démarrage avec fenêtre de raison, une case par contrôle dans Settings > Misc, mod sans MODULE_GAME_VERSION chargé avec avertissement, BuildMod écrit EngineVersion, gestionnaire marquant « (not loaded) ». T4 rejoué : refus sans plantage ; cases levées : le plantage revient. Défaut de coiffure par défaut (personnage chauve après ouverture du gestionnaire, présent depuis H1/H3a) corrigé en 5.8 seulement (C1 + C2) ; non corrigé en V1.x. Référence : Shipping 5.8 -createreleaseversion=2026.10.2.0 → Releases/2026.10.2.0 (conteneur 5, registre 24) ; 2026.10.1.5 et 1.6 rangées en sauvegarde. Recuisson : 3 archives *-1.0-for-LifePlay-2026.10.2.0 (70 / 84 / 20 paquets, auteur « LifePlay Revival », EngineVersion 5.8.3) ; T2 : 3 mods acceptés, 104 clips, 138 coiffures, aucun avertissement ; T5 : un mod V2.0 empêche la V1.x de démarrer (Invalid pak file version (12)), consigné au guide moddeurs ; T7 : chaîne NewMod → HairPipeline → EditMod → BuildMod → jeu en 5.8, PASS. Builds 0 erreur, 0 avertissement ; LPTestStringCompat 3120 / 0 / 60. VAL PASS (3 réserves de preuve : constats visuels, rechargement T6). Pour U8 : publier les 3 archives 2026.10.2.0 ; Shipping final et archivage des PDB ; recréer la référence si le code change après 2026.10.2.0. Pour U7b : capture de la tournée Mesure indépendante de la fenêtre, RetargetPack.py en 5.8, 28 avertissements « pose non à jour ». Hors U58 : mise à jour des scripts écrivant à la racine de etat/ et réorganisation de etat/ de la copie 5.8 (lot dédié), transfert des ModSources/*/Content hors git, lot MCP STM, personnages enfoncés dans la rue, bugs non prioritaires, C3, bouton du nom d'un mod refusé et libellé moteur (doc 29), McpAutomationBridge (doc 30) (doc 21).
  • Résultat U7b (2026-10-09, CHG-259) : reports de l'atelier et des poses traités. Tournée Mesure : -RenderOffScreen seul évite l'assert D3D12 (ERR-050) mais ignore -ResX / -ResY (viewport ≈ 888×500, cadrage ×0,555, ERR-051) ; -RenderOffScreen -ExecCmds="r.SetRes 1600x900w" (pilote AnimPipeline.ps1, .bat transmettant les arguments, usage interactif identique à l'octet) rend la géométrie de la référence U4-REF55 : 20/20 lignes, JSON 10/10, dimensions 20/20, 0 assertion. RetargetPack.py : trois ruptures en 5.8 (9e argument de duplicate_and_retarget, set_retarget_chain_settings, retargeter neuf sans op) et destruction des références avant l'échec ; décision de l'utilisateur : portage après V2.0, garde-fou seulement (refus sous 5.6 et plus avant toute suppression, ERR-052). 28 poses « pose non à jour » : défaut du pack de démo, présent aussi en 5.5.4 (la référence « 0 en 5.5 » de U5 était antérieure à l'ajout du pack) ; « Update Source » sur les 28 : 56 lignes → 0 au CompileAllBlueprints, 28 _anim intactes (ERR-053). Addon ce2e269 ; poses hors git (instantané Backup_5.5\U7b). VAL PASS. Reste : erreur HyperAIStudio au démarrage (code de sortie 1), correctif du lot 29 bloquant avant la cuisson U8 (doc 21).

U8 — Shipping, publication, évaluation (N1 + N2)

  • build Shipping, archives (règles de publication), README ; évaluation multi-agents (modèle prévu / utilisé) ; porte de publication (utilisateur).
  • Différé (décision utilisateur du 2026-10-09) : rien n'est livré avant la phase de débogage et d'optimisation ; le Shipping, les archives et la porte de publication passent après la stabilisation (doc 29) et l'optimisation (doc 30). Le découpage ci-dessous est conservé pour ce moment. D'ici là, la preuve en jeu du correctif ContactMenu (STM-T4c) se fait au parcours STA-T1 (build Development) ; les reports « pour U8 » (brouillard Effects Low-Med, hitchs MapMarkers_C) sont déjà au tableau des défauts connus du doc 29.
  • Découpage (SEQ1, 2026-10-09) : une fiche par résultat vérifiable ; T2 → T3 → T4 séquentielles (même copie, même moteur), T6 et T8 en parallèle de T5.
  • Avancement (2026-10-09, CHG-272) : T0 et T1 menées en lecture seule (décision utilisateur « U8-T0 et T1 seulement » ; le report vaut pour T2 à T11). Livrables etat/U58/U8/U8-T0-INV.md, U8-T1-CART.md, suivi U8-SUIVI.md. T1 : depuis la référence 2026.10.2.0 (cuite à 10:38 sur cb79c24 + fichiers commités en 31615b2 / 9242cdb), seul Content/BPs/Person.uasset (6cb8e81, CHG-263) change le contenu cuit ; LifePlayEditorTools est éditeur seulement ; les 3 archives restent cohérentes (imports estimés). Décision utilisateur : choix A (garder) / B (recréer sous le même numéro) / C (nouvelle version) reporté à la reprise de U8 ; T1 sera rejouée à ce moment, après G-ST et OB, le contenu cuit devant encore changer. Constats de T0 à traiter : build Shipping V2.0 sans PDB (archivage des PDB de T4 = recompilation) ; report doc 21 « erreur HyperAIStudio » non coché alors que CHG-260 / ERR-054 semblent le corriger (à vérifier, lot STM) ; cuisson à froid absente du tableau des défauts connus du doc 29, contrairement à ce que dit le paragraphe « Différé ».
  • Reprise partielle (décision utilisateur du 2026-10-09, CHG-275) : « reprenons U8 », puis choix « U8 T2-T5 sans publier » : le report SEQ1 est levé pour T2 à T5 seulement (compilation Shipping, cuisson complète, empaquetage avec PDB, smoke LogStats), sans publication ; T6 à T11 restent différées après G-ST et OB. Choix de la référence (T1 § 4) : A, garder 2026.10.2.0 pour ce passage : cuisson sans -createreleaseversion, dossier d'archive neuf, Releases/ et les 3 archives de mods inchangés ; B ou C se tranche à la publication. T1 non rejouée (depuis sa mesure, seul Tools/FicheStats.py, non cuit, a changé hors Docs). Registre etat/U58/U8/U8-TACHES.md.
  • Résultat T2 à T5 (2026-10-09, CHG-276) : T2 compilation Shipping code 0, 0 / 0 ; T3 cuisson complète sans -iterate (FULL COOK, 8 923 paquets, 0 / 0, 164 s, DDC gardée : décision utilisateur) ; T4 archive D:\Game\LifePlay_Build_5.8_Shipping_U8 (2 220 fichiers), PDB dans …_Shipping_U8_PDB (BUILD-ID.txt) ; T5 redéfinie (le Shipping n'écrit pas de journal, bUseLoggingInShipping absent) : T5a smoke Shipping joué par l'utilisateur PASS (aucun défaut ; copie isolée par -UserDir, le Shipping écrivant sinon dans %LOCALAPPDATA%\LifePlay\Saved), T5b archive Development -skipcook sur la même cuisson (.ucas identique), T5c LogStats contre U6 PASS avec réserve (ContactMenu 63 → 0 ; rafale Floats_3 portée au doc 29). Aucune publication ; T6 à T11 restent différées.
  • Reprise (2026-10-10 / 11, CHG-323) : après la fin du gel, décisions D1 à D9 de l'utilisateur (référence 2026.10.2.0 recréée, DDC gardée, 3 mods recuits, publication à la porte T11 seulement). Candidat U8r sur 36d1fa4, puis refonte U8r2 sur 4283c13 (commit STE) : compilation « up to date », cuisson complète (FULL COOK, 8 923 paquets, 0 / 0, 151 s), archive Shipping de 2 078 fichiers avec PDB et BUILD-ID.txt à côté, CheckPackage 4 PASS, référence recréée ; smoke Shipping PASS (0 plantage, réglages vidéo conservés) ; mesure Development PASS avec réserves (88 SPAWN, ContactMenu 0, hitchs 0, Accessed None 18, Floats_3 72 et No SkeletalMesh 10 289 portés au doc 29) ; identité des données PASS (418 / 418 Blueprints, 280 / 280 villes, totaux = U5) ; T7 PASS avec réserves ; 3 mods recuits (T8a). T6 annulée (décision de l'utilisateur, sans captures ; rendu Low / Med jugé acceptable à l'œil, comparaison 5.5 impossible). Archive de jeu LifePlay_Revival_V2.0_Windows_Game.7z préparée en jeu léger (vin_Base et vin_VanillaRealistic, 1 452 fichiers, 1 291 890 476 o, SHA-256 4f68afcb…), README racine V2.0 préparé, rien poussé ni téléversé. Reste : T9 (indicateurs), T10 (évaluation), puis la porte T11 (utilisateur), qui exige G-OB clos et la sortie de ST (D2), le contrôle PUB de toute la branche ue5.8, le lien, la taille et le SHA-256 de l'archive au README, et le nettoyage des chemins personnels des docs 27 et 28 (condition ouverte, non traitée dans ce lot). Livrables etat/U58/U8/ ; registre U8-TACHES.md.
  • Porte T11 (2026-10-11, CHG-325) : close sur non-publication. Décision de l'utilisateur : « décision final v2.0 restera une version de migration et ne sera pas publié. clore T11. Nous attendront un prochain cycle pour livrer la build ». U8 est clos sans publication : aucun push, aucune fusion vers main, aucun tag, aucun téléversement ; les conditions de la porte et les reports du doc 21 (l. 210, 223, 229) passent au prochain cycle de livraison ; artefacts conservés hors dépôt (etat/U58/U8/U8-T11-PORTE.md).
Fiche Résultat vérifiable Niveau / agent
U8-T0 état de départ : 3 dépôts, pins, reports « pour U8 » du registre (doc 21) et de U6 / U7 / STM-T4c N0 lp-inventory
U8-T1 code ou contenu changé depuis 2026.10.2.0 ? (CHG-260 LifePlayEditorTools, CHG-263 Person.uasset) → décision utilisateur : recréer la référence ou non N1 lp-cart (modèle surchargé sonnet)
U8-T2 compilation Shipping seule (journal, 0 erreur, avertissements comptés) N0 lp-builder
U8-T3 cuisson à DDC froide, durée mesurée N0 lp-builder
U8-T4 empaquetage, archivage des PDB N0 lp-builder
U8-T5 smoke Shipping : nouvelle partie + Continuer, LogStats (ContactMenu 63 → 0 attendu, STM-T4c), hitchs MapMarkers_C comptés N1 lp-validator + utilisateur
U8-T6 brouillard Effects Low-Med : captures 5.5 / 5.8 même cadrage utilisateur + N1
U8-T7 VAL du Shipping (critères globaux 1 à 6) N1 lp-validator
U8-T8 README 5.8 et 3 archives 2026.10.2.0 préparées selon les règles PUB, rien poussé N1 lp-writer
U8-T9 indicateurs extraits des transcriptions (tours, pic de contexte, jetons, erreurs par fiche) N0 (script)
U8-T10 évaluation multi-agents à partir des seuls comptes rendus et de T9 N2 orchestrateur
U8-T11 porte de publication utilisateur

U9 — Voie alternative UE5 native (N3 + N1), différée après V2.0 (D9 ; prévue à l'origine en parallèle de U5–U6)

  • 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 et UE5 divergent ;
  • interrupteur par correctif (réglage de configuration, défaut = sémantique UE4 comme aujourd'hui) qui bascule l'implémentation vers l'appel UE5 natif, sans toucher aux Blueprints ;
  • banc de comparaison (étendre LPTestStringCompat et les relevés -LPVerify*) : mêmes entrées, sorties UE4 / UE5, liste des écarts et de leurs effets en jeu ;
  • livrable etat/U58/U9/U9-CART.md et interrupteurs compilés, désactivés ; la bascule effective (et un éventuel nettoyage des Blueprints) reste une décision utilisateur ultérieure.

Critères d'acceptation globaux

  1. Le jeu 5.8 compile (éditeur, Development, Shipping) sans l'addon et avec.
  2. Chargement et cuisson sans erreur ; villes et Blueprints identiques en données à la référence 5.5.
  3. Comportement en jeu équivalent au build 5.5 (A/B, contrôle visuel), réglages vidéo fonctionnels.
  4. Mods : contrat inchangé, 3 mods recuits chargés, mods 5.5 signalés par l'avertissement de version.
  5. Plus aucun outil, critère ni réglage fondé sur 4.27 ; chemin moteur à un seul endroit.
  6. CHG par lot, commits par phase, rien poussé sans accord.

Risques

  • Plugin StreetMap (tiers) non maintenu pour 5.8 → portage maison (U4).
  • Changements de rendu par défaut (Lumen, MegaLights, Substrate) → écarts visuels à arbitrer (U6, mémoire « comparer avant de revenir en arrière »).
  • Sémantique de chaînes ou de conteneurs encore modifiée par 5.6–5.8 → LPTestStringCompat rejoué en U3.
  • Toolchain : 5.8 peut exiger un MSVC plus récent que 14.44 → U0-T2.