34 KiB
Journal des modifications — migration 5.5
Une entrée par modification. Format : identifiant, date, lot, fichiers, raison, empreintes, retour arrière. Les empreintes complètes sont dans
D:\Game\LifePlay_Backup_5.5\<lot>\manifest.csvet dans l'historique git.
| ID | Date | Lot | Fichiers | Raison | Avant → après | Retour arrière |
|---|---|---|---|---|---|---|
| CHG-001 | 2026-09-29 | L0 | .gitignore |
ignorer les fichiers générés (Build/*/FileOpenOrder, Content/Collections, Content/Developers, .claude/settings.local.json) |
31 → 38 lignes | retirer le bloc « CHG-001 » |
| CHG-002 | 2026-09-29 | L0 | .gitattributes (nouveau) |
aucune conversion de fin de ligne : restauration git identique à l'octet | — → créé | supprimer le fichier |
| CHG-003 | 2026-09-29 | L0 | .git/ (nouveau) |
dépôt local, identité locale, core.autocrlf=false, core.longpaths=true ; commit de64933, tag lot-L0-base |
— → créé | supprimer .git/ |
| CHG-004 | 2026-09-29 | L0 | Tools/Snapshot.ps1, Restore.ps1, AssetHeaders.ps1, CheckIntegrity.ps1, LogStats.ps1 (nouveaux) |
outillage de traçabilité et de test | — → créés | git rm |
| CHG-005 | 2026-09-29 | L0 | Docs/Migration/** (nouveau) |
documentation 01 à 04, journal, registre, empreintes etat/L0_* |
— → créés | git rm |
| CHG-006 | 2026-09-29 | L0 | D:\Game\LifePlay_Backup_5.5\L0\ (hors projet) |
sauvegarde de .claude, .mcp.json, LifePlay.uproject, Config, Saved/Backups, Saved/SaveGames, Content/BPs (53 fichiers) |
— → créé | sans objet |
Vérifications du lot L0
| Test | Résultat |
|---|---|
Aller-retour Snapshot → modification → Restore (Config/DefaultEditorSettings.ini + fichier créé) |
✅ MD5 85D82E7F… retrouvé ; fichier créé retiré vers _retires/ |
| T-STAT-01 | ⚠️ 1 package UE4 (Content/BPs/GI.uasset) : défaut connu, traité en L1 |
| T-STAT-02 Modules = 4.27 | ✅ 2 051 fichiers |
| T-STAT-03 environnement = L0 | ✅ 20 fichiers |
| T-STAT-04 arbre 4.27 inchangé | ✅ 144 fichiers (empreinte créée : etat/L0_ref427.csv) |
Aucun fichier du projet n'a été modifié en L0 en dehors de .gitignore et des ajouts ci-dessus.
Lot L1 — Base saine (2026-09-29)
Décisions utilisateur D-01 et D-02 : 04_Cahier_Des_Charges.md §4. Tag d'entrée lot-L1-avant.
Sauvegarde : D:\Game\LifePlay_Backup_5.5\L1\ (387 fichiers).
| ID | Date | Lot | Fichiers | Raison | Avant → après | Retour arrière |
|---|---|---|---|---|---|---|
| CHG-007 | 2026-09-29 | L1 | Content/{BPs,UI,Structs,Scenes,Render,Characters} (385 fichiers, 293 packages) |
retour à la base 4.27 : retire tous les correctifs de contenu non suivis (dont R-03, R-04) | contenu 5.5 (empreintes etat/L0_md5_*.csv) → identique à 4.27 (MD5 vérifiés, 0 écart) |
Tools\Restore.ps1 -Lot L1 ou git checkout lot-L1-avant -- Content |
| CHG-008 | 2026-09-29 | L1 | Tools/RunCommandlet.ps1 (nouveau) |
lancement de commandlet avec journal archivé et résumé dédoublonné | — → créé | git rm |
| CHG-009 | 2026-09-29 | L1 | Docs/Migration/05_Correctifs_Isoles.md, correctifs/P01…P06.patch (nouveaux) |
isolement des correctifs : catalogue, protocole de réimport, patchs de code 4.27 → 5.5 | — → créés | git rm |
| CHG-010 | 2026-09-29 | L1 | Config/DefaultEngine.ini |
essai de retrait des sections AndroidFileServer/CookerSettings annulé : l'éditeur recrée la section à chaque lancement (nouveau SecurityToken) |
inchangé (restauré depuis lot-L1-avant) |
sans objet ; traité en L2 |
Relevé de base : moteur 5.5 sur le contenu 4.27, sans aucun correctif
| Commandlet | Résultat | Résumé |
|---|---|---|
LPCheckMeshAssignment |
5 nœuds à broches orphelines dans GI : 3 GetAssetsByClass (classe perdue : SkeletalMesh, StaticMesh, StreetMap), 2 Break AssetData (ObjectPath) ; 6 nœuds EditableTextBoxStyle (StatMenu, CharGen) |
etat/L1_LPCheckMeshAssignment_20260929-010821.txt |
CompileAllBlueprints |
6 erreurs, 100 avertissements, 0 Blueprint en échec de chargement ; échecs : UI/StatMenu (3), UI/CharGen (3) — broche Font d'EditableTextBoxStyle |
etat/L1_CompileAllBlueprints_20260929-010931.txt |
Les commandlets de contrôle n'ont rien écrit : contenu toujours identique à 4.27 après passage (385/385).
Vérifications de sortie L1
| Test | Résultat |
|---|---|
| Contenu de gameplay = 4.27 | ✅ 385/385 MD5 |
| T-STAT-01 | ⏳ 293 packages UE4 (attendu : base 4.27) — resave contrôlé en L4-CX-B07 |
| T-STAT-02, 03, 04 | ✅ |
| T-LOAD-01 | ❌ attendu : 6 erreurs (CX-B02), à corriger en L4 |
| T-LOAD-02 | ❌ attendu : 5 broches (CX-B01), à corriger en L4 |
Lot L2 — Compilation propre (2026-09-29)
Tag d'entrée lot-L2-avant. Sauvegarde : D:\Game\LifePlay_Backup_5.5\L2\ (.uproject,
DefaultEngine.ini) ; dossiers mis de côté dans L2\_purge\ (manifeste L2\purge_manifest.csv).
| ID | Date | Lot | Fichiers | Raison | Avant → après | Retour arrière |
|---|---|---|---|---|---|---|
| CHG-011 | 2026-09-29 | L2 | LifePlay.uproject |
TargetPlatforms WindowsNoEditor → Windows ; section Plugins explicite : ModdingExtra, StreetMap, EnhancedInput activés ; McpAutomationBridge limité à la cible Editor (TargetAllowList) ; AndroidFileServer désactivé |
MD5 DA10325E… → nouveau |
Tools\Restore.ps1 -Lot L2 -Only LifePlay.uproject |
| CHG-012 | 2026-09-29 | L2 | Config/DefaultEngine.ini |
retrait de la section AndroidFileServerRuntimeSettings (et de son SecurityToken) ; le plugin étant désactivé, l'éditeur ne la recrée plus (vérifié après un lancement) |
14 lignes retirées | Tools\Restore.ps1 -Lot L2 -Only Config\DefaultEngine.ini |
| CHG-013 | 2026-09-29 | L2 | Binaries, Intermediate, Saved/Cooked, Saved/StagedBuilds, Plugins/*/Binaries, Plugins/*/Intermediate, Build/WindowsNoEditor, Build/LinuxNoEditor (≈ 13,9 Go) |
reconstruction à partir de zéro ; déplacés, pas supprimés | → D:\Game\LifePlay_Backup_5.5\L2\_purge\ |
Move-Item inverse (voir purge_manifest.csv) ; suppression définitive sur décision utilisateur |
Vérifications de sortie L2
| Test | Résultat |
|---|---|
T-BUILD-01 LifePlayEditor Win64 Development |
✅ code 0, 233 s, 0 erreur, 0 avertissement dans le code du projet et de ses plugins (2 messages de configuration UBT propres à McpAutomationBridge) — Saved/Logs/portage/L2_Build_LifePlayEditor_20260929-011800.log |
T-BUILD-02 LifePlay Win64 Development |
✅ code 0, 97 s, 0 erreur, 0 avertissement ; exécutable 300 Mo (328 Mo avant : McpAutomationBridge exclu du jeu) |
| T-LOAD-04 démarrage éditeur | ✅ 0 LogClass: Error, 0 échec de chargement de package ou de plugin |
Non-régression LPCheckMeshAssignment |
✅ relevé identique à L1 (10 erreurs, 285 avertissements, mêmes signatures) |
ERR-023 (AndroidFileServer) |
✅ DefaultEngine.ini non réécrit après lancement |
| T-STAT-02, 03, 04 | ✅ |
Lot L3 — Journalisation efficace (2026-09-29)
Tag d'entrée lot-L3-avant. Sauvegarde : D:\Game\LifePlay_Backup_5.5\L3\ (6 entrées, dont 2 fichiers
créés que Restore.ps1 retirerait).
| ID | Date | Lot | Fichiers | Raison | Retour arrière |
|---|---|---|---|---|---|
| CHG-014 | 2026-09-29 | L3 | Source/LifePlay/LifePlay.h, LifePlay.cpp |
catégorie LogLifePlay |
Tools\Restore.ps1 -Lot L3 |
| CHG-015 | 2026-09-29 | L3 | Source/LifePlay/LPSessionLogSubsystem.h/.cpp (nouveaux), LifePlay.Build.cs (+ EngineSettings) |
sous-système de GameInstance, sans modification de Blueprint : résumé de démarrage (versions, modules, fichiers par type) ; bilan de session à la fermeture ou via la commande console LifePlay.LogSummary (messages par catégorie, 25 signatures d'avertissement/erreur les plus fréquentes, chiffres normalisés en #, pile d'appel Blueprint incluse, plafond de 4 000 signatures). Les messages du moteur ne sont pas modifiés (comparabilité A/B avec 4.27) |
idem |
| CHG-016 | 2026-09-29 | L3 | Plugins/ModdingExtra/.../ModdingExtraBPLibrary.cpp |
instrumentation LogLPModdingTrace (Warning) → LogModdingExtra (Verbose, même format de ligne) ; échec de LoadTxt signalé une seule fois par fichier ; échec de SaveTxt désormais signalé (il était silencieux) |
idem |
| CHG-017 | 2026-09-29 | L3 | Tools/LogStats.ps1, Docs/Migration/03_Plan_Migration_Tests.md |
prise en compte de LogModdingExtra ; procédure A/B (-LogCmds="LogModdingExtra Verbose") |
git revert |
Vérifications de sortie L3
Sessions UnrealEditor -game (valables pour le journal, pas pour l'affichage des personnages —
règle §2 du document 03) : Saved/Logs/portage/L3_game_20260929-012748.log (niveau par défaut) et
L3_game_verbose_20260929-013032.log (trace détaillée).
| Test | Résultat |
|---|---|
| T-BUILD-01, T-BUILD-02 | ✅ 0 erreur, 0 avertissement |
| T-LOG-01 résumé de démarrage | ✅ 20 lignes LogLifePlay ; 16 modules ; comptes par type identiques à l'inventaire 4.27 (vin_Base : 752 .lpscene, 286 .lpaction…) |
| T-LOG-01 bilan de session | ✅ écrit à la fermeture ; signatures dédoublonnées avec leur pile d'appel |
| Bruit d'instrumentation | ✅ LogLPModdingTrace : 0 ligne au niveau par défaut (1 300 à 5 400 avant) ; 58 lignes LogLifePlay pour toute la session |
| Trace détaillée | ✅ 1 284 lignes LogModdingExtra avec -LogCmds ; ModLauncher.config absent signalé une fois |
| A/B de format avec la build 4.27 | ✅ LogStats -Compare lit les deux journaux ; toutes les énumérations communes aux deux sessions sont identiques (écarts limités aux dossiers que seule l'une des sessions a atteints) |
| T-STAT-02, 03, 04 | ✅ |
Découverte au passage : les erreurs ParseIntoArray (ERR-004) viennent de GI.populateClothes4,
appelée par Person.ReceiveBeginPlay.
Lot L4 — Réimport contrôlé des correctifs (2026-09-29)
Sous-lot L4-CX-B01 — broches AssetRegistry de GI (ERR-020)
Tag d'entrée L4-CX-B01-avant. Sauvegarde : D:\Game\LifePlay_Backup_5.5\L4-CX-B01\ (GI.uasset, MD5 F4550DA5…).
| Étape du protocole | Résultat | Preuve (Docs/Migration/etat/) |
|---|---|---|
| 2. Photographie avant | GI::EventGraph : 6 199 nœuds, 23 662 lignes |
L4-CX-B01_dump_avant.txt |
3. Simulation -DryRun |
3 [enum] (StreetMap, StaticMesh, SkeletalMesh), 2 [path] (1 consommateur chacun), 0 non traité — conforme à l'attendu |
L4-CX-B01_dryrun.txt |
| 4. Application | 3 énumérations, 2 chemins, 1 Blueprint enregistré, 0 cas non traité, 0 échec | L4-CX-B01_application.txt |
| 5. Photographie après + diff | 6 201 nœuds ; 35 lignes différentes, toutes attendues : 3 nœuds AssetRegistry::GetAssetsByClass → LPAssetRegistryHelpers::GetAssetsByClassName avec leur classe d'origine ; 2 nœuds GetAssetObjectPath insérés, reprenant les consommateurs des sorties ObjectPath orphelines. Aucune autre ligne du graphe ne change |
L4-CX-B01_dump_apres.txt, L4-CX-B01_diff.txt |
6. LPCheckMeshAssignment |
0 broche orpheline dans GI (restent les 6 nœuds de CX-B02) |
L4-CX-B01_LPCheckMeshAssignment_*.txt |
6. CompileAllBlueprints |
identique au relevé de base : 6 erreurs (CX-B02), 100 avertissements, 0 échec de chargement ; aucune erreur nouvelle | L4-CX-B01_CompileAllBlueprints_*.txt |
| 7. A/B d'exécution | en attente : la cuisson exige CX-B02 ; sera faite sur la build Development qui suit CX-B02 | — |
| ID | Date | Lot | Fichiers | Raison | Avant → après | Retour arrière |
|---|---|---|---|---|---|---|
| CHG-018 | 2026-09-29 | L4-CX-B01 | Content/BPs/GI.uasset |
réimport de CX-B01 (LPFixAssetRegistryPins) |
MD5 F4550DA5… (UE4) → 0AA14EDB… (UE5, réenregistré par la commandlet) |
Tools\Restore.ps1 -Lot L4-CX-B01 ou git checkout L4-CX-B01-avant -- Content/BPs/GI.uasset |
Sous-lot L4-CX-B02 — EditableTextBoxStyle (ERR-021) : essai 1 rejeté
Tag d'entrée L4-CX-B02-avant. Sauvegarde : D:\Game\LifePlay_Backup_5.5\L4-CX-B02\.
Preuves : Docs/Migration/etat/L4-CX-B02_essai1_rejete/.
| Étape | Résultat |
|---|---|
| Simulation | 6 nœuds sur 6 attendus |
| Application | « 6 traités, 0 liaison non gérée, 0 échec » |
| Compilation | 0 erreur (6 avant), 98 avertissements, 0 broche orpheline |
| Relecture du diff | ❌ CharGen::Make_64 a perdu sa liaison Font sans recevoir la liaison TextStyle : sa police retombe sur la valeur par défaut (aucune police, couleur magenta). Défaut silencieux : compilation et rapport de la commandlet au vert |
Cause : LPFixEditableTextBoxFont coupait la broche Font de chaque nœud au fil du parcours. Dans
CharGen, Break_62 est parcouru avant Make_64 : la coupure effaçait aussi la liaison vue depuis
Make_64, qui n'était plus rebranché. Dépend de l'ordre des nœuds (sans effet dans StatMenu). La
campagne du 2026-09-07 avait utilisé cette commandlet : le défaut y était très probablement présent.
| ID | Date | Lot | Fichiers | Raison | Retour arrière |
|---|---|---|---|---|---|
| CHG-019 | 2026-09-29 | L4-CX-B02 | Content/UI/StatMenu.uasset, CharGen.uasset |
essai 1 appliqué puis annulé par Tools\Restore.ps1 -Lot L4-CX-B02 (MD5 34807BE0…, 63CA2A78… retrouvés) |
sans objet |
| CHG-020 | 2026-09-29 | L4-CX-B02 | Source/LifePlayEditorTools/LPFixEditableTextBoxFontCommandlet.cpp |
les broches Font ne sont coupées qu'après le relevé complet de la topologie |
git revert |
| CHG-021 | 2026-09-29 | L4 | Tools/ReimportCorrectif.ps1 (nouveau) |
automatisation des étapes 1 à 6 du protocole | git rm |
Enseignement pour le protocole : l'étape 5 (relecture du diff nœud par nœud) est indispensable ; ni la compilation ni le rapport de la commandlet n'ont détecté ce défaut.
Sous-lot L4-CX-B02b — EditableTextBoxStyle (ERR-021) : essai 2 validé
Tag d'entrée L4-CX-B02b-avant. Sauvegarde : D:\Game\LifePlay_Backup_5.5\L4-CX-B02b\. Exécuté avec
Tools\ReimportCorrectif.ps1 et la commandlet corrigée (CHG-020).
| Étape | Résultat | Preuve (etat/) |
|---|---|---|
| 3. Simulation | 6 nœuds sur 6 attendus | L4-CX-B02b_dryrun.txt |
| 4. Application | 6 traités, 2 Blueprints, 0 liaison non gérée, 0 échec ; 4 rebranchements TextStyle (2 par Blueprint) |
L4-CX-B02b_application.txt |
| 5. Diff | StatMenu 425 → 422 lignes, CharGen 4 458 → 4 455 ; 9 lignes chacun, symétriques ; les 4 Make ont TextStyle ← Break_62.TextStyle ; plus aucune broche Font orpheline |
L4-CX-B02b_diff_*.txt, L4-CX-B02b_dump_* |
6. LPCheckMeshAssignment |
0 broche orpheline dans tout le projet | L4-CX-B02b_LPCheckMeshAssignment_*.txt |
6. CompileAllBlueprints |
0 erreur (6 avant), 98 avertissements (100 avant : les 2 « Font obsolète » disparaissent), 0 échec de chargement | L4-CX-B02b_CompileAllBlueprints_*.txt |
| ID | Date | Lot | Fichiers | Raison | Avant → après | Retour arrière |
|---|---|---|---|---|---|---|
| CHG-022 | 2026-09-29 | L4-CX-B02b | Content/UI/StatMenu.uasset, Content/UI/CharGen.uasset |
réimport de CX-B02 | 34807BE0… → 131E4B96… ; 63CA2A78… → 8D4E4200… |
Tools\Restore.ps1 -Lot L4-CX-B02b ou git checkout L4-CX-B02b-avant -- Content/UI |
Effet sur les tests : T-LOAD-01 (0 erreur de compilation) et T-LOAD-02 (0 broche orpheline) passent pour la première fois depuis le retour à la base saine.
Sous-lot L4-CX-B03 — mur à échelle nulle dans CentralLondon (validé)
Tag d'entrée L4-CX-B03-avant. Sauvegarde : D:\Game\LifePlay_Backup_5.5\L4-CX-B03\ (CentralLondon.umap
MD5 C063EE72… = 4.27, CentralLondon_BuiltData.uasset). Correctif sur une propriété d'acteur : le
contrôle se fait par rapport de la commandlet avant/après (pas de graphe).
| Étape | Résultat | Preuve (etat/) |
|---|---|---|
| Rapport avant | 1 composant : Wall.StaticMeshComponent0, échelle X=0 Y=12,56 Z=5,75, cube moteur visible, BlockAll |
L4-CX-B03_rapport_avant.txt |
Application -Fix -Scale=0.1 |
X 0 → 0,1 (panneau de 10 cm : corps physique valide, aspect de mur plat conservé) ; 1 carte enregistrée, 0 échec | L4-CX-B03_application.txt |
| Rapport après | 0 composant à échelle nulle | L4-CX-B03_rapport_apres.txt |
| Non-régression | LPCheckMeshAssignment 0 broche orpheline ; CompileAllBlueprints 0 erreur, 0 échec de chargement ; seule la carte a changé (_BuiltData inchangé) |
résumés L4-CX-B03_* |
| ID | Date | Lot | Fichiers | Avant → après | Retour arrière |
|---|---|---|---|---|---|
| CHG-023 | 2026-09-29 | L4-CX-B03 | Content/Scenes/CentralLondon.umap |
C063EE72… → 21912547… |
Tools\Restore.ps1 -Lot L4-CX-B03 ou git checkout L4-CX-B03-avant -- Content/Scenes |
Sous-lot L4-CX-B04 — événements On Clicked orphelins (validé)
Tag d'entrée L4-CX-B04-avant. Sauvegarde : D:\Game\LifePlay_Backup_5.5\L4-CX-B04\. Tools\ReimportCorrectif.ps1.
| Étape | Résultat | Preuve (etat/) |
|---|---|---|
| Simulation | 3 sur 3 attendus | L4-CX-B04_dryrun.txt |
| Application | TopRight : StatButtonL (1 nœud en aval) ; CharGen : ButtonEyelashColor (5), ButtonPreviewErect (1) ; 3 retirés, 0 échec |
L4-CX-B04_application.txt |
| Diff | TopRight 907 → 906 nœuds, CharGen 1 320 → 1 318 : seuls les 3 événements disparaissent. Les nœuds en aval sont conservés (déjà inatteignables ; la photographie n'inclut pas les broches d'exécution) |
L4-CX-B04_diff_*.txt |
| Contrôles | 0 broche orpheline ; CompileAllBlueprints 0 erreur, 95 avertissements (98 avant), 0 échec de chargement |
résumés L4-CX-B04_* |
| ID | Date | Lot | Fichiers | Avant → après | Retour arrière |
|---|---|---|---|---|---|
| CHG-024 | 2026-09-29 | L4-CX-B04 | Content/UI/TopRight.uasset, Content/UI/CharGen.uasset |
C34F7BB0… → B3B0ED10… ; 8D4E4200… → A7C718C6… |
Tools\Restore.ps1 -Lot L4-CX-B04 ou git checkout L4-CX-B04-avant -- Content/UI |
Build Development empaquetée D:\Game\LifePlay_Build_5.5_L4 (2026-09-29)
État du code : L4-CX-B04-apres. Commande : RunUAT BuildCookRun -platform=Win64 -clientconfig=Development -build -cook -stage -archive (journal Saved/Logs/portage/L4_BuildCookRun_20260929-030445.log).
| Test | Résultat |
|---|---|
| T-LOAD-05 cuisson | ✅ Success - 0 error(s), 94 warning(s) ; BUILD SUCCESSFUL, ExitCode=0 |
| Données livrées en fichiers nus | ✅ Windows/LifePlay/Content/Modules présent ; résumé de démarrage : 16 modules, comptes identiques à 4.27 |
| Test de fumée (lancement automatisé) | ✅ 185 s sans plantage, fermeture propre, bilan de session écrit ; menu principal atteint (journal Saved/Logs/portage/L4_build_smoke_20260929.log) |
| T-RUN-02 à T-RUN-05 (génération de personnages, scène, sauvegarde, 30 min) | ⏳ nécessite une partie jouée : scénario 03_Plan_Migration_Tests.md §4, sur cette build et sur la référence 4.27 |
Note : le LifePlay.exe à la racine de la build est un lanceur ; le processus du jeu est
Windows/LifePlay/Binaries/Win64/LifePlay.exe.
Correction de l'empaquetage — ERR-026 (2026-09-29)
Retour utilisateur sur LifePlay_Build_5.5_L4 : « le jeu ne fonctionne pas, la plupart des assets ne sont
pas intégrés ». Confirmé : 3 257 packages cuits au lieu de 8 561. LifePlay charge maillages, vêtements,
coiffures et textures par chemin à l'exécution (GetAssetsByClass, GetAssetByObjectPath) ; le cuiseur,
qui ne suit que les références statiques, ne les voit pas. Les builds du 28/09 utilisaient -CookAll ; ce
paramètre n'avait pas été repris. Erreur de ma part, non détectée faute de test du volume cuit : le
test T-PKG-01 est ajouté au plan de tests.
| ID | Date | Lot | Fichiers | Raison | Retour arrière |
|---|---|---|---|---|---|
| CHG-025 | 2026-09-29 | L4 | Config/DefaultGame.ini |
+DirectoriesToAlwaysCook=(Path="/Game") (exclusion fBlah conservée) : tout le contenu est cuit quelle que soit la méthode d'empaquetage, y compris le bouton « Package » de l'éditeur |
Tools\Restore.ps1 -Lot L4-cook |
| CHG-026 | 2026-09-29 | L4 | Docs/Migration/03_Plan_Migration_Tests.md, Registre_Erreurs.md |
test T-PKG-01 ; ERR-026 | git revert |
Build D:\Game\LifePlay_Build_5.5_L4b (BuildCookRun Development, journal L4b_BuildCookRun_20260929-081054.log) :
| Test | Résultat |
|---|---|
| T-LOAD-05 cuisson | ✅ Success - 0 error(s), 95 warning(s) |
| T-PKG-01 contenu cuit | ✅ 8 561 .uasset, 2,6 Go (= référence 4.27) |
| Test de fumée (150 s, sans intervention) | ✅ aucun plantage, fermeture propre ; une partie a démarré et 4 personnages ont été générés |
Premier A/B (LogStats -Compare, échantillon faible) |
Accessed None maillage/perso 0,50 (4.27 : 0,27 ; 5.5 du 28/09 : 16,6) ; 4 acteurs distincts sur 4 (5.5 du 28/09 : tous Person_C_0) → CX-B01 corrige très probablement ERR-002 ; à confirmer visuellement (T-RUN-02 à 04) |
LifePlay_Build_5.5_L4 (incomplète) est conservée comme preuve et peut être supprimée.
Lot L5 — Données et personnages (2026-09-29)
Diagnostic d'ERR-027 (personnages de quête invisibles ou dévêtus)
Partie jouée par l'utilisateur sur LifePlay_Build_5.5_L4b (journal archivé
Saved/Logs/portage/L4b_partie_utilisateur_20260929.log) : PNJ aléatoires corrects ; personnages
créés par preset invisibles en dialogue, dévêtus dans le mini-jeu.
| Étape | Constat | Preuve |
|---|---|---|
| Indicateur | Accessed None maillage : 26,5 / personnage (1 219 / 46) contre 0,27 en 4.27 (4 / 15) |
Tools\LogStats.ps1 |
| Pile d'appel | GeneratePerson → LoadPreset → GenerateAndApplyStrings/Bools lit MeshSexRace.Mesh et SMBool.SkeletalMesh vides ; 0 occurrence en 4.27 |
journal utilisateur |
| Pistes écartées (identiques en 4.27) | clearVariable (ERR-028, 211 contre ≈ même nombre en 4.27) ; populateClothes4 / ParseIntoArray (631 contre 630) |
Grep sur les deux journaux |
| Structures | Mesh_2… ∈ Structs/MeshSexRace ; SkeletalMesh_2… ∈ Structs/SMBool |
recherche binaire |
Diff de graphes 4.27 / 5.5 (LPDumpFunction) |
GenerateAndApplyStrings, GenerateAndApplyBools, LoadMeshIfNeeded, getSkeletalMeshFromPath, SMBoolToSkeletalMesh : logique identique (seuls écarts : SetSkeletalMesh → SetSkinnedAssetAndUpdate, redirection moteur ; broche Key du PrintString UE5) |
etat/L5-diag_dump427_*, etat/L5-diag_dump55_* |
| Mécanisme | MeshSexRace est chargé à la demande : LoadMeshIfNeeded(Index) → getSkeletalMeshFromPath(AssetPath) → LPAssetRegistryHelpers::GetAssetByObjectPath(…, OnlyOnDisk=true) → GetAsset → Cast<SkeletalMesh> |
dumps |
| Réglages | LegacyPercentage absent des deux GameSettings.sav : valeur par défaut identique |
lecture binaire |
Conclusion provisoire : code et réglages identiques ; le seul maillon qui change de moteur est la
résolution chemin → asset (GetAssetByObjectPath, porté de FName vers FSoftObjectPath).
| ID | Date | Lot | Fichiers | Raison | Retour arrière |
|---|---|---|---|---|---|
| CHG-027 | 2026-09-29 | L5 | Source/LifePlay/LPAssetRegistryHelpers.cpp |
instrumentation permanente : tout chemin non résolu est signalé une fois (LogLifePlay Warning, chemin reçu et chemin interprété), réussites en Verbose |
Tools\Restore.ps1 -Lot L5-instr |
Build D:\Game\LifePlay_Build_5.5_L5a (instrumentée) : éditeur et jeu compilés sans erreur ; cuisson 0 error(s), 0 warning(s) ; T-PKG-01 : 8 561 packages ; test de fumée 180 s sans plantage (aucune partie démarrée : pas de sauvegarde dans cette build). En attente d'une scène de quête jouée.
Relevé MeshSexRace pendant une partie (build L5b, -LPDumpVars, 2026-09-29)
| Constat | Preuve |
|---|---|
Fin de partie : MeshSexRace[3] = bridget_gp, MeshSexRace[4] = michael chargés ; les 22 autres corps vides (non utilisés ; 6 corps legacy jamais chargés car LegacyPercentage = 0) |
[dump fin], Saved/Logs/portage/L5b_partie_utilisateur_20260929.log |
4 PNJ aléatoires : 0 erreur. Chaque personnage de quête : ≈ 38 lectures de Mesh vide |
chronologie du journal |
Pile : LoadPreset → GenerateAndApplyStrings → PlayerChangeRace → UpdatePlayerMeshWithMorphs → UpdatePlayerMesh (boucle sur MeshSexRace, lecture de Mesh.Materials) |
idem |
Hypothèse « résolution de chemin » : écartée (seuls Pubes05/06, faux en 4.27 aussi) |
instrumentation CHG-027 |
Base de comparaison invalide : la session 4.27 de référence n'a chargé aucun preset de quête (GenerateAndApplyStrings ×2). Le « 0 occurrence en 4.27 » ne prouve rien (piège §5.3 du rapport du 28/09). Journal archivé : Saved/Logs/portage/REF427_session_20260928_sans_quete.log |
Grep |
Suite : session 4.27 jouant les mêmes scènes de quête, puis comparaison normalisée.
Note de traçabilité : la sauvegarde L5-instr de LPSessionLogSubsystem.* a été prise après modification ; la version antérieure est dans git (0baf4cf).
| CHG-028 | 2026-09-29 | L5 | Source/LifePlay/LPSessionLogSubsystem.h/.cpp | capteur d'exceptions de script (-LPTraceScriptEx, -LPTraceLocals, -LPTraceMax) : relève les variables locales du cadre Blueprint au moment de l'erreur ; actif seulement avec l'option (le moteur supprime sa pile d'appel quand un écouteur est branché : elle est réécrite). Validé en -game. | Tools\Restore.ps1 -Lot L5-trace |
ERR-027 — cause racine identifiée (2026-09-29)
Chaîne causale, établie par le capteur L5c et le code source des deux moteurs :
- La scène
vin_Pregnancy/Scenes/pregnant_trap.lpsceneappellegeneratePersonTemporary()sans argument (personnage aléatoire). - Les arguments
()sont découpés parParseIntoArray(non culling). Sur une chaîne vide :- UE 4.27 (
String.cpp:947, garde*Start != '\0') → 0 élément ; - UE 5.5 (
String.cpp.inl:1306, réécrit surUE::String::ParseTokens, qui visite toujours le dernier jeton) → 1 élément vide[""].
- UE 4.27 (
GeneratePersontesteLength(Presets) > 0: en 5.5, il prend le chemin « presets » au lieu du chemin aléatoire.- Il charge chaque
.lpcharacterdont le nom se termine par"" + ".lpcharacter": les 141 presets, appliqués successivement (journal L5c : stéréotypes, fantasy, âges, silhouettes… puisphenotypes/*). - Un preset de phénotype impose
INFO Race: African/Asian/Caucasian→PlayerChangeRace→ corps legacyMeshSexRace[0..2|5..7], jamais chargé (LegacyPercentage = 0) → corps vide : invisible ; vêtements Daz sans support : dévêtu.
Le rapport du 2026-09-28 (§4) avait écarté ParseIntoArray (« implémentation identique ») : c'est exact pour
une chaîne non vide, faux pour la chaîne vide. Toutes les fonctions Blueprint de la chaîne sont identiques
entre 4.27 et 5.5 ; la divergence est dans le moteur.
Preuves : Saved/Logs/portage/L5c_partie_utilisateur2_20260929.log, etat/L5-diag_dump55exec_GI_GeneratePerson.txt,
etat/L5-diag_dump55exec_GI_GenerateAndApplyStrings.txt.
Sous-lot L4-CX-B08 — ParseIntoArray au comportement UE 4.27 (ERR-027) — validé statiquement
Tag d'entrée L4-CX-B08-avant. Sauvegarde : D:\Game\LifePlay_Backup_5.5\L4-CX-B08\ (17 Blueprints ; 4 fichiers
source créés, retirés par Restore.ps1 en cas de retour).
| Étape | Résultat | Preuve (etat/) |
|---|---|---|
| Fonction de remplacement | ULPStringCompat::ParseIntoArray : transcription de l'algorithme 4.27 (chaîne vide → [] ; séparateur sensible à la casse), même signature que UKismetStringLibrary::ParseIntoArray |
Source/LifePlay/LPStringCompat.* |
| Simulation | 114 nœuds, 17 Blueprints (GI 73, Person 10, Room 7, StreetMap_Static 4, 13 widgets) ; rien écrit | L4-CX-B08_dryrun.txt |
| Application | 114 rebranchés, 0 écart de liaison (contrôle intégré : liaisons et valeurs par défaut de chaque broche identiques avant/après), 0 échec | L4-CX-B08_application.txt |
| Contrôles | 0 broche orpheline ; CompileAllBlueprints 0 erreur, 95 avertissements (inchangé), 0 échec de chargement |
résumés L4-CX-B08_* |
| ID | Date | Lot | Fichiers | Raison | Retour arrière |
|---|---|---|---|---|---|
| CHG-029 | 2026-09-29 | L4-CX-B08 | Source/LifePlay/LPStringCompat.h/.cpp, Source/LifePlayEditorTools/LPFixParseIntoArrayCommandlet.h/.cpp (nouveaux) ; 17 Blueprints |
ParseIntoArray UE5 renvoie [""] pour une chaîne vide (UE4 : []) : generatePerson() sans argument chargeait les 141 presets |
Tools\Restore.ps1 -Lot L4-CX-B08 ou git checkout L4-CX-B08-avant -- Content Source |
| CHG-030 | 2026-09-29 | L5 | Source/LifePlayEditorTools/LPDumpFunctionCommandlet.cpp |
option -Exec (broches d'exécution) |
Tools\Restore.ps1 -Lot L5-dumpexec |
Validation d'exécution de CX-B08 — build LifePlay_Build_5.5_L5d (2026-09-30)
Partie jouée par l'utilisateur : personnages de quête et personnages aléatoires visibles et habillés.
Journal : Saved/Logs/portage/L5d_partie_utilisateur_20260930.log.
| Mesure | 5.5 avant (L5b/L5c) | 5.5 L5d | 4.27 (quête jouée) |
|---|---|---|---|
| Personnages générés | 16 | 40 | 16 |
| Presets de phénotype/stéréotype chargés à tort | tous | 0 | 0 |
Lectures Mesh_2 / SkeletalMesh_2 vides |
378+ | 0 | 0 |
Accessed None maillage / personnage |
43,7 | 0,38 | 0,06 |
| Plantages | 0 | 0 | 0 |
Résidu : 15 lectures GetSkeletalMesh_DEPRECATED vides (composants proxy ; dette R-03, lot L7a) ; ModLauncher.config
(ERR-014) et OldPlayer.lpcharacter absents (build sans sauvegarde antérieure). Cuisson L5d : 0 erreur,
95 avertissements (à examiner : la cuisson L5c en comptait 0).
Lot L6 — Validation V1 (2026-09-30)
Partie utilisateur sur LifePlay_Build_5.5_L5d : 42 min, 271 personnages, aucun plantage ; sauvegarde (1.sav,
le jeu numérote les emplacements) et rechargement fonctionnels. Journaux : Saved/Logs/portage/V1_partie_20260930*.log.
Anomalies signalées : ERR-030 à ERR-034 (registre).
| ID | Date | Lot | Fichiers | Raison | Retour arrière |
|---|---|---|---|---|---|
| CHG-031 | 2026-09-30 | L6a | Config/DefaultEngine.ini |
r.DefaultFeature.AntiAliasing=2 (clé UE4, ignorée par UE5 : « dummy variable ») → r.AntiAliasingMethod=2 (TAA, comme en 4.27) ; le jeu tournait en TSR (défaut UE5). Autres réglages vérifiés identiques à 4.27 : GI dynamique 0, reflets SSR, ombres virtuelles 0 |
Tools\Restore.ps1 -Lot L6a |
Validation L6a (build LifePlay_Build_5.5_L6a, partie utilisateur 2026-09-30) : scintillement disparu (ERR-032 clos).
Capteur « read property Person » : relevé dans GI::ReturnStatIfNeeded (variable de scène Player, classe Person,
tableau Person vide). Comparaison par personnage : Dress 0 sur cette partie (situationnel) ; variables Person vides
3,3/perso en 4.27 contre 15 à 20 en 5.5 (ERR-003/ERR-030). Journal : Saved/Logs/portage/L6a_LifePlay.log.
Lot L6e — ERR-034, marges des boutons (2026-09-30)
Captures utilisateur 4.27 / 5.5 : la rangée << < ❚❚ > >> de UI/TopRight est plus espacée en 5.5 et déborde à droite.
Photographie de l'arbre (LPDumpWidgetTree) : chaque bouton est un UButton (style transparent) autour d'un cercle de 30 px ;
aucune marge n'est stockée dans l'asset. Source moteur : défaut 4.27 FCoreStyle "Button" NormalPadding (2,2,2,2),
PressedPadding (2,3,2,1) ; défaut 5.5 FUMGCoreStyle "Button" (12,1.5,12,1.5) pour les deux. FMargin est sérialisé
champ par champ par rapport au défaut : les assets 4.27 prennent donc la marge UE5 au chargement (+20 px par bouton).
| ID | Date | Lot | Fichiers | Raison | Retour arrière |
|---|---|---|---|---|---|
| CHG-032 | 2026-09-30 | L6e | Source/LifePlayEditorTools/LPDumpWidgetTreeCommandlet.h/.cpp, LPFixButtonPaddingCommandlet.h/.cpp (nouveaux) |
outils : photographie des arbres UMG (-BP=<nom> ou *), correctif des marges |
git checkout L6e-avant -- Source |
| CHG-033 | 2026-09-30 | L6e-CX-B09 | 46 Widget Blueprints de Content/UI (liste : etat/L6e-CX-B09_assets.txt) |
429 boutons (passe 1, marges égales au défaut UE5) + 1 bouton (passe 2, TopRight::Button_8 Pressed (12,2,12,2) : marge 4.27 partielle, Left/Right hérités d'UE5) remis au défaut UE4 ; 3 boutons à marge 0 choisie par l'auteur conservés |
Tools\Restore.ps1 -Lot L6e-CX-B09 |
| Contrôle | Résultat | Preuve |
|---|---|---|
| Simulation | 432 boutons vus, 429 à corriger, 46 paquets | etat/L6e-CX-B09_dryrun.txt |
| Diff des 73 arbres UMG avant/après | hors lignes WidgetStyle : identiques ; dans WidgetStyle, seules NormalPadding/PressedPadding changent |
etat/L6e-CX-B09_widgets_{avant,apres,diff}.txt |
| Idempotence | 3e simulation après passe 2 : 432 boutons vus, 0 à corriger | etat/L6e-CX-B09c_LPFixButtonPadding_*.txt |
CompileAllBlueprints |
0 erreur, 190 avertissements (identique à L4-CX-B08) | etat/L6e-CX-B09_CompileAllBlueprints_*.txt |
Build empaquetée LifePlay_Build_5.5_L6e |
cuisson 0 erreur, 95 avertissements (inchangé) ; T-PKG-01 : 8561 .uasset |
Saved/Logs/portage/L6e_BuildCookRun.log |
Lot L6f — ERR-031, portrait vide lors d'un appel (2026-09-30) : diagnostic, sans correctif
Capture utilisateur 5.5 : l'encadré d'appel montre un dégradé de ciel. Chaîne établie : GI::secondScreen (contact lu dans
la variable DSL, Person.secondScreen = true, Scene.FaceRender visible) → Render/SecondScreenMat ← SceneCapture2D
SecondScreen de CentralLondon (rend seulement Wall et PlayerCharacter). La carte 4.27 d'origine (copie MD5 identique,
chargée temporairement sous /Game/_Diag, déplacée ensuite dans D:\Game\LifePlay_Backup_5.5\L6f\_diag) contient les
mêmes données : caméra sans racine, en position nulle. L'utilisateur confirme le même défaut en 4.27 : ERR-031 est
préexistant, hors périmètre de la migration ; aucun asset modifié.
| ID | Date | Lot | Fichiers | Raison | Retour arrière |
|---|---|---|---|---|---|
| CHG-034 | 2026-09-30 | L6f | Source/LifePlayEditorTools/LPDumpComponentsCommandlet.h/.cpp (nouveau) |
outil de diagnostic : composants d'un Blueprint (-BP=) ou acteurs d'une carte (-Map= -Filter=), propriétés différentes du défaut |
git checkout L6f-avant -- Source |
Note d'outillage : L6f_dump_GI.txt a d'abord été écrasé par le vidage de Person (le script prenait le journal le plus
récent) ; il a été régénéré depuis Saved/Logs/portage/L6f_LPDumpFunction_20260930-102202.log (378 graphes).