LifePlay-Revival/Docs/05_Correctifs_Isoles.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

71 lines
9.8 KiB
Markdown
Raw 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.

# 05 — Correctifs isolés et protocole de réimport sous contrôle renforcé
> **Historique 4.27** — Ce document décrit le portage UE 4.27 → 5.5 (V1). Il n'est plus mis à jour : moteur et outils actuels dans `27_Plan_Migration_UE58.md` et `Tools/Engine.ps1`.
> Décision D-01 (2026-09-29) : les correctifs appliqués avant la reprise n'ont été ni suivis ni
> testés. Ils sont **isolés** : retirés du contenu (retour à la base 4.27 en L1) ou exportés en
> patchs relisibles pour le code. Chacun est **réimporté seul**, selon le protocole du §3.
> Décision D-02 : R-03 et R-04 sont annulés partout.
---
## 1. Correctifs de code (conservés, relisibles)
Le code 5.5 est nécessaire pour compiler : il reste en place, mais chaque écart avec 4.27 est
exporté dans `Docs/correctifs/` pour relecture.
| ID | Patch | Contenu | Nécessaire à | Statut |
|---|---|---|---|---|
| CX-C01 | `P06` | `Target.cs` : `BuildSettingsVersion.V5`, `Unreal5_5` | compilation | conservé |
| CX-C02 | `P06` | `.uproject` : `EngineAssociation 5.5`, suppression des 5 entrées de plugins (Victory, VisualStudioTools, SteamVR, ModdingPlus, MultiTask) | ouverture du projet | conservé ; section `Plugins` explicite en L2 |
| CX-C03 | `P06` | `.uplugin` : suppression de `EngineVersion "4.27.0"` | chargement des plugins | conservé |
| CX-C04 | `P03` | `ModdingExtra` : inclusions UE5 (`Engine.h` retiré), `Path.Combine` | compilation | conservé |
| CX-C05 | `P04` | `StreetMap` : portage LWC (`FVector3f`, `FBox3f`), R-01 (`FAssetRegistryTagsContext`), R-02 (initialiseurs) | compilation, 280 villes | conservé ; vérifié en L4 (`LPCheckStreetMap` 4.27 et 5.5) |
| CX-C06 | `P01`, `P05` | `LPVictoryCompat` (2 fonctions) + 3 `[CoreRedirects]` Victory → LifePlay | chargement de `GI`, `ExtImg`, `FaceTexture`, `MainMenu`, `Inventory` | conservé ; à contrôler en L4 (T-LOAD-01) |
| CX-C07 | `P01` | `LPAssetRegistryHelpers::GetAssetByObjectPath` : conversion `FSoftObjectPath` | compilation | conservé |
| CX-C08 | `P01` | `LPAssetRegistryHelpers::GetAssetsByClassName`, `GetAssetObjectPath` (nouvelles fonctions) | réimport de CX-B01 | conservé, **inutilisé** tant que CX-B01 n'est pas réimporté |
| CX-C09 | `P01` | `LPNavigationHelpers` (enrobage pur de `K2_GetRandomLocationInNavigableRadius`) | R-04 | conservé ; **utilisé par CX-B11** (L7b) |
| CX-C10 | `P01` | `LifePlay.Build.cs` : `PublicIncludePaths`, `NavigationSystem`, `ImageWrapper`, `ApplicationCore` | compilation | conservé |
| CX-C11 | `P05` | `Config` : `[CoreRedirects]`, 4 clés PhysX retirées, classes Enhanced Input par défaut, description, `StagingDirectory`, section `McpAutomationBridgeSettings` | — | conservé ; relu en L2 |
| CX-C12 | `P03` (hors patch : ajouté le 2026-09-28) | instrumentation `LogLPModdingTrace` | diagnostic | **retiré** en L3 (CHG-016 : `LogModdingExtra` en `Verbose`) |
| CX-C13 | `P02` | commandlets `LifePlayEditorTools` (1 777 lignes) | outillage éditeur | conservé ; ne touche pas au jeu |
| CX-C14 | — | `LPSessionLogSubsystem` : résumé de démarrage, bilan de session, options de diagnostic `-LPDump*`/`-LPTrace*` | EX-07, diagnostic | ajouté (L3, L5, L7i, L7l) |
| CX-C15 | — | `LPStringCompat`, `LPMeshCompat` : fonctions au comportement 4.27, cibles de CX-B08, B10, B12 | parité 4.27 | ajouté |
| CX-C16 | — | `LPSecondScreenSubsystem` : cadrage du visage du contact pendant un appel | ERR-031 (amélioration) | ajouté (L7j, CHG-054), validé en jeu |
| CX-C17 | — | `LPOutdoorRoomSubsystem` : plafond `WallT` masqué dans les lieux extérieurs | ERR-036 (amélioration) | ajouté (L7l, CHG-057), validé en jeu |
| CX-C18 | — | `Config` : rendu explicite (L7c), clés de nativisation retirées, `DirectoriesToAlwaysCook=/Game` | parité, cuisson complète | ajouté (CHG-025, CHG-049) |
## 2. Correctifs de contenu (retirés en L1, à réimporter un par un)
| ID | Outil | Cible | Effet attendu | Justification | Priorité | Statut |
|---|---|---|---|---|---|---|
| CX-B00 | `LPFixAssetRegistryNodes` (portage 4.27) | `GI`, `Person`, `Room`, `UI/VisualMorph` | `GetAssetByObjectPath` en nœud pur | **déjà présent dans la base 4.27** (les 4 assets importent `LifePlay.LPAssetRegistryHelpers`) | — | inclus dans la base |
| CX-B01 | `LPFixAssetRegistryPins` | `GI` : 3 `GetAssetsByClass` (+ 2 broches associées) | nœuds rebranchés sur `GetAssetsByClassName` avec la valeur de classe d'origine | **candidat n°1 pour ERR-002** : sans lui, `GetAssetsByClass` interroge avec un chemin de classe vide ; aucun corps, vêtement ni coiffure énumérable | 1 | **réimporté** (CHG-018, validé statiquement) ; A/B d'exécution après CX-B02 |
| CX-B02 | `LPFixEditableTextBoxFont` | `UI/CharGen`, `UI/StatMenu` : 6 nœuds `Make/Break EditableTextBoxStyle` | broche `Font` orpheline retirée | **bloque la cuisson** (6 erreurs, cook du 2026-09-07) | 2 | **réimporté** (CHG-022) ; commandlet corrigée au passage (ERR-025) |
| CX-B03 | `LPFixZeroScaleActors -Fix -Scale=0.1` | `Scenes/CentralLondon` : `Wall.StaticMeshComponent0` | échelle X 0 → 0,1 | corps physique invalide ; `ensure InverseFast` (plantage éditeur du 2026-09-07) | 3 | **réimporté** (CHG-023) |
| CX-B04 | `LPFixOrphanBoundEvents` | `UI/TopRight` (1), `UI/CharGen` (2) | 3 événements `On Clicked` orphelins supprimés | avertissements ; clics déjà morts | 4 | **réimporté** (CHG-024) |
| CX-B05 | `LPFixDeprecatedNodes` (R-03) | 56 nœuds `SkeletalMesh`, 10 Blueprints | `GetSkeletalMeshAsset()` | **rejeté** : aggrave ERR-002 (16,6 → 35 `Accessed None`/perso) car les proxies sont des `USkinnedMeshComponent` | — | à refaire autrement (L7a) |
| CX-B06 | `LPFixDeprecatedNodes` (R-04) | 6 nœuds, `AI`, `Person`, `Room` | `LPNavigationHelpers` | avertissements de dépréciation seulement | 5 | **remplacé par CX-B11** (commandlet sans contrôle, embarquait aussi la variante R-03 rejetée) |
| CX-B08 | `LPFixParseIntoArray` (nouveau) | 114 nœuds `ParseIntoArray`, 17 Blueprints | rebranchés sur `LPStringCompat::ParseIntoArray` (algorithme UE 4.27) | UE5 renvoie `[""]` pour une chaîne vide : cause d'ERR-027 (personnages de quête invisibles/dévêtus) | 1 | **réimporté** (CHG-029), validé en jeu |
| CX-B09 | `LPFixButtonPadding` (nouveau) | 430 `UButton`, 46 Widget Blueprints | marges des boutons remises au défaut UE 4.27 (Normal 2,2,2,2 ; Pressed 2,3,2,1), composante par composante | le style par défaut de `UButton` est passé à 12 px horizontaux en UE5 (`FUMGCoreStyle`) ; les assets 4.27 ne stockent pas la marge par défaut : cause d'ERR-034 (barre de temps décalée) | 1 | **réimporté** (CHG-033), validé en jeu |
| CX-B10 | `LPFixSkeletalMeshGet` (nouveau) | 56 nœuds `Get SkeletalMesh`, 8 Blueprints (`Person` 28, `GI` 17, `CharGen` 3, `Inventory` 3, `Hairstyle` 2, `CharGenSlider`, `Cursor`, `Inventory_Cloth` 1) | remplacés par `LPMeshCompat::GetSkeletalMesh(Component)` = `Cast<USkeletalMesh>(GetSkinnedAsset())`, la sémantique exacte du getter déprécié, valable pour tout `USkinnedMeshComponent` | R-03 refait (L7a) ; remplace CX-B05 rejeté | 1 | **réimporté** (CHG-036), validé en jeu |
| CX-B11 | `LPFixNavRandomPoint` (nouveau) | 6 nœuds `GetRandomPointInNavigableRadius` (`Person` 3, `Room` 2, `AI` 1) | remplacés par `LPNavigationHelpers::GetRandomLocationInNavigableRadius` : nœud pur, mêmes broches, même corps que la fonction dépréciée (appel de `K2_GetRandomLocationInNavigableRadius`, identique en 4.27 et 5.5) ; liaisons et valeurs par défaut reportées broche par broche | R-04 (L7b) : 6 derniers avertissements de compilation ; le remplaçant moteur est impur (broches d'exécution), d'où l'enrobage pur | 1 | **réimporté** (CHG-037), retiré à tort (CHG-038) puis réappliqué (CHG-039) ; validé en jeu |
| CX-B12 | `LPFixStringSearch` (nouveau) | 385 nœuds `Contains` (160), `Split` (222), `FindSubstring` (3), 28 Blueprints (`GI` 240, `Person` 35, `Room` 16, `CharGen` 14…) | rebranchés sur `LPStringCompat::Contains/Split/FindSubstring` : mêmes broches ; sous-chaîne vide en mode insensible à la casse depuis le début → « non trouvé » comme en 4.27 (UE5 : trouvé en position 0) | ERR-005 (`getBeautyValue` ×38 : `filterMorphList` sans étiquette laissait passer tous les morphs) et toute recherche de texte avec un motif vide | 1 | **réimporté** (CHG-042), validé en jeu (CHG-043) |
| CX-B07 | `LPResavePackages` (nouveau) | 239 paquets UE4 restants (`UI` 147, `Structs` 57, `BPs` 22, `Render` 11, `Characters` 1, `Scenes` 1) | format UE5, contenu inchangé | EX-03 ; T-STAT-01 | 6 | **réimporté** (CHG-035), diff avant/après neutre ; validé en jeu (build V1rc, V1) |
## 3. Protocole de réimport sous contrôle renforcé
Un correctif = un sous-lot (`L4-CX-B01`, …) = un commit. Pas de regroupement.
| Étape | Action | Preuve archivée dans `Docs/Migration/etat/` |
|---|---|---|
| 1 | `git tag L4-CX-xx-avant` ; `Tools\Snapshot.ps1 -Lot L4-CX-xx -Path <assets cibles>` | manifeste MD5 |
| 2 | **Photographie avant** : `LPDumpFunction -BP=<asset> -Fn=<fonctions touchées> -Pins` | `<id>_dump_avant.txt` |
| 3 | **Simulation** : commandlet avec `-DryRun` ; le nombre de nœuds trouvés doit égaler celui attendu (§2) | `<id>_dryrun.txt` ; tout écart arrête le sous-lot |
| 4 | Application réelle | journal de la commandlet |
| 5 | **Photographie après** + diff avant/après : seuls les nœuds attendus diffèrent | `<id>_dump_apres.txt`, `<id>_diff.txt` |
| 6 | `CompileAllBlueprints` + `LPCheckMeshAssignment` : aucune erreur **nouvelle** par rapport au relevé de base | résumés `RunCommandlet` |
| 7 | Si le correctif touche le gameplay (CX-B01) : build Development + A/B avec la référence 4.27 (`Tools\LogStats.ps1 -Compare`) | tableau A/B |
| 8 | Journal `CHG`, commit, `git tag L4-CX-xx-apres` ; en cas d'échec : `Tools\Restore.ps1 -Lot L4-CX-xx` | entrée de journal |
Critère d'acceptation commun : **effet attendu observé, aucun effet de bord mesuré**.