LifePlay-Revival/Docs/Migration/Journal_Modifications.md
2026-10-01 15:51:35 +02:00

53 KiB
Raw Blame History

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.csv et 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 :

  1. La scène vin_Pregnancy/Scenes/pregnant_trap.lpscene appelle generatePersonTemporary() sans argument (personnage aléatoire).
  2. Les arguments () sont découpés par ParseIntoArray (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 sur UE::String::ParseTokens, qui visite toujours le dernier jeton) → 1 élément vide [""].
  3. GeneratePerson teste Length(Presets) > 0 : en 5.5, il prend le chemin « presets » au lieu du chemin aléatoire.
  4. Il charge chaque .lpcharacter dont le nom se termine par "" + ".lpcharacter" : les 141 presets, appliqués successivement (journal L5c : stéréotypes, fantasy, âges, silhouettes… puis phenotypes/*).
  5. Un preset de phénotype impose INFO Race: African/Asian/Caucasian → PlayerChangeRace → corps legacy MeshSexRace[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).

Validation L6e (build LifePlay_Build_5.5_L6e, partie utilisateur 2026-09-30) : barre de temps conforme à la 4.27 (ERR-034 clos, CX-B09 validé en jeu).

ERR-033 (double clic) : non reproduit depuis le build L6e (constat utilisateur, 2026-09-30). Aucun correctif ciblé ; laissé sous surveillance.

Lot L4-CX-B07 — réenregistrement UE5 des derniers paquets UE4 (2026-09-30)

ID Date Lot Fichiers Raison Retour arrière
CHG-035 2026-09-30 L4-CX-B07 Source/LifePlayEditorTools/LPAssetListUtils, LPDumpAssetsCommandlet, LPResavePackagesCommandlet (nouveaux) ; LifePlayEditorTools.Build.cs (bUseUnity = false : les fonctions utilitaires de chaque commandlet sont dans un espace de noms anonyme, la compilation unity les faisait entrer en collision) ; 239 paquets (liste : etat/L4-CX-B07_assets.txt) EX-03 : derniers paquets au format UE4 (ERR-022) Tools\Restore.ps1 -Lot L4-CX-B07 ; git checkout L4-CX-B07-avant -- Source
Contrôle Résultat Preuve
Photographie LPDumpAssets (292 paquets : les 239 + BPs, UI, Structs, Render, y compris GI et Person) 1,28 million de lignes, 0 échec de chargement Saved/Logs/portage/L4-CX-B07_assets_{avant,avant2,apres}.txt
Déterminisme 2 photographies sans modification : seuls NodeGuid/GraphGuid diffèrent (régénérés au chargement des nœuds UE4) ; exclus du diff → 0 écart idem
Simulation puis application 239/239 sauvegardés, 0 échec etat/L4-CX-B07_dryrun.txt, etat/L4-CX-B07_application.txt
T-STAT-01 (en-têtes) 8563/8563 paquets UE5 etat/L4-CX-B07_headers_apres.csv
Diff avant/après (409 lignes) toutes neutres, voir ci-dessous etat/L4-CX-B07_diff_filtre.txt

Familles d'écarts du diff : (1) textures : stockage de la source PNG → UEDELTA (mêmes dimensions, format et mips ; données éditeur, la cuisson en dérive) ; (2) 31 structures : DefaultValue/CurrentDefaultValue explicités avec les valeurs zéro du type (identiques au défaut implicite) ; (3) 5 matériaux : copie UE4 dépréciée d'EmissiveColor/Opacity retirée de UMaterial, les entrées restent identiques dans MaterialEditorOnlyData ; (4) 8 broches Transform : -0 → 0 ; (5) 5 signatures de délégué héritées (SignatureClass/Name) effacées sur des nœuds d'entrée ; (6) 2 avertissements de dépréciation enregistrés sur des nœuds (AI R-04, CharGenSlider R-03, dette connue) ; (7) PC : broche TransformScaleMethod du SpawnActor de TestBall (acteur de test) SelectDefaultAtRuntime → MultiplyWithRoot, valeur déjà portée par les nœuds UE5 de GI ; (8) objets PLACEHOLDER-CLASS du chargeur (ordre de chargement). | CompileAllBlueprints | 0 erreur, 190 avertissements (identique à L6e) | etat/L4-CX-B07_CompileAllBlueprints_*.txt | | Build empaquetée LifePlay_Build_5.5_V1rc | cuisson 0 erreur, 95 avertissements (inchangé) ; T-PKG-01 : 8561 .uasset | Saved/Logs/portage/L4-CX-B07_BuildCookRun.log |


V1 — validation finale (2026-09-30), étiquette v1.0

Partie utilisateur sur LifePlay_Build_5.5_V1rc (contenu = L4-CX-B07-apres) : environ 2 h, 339 personnages, sauvegardes 1.sav et 2.sav, sortie normale, aucun dossier Crashes ; retour utilisateur : « pas de souci majeur constaté ». Journaux : Saved/Logs/portage/V1rc_partie_20260930*.log.

Exigence Résultat
EX-01 compilation LifePlayEditor compile sans erreur (L2, recompilé à chaque lot)
EX-02 Blueprints CompileAllBlueprints 0 erreur (190 avertissements de dépréciation, dette R-03/R-04)
EX-03 format UE5 8563/8563 paquets (CX-B07)
EX-04 Modules chargés comme en 4.27 (L3, T-STAT-02)
EX-05 build jouée personnages distincts, visibles et habillés, scènes, sauvegarde et rechargement
EX-06 sans plantage 42 min (L5d), environ 2 h (V1rc) : 0 plantage
EX-07 journalisation LogLifePlay, résumé de démarrage et de session, traces de portage en Verbose
EX-08 traçabilité CHG-001 à CHG-035, tags avant/après par lot, Restore.ps1 testé (L0)
EX-09 environnement .claude/, .mcp.json, Saved/Backups/, arbre 4.27 non modifiés

Comparaison par personnage V1 (L5d) → V1rc des Accessed None … Person par fonction : getActorVar 4,6 → 4,0, ReturnStatIfNeeded 3,6 → 3,8, setActorVar 0,8 → 0,8 ; seul GI::Dress varie (74,5 → 283,6), par rafales liées aux lieux (ERR-030, lot L7i). Anomalies ouvertes après V1 : voir Registre_Erreurs.md et lots L7 de 04_Cahier_Des_Charges.md.

Publication GitHub (2026-09-30)

Dépôt : https://github.com/edujiro5972/LifePlay-Revival (fork de vinfamy/LifePlay, AGPL-3.0), compte edujiro5972. Préparation dans D:\Game\LifePlay_Publication (copies ; ni ce dépôt ni l'arbre 4.27 modifiés).

Branche Commit Contenu
archive/original 42dc72b master d'origine (V3.6)
archive/ue4.27 9e61ec5 arbre 4.27 filtré selon le .gitignore d'origine (sans Content/Heavy, Content/Saves, binaires, *.png, *.7z, *.mp4), 2 773 fichiers
ue5.5-v1 = main (branche par défaut) a55a43f V1 ; 34 commits et 40 tags, dont v1.0

Historique V1 réécrit pour la publication (git filter-branch, script D:\Game\LifePlay_Publication\scrub.sh) : auteur, committer et signataire de v1.0 = edujiro5972 <336072401+edujiro5972@users.noreply.github.com> ; valeurs SecurityToken remplacées par <retire-pour-publication> (Config/DefaultEngine.ini, correctifs/P05_Config.patch) ; Plugins/McpAutomationBridge retiré (outil de l'environnement de développement, MIT, hors jeu). Arbre final identique à ce dépôt, hors ces deux retraits. Les identifiants de commit publiés diffèrent donc de ceux de ce dépôt local.

Rattachement du dépôt local à l'historique publié (2026-09-30) : .git sauvegardé dans D:\Game\LifePlay_Backup_5.5\git_avant_rattachement (HEAD 41d5e1e, 40 tags) ; git reset --mixed origin/main (ni fichier modifié ni fichier supprimé sur disque) ; tags remplacés par ceux publiés ; identité locale edujiro5972 (adresse noreply). Plugins/McpAutomationBridge/ ajouté au .gitignore (reste sur disque) ; README.md ajouté à la racine. Retour arrière : restaurer le .git sauvegardé.

Archive « Full Source Code » V1 (2026-09-30)

LifePlay_Revival_V1_UE5.5_Full_Source_Code.7z (4 851 560 856 octets, SHA-256 38ee16640f960317348a044195a23b55ac8eda34aec085e661034dc9c26cc594), déposée par l'utilisateur sur Mega : https://mega.nz/file/zloFkL7T#3P5GDfcfF5U352T0s472vCtyNh131RLgNWn__PSNL2I. Principe de l'archive de l'auteur (LifePlay_5_9_UE4_Full_Source_Code.7z) : dossier projet à la racine, 7z LZMA2:24 BCJ solide. Contenu : Content complet (24 912 fichiers, dont Heavy 8 350, au format UE5), Binaries, plugins StreetMap et ModdingExtra, .git d'un clone propre du dépôt publié. Exclus : Saved (comme l'auteur), Intermediate, McpAutomationBridge, .mcp.json, .claude, captures d'écran, .git local. Test d'intégrité 7-Zip réussi. Script : D:\Game\LifePlay_Publication\make_archive.cmd. README.md réécrit en anglais avec le lien de l'archive.


Lot L7a — R-03 refait : nœuds Get SkeletalMesh dépréciés (2026-09-30)

Analyse (source UE 5.5) : la lecture de USkinnedMeshComponent::SkeletalMesh passe par GetSkeletalMesh_DEPRECATED(), qui renvoie Cast<USkeletalMesh>(GetSkinnedAsset()). CX-B05 avait pris USkeletalMeshComponent::GetSkeletalMeshAsset(), qui n'existe pas sur les proxies (USkinnedMeshComponent) : d'où ERR-002 aggravé. Remplacement exact retenu : ULPMeshCompat::GetSkeletalMesh(Component), même calcul, pour tout USkinnedMeshComponent. Inventaire structurel (instantané CX-B07) : 56 nœuds sources (les appels GetSkeletalMesh_DEPRECATED relevés ne sont que les copies compilées ; la variable SkeletalMesh de GenitalSlider est une variable Blueprint, non concernée).

ID Date Lot Fichiers Raison Retour arrière
CHG-036 2026-09-30 L7a (CX-B10) Source/LifePlay/LPMeshCompat.h/.cpp, Source/LifePlayEditorTools/LPFixSkeletalMeshGetCommandlet.h/.cpp (nouveaux), Tools/DiffRemplacementNoeuds.py ; 8 Blueprints (etat/L7a_assets.txt) ERR-012 / R-03 : 56 nœuds dépréciés Tools\Restore.ps1 -Lot L7a ; git checkout L7a-avant -- Source Tools
Contrôle Résultat Preuve
Simulation 56 nœuds, 0 cas non pris en charge (cible self, nœud impur) etat/L7a_dryrun.txt
Application (contrôle intégré des liaisons) 56/56 remplacés, 8 Blueprints sauvegardés, 0 écart etat/L7a_application.txt
Diff indépendant LPDumpAssets avant/après (Tools/DiffRemplacementNoeuds.py) 56 paires (même graphe, même position) ; liaisons self→Component et SkeletalMesh→ReturnValue identiques pour 56/56 ; 0 autre objet modifié (hors copies compilées, graphes anonymes régénérés, GUID, positions des graphes-souches, messages de compilation) Saved/Logs/portage/L7a_assets_{avant,apres}.txt
Chargement des 8 Blueprints avertissements 112 → 6 journaux L7a_LPDumpAssets_*

Effet de mesure : le nœud d'origine émettait Accessed None … SkeletalMesh sur un composant None ; la nouvelle fonction renvoie None sans message (trace LogLifePlay en Verbose). Les compteurs AccessedNoneMaillage de LogStats.ps1 baissent donc mécaniquement : comparer les sessions sur les autres signatures. | CompileAllBlueprints | 0 erreur, 6 avertissements (190 avant) : restent seulement les 6 nœuds R-04 GetRandomPointInNavigableRadius (AI, Person, Room) | etat/L7a_CompileAllBlueprints_*.txt | | Build empaquetée LifePlay_Build_5.5_L7a | cuisson 0 erreur, 3 avertissements (95 avant) ; T-PKG-01 : 8561 .uasset | Saved/Logs/portage/L7a_BuildCookRun.log |

Nettoyage des builds UE5 obsolètes (2026-09-30, demande utilisateur)

Supprimés (environ 37 Go, binaires régénérables depuis les tags git) : LifePlay_Build_5.5, _5.5_Dev, _5.5_NoR03 (premier portage) et _5.5_L4, L4b, L5a, L5b, L5c, L5d, L6a, L6e. Au préalable, leurs Saved/Logs, Saved/SaveGames, Saved/Crashes et scripts .bat ont été copiés dans D:\Game\LifePlay_Backup_5.5\builds_supprimees. Conservés : LifePlay_Build_5.5_V1rc (build validée v1.0), LifePlay_Build_5.5_L7a (test en cours), LifePlay_Build_427_Dev et LifePlay_Build_2026.9 (UE4).

Validation L7a (build LifePlay_Build_5.5_L7a, partie utilisateur 2026-09-30, environ 1 h) : 294 personnages, 0 plantage, sortie normale, sauvegardes 1.sav/2.sav ; tests utilisateur effectués sans anomalie signalée. Journal : Saved/Logs/portage/L7a_partie_20260930.log. Accessed None par personnage : 334 (V1rc) → 127, surtout GI::Dress (situationnel, ERR-030). Messages moteur GetSocketInfoByName … No SkeletalMesh for Component(CharacterMesh0) : même signature et mêmes 5 sockets qu'en V1rc, volume lié aux scènes jouées (ERR-011, existe en 4.27) : non imputable à L7a. Fonctions de variables DSL (getActorVar, clearVariable, CallFunction) non touchées par L7a, en hausse par personnage sur cette partie : famille ERR-003, à suivre en L7i.

L7b — R-04 : derniers nœuds dépréciés (2026-09-30)

CHG Date Lot Fichiers Raison Retour arrière
CHG-037 2026-09-30 L7b (CX-B11) Source/LifePlayEditorTools/LPFixNavRandomPointCommandlet.h/.cpp (nouveau) ; Tools/DiffRemplacementNoeuds.py (profils par lot : L7a, L7b) ; Content/BPs/AI, Person, Room (etat/L7b_assets.txt) ERR-035 / R-04 : 6 nœuds GetRandomPointInNavigableRadius dépréciés Tools\Restore.ps1 -Lot L7b ; git checkout L7b-avant -- Source Tools

Choix : le remplaçant proposé par le moteur (K2_GetRandomLocationInNavigableRadius) est BlueprintCallable, alors que l'ancien nœud est pur ; le brancher imposerait de recâbler le flux d'exécution. On réutilise LPNavigationHelpers (enrobage pur déjà présent, CX-C09) : mêmes broches, et même corps que la fonction dépréciée en 4.27 comme en 5.5 (simple appel de K2_GetRandomLocationInNavigableRadius). LPFixDeprecatedNodes (CX-B06) n'est pas réutilisée : elle ne contrôle rien et embarque aussi la variante R-03 rejetée.

Contrôle Résultat Preuve
Simulation 6 nœuds (Room::moveToBedIfPossible, Room::getStandSpots, Person::standIdle ×2, Person::jumpOffFnt, AI::EventGraph), 0 cas non pris en charge etat/L7b_LPFixNavRandomPoint_20260930-183406.txt
Application (contrôle intégré : liaisons et valeurs par défaut de chaque broche) 6/6 remplacés, 3 Blueprints sauvegardés, 0 écart etat/L7b_LPFixNavRandomPoint_20260930-183707.txt
Diff indépendant LPDumpAssets (DiffRemplacementNoeuds.py … L7b) 6 paires ; 7 broches identiques (liaisons et défauts, ex. Radius 100 / 200 / 1000 / 2000 / 100000) ; 0 autre objet modifié ; le profil L7a rejoué sur les données L7a donne toujours 56/56 et 0 écart Saved/Logs/portage/L7b_assets_{avant,apres}.txt
CompileAllBlueprints 0 erreur, 0 avertissement (6 avant) etat/L7b_CompileAllBlueprints_20260930-183909.txt
Build empaquetée LifePlay_Build_5.5_L7b cuisson 0 erreur, 0 avertissement (3 avant) ; T-PKG-01 : 8561 .uasset Saved/Logs/portage/L7b_BuildCookRun.log

Validation en jeu en attente (déplacements des personnages : standIdle, jumpOffFnt, moveToBedIfPossible, IA).

CHG Date Lot Fichiers Raison Retour arrière
CHG-038 2026-09-30 L7b Content/BPs/AI, Person, Room restaurés (Tools\Restore.ps1 -Lot L7b, MD5 = L7b-avant) ; versions L7b conservées dans LifePlay_Backup_5.5\L7b\_avant-restauration‚60930-193820 test en jeu du build L7b (utilisateur) : les personnages se téléportent dans la pièce au lieu de marcher, pieds parfois masqués par un objet ; « la build précédente était meilleure » réappliquer : Restore.ps1 depuis _avant-restauration, ou relancer LPFixNavRandomPoint

Analyse : aucune cause trouvée dans le code. Ancienne et nouvelle fonction exécutent le même appel moteur (K2_GetRandomLocationInNavigableRadius), mêmes broches et valeurs par défaut (diff 6/6), et le compilateur remplit la broche cachée WorldContextObject de la même façon pour les deux (FKCHandler_CallFunction::RegisterNets, métadonnée WorldContext). Le journal de la partie ne contient aucun message de navigation. Prochaine étape : A/B au même endroit avec le build L7a (identique au contenu actuel), et vérifier le comportement en 4.27, avant toute nouvelle tentative.

CHG Date Lot Fichiers Raison Retour arrière
CHG-039 2026-09-30 L7b Content/BPs/AI, Person, Room remis à L7b-apres (git checkout L7b-apres, MD5 identiques aux versions conservées dans _avant-restauration‚60930-193820) retour utilisateur : la téléportation venait de l'accélération du temps (en vitesse normale les personnages marchent) ; les personnages enfoncés dans le sol en extérieur existent aussi en 4.27 et en L7a/V1 (ERR-036, hors périmètre). Le retrait CHG-038 n'était donc pas justifié Tools\Restore.ps1 -Lot L7b

L7b validé en jeu : le build testé LifePlay_Build_5.5_L7b contient exactement ces 3 paquets. Leçon : avant de retirer un lot sur un symptôme visuel, vérifier la vitesse de jeu et demander si le défaut existe en 4.27 et dans le build précédent.

L7i — variables DSL Person vides (ERR-003 / ERR-030), 2026-09-30

Mesure (journaux L7a_partie, L7b_partie, 4.27 LifePlay_Build_427_Dev\...\LifePlay.log, par minute) :

Signature 4.27 (23 min) L7a (62 min) L7b (45 min)
Accessed None … Person dans GI::Dress 376 326 641
index 0 … array 'Person' (variable DSL vide) 9 179 56
index … array 'Floats' 2,4 31 64
Accessed None … Person dans getActorVar 0 45 7,6
Accessed None … Person dans ReturnStatIfNeeded 0,35 33 5,6

Conclusion : ERR-030 (Dress) existe en 4.27 (même signature Dress:0E35, même ordre de grandeur) : préexistant, hors périmètre. L'écart propre à 5.5 porte sur les variables DSL vides (ERR-003). Lecture du graphe (GI::GetVariable) : la variable Player est construite avec Person = [Special], Special = GI.PlayerCharacter (SwitchString_55, branche Player) ; le capteur L6a montre Special = None. Les erreurs surviennent tout au long de la partie, pas seulement au chargement.

CHG Date Lot Fichiers Raison Retour arrière
CHG-040 2026-09-30 L7i Source/LifePlay/LPSessionLogSubsystem.h/.cpp : options -LPTraceFunctions, -LPTraceDepth (variables locales des cadres appelants), -LPTraceGIVars (variables de l'instance de jeu) ; inactives sans -LPTraceScriptEx capteur ciblé ERR-003 : quelle scène et quelle variable restent vides git checkout L7i-avant -- Source

Build de diagnostic LifePlay_Build_5.5_L7i (contenu identique à L7b, 8561 .uasset), lancement par LifePlay_diagnostic_L7i.bat (300 relevés, 4 cadres appelants, -ScriptStackOnWarnings).

Session capteur n° 1 (L7i_partie2_20261001.log, 53 min, 300 relevés) : les variables vides viennent surtout des scripts d'IA des PNJ (.lpai : meal, church, grocery, entertainment…), via UpdateAI → PlayScene → ReadSceneLine → CallFunction → getActorVar/setActorVar. La variable vide est AI, alimentée par GI.AIDummy (personnage factice du pool DummyPersons, attribué par SpawnDummy). GI.PlayerCharacter n'est pas None. Dans GetVariable, toutes les variables spéciales (Player, Ptr, Interacting, CurrentCompanion, A1…A5) passent par le même MakeStruct dont le nom est figé à « Player » : l'étiquette relevée en L6a était trompeuse.

Nouveau défaut signalé (utilisateur, 2026-10-01) : Quick dress laisse souvent le personnage principal nu ; correct en 4.27 → ERR-037, régression UE5. Chemin : Action (bouton « Quick dress ») → GI::Dress(PersonVariable="Player", ClothVariables=[], QuickDress=true) → pour chaque emplacement obligatoire (Top, Bottom, Foot), filtre de l'inventaire du joueur (sexe, emplacement, Overlaps, Daz == (Race == "Daz"), exclusion Wedding/Nurse/Doctor). Inventaire de la sauvegarde 1.sav cohérent (80 vêtements, Daz=True).

CHG Date Lot Fichiers Raison Retour arrière
CHG-041 2026-10-01 L7i Source/LifePlayEditorTools/LPDumpSaveCommandlet.h/.cpp (nouveau : contenu d'un .sav en texte, lecture seule) ; Source/LifePlay/LPSessionLogSubsystem.h/.cpp : relevé déclenché par un motif du journal (-LPDumpOnLog, -LPDumpPaths, -LPDumpMax), inactif sans l'option ERR-037 : relever l'état du joueur au moment du Quick dress ; ERR-003 : état d'AIDummy git checkout L7i-capteur -- Source

Build LifePlay_Build_5.5_L7i reconstruite (contenu identique), lancement LifePlay_diagnostic_L7i_2.bat.