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

418 lines
41 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.

---
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.