LifePlay-Revival/Docs/Migration/etat/U58/UA/UA-SYNTHESE.md

206 lines
38 KiB
Markdown
Raw Normal View History

# UA-SYNTHESE — Effort, risques et décisions pour la porte G-U (migration UE 5.5 → 5.8)
Fiche UA-T6 — Niveau N5 — Modèle prévu fable-top | utilisé fable
Date : 2026-10-08. Lot UA du plan `Docs/Migration/27_Plan_Migration_UE58.md`. Lecture seule : aucune compilation,
aucun lancement, aucun git, aucun audit ni code modifié. Sources : `UA-JEU.md` (T1), `UA-PLUGINS.md` (T2),
`UA-MODS.md` (T3), `UA-MOTEUR.md` (T4), `UA-ESSAI.md` (T5, **fait foi**), `UA-OUTILS.md` (T7), `UA-FAB.md`, les
journaux `D:\Game\U58-essai\essai-A1|A2|B.log` (relus pour cette synthèse), les journaux `etat/AP7_Ship_*`,
`etat/L1_CompileAllBlueprints_*`, `etat/L4-CX-B07_LPResavePackages_*`, `etat/L7h_LPCheckStreetMap_*`, et les quatre
corrections de l'orchestrateur (a–d), qui prévalent sur les audits.
Conventions : **établi** = constaté dans un fichier ou un journal cité ; **estimé** = déduit avec une méthode écrite
(§ 7) ; **incertain** = ne se tranche que par un essai, nommé. Unité d'effort : **1 séance ≈ une demi-journée ≈ 3 h de
travail orchestré, builds compris** (même unité que UA-PLUGINS et UA-OUTILS). Les décisions appartiennent à
l'utilisateur ; ce document recommande.
---
## 1. Résumé exécutif
1. **Effort total estimé : 14,5 à 25 séances pour U0–U8** (≈ 45 à 75 h orchestrées, 2 à 4 semaines à 1–2 séances/jour), **+ 2 à 4 séances pour U9** si on le fait maintenant ; durée machine cumulée ≈ 7 à 16 h, surtout sans surveillance (premier cook 5.8 à froid, réenregistrement, cuissons). Actions utilisateur ≈ 6 à 10 h (décisions, VS Installer, contrôles visuels, tests de mods, portes).
2. **La compilation n'est pas le problème** (établi par l'essai T5 et relecture de `essai-A1.log`) : sur le moteur 5.8.3 complet, toutes les unités de compilation des 9 modules (jeu, 4 plugins, 3 modules de l'addon, Mcp) ont été compilées ; **2 causes d'erreur** seulement (`LPCoupleSimCore.cpp:127`, `LPDataCache.cpp:198`), 9 avertissements C4996, chaîne d'outils conforme (VS 2026 / MSVC 14.50.35739, SDK 22621, .NET 10 embarqué).
3. **Trois risques majeurs** : (R1) un mod cuit pour 5.5 monté dans le jeu 5.8 — plantage possible avant tout avertissement (P3×I3) ; (R2) le contenu au passage 5.8 — réenregistrement de 9 068 `.uasset` dont `GI` 51,9 Mo avec l'antécédent ERR-019 (plantages du resave de masse en 5.5) et premier cook à froid de durée inconnue (P2×I3) ; (R3) Zen store activé par défaut en 5.8, qui change la chaîne de cuisson dont dépendent la version de référence et les mods (P3×I2).
4. **Recommandation : GO séquencé pour U0–U8, U9 en go partiel (différé après U6 ou après V2.0)**, à condition de trancher en U0-T4 les décisions D1 (Zen store = False pour la migration), D3 (garder `LPResavePackages` et `LPTestStringCompat`), D10 (périmètre du réenregistrement) et D4 (Mcp désactivé, MCP Epic évalué sans l'activer dans le jeu), et d'ajouter **deux portes intermédiaires** : après U3 (0 erreur de compilation, `LPTestStringCompat` vert) et après U6 (A/B et contrôle visuel), avant tout point de non-retour (U7 référence, U8 publication).
5. Premier lot à lancer : **U0**, dont la moitié est déjà faite (5.8.3 et VS 2026 installés) ; prérequis en § 9.
---
## 2. Lots × effort × niveaux × actions utilisateur × durées machine
Constantes de calibrage (établi sauf mention) : build éditeur 5.8 complet **avec** Mcp 26,5 min (A1) / 25,5 (A2) ; **sans** Mcp 4,9 min pour 71/132 actions (B, interrompu) → complet sans Mcp **estimé 8–12 min** ; build 5.5 incrémental 13 s (`AP7_Build_20261006-212651.txt:74`) ; cook 5.5 itératif à chaud 8 884 paquets en 6,0 min, BuildCookRun Shipping complet 7 min 37 s (`AP7_Ship_20261007-023526.txt:3697,3748,4215`) ; `CompileAllBlueprints` 115 s (`L1_CompileAllBlueprints_20260929-010931.txt:3`) ; `LPCheckStreetMap` 25 s (`L7h_LPCheckStreetMap_20261001-201853.txt:3`) ; `LPResavePackages` liste CX-B07 86 s (`L4-CX-B07_LPResavePackages_20260930-115833.txt:3`) ; cuisson DLC d'un mod 5–15 min (UA-MODS § 3) ; premier cook 5.8 à froid (DDC et shaders à reconstruire) **estimé 1–3 h, incertain** ; copie de 14 Go sur le NVMe USB **estimé 5–15 min**.
| Lot | Contenu ajusté par les constats | Effort (séances, bas–haut) | Niveaux | Actions utilisateur | Durées machine |
|---|---|---|---|---|---|
| **U0** Préparation | T1 **fait** (5.8.3 installé, UA-MOTEUR (a)). T2b **à moitié fait** : VS 2026 18.10 installé (corr. b) ; reste : figer les composants LTSC 14.38 + 14.50 dans VS Installer ; épingler `ToolchainVersion=14.38.33130` dans le projet 5.5 ; **build 5.5 de contrôle** (toolset au journal UBT inchangé, code 0) + démarrage éditeur 5.5 ; relever `%LOCALAPPDATA%\UnrealEngine\Common\Zen` (5.6.6, 3,7 Go). T3 : tag `ue5.5-final`, copie P4 (exclure `.mcp.json`), branche `ue5.8`, dépôt des modules. T4 : décisions D1–D13 (§ 5). **Nouveau T5** : dans la copie, `EngineAssociation 5.8`, `Target.cs` → `Latest` (A2 prouve 0 erreur supplémentaire), `Fab`/`Bridge` → `Optional` (robustesse, D13) | **1 – 1,5** | N0 (build, relevés), N1 (épinglage, copie), N2 (décisions), utilisateur | VS Installer (15 min) ; décisions (45–60 min) | build 5.5 après changement de toolset : estimé 5–10 min ; copie 5–15 min |
| **U1** Cartographie | Ce qui reste après UA : diff ciblé 5.5/5.8 de `PluginManager.cpp`, `ObjectVersion.h`, `IoStore.h`, `IoContainerHeader.h` (UA-MODS § 6, R2) ; spécification des 2 correctifs (`:127` : équivalent 5.8 à identifier — candidats estimés : données compressées de `UAnimSequence` ou `IAnimationDataModel::GetBoneAnimationTracks()` déjà utilisé par l'addon `LPAnimCatalogCommandlet.cpp:125` ; `:198` : clé `FJsonObject` → `FString` explicite) ; relevé des nœuds Blueprint dépréciés **en 5.5** avec Blueprint Reader (D8) sur `GI`, `Person`, `UI/ModManager`, `UI/ModuleTick`, `UI/MainMenu`, `CharGen` ; reliquats 4.27 (29 docs, UA-JEU § 6) ; `U1-CART.md` | **1 – 2** | N1 (inventaires, CART), N3 (diff moteur, spec des correctifs) | aucune | aucune |
| **U2** Retrait 4.27 + chemin moteur | Retrait de **16** commandlets (les 18 « portage 4.27 » de UA-JEU § 3 moins `LPResavePackages`, nécessaire en U5, et `LPTestStringCompat`, test gardé ; D3) et de leurs entrées Build.cs ; `Tools/Engine.ps1` lu par `BuildDebug.ps1`, `RunCommandlet.ps1` (jeu) ; bandeau « historique 4.27 » ; `CheckIntegrity.ps1` (`$Root427`) retiré ou neutralisé ; build 5.5 inchangé (A-BUILD) ; commit | **1 – 1,5** | N1, N0 (build) | relecture du commit (10 min) | build 5.5 incrémental < 1 min |
| **U3** Bascule et compilation | Correctifs : `LPCoupleSimCore.cpp:127` (rupture certaine), `LPDataCache.cpp:198` (rupture certaine, contrat des mods : choix D11), `:155` (même forme d'appel que `LPPoseMeasure.cpp:1283` qui **compile** en 5.8 → très probablement sans correction) ; erreurs de lien ou révélées après correction : estimé 0–3 ; 9 C4996 (corriger ou tolérer, D12) ; niveaux stricts V7 sur LPAnimCore et ModdingExtra (seuls non mesurés) ; **premier lancement de l'éditeur 5.8** (sans ouvrir de Blueprint) et `LPTestStringCompat` rejoué ; CHG, commit | **1,5 – 3** | N3 (correctifs), N0 (builds), N4 si blocage inattendu | aucune | 4–8 builds × 8–12 min ; premier lancement éditeur (shaders éditeur) estimé 20–60 min |
| **U4** Plugins tiers et addon | StreetMap : compile déjà (0 erreur, 7 C4996 établi) → corrections de dépréciation + commentaire faux `StreetMapSceneProxy.cpp:169` ; rendu vérifié en U5/U6. Mcp : **compile en 5.8** (établi, A2−B) → D4 : désactivé (P7) ou gardé (+20 min par build complet) ; évaluation du MCP officiel Epic `ModelContextProtocol` sur la copie (le serveur « Unreal MCP » du `.mcp.json` utilisateur n'a **pas répondu** dans cette session : ECONNREFUSED, à vérifier d'abord). Addon : branche `ue5.8`, 8 scripts à chemin `UE_5.5` (UA-OUTILS § 2) vers un point unique ; compile déjà (LPSandbox, LPAnimMeasure, LPModTools liés en A1) ; 1 C4996 `LPHairFromStaticMeshCommandlet.cpp:430` ; tournée Mesure (non-régression JSON/CSV contre 5.5, SB2-T5) ; chaîne atelier (`LPAnimTwist`/`LPAnimEval`) rejouée ; commit addon puis pin | **2 – 3,5** | N3 (StreetMap, écart de mesure), N1 (scripts, tournée), N2 (arbitrage Mcp), N0 | choix D4 ; lancement sandbox si écart visuel (30 min) | 2–4 builds ; tournée Mesure (durée 5.5 à relever dans `etat/SB*`) |
| **U5** Contenu | Blueprint Backup & Restore avant tout réenregistrement ; ouverture du projet 5.8 ; réenregistrement selon D10 : **hors `Heavy`** 798 assets (estimé 10–30 min) ou **tout** 9 068 (estimé 1–3 h, ERR-019) ; `CompileAllBlueprints` (≈ 2 min) comparé au relevé 5.5 ; nœuds dépréciés → correctif par commandlet (modèle `LPFixDeprecatedNodes`, gardé en historique) ; `LPCheckStreetMap` 280/280 contre `streetmap_5.5.csv` ; **cuisson complète à froid** sans avertissement ; renommage `r.TranslucencyLightingVolumeDim` (UA-MOTEUR c10) | **2 – 4** | N1 (resave, relevés), N0 (cook, journaux), N3 si un Blueprint casse (GI) | aucune (sauf plantage de resave : décision) | resave 0,2–3 h ; cook à froid 1–3 h (incertain) |
| **U6** Comportement en jeu | Build Development empaqueté 5.8 ; A/B `LogStats` contre `LifePlay_Build_5.5_DC4` sur le **même parcours** (nouvelle partie + Continuer) ; VQ revu (`r.PostProcessAAQuality` sans effet déjà en 5.5, SMAA disponible, nouvelles clés de base `r.Fog.SeparateComposition`, `HeterogeneousVolumes`) ; audio WASAPI écouté ; captures même cadrage avant/après ; registre des erreurs | **2 – 3** | N1 (A/B, VQ), utilisateur (visuel), N3 pour un écart inexpliqué | contrôle visuel et audio 1–2 h | build Development + cook à chaud 15–30 min |
| **U7** Mods | Selon UA-MODS § 3 et § 7 : atelier adapté (R0, partagé avec U4), **version de référence `Releases/2026.10.2.0` issue du build Shipping de U8** (voir enchaînement § 4), 3 cuissons DLC, tests T1–T7, dont **T4 décisif** (mod 5.5 dans jeu 5.8) ; garde C++ `MODULE_GAME_VERSION` si T4 plante (D2, +1 séance N3) ; guide moddeurs, README | **2,5 – 4** | N1, N0, utilisateur, N3 (garde) | tests en jeu T1–T7 (≈ 1 h) ; décision D2 après T4 | 3 × 5–15 min ; 1 rebuild si garde |
| **U8** Shipping, publication, évaluation | Build Shipping `-createreleaseversion=2026.10.2.0` (sert U7), archives PUB1/PUB2, README, note de version (Windows 10 minimum, WASAPI), évaluation multi-agents (prévu/utilisé), porte de publication | **1,5 – 2,5** | N1, N2, utilisateur | porte de publication ; push (accord explicite) | Shipping : compile Game ≈ 10 min + cook à chaud 15–30 min |
| **U9** Voie UE5 native | Inventaire des appelants Blueprint des 17 fonctions exposées (UA-JEU § 1), interrupteurs par correctif, banc `LPTestStringCompat` étendu ; **non bloquant pour V2.0** | **2 – 4** (différable) | N3, N1 | décision d'activation ultérieure | commandlets courts |
| **Total U0–U8** | | **14,5 – 25** | | **≈ 6–10 h** | **≈ 7–16 h** |
| avec U9 | | 16,5 – 29 | | | |
Marge : les fourchettes hautes incluent une escalade de niveau par lot (règle du plan) et le facteur 1,5 de première exécution en 5.8 (UA-MODS § 7). Elles n'incluent pas un échec de T4 **et** un Blueprint cassé **et** un écart de rendu StreetMap simultanés (scénario noir : +3 à +5 séances).
---
## 3. Registre des risques
Échelle 1–3 ; score = P × I. « Repli » = ce qu'on fait si la parade échoue.
| # | Risque | P | I | Score | Signal d'alerte | Parade | Plan de repli | Statut / source |
|---|---|---|---|---|---|---|---|---|
| R1 | **Mod cuit pour 5.5 monté dans le jeu 5.8** : conteneur monté avant tout contrôle ; paquet sans version lu avec le schéma 5.8 → erreur ou plantage au premier clip chargé | 3 | 3 | **9** | Test T4 (UA-MODS § 4) ; `Saved/Crashes`, `LogStreaming`/`AsyncLoading2` | Avertissement existant (modules cochés) ; README « supprimer l'ancienne version » ; garde C++ `MODULE_GAME_VERSION` ≠ `ProjectVersion` → assets ignorés (D2) | Avertissement étendu aux modules décochés ; au pire, refus de montage des `Mods/` sans tampon de version (toujours sans changer le format) | incertain (nature de l'échec) ; UA-MODS R1, S11 |
| R2 | **Contenu au réenregistrement** : plantages de resave de masse (ERR-019 ouvert : `BulkData IsUnlocked`), `GI` 51,9 Mo, nœuds dépréciés 5.6–5.8 non audités (aucun `.uasset` ouvert en UA) | 2 | 3 | **6** | `CompileAllBlueprints` ≠ relevé 5.5 ; `Saved/Crashes` pendant `LPResavePackages` ; avertissements de cuisson > 3 | Blueprint Backup & Restore ; resave par lots (hors `Heavy` d'abord, D10) ; travail dans la copie 5.8 seulement ; Blueprint Reader en 5.5 pour relever avant (D8) | Ne pas réenregistrer `Heavy` (le cuiseur convertit à la volée) ; correctif par commandlet (modèles gardés en historique git) ; `git checkout` de la branche `ue5.8` | établi (ERR-019, volumes UA-JEU § 4) / incertain (nœuds) |
| R3 | **Zen store par défaut** (`bUseZenStore=True`, `BaseGame.ini:95` 5.8) : chaîne de cuisson, version de référence et DLC des mods divergents ; `zenserver` lancé | 3 | 2 | **6** | Absence de `.utoc/.ucas` ou de `Releases/…/AssetRegistry.bin` après R1 ; `-basedonreleaseversion` en échec | Fixer `bUseZenStore=False` dans `DefaultGame.ini` de la copie 5.8 **avant** le premier cook (D1) | Adopter Zen dans un lot dédié après V2.0 ; le staging pak/IoStore reste « available and supported » (notes 5.8) | établi (défaut) / incertain (effet) ; UA-MOTEUR c7, UA-MODS R3 |
| R4 | **Contrat JSON / `LPDataCache`** : au-delà de l'erreur `:198`, le changement de type de clé `FJsonObject` (`FStringView`/`FSharedString`) peut altérer silencieusement la fusion « défauts + champs » (`LPDataCache.cpp:52-58`) et le cache `Saved/LPDataCache` | 2 | 3 | **6** | Journal `LoadTxtStats`, `Donnees : … 16 module(s)` différent de 5.5 ; T1 ; diff des `Saved/LPDataCache/*.json` 5.5 vs 5.8 | Correctif explicite (clé convertie en `FString`) plutôt que `UE_JSONOBJECT_LEGACY_STRING_KEYS=1` (D11) ; test T1 + diff des caches | Macro de compatibilité en secours (documentée par Epic, UA-MOTEUR c8) ; `CacheVersion` incrémenté pour forcer la reconstruction | établi (erreur) / estimé (sémantique) ; UA-ESSAI § 3, UA-MOTEUR c8 |
| R5 | **StreetMap** : proxy de rendu maison sous le renderer 5.8 (280 villes, 310 assets) ; amont figé depuis 2023 | 2 | 3 | **6** | `LPCheckStreetMap` ≠ 280/280 ou totaux ≠ `streetmap_5.5.csv` ; captures ville même cadrage différentes | Compile déjà (établi) ; correctif `GetMaterialRelevance(EShaderPlatform)` ; captures avant/après (mémoire « comparer avant rollback ») | Portage maison (MIT) ; à terme voie U9 (maillages statiques cuits par ville, UA-PLUGINS § 3) | établi (compile) / incertain (rendu) |
| R6 | **Premier cook 5.8 à froid** très long ou en échec (DDC et shaders reconstruits, 9 068 paquets, `Heavy` 6,2 Go, disque USB) ; rapports forum 5.8.1 de cuissons en échec (UA-MODS § 6) | 2 | 2 | 4 | Cook > 3 h ; `LogCook` erreurs ; PSO cache | Lancer en arrière-plan, machine éveillée ; DDC sur C: (NVMe interne) si trop lent (UA-OUTILS § 3) | Cook par `-cookdir` partiel pour diagnostiquer ; reporter `Heavy` | estimé ; durée incertaine |
| R7 | **Modules non mesurés par l'essai** | 1 | 2 | 2 | Erreur de lien ou nouvelle erreur en U3 après correction des 2 causes | **Réduit** : relecture de `essai-A1.log:81-304` montre que toutes les unités de compilation des 9 modules ont été compilées ; les 23 actions restantes sont des éditions de liens `.dll` dépendant de LPAnimCore/ModdingExtra et la cible (estimé) | Escalade N4 sur blocage de lien | établi (compilation) / estimé (nature des 23 actions) |
| R8 | **Zen server commun 5.5/5.8** : premier lancement de l'éditeur 5.8 remplace `Common\Zen\Install` 5.6.6 par 5.8.13, partagé avec 5.5 | 2 | 2 | 4 | Éditeur 5.5 : erreurs DDC/Zen au démarrage après le premier lancement 5.8 | Relever l'état avant (U0-T2b) ; démarrer l'éditeur 5.5 juste après le premier lancement 5.8 pour vérifier | DDC fichiers `D:/DDC` suffit à 5.5 (`DefaultEditorSettings.ini:3`) ; désactiver `Zen.AutoLaunch` côté 5.5 si nécessaire | incertain ; UA-OUTILS § 1 |
| R9 | **MSVC partagé** : depuis VS 2026, UBT 5.8 prend 14.50.35739 ; le projet 5.5 doit rester sur 14.38 ; une mise à jour de VS peut déplacer 14.50 (bannie < 14.50.35723) ; `BuildConfiguration.xml` est commun | 2 | 2 | 4 | Ligne « Using Visual Studio … toolchain » du journal UBT 5.5 ≠ 14.38.33130 ; erreur « banned » en 5.8 | Épinglage **par projet** (`ToolchainVersion`, P8) ; composants LTSC figés ; jamais d'épinglage global | 14.44.35207 en secours pour 5.8 (préféré rang 1, non banni : `MicrosoftPlatformSDK.cs:1156`, corr. b) | établi ; UA-OUTILS § 1, § 5 |
| R10 | **Disque USB** (D: = NVMe en boîtier USB : moteurs, projet, DDC) : latence et risque de déconnexion pendant un resave ou un cook de plusieurs heures → assets ou DDC corrompus | 1 | 3 | 3 | Hitches d'E/S, erreurs `IFileManager`, `Saved/Crashes` | Instantané `Tools/Snapshot.ps1` et git avant tout resave ; machine éveillée ; opérations longues sans sommeil | DDC et `Saved/Cooked` sur C: ; restauration `Tools/Restore.ps1` / `git checkout` | établi (matériel, corr. d) / estimé (effet) |
| R11 | **Plugin McpAutomationBridge** : bêta tierce, compile en 5.8 mais +20 min par build complet ; une mise à jour amont peut casser la compilation éditeur | 2 | 1 | 2 | Durée de build ; erreurs dans `Plugins/McpAutomationBridge` | P7 : désactivé pour U0–U8 (D4) ; `Optional` + `Editor` déjà en place | Dossier sorti du projet (comme l'essai B) | établi ; UA-ESSAI § 3 |
| R12 | **Moteur 5.8 et MCP expérimental** : le MCP officiel Epic ou tout pont IA activé dans le `.uproject` 5.8 pourrait modifier des assets ou être embarqué ; le serveur « Unreal MCP » configuré n'a pas répondu dans cette session | 1 | 2 | 2 | Diff `git status` inattendu sur `Content/` ; plugin sans `TargetAllowList: Editor` | Évaluer sur une **copie jetable** de la copie 5.8, jamais sur la branche de travail ; `Editor` seulement ; non commité (règles UA-FAB) | Renoncer au pont IA pour V2.0 | estimé |
| R13 | `GetBoneTransform(double)` à `LPCoupleSimCore.cpp:155` encore en erreur après correction de `:127` | 1 | 1 | 1 | Erreur C2664 à `:155` au premier build U3 | Même appel que `LPPoseMeasure.cpp:1283` qui compile (établi) → probable non-événement | `FAnimExtractContext` (parade UA-PLUGINS § 1) | incertain (masqué par `:127`) |
| R14 | **Sémantique `FString`** modifiée sans note (CX-B08/B12) | 1 | 3 | 3 | `LPTestStringCompat` en échec ; `Modules : N .lpmod lu(s)` ≠ 16 | Commandlet rejouée dès U3 (porte intermédiaire) | Correctif dans `ULPStringCompat` (un seul point d'entrée) | établi (code 5.8 inchangé, UA-MOTEUR c22) |
| R15 | **Sauvegardes et réglages 5.5 des joueurs** (`GameSettings.sav`, parties) refusés par 5.8 | 1 | 2 | 2 | Test T6 | En-tête versionné du `.sav` (conception moteur) ; `SaveModSelection` reconstruit | Message au joueur ; note de version | estimé ; UA-MODS S6 |
| R16 | **Rendu/audio par défaut** : WASAPI, nouvelles clés de base de scalabilité, Windows 7/8 exclus | 2 | 1 | 2 | Écoute et captures en U6 | Clés verrouillées (TAA, SSR, sans Lumen/VSM) restent ; opt-out `AudioMixerXAudio2` si régression | Revenir clé par clé avec capture de référence | établi ; UA-MOTEUR c6, c13 |
Hiérarchie : R1, R2, R3, R4, R5 (scores 6–9) décident du succès ; R6–R10 sont des risques de temps ou d'outillage ; le reste est de surveillance.
---
## 4. Points de non-retour et comment les garder réversibles
| # | Opération | Lot | Irréversible ? | Comment rester réversible |
|---|---|---|---|---|
| N1 | Épinglage `ToolchainVersion` 14.38 dans le projet 5.5 ; figement des composants VS | U0 | non (config) | Une clé ini, un commit ; VS Installer garde les deux toolsets |
| N2 | Premier lancement de l'éditeur 5.8 (remplace le zenserver commun, crée DDC/Zen 5.8) | U3 | partiellement (installation Zen commune) | Relever l'état `Common\Zen` avant ; vérifier l'éditeur 5.5 juste après (R8) |
| N3 | Retrait des 16 commandlets | U2 | non | Historique git ; tag `ue5.5-final` |
| N4 | **Réenregistrement des assets** (`.uasset` réécrits au format 5.8 : illisibles par 5.5) | U5 | **oui pour les fichiers touchés** | Uniquement dans `LifePlay-master 5.8` / branche `ue5.8` ; `LifePlay-master 5.5` jamais touché ; Snapshot + Blueprint Backup & Restore ; `Content` sous git local → `git checkout` |
| N5 | Création de `Releases/2026.10.2.0` et déplacement des références 5.5 | U7/U8 | non si les 5.5 sont conservées | Déplacer (jamais supprimer) vers `LifePlay_Backup_5.5\Releases` (UA-MODS R2) ; 1,3 Go par version |
| N6 | Recuisson et **republication des 3 mods** pour V2.0 ; les archives 5.5 deviennent incompatibles | U7 | oui pour les joueurs (deux versions en circulation) | Garder les archives V1.5 téléchargeables ; nom d'archive porte la version du jeu ; avertissement de version en jeu |
| N7 | **Publication V2.0** (tag, push GitHub, archives) | U8 | **oui** | Porte utilisateur explicite ; rien n'est poussé sans accord (règle PUB) ; V1.5 reste en ligne |
| N8 | Désinstallation de 4.27 et archivage du projet 4.27 (P6) | après U6 | réinstallable, long | Reporter **après la publication V2.0**, pas « après U6 » (recommandation D6) |
| N9 | Adoption des API 5.8 dans le code (restrictions 5.5 levées) : la branche `ue5.8` ne recompile plus en 5.5 | U3+ | oui pour la branche | `main` reste 5.5 ; correctifs 5.5 cherry-pickés tant que V1.x est maintenue |
Règle générale : **tout ce qui précède U7 se fait dans la copie 5.8 et reste jetable** (on peut recommencer depuis `ue5.5-final` en une copie de 15 min). Les seuls vrais engagements sont N6 et N7, derrière une porte.
---
## 5. Décisions à soumettre à l'utilisateur (liste fermée)
| # | Décision | Options | Recommandation | Conséquence |
|---|---|---|---|---|
| D1 | **Zen store** (`bUseZenStore`) pour la copie 5.8 | (a) `False` explicite dans `DefaultGame.ini` ; (b) laisser le défaut 5.8 (`True`) et valider la chaîne DLC/référence avec Zen | **(a)** pour toute la migration : une variable de moins dans U5–U8 ; Zen en lot dédié après V2.0 | (a) chaîne identique à 5.5, R3 neutralisé ; (b) R3 actif, +0,5–1 séance de validation, dépendance à `zenserver` pour cuire |
| D2 | **Garde C++ `MODULE_GAME_VERSION`** avant montage d'un mod | (a) rien de plus que l'avertissement actuel ; (b) assets d'un module de version ≠ ignorés par `LPModDailies`/`LPHairstyle` (clé existante, contrat inchangé) ; (c) avertissement étendu aux modules décochés | Décider **après T4** ; si T4 plante → **(b)+(c)** ; si T4 journalise une erreur propre → (c) seul | (b) +1 séance N3 et un rebuild ; aucune surface du contrat ne change (UA-MODS R1) |
| D3 | **Sort des 18 commandlets de portage** (P3) | (a) retirer les 18 ; (b) retirer 16, **garder `LPResavePackages` (outil de U5) et `LPTestStringCompat` (test)** ; (c) ne rien retirer | **(b)** ; `LPFixDeprecatedNodes` reste disponible en historique comme modèle si U5 révèle des nœuds dépréciés | (b) surface éditeur réduite de ≈ 3 900 lignes ; les API K2Node/EdGraph les plus instables sortent du build |
| D4 | **McpAutomationBridge et MCP Epic `ModelContextProtocol`** | (a) P7 : Mcp désactivé, pas de pont IA pour V2.0 ; (b) Mcp gardé (compile, +20 min/build complet) ; (c) évaluer le MCP officiel Epic en U4 sur une copie jetable, activer seulement s'il est `Editor` et non commité | **(a) pour U0–U8, (c) en parallèle sans dépendance** ; commencer par vérifier que le serveur `.mcp.json` répond (ECONNREFUSED aujourd'hui) | (a) builds courts ; (c) 0,5–1 séance N1+N2, hors chemin critique |
| D5 | **P1** référence de comportement = `LifePlay_Build_5.5_DC4` et V1.5 | confirmer / autre build | **confirmer** ; conserver ce build intact jusqu'à V2.0 | A/B U6 et tests U7 ont une base fixe |
| D6 | **P6** archivage/désinstallation 4.27 | (a) après U6 (plan) ; (b) après publication V2.0 ; (c) jamais tant que V1.x est maintenue | **(b)** | 2,4 To libres : rien ne presse ; évite une réinstallation en cas de retour en arrière |
| D7 | **P7** Mcp désactivé tant qu'aucune version 5.8 n'existe | confirmer tel quel / reformuler « désactivé pour V2.0, même s'il compile » | **reformuler** (il compile : le motif n'est plus l'absence de version mais le coût et la bêta) | cohérence avec D4 |
| D8 | **Blueprint Reader activé en 5.5 avant U1** (plugin Fab installé en 5.5, UA-FAB) | (a) oui, en `Editor` seulement, activation locale non commitée ; (b) non, relever seulement en 5.8 | **(a)** : c'est le seul moyen de relever les graphes (`GI` 51,9 Mo) **avant** la bascule, à coût nul pour le jeu | (a) U1 +0,5 séance, R2 mieux borné ; vérifier que l'activation ne modifie aucun asset (`git status`) |
| D9 | **U9 maintenant ou différé** (go partiel) | (a) en parallèle de U5–U6 (plan) ; (b) après U6 ; (c) après V2.0 | **(c)** : U9 ne conditionne pas V2.0 et consomme N3 au moment où U3–U6 en ont besoin | (c) −2 à −4 séances sur le chemin critique ; la voie reste « préparée » par l'inventaire déjà fait (UA-JEU § 1, 17 fonctions exposées) |
| D10 | **Périmètre du réenregistrement** en U5 | (a) tout `Content` (9 068) ; (b) hors `Heavy` (798) + `Heavy` seulement si la cuisson l'exige ; (c) rien (laisser le cuiseur convertir) | **(b)** | (a) 1–3 h et ERR-019 ; (b) 10–30 min, `Heavy` reste au format 5.5 sur disque (chargé et converti à la volée par 5.8, cuit normalement) ; (c) avertissements de chargement persistants |
| D11 | **Correctif `LPDataCache` : code ou macro** | (a) conversion explicite des clés en `FString` ; (b) `UE_JSONOBJECT_LEGACY_STRING_KEYS=1` (`GlobalDefinitions`) | **(a)** + diff des caches 5.5/5.8 (R4) ; (b) seulement comme secours de U3 | (a) 0,2 séance N3 ; (b) dette qui saute à la prochaine version |
| D12 | **Réglages stricts et avertissements** : `BuildSettingsVersion.Latest` (V7) + `IncludeOrderVersion.Latest` ; sort des 9 C4996 | (a) Latest + corriger les 9 ; (b) Latest + tolérer les C4996 jusqu'à U8 ; (c) `bOverrideBuildEnvironment` (A1) | **(a)** : A2 prouve 0 erreur supplémentaire avec Latest ; 9 corrections mécaniques (≈ 0,5 séance N1/N3) | (c) laisse une dette que 5.9 fera payer (`Unreal5_6` retiré en 5.9, `TargetRules.cs:249`) |
| D13 | **`Fab`/`Bridge` dans le `.uproject` 5.8** | (a) laisser `Enabled` non `Optional` (présents aujourd'hui) ; (b) `Optional: true` | **(b)** : robustesse face à une installation incomplète (c'est ce qui a faussé T2/T4) ; `DirectoriesToNeverCook` les exclut déjà | aucune conséquence en jeu |
Décisions déjà verrouillées et non rouvertes ici : cible 5.8, abandon 4.27, mods figés, PUB, P2 (compat UE4 gardée), P4 (copie), P5 (V2.0), P8 (VS 2026 en coexistence).
---
## 6. Corrections à reporter dans les audits (sans les modifier ici)
### UA-PLUGINS (T2)
1. Tableau récapitulatif et § 6 : `Fab` et `Bridge` **présents** dans 5.8 (installation incomplète pendant T2) ; risque « élevé (bloquant) » → faible ; parade `Optional` reste utile (D13). Établi par UA-ESSAI § 3 (« Fab et Bridge actifs sans erreur de plugin »).
2. § 1 LPAnimCore : la rupture certaine n'est pas `GetBoneTransform(double)` (`:155`) mais **`GetCompressedTrackToSkeletonMapTable` (`:127`)** ; `AnimSequence.h:508` ne suffit pas à conclure l'absence de la surcharge `double` : `LPPoseMeasure.cpp:1283` (même appel) **compile** en 5.8 (`essai-A1.log:99-100`, `Module.LPAnimMeasure.cpp` compilé et `.lib` liée). Statut de `:155` : incertain, probable non-événement.
3. § 5.2 LPAnimMeasure : « une erreur certaine » → **aucune erreur** (établi).
4. § 3 StreetMap : avertissements = **7** C4996, pas 1 (`GetDetailsView` ×2, `FSlateFontInfo` ×3, `ImportVersion` ×1 dans `StreetMapComponentDetails.cpp`, + `GetMaterialRelevance`).
5. § 4 Mcp : compilation 0.6.0-beta-b sur 5.8.3 **établie** (A2 − B : 0 erreur, ≈ 20 min sur 25,5) ; effort « 0,5–1 séance pour mettre à jour » devient facultatif.
6. « Points remis à UA-T5 » 1–4 : tous mesurés ; le point 1 est sans objet.
7. Méthode d'estimation : « 2 ruptures certaines (`GetBoneTransform`) + 2 entrées `.uproject` » → **2 ruptures certaines (`:127`, `LPDataCache:198`), 0 entrée `.uproject`**.
### UA-MOTEUR (T4)
1. (b) point 1, (c) ligne 1, (e) R1 : **MSVC 14.44.35207 n'est pas banni** (le ban porte sur la version du compilateur 19.44.35228, hors plage 14.44.0–35210 : `MicrosoftPlatformSDK.cs:1156`, UA-OUTILS § 1) ; depuis VS 2026 (18.10), UBT 5.8 retient **14.50.35739** (`essai-A1.log`, UA-ESSAI § 1). Retirer R1 ; remplacer par le risque « MSVC partagé » (R9 ci-dessus).
2. (c) ligne 4, (e) R2 : `Fab`/`Bridge` **présents** en 5.8 (installation incomplète pendant T4) ; R2 « certaine » → nul ; garder la parade `Optional` comme robustesse.
3. (c) ligne 2 / (e) R3 : V6/V7 (`Latest`) **n'ont révélé aucune erreur** sur les modules compilés (A2 − A1 = 0) ; R3 « élevée » → faible, résiduel sur LPAnimCore et ModdingExtra seulement.
4. (c) ligne 8 : `FJsonObject` → erreur confirmée à **`LPDataCache.cpp:198`** (`TMap<FString,…>::Contains` avec clé `FJsonObjectSharedStringStorage::FStringType`), pas à `:52`/`:196` (compilent : conversion implicite) ; `LPEditWidgetCommandlet.cpp` **compile** (`essai-A1.log:167`). Mcp : 0 erreur malgré 5 987 occurrences.
5. (c) ligne 30 : `RHIGetTextureMemoryStats` **se résout** (`Module.LifePlay.cpp` compilé, `.lib` liée, `essai-A1.log:108-109`).
6. (d) points 1–7 : mesurés ; seul le point 8 (éditeur lancé) reste pour U3/U5.
7. Ajouter : 7 C4996 non prévus (UA-ESSAI § 3), dont `GetObjectsWithPackage(bool)` (`LPDumpAssetsCommandlet.cpp:110`) et `InitializeSkeletalMeshFromMeshDescriptions` (addon, `LPHairFromStaticMeshCommandlet.cpp:430`).
### UA-OUTILS (T7) — pour cohérence, même si non demandé
1. § 0 et § 1 : « UBT 5.8 retient 14.44.35207 » était vrai avant l'installation de VS 2026 ; désormais 14.50.35739 (`Log.txt` à relire). § 5 : l'arbitrage A/B est **tranché** (P8 = B en coexistence) ; la condition « VS ≥ 18.2 » est satisfaite (18.10, 14.50.35739 > 14.50.35722 banni).
2. § 1 ligne Epic Launcher / Fab : « Fab/Bridge absents de 5.8 » → présents.
### UA-ESSAI (T5) — précision, pas correction
« ≈ 23 actions non exécutées → modules non mesurés » : d'après `essai-A1.log:81-304`, toutes les unités de compilation des modules projet et addon ont été compilées (dont les 32 commandlets, `Module.LifePlay.cpp`, `Module.LPSandbox.cpp`, `Module.StreetMapImporting.cpp`) ; les actions non exécutées sont des éditions de liens et la cible (estimé).
---
## 7. Méthode d'estimation
1. **Décomposition** de chaque lot en postes (tableau § 2), avec pour chaque poste une source (audit § ou journal).
2. **Points d'appel × poids** (barème UA-PLUGINS, repris) : rupture certaine établie par l'essai = 0,1 séance avec garde ou réécriture locale ; dépréciation C4996 = 0,05 ; « présent, comportement à vérifier » = coût du test qui tranche (lancement, capture, commandlet). Appliqué : U3 = 2 × 0,1 + 9 × 0,05 + marge d'erreurs révélées (0–3 × 0,1) ; U4 StreetMap = 7 × 0,05 + 1 capture.
3. **Cycles de build mesurés** : 8–12 min par build éditeur 5.8 complet sans Mcp (dérivé de A1 26,5 min − part Mcp ≈ 20 min, et B 4,9 min pour 54 % des actions) ; 0,1 séance par cycle (build + lecture du journal) ; 4–8 cycles en U3, 2–4 en U4, 1–2 par lot ensuite.
4. **Cuissons et commandlets** : durées 5.5 établies (§ 2, constantes) × facteur d'inconnue 5.8 : cook à chaud ×2–3 (15–30 min) ; **cook à froid non dérivable de 5.5** (DDC vide, shaders) : fourchette 1–3 h posée par analogie avec le premier cook 5.5 du portage (non journalisé en durée : incertain) ; réenregistrement : 86 s pour la liste CX-B07 extrapolé linéairement aux volumes (798 / 9 068 assets) avec ×2 pour les gros Blueprints.
5. **Validations utilisateur** : 0,5 séance par parcours en jeu (nouvelle partie + Continuer), comme VQ/DC ; T1–T7 des mods = 1 séance (UA-MODS § 7).
6. **Marge** : borne haute = borne basse × 1,5 (première exécution en 5.8, UA-MODS § 7) + une escalade de niveau par lot ; U7 reprend UA-MODS § 7 (3 séances, 4 avec garde) ajusté 2,5–4 car R0 est partagé avec U4.
7. **Niveaux** : grille a–f du plan 27 appliquée au poste le plus lourd de chaque lot (U3 correctifs = 1-1-1-1-1-1 = 6 → N2, relevé à **N3** par la règle « portage d'API » ; U5 Blueprint cassé = 1-2-2-2-1-0 = 8 → N3 ; U7 garde = 1-2-1-2-1-1 = 8 → N3).
8. **Ce qui n'est pas estimé** : coût d'un portage de StreetMap si le rendu diverge (voie U9, hors V2.0) ; coût d'une adoption de Zen (hors V2.0) ; coût des outils Fab (installés, non comptés).
---
## 8. Établi / estimé / incertain
**Établi** (preuves citées)
- 5.8.3 et VS 2026 installés ; UBT 5.8 retient MSVC 14.50.35739 + SDK 22621 + .NET 10 ; 14.44.35207 non banni ; 5.5 préfère 14.38 (UA-OUTILS, UA-ESSAI, corr. b).
- Blocage de cible tant que `Target.cs` = V5 ; `Latest` passe sans erreur supplémentaire (A2 − A1 = 0).
- Deux causes d'erreur de compilation : `LPCoupleSimCore.cpp:127`, `LPDataCache.cpp:198` ; 9 C4996 ; Mcp compile (≈ 20 min) ; Fab/Bridge présents ; toutes les unités de compilation des modules projet/addon compilées en A1/A2 (`essai-A1.log:81-304`).
- Contrat des mods : formats texte indépendants du moteur ; recuisson obligatoire (cuisson sans version) ; avertissement de version après montage et pour les modules cochés seulement (UA-MODS).
- Zen store `True` par défaut en 5.8 ; `FJsonObject` clés changées ; WASAPI par défaut ; Windows 10 minimum ; 441 en-têtes inclus tous présents (UA-MOTEUR).
- Volumes : 9 068 `.uasset` (798 hors `Heavy`), `GI` 51,9 Mo, 280 villes, 310 assets StreetMap, 16 commandlets retirables ; 10 scripts à chemin `UE_5.5`.
- Durées 5.5 : build incrémental 13 s ; cook à chaud 6 min / 8 884 paquets ; `CompileAllBlueprints` 115 s ; `LPCheckStreetMap` 25 s ; resave CX-B07 86 s.
- ERR-019 ouvert (plantages de resave de masse) ; D: est un NVMe en boîtier USB.
**Estimé** (méthode § 7)
- Séances par lot et total 14,5–25 (U0–U8) ; durée d'un build 5.8 sans Mcp 8–12 min ; cook à chaud 15–30 min ; resave 10–30 min (hors `Heavy`) ; copie 5–15 min ; nature des 23 actions UBT non exécutées (liens) ; `:155` sans correction ; équivalent 5.8 de `GetCompressedTrackToSkeletonMapTable`.
**Incertain** (test qui tranche)
- Comportement de 5.8 face à un conteneur 5.5 monté : refus propre, erreur ou plantage → **T4** (U7) ; conditionne D2.
- Durée du premier cook 5.8 à froid et réussite du réenregistrement de `GI` → **U5** (en copie, réversible).
- Nœuds Blueprint dépréciés 5.6–5.8 → Blueprint Reader en 5.5 (D8) puis `CompileAllBlueprints` 5.8.
- Rendu du proxy StreetMap sous 5.8 → captures même cadrage (U5/U6).
- Interaction Zen store × `-createreleaseversion` → neutralisée par D1(a), sinon test R1 de UA-MODS.
- Compatibilité de 5.5 avec un zenserver commun 5.8.13 → lancement de l'éditeur 5.5 après le premier lancement 5.8.
- Sémantique `FString` → `LPTestStringCompat` en 5.8 (U3).
- Contradiction résiduelle entre UA-PLUGINS § 1 (surcharge `double` « absente » à `AnimSequence.h:508`) et UA-ESSAI (LPAnimMeasure compile) : tranchée en faveur de l'essai (fait foi) ; cause possible : surcharge déclarée ailleurs (classe de base ou `UE_DEPRECATED` non fatal) — à lire en U1.
---
## 9. Recommandation finale
**GO, séquencé** pour U0–U8 ; **go partiel** sur U9 (différé après V2.0, D9).
Arguments :
1. Le coût de portage du code est **faible et mesuré** (2 causes d'erreur, 9 avertissements, chaîne d'outils prête) : c'est l'essai réel qui le dit, pas une prévision.
2. Les incertitudes restantes (contenu, mods, rendu StreetMap) sont **toutes testables de façon réversible** dans la copie 5.8, avant les deux seuls engagements irréversibles (référence/mods V2.0 et publication), chacun derrière une porte utilisateur.
3. Un no-go n'est pas justifié par les risques ; il ne le serait que par le rapport coût/bénéfice : 15–25 séances pour un jeu dont le rendu est verrouillé (TAA/SSR, sans Lumen) tirent peu des nouveautés 5.8 à court terme. Le bénéfice est stratégique (dernière UE5, support de l'éditeur et des outils Fab 5.8 seulement : Plugin Usage Finder, AssetDump, Pipeline Validator) et il **ne se dégrade pas** si l'on attend : 5.5 reste fonctionnel. L'utilisateur peut donc choisir le calendrier librement ; la recommandation technique est d'y aller maintenant que l'environnement est en place et les audits frais.
4. Deux **portes intermédiaires** ajoutées au plan : **G-U3** (0 erreur, `LPTestStringCompat` vert, éditeur 5.8 ouvert) et **G-U6** (A/B et contrôle visuel équivalents à DC4). Si G-U3 échoue de façon imprévue (escalade N4 épuisée) : no-go technique, retour à 5.5 sans perte (copie jetable). Si G-U6 révèle un écart de rendu StreetMap non corrigeable à coût borné : go partiel « éditeur et outils en 5.8, publication V2.0 reportée ».
**Premier lot à lancer : U0**, avec ses prérequis :
- décisions D1, D3, D4, D8, D9, D10, D13 tranchées (les autres peuvent attendre leur lot : D2 après T4, D5–D7 en U0-T4, D11–D12 en U3) ;
- utilisateur : VS Installer (composants LTSC 14.38 et 14.50 figés) ; confirmer que `D:\Game\LifePlay-master 5.8` ne contient que `.mcp.json` à préserver ; machine éveillée pour les copies ;
- N1 : épinglage 14.38 dans le projet 5.5 puis **build 5.5 de contrôle** (preuve : ligne « Using Visual Studio 14.38.33130 toolchain » et code 0) avant toute autre action ; relevé `Common\Zen` ;
- N1 : tag `ue5.5-final`, copie P4, branche `ue5.8`, `Target.cs` → `Latest`, `EngineAssociation` 5.8, `Fab`/`Bridge` `Optional`, `bUseZenStore=False` (si D1(a)) ; `git status` propre ;
- livrables : `etat/U58/U0/U0-ENV.md`, `U0-VS2026.md`, décisions verrouillées ajoutées au plan 27.
Handoff vers U1 : « copie 5.8 prête et taguée ; U1 produit `U1-CART.md` (diff moteur ciblé, spec des 2 correctifs, relevé Blueprint Reader 5.5) ; niveaux N1 + N3 ».