21 KiB
Fiche U4-T3 — Niveau N3 — Modèle prévu opus xhigh | utilisé Opus 5.5 (claude-opus-5-5) — Agent lp-impl — Skills sk-protocol, ue-cpp-build, lp-build, lp-ue-compat
U4-T3 — Addon en UE 5.8, rebranchement dans le jeu 5.8, 8 C4996 corrigés
Date : 2026-10-08. Résultat : réussi pour les points a à f de la fiche, non compilé (la compilation revient à la fiche BUILD). Aucun commit, add, checkout ni tag. Aucun fichier supprimé. Aucun éditeur lancé.
1. Porte d'entrée
- Addon 5.8 :
git -C D:/Game/LifePlay-Sandbox-5.8 rev-parse --abbrev-ref HEAD→ue5.8,--short HEAD→f9033a1,status --porcelainvide. Établi. - Jeu 5.8 : branche
ue5.8, HEAD8e21f6b,status --porcelainvide. Établi.
2. Fichiers modifiés
2.1 Addon D:\Game\LifePlay-Sandbox-5.8 (branche ue5.8) — git -C D:/Game/LifePlay-Sandbox-5.8 diff --stat
Config/DefaultEngine.ini | 7 +++++-
Config/LPSandbox.ini | 2 +-
LPSandbox.uproject | 6 ++---
README.md | 33 +++++++++++++++-------------
Source/LPSandbox.Target.cs | 4 ++--
Source/LPSandboxEditor.Target.cs | 4 ++--
Tools/BuildMod.ps1 | 4 +++-
Tools/EditMod.ps1 | 4 +++-
Tools/HairPipeline.ps1 | 4 +++-
Tools/anim/AnimPipeline.ps1 | 4 +++-
Tools/anim/DeliverAnims.ps1 | 4 +++-
Tools/anim/RapportControles.py | 2 +-
Tools/debug/LifePlay_interaction_sandbox.bat | 5 +++--
Tools/debug/LifePlay_measure_sandbox.bat | 5 +++--
Tools/debug/LifePlay_pair_sandbox.bat | 5 +++--
15 files changed, 57 insertions(+), 36 deletions(-)
Plus la jonction Content (hors suivi git, § 4.4).
Détail :
- A
LPSandbox.uproject:EngineAssociation"5.8"(l. 3), descriptionUE 5.8(l. 5),AdditionalPluginDirectories→../LifePlay-master 5.8/Plugins/LPAnimCore(l. 20). - A
Source/LPSandbox.Target.cs,Source/LPSandboxEditor.Target.cs(l. 12-13) :BuildSettingsVersion.V7,EngineIncludeOrderVersion.Unreal5_8, identiques au jeu 5.8 (D:\Game\LifePlay-master 5.8\Source\LifePlay.Target.cs:11-12,LifePlayEditor.Target.cs:11-12). Valeurs connues de UBT 5.8 :TargetRules.cs:170(V7),:177(Latest = V7),:235(Unreal5_8),:242(Latest = Unreal5_8), fichierUE_5.8/Engine/Source/Programs/UnrealBuildTool/Configuration/Rules/TargetRules.cs. - A (compilateur)
Config/DefaultEngine.ini: le jeu 5.8 épingle MSVC dansConfig/DefaultEngine.ini:126,133([/Script/WindowsTargetPlatform.WindowsTargetSettings],CompilerVersion=14.50.35717). Réglage reproduit dans l'ini équivalent de l'addon (nouvelle section en fin de fichier, 2 lignes de commentaire +CompilerVersion=14.50.35717). UBT le lit dans la hiérarchie Engine du projet compilé :UnrealBuildTool/Platform/Windows/UEBuildWindows.cs:389. Il ne sert donc que siLPSandbox.uprojectest compilé seul ; compilé avec le jeu, c'est l'ini du jeu qui compte (estimé, même mécanisme). Rien ajouté dans les Target.cs. - B
Config/LPSandbox.ini:46:GameRoot=..\LifePlay-master 5.8(CRLF conservé). - B 5 scripts
.ps1: le cheminUE_5.5en dur est remplacé par 1 ligne de commentaire +. (Join-Path $Root 'Tools\Engine.ps1')+ chemin construit depuis$LPEngineRoot, au niveau script, juste aprèsResolve-LPRoots(et aprèsModSource.ps1quand il était chargé avant) :Tools/BuildMod.ps1:53-55:$UE = $LPEngineRoot(dossier Engine, comme avant) ;Tools/EditMod.ps1:23-25:$Editor = Join-Path $LPEngineRoot 'Binaries\Win64\UnrealEditor.exe';Tools/HairPipeline.ps1:53-55:$UE = Join-Path $LPEngineRoot 'Binaries\Win64\UnrealEditor-Cmd.exe';Tools/anim/AnimPipeline.ps1:47-49etTools/anim/DeliverAnims.ps1:49-51:$Editor = Join-Path $LPEngineRoot 'Binaries\Win64\UnrealEditor-Cmd.exe'.
- B 3
.batdeTools/debug/:GAMEpar défaut..\..\..\LifePlay-master 5.8; ligneUEremplacée par la forme imposée (if defined LP_ENGINE_ROOT (...) else (... UE_5.8 ...)), précédée d'une lignerem Lot U4. CRLF conservé. - B
Tools/anim/RapportControles.py:10:LifePlay-master 5.8(ligne de docstring, voir § 7). - C
Config/DefaultEngine.ini:3: commentaire de jonction →../LifePlay-master 5.8/Content. - C
README.md: lignes 3, 19-20, 25, 48, 52, 56, 83, 88, 92, 101, 107, 118-121 (nouvelle puce « Moteur (lot U4) »), 127-128 ; reste du texte inchangé (voir écart E2).
2.2 Jeu D:\Game\LifePlay-master 5.8 (branche ue5.8) — git -C "D:/Game/LifePlay-master 5.8" diff --stat
LifePlay.uproject | 3 ++
.../StreetMapComponentDetails.cpp | 37 ++++++++++++++++++++--
.../StreetMapRuntime/StreetMapSceneProxy.cpp | 7 ++++
.../LifePlayEditorTools/LPDumpAssetsCommandlet.cpp | 6 ++++
4 files changed, 50 insertions(+), 3 deletions(-)
LifePlay.uproject:212-214:"AdditionalPluginDirectories": ["../LifePlay-Sandbox-5.8/Plugins"], entre la fin dePluginsetTargetPlatforms, commeD:\Game\LifePlay-master 5.5\LifePlay.uproject:211-213.diffdes deux .uproject (CR retirés) : seules différences =EngineAssociation(l. 3), plugin désactivé l. 51 (P7, U3) et le chemin de l'addon (l. 213). CRLF et absence de saut de ligne final conservés.
3. Les 8 C4996 (tous sous #if UE_VERSION_OLDER_THAN(5, 8, 0) / #else / #endif, branche 5.5 identique au code d'origine)
Garde : Misc/EngineVersionComparison.h ajouté dans les 3 .cpp (macro présente en 5.5 l. 18 et en 5.8 l. 24, qui inclut Runtime/Launch/Resources/Version.h l. 5). Garde à 5.8.0 partout : aucune des API de remplacement n'existe en 5.5.4 (sauf W3, voir), et 5.6/5.7 ne sont pas installés pour situer leur apparition.
| # | Site (après édition) | Ancienne API → nouvelle | En-tête 5.8 qui le justifie | En 5.5 | Effet sémantique |
|---|---|---|---|---|---|
| 1-2 | Plugins/StreetMap/Source/StreetMapImporting/StreetMapComponentDetails.cpp:53-58 et :73-77 (ex-36, 51) |
DetailBuilder.GetDetailsView()->… → DetailBuilder.GetDetailsViewSharedPtr()->… |
Editor/PropertyEditor/Public/DetailLayoutBuilder.h:74-78 (UE_DEPRECATED(5.5, "Use GetDetailsViewSharedPtr() instead."), corps return GetDetailsViewSharedPtr().Get();), remplaçant non const l. 72 |
absent : seul GetDetailsView() virtuel pur, DetailLayoutBuilder.h:61,66 ; GetDetailsViewSharedPtr 0 occurrence (malgré l'étiquette « 5.5 ») |
identique (l'ancienne fonction appelait la nouvelle) ; le TSharedPtr temporaire garde la vue vivante pendant l'appel |
| 3-5 | StreetMapComponentDetails.cpp:21-35 (fonction StreetMapComponentDetailsCompat::CounterFont()), appelée l. 183, 191, 199 (ex-157, 165, 173) |
FSlateFontInfo("Verdana", 8) → FSlateFontInfo(MakeShared<FStandaloneCompositeFont>(NAME_None, TEXT("Verdana"), EFontHinting::Default, EFontLoadingPolicy::LazyLoad), 8) |
Runtime/SlateCore/Public/Fonts/SlateFontInfo.h:265-266 (UE_DEPRECATED(5.6, "Use constructor with FCompositeFont instead.")) ; constructeur FCompositeFont l. 227 ; FStandaloneCompositeFont Fonts/CompositeFont.h:494-510 |
constructeur FCompositeFont présent (SlateFontInfo.h:227), FStandaloneCompositeFont présent (CompositeFont.h:496) : la forme 5.8 compilerait aussi, garde gardée pour le critère et pour laisser 5.5 identique |
identique : l'ancien constructeur (SlateFontInfo.cpp:144-162) appelait UpgradeLegacyFontInfo (l. 227-235) → FLegacySlateFontInfoCache::GetCompositeFont (Private/Fonts/LegacySlateFontInfoCache.cpp:54-91) qui, faute de fichier Verdana (absent du dossier courant, de LifePlay-master 5.8/Content et de UE_5.8/Engine/Content, vérifié), crée MakeShared<FStandaloneCompositeFont>(NAME_None, "Verdana", Hinting, LazyLoad) (l. 89). Même FontFallback FF_Max dans les deux constructeurs (SlateFontInfo.cpp:60 et :150). Seule différence : plus de mutualisation par le cache (une police composite par appel, 3 par personnalisation du panneau) ; champs éditeur FontName_DEPRECATED non renseignés (lus seulement à la désérialisation d'anciens assets, SlateFontInfo.cpp:211-217) |
| 6 | StreetMapComponentDetails.cpp:325-330 (ex-299) |
StaticMesh->ImportVersion = LastVersion → StaticMesh->SetImportVersion(EImportStaticMeshVersion::LastVersion) |
Runtime/Engine/Classes/Engine/StaticMesh.h:711-713 (UE_DEPRECATED(5.7, "… use UStaticMesh::GetImportVersion() or UStaticMesh::SetImportVersion().")) ; SetImportVersion(int32) l. 805-808, public (l. 758), même bloc WITH_EDITORONLY_DATA (l. 650-882) que le membre |
absent (SetImportVersion 0 occurrence dans StaticMesh.h 5.5 ; membre public l. 678) |
identique : SetImportVersion fait ImportVersion = Version; (l. 807) ; enum non scopé converti en int32 comme avant |
| 7 | Plugins/StreetMap/Source/StreetMapRuntime/StreetMapSceneProxy.cpp:22-28 (ex-21) |
GetMaterialRelevance(GetScene().GetFeatureLevel()) → GetMaterialRelevance(GetScene().GetShaderPlatform()) |
Runtime/Engine/Classes/Components/MeshComponent.h:127-129 (UE_DEPRECATED(5.7, "Please use GetMaterialRelevance with EShaderPlatform argument …")) ; FSceneInterface::GetShaderPlatform() Runtime/Engine/Public/SceneInterface.h:732 ; même forme chez Epic : Runtime/Engine/Private/StaticMeshSceneProxy.cpp:238, Runtime/GeometryFramework/Private/Components/BaseDynamicMeshSceneProxy.cpp:62 |
absent (seule la surcharge niveau de fonctionnalité, MeshComponent.h:98) |
identique dans l'usage normal : l'ancienne surcharge fait GetMaterialRelevance(GetFeatureLevelShaderPlatform_Checked(InFeatureLevel)) (Private/Components/MeshComponent.cpp:154-157) = GShaderPlatformForFeatureLevel[FeatureLevel] lu à l'appel (Runtime/RHI/Public/RHIGlobals.h:1015-1025, alias l. 970) ; la scène stocke la même valeur à sa création (Private/SceneInterface.cpp:22-26, Renderer/Private/RendererScene.cpp:1196-1197) et ne la modifie plus (aucune autre affectation dans RendererScene.cpp). Écarts possibles : (a) si la table globale change pendant la vie d'une scène, la nouvelle forme suit la plateforme de la scène (estimé : plus juste) ; (b) l'ancienne avait un checkf(!IsRunningCookCommandlet()) (RHIGlobals.h:1023), la nouvelle non |
| 8 | Source/LifePlayEditorTools/LPDumpAssetsCommandlet.cpp:111-116 (ex-110) |
GetObjectsWithPackage(Pkg, Objects, true) → GetObjectsWithPackage(Pkg, Objects, EGetObjectsFlags::IncludeNestedObjects) |
Runtime/CoreUObject/Public/UObject/UObjectHash.h:193 (surcharge enum), :195-199 (surcharge booléenne UE_INCLUDENESTEDOBJECTS_BOOL_DEPRECATED, true → IncludeNestedObjects) ; macro UObject/FindObjectFlags.h:30 (UE_DEPRECATED(5.8, …)), enum l. 18-27 |
absent (EGetObjectsFlags 0 occurrence dans CoreUObject/Public 5.5 ; signature booléenne UObjectHash.h:155) |
identique : l'ancienne surcharge appelait la nouvelle avec ce drapeau (l. 198) |
Non traité (hors des 8 de la fiche) : 9e C4996 connu, addon Plugins/LPSandbox/Source/LPModTools/LPHairFromStaticMeshCommandlet.cpp:430 (W6, lp-ue-compat ruptures.md § 3) : il réapparaîtra au build U4 maintenant que l'addon est branché.
4. Contrôles faits
- JSON (pwsh 7.6.6,
Get-Content -Raw | ConvertFrom-Json -ErrorAction Stop) :LPSandbox.uprojectOK (EngineAssociation=5.8,AdditionalPluginDirectories=../LifePlay-master 5.8/Plugins/LPAnimCore, 1 plugin) ;LifePlay.uproject5.8 OK (EngineAssociation=5.8,AdditionalPluginDirectories=../LifePlay-Sandbox-5.8/Plugins, 27 plugins). Les deux chemins relatifs mènent à un.upluginréel (LPAnimCore.uplugin,LPSandbox.uplugin,ls). Établi. - Fins de ligne / encodage (script Python qui compte
\r\net\n, octets > 127, BOM) : chaque fichier garde sa convention d'origine. LF pur : DefaultEngine.ini, uproject addon, Target.cs, les 5 .ps1, RapportControles.py, README.md, les 3 .cpp. CRLF pur : LPSandbox.ini (46/46), les 3 .bat (10/10, 12/12, 10/10),LifePlay.uproject(217/217, toujours sans saut de ligne final). Aucun BOM ajouté ; commentaires ajoutés en ASCII dans les fichiers ASCII ; README reste UTF-8 (142 → 146 octets non ASCII : « épinglé »). Établi. - Syntaxe :
[System.Management.Automation.Language.Parser]::ParseFilesur les 5 .ps1 → 0 erreur chacun ;ast.parsede RapportControles.py OK. Établi. - Jonction :
cmd /c mklink /J "D:\Game\LifePlay-Sandbox-5.8\Content" "D:\Game\LifePlay-master 5.8\Content"→ « Jonction créée … », code 0 ;Get-Item→LinkType Junction,Target D:\Game\LifePlay-master 5.8\Content(même forme que l'addon 5.5 :Junction→LifePlay-master 5.5\Content) ;git check-ignore -v Content→.gitignore:31:/Content/; absente degit status. Établi. - Portée du dot-sourcing d'Engine.ps1 (script témoin
test_scope.ps1dans le scratchpad, mêmes lignes que les scripts, rien lancé) :Root=D:\Game\LifePlay-master 5.8(donc[Workshop] GameRootlu),LPEngineVersion=5.8,$Editor/$UE=UE_5.8\…\UnrealEditor(.exe|-Cmd.exe)existants, valeurs visibles depuis une fonction (lecture par portée dynamique, commeInvoke-UEouInvoke-AnimToGenesis),$PSScriptRootde l'appelant inchangé,$NoCheck/$lpChecknon laissés dans la portée ; avecLP_ENGINE_ROOT=…\UE_5.5\Enginele chemin suit la surcharge ; avec-GameRoot 'D:\Game\LifePlay-master 5.5'(pas d'Engine.ps1) arrêt immédiat, code 1, « Le terme …\Tools\Engine.ps1 n'est pas reconnu » (les 5 scripts ont$ErrorActionPreference = 'Stop'avant). Aucun nom de variable des scripts ne collide avec ceux d'Engine.ps1 (grepdeLPProjectRoot|LPProject|LPEngine*|LPBuildRoot|NoCheck|lpCheck|lpOverridedans les 5 scripts, ModSource.ps1 et Roots.ps1 : 0). Établi. - .bat : copie de
LifePlay_pair_sandbox.batdans le scratchpad avecstartremplacé parecho: sansLP_ENGINE_ROOT→UE=D:\Game\Launcher\Engine\UE_5.8\Engine\Binaries\Win64\UnrealEditor.exe; avecLP_ENGINE_ROOT='C:\Program Files (x86)\Fake Engine'→…\Fake Engine\Binaries\Win64\UnrealEditor.exe(parenthèses et espaces tolérés).GAMEdepuisTools\debug\=D:\Game\LifePlay-master 5.8par calcul de chemin (estimé, non exécuté depuis le vrai dossier). - git status (
--short) : addon 5.8 = les 15 fichiers listés, rien d'autre ; jeu 5.8 = les 4 fichiers listés ; jeu 5.5D:\Game\LifePlay-master 5.5= vide (ce livrable est sousDocs/Migration/etat/, ignoré :.gitignore:74) ; addon 5.5D:\Game\LifePlay-Sandbox= vide (branchelot/DC3-atelier, non touché). Établi.
5. Recomptage des occurrences (critère § 8)
git -C D:/Game/LifePlay-Sandbox-5.8 grep -n -E 'UE_5\.5|LifePlay-master 5\.5|Unreal5_5|"5\.5"' -- ':!Docs' ':!Tools/claude' ':!Tools/mods/*.json' ':!Tools/hairs/*.json'→ 0 ligne. Témoin : même motif sur tout le dépôt → 31 lignes (Docs 7, Tools/claude 24, JSON 0, README 0), donc le motif fonctionne. README n'a plus aucune ligne du motif. Établi.- Occurrences A (6) et B (13) de T1 : relues par
git grep -n -I -E '<motif T1>'sur les 12 fichiers A/B → toutes en 5.8 ;git grep -n -E '5\.5|5_5'sur ces fichiers → 1 seule ligne,Tools/BuildMod.ps1:30(exemple d'aideLifePlay_Build_5.5_H3d, classé C par T1, hors liste de la fiche) → 0 occurrence A/B restante. Établi. - Le motif large de T1 compte maintenant 194 lignes (192 avant) : il attrape aussi les chaînes 5.8 (
LifePlay-master,UE_5,EngineAssociationdes nouveaux commentaires,CompilerVersion) ; ce n'est pas une mesure de reste.
6. Écarts à la fiche et à la SPEC
- E1 (W3, police) : remplacement par le constructeur FCompositeFont avec la même police composite que construisait l'ancien constructeur (fichier « Verdana »), et non
FCoreStyle::GetDefaultFontStyle("Regular", 8)proposé parlp-ue-compatruptures.md § 3 (W3), qui changerait la police affichée (Roboto au lieu du repli actuel). Raison : correction de dépréciation sans changement de comportement ; l'autre choix revient à l'orchestrateur. Les 3 sites passent par une fonction unique (StreetMapComponentDetailsCompat::CounterFont, espace de noms nommé pour la compilation unitaire) qui porte la garde, au lieu de 3 gardes identiques. - E2 (README) : en plus des chemins
5.5 → 5.8, le nom du dossier addonLifePlay-Sandbox→LifePlay-Sandbox-5.8dans la disposition (l. 20), l'exempleAdditionalPluginDirectories(l. 48, 52) et les commandes (l. 88, 92, 101, 107) : sinon la commande de compilationLPSandboxEditor(l. 101) aurait visé l'addon 5.5 avec le moteur 5.8. Ajout d'une puce « Moteur (lot U4) » (l. 119-120) et de VS 2026 / MSVC 14.50.35717 dans les prérequis. Section « Pin » (branchemain, pinf73e017) non modifiée : à mettre à jour par le lot DOC après commit de la branche ue5.8. - E3 : une ligne de commentaire ajoutée avant chaque modification (
# Lot U4 …dans les .ps1,rem Lot U4 …dans les .bat, commentaires ASCII dans les .cpp citant les en-têtes). Non demandé, sans effet. - E4 : include explicite
Fonts/CompositeFont.hdansStreetMapComponentDetails.cpp:16(déjà inclus parSlateFontInfo.h:8en 5.5 et en 5.8). - Aucun autre écart. Pas d'escalade : aucune API de remplacement manquante, aucune restructuration de script nécessaire (3 lignes par script).
7. Signalements hors périmètre (non corrigés)
Tools/anim/RapportControles.py: la docstring (l. 10) annonce le dossier du jeu, mais le défaut réel du code (l. 23-24,DOSSIER_DEFAUT) est<racine de l'addon>\Saved\AnimPipeline\quaternius(3dirnamedepuisTools/anim/), incohérence antérieure (depuis le déplacement DC3).- Restes catégorie C non listés par la fiche :
Tools/BuildMod.ps1:30(exempleLifePlay_Build_5.5_H3d),Config/DefaultGame.ini:3(« clé NON supportée par UE 5.5 » : vrai aussi en 5.8,AdditionalAssetDirectoriesabsent deUE_5.8/Engine/{Source,Config,Plugins}, recherche témoinAdditionalPluginDirectoriespositive), commentairesLPHairFromStaticMesh*.h/.cpp:1,LPAuditBlueprintCallsCommandlet.cpp:673,Docs/Modding/Creating_Asset_Mods.md. StreetMapComponentDetails.cpp:73-77(ex-51) :SelectedActorsest calculé mais la boucle suivante parcourtSelectedObjects(bogue d'origine du plugin, variable inutilisée) ; seule l'API dépréciée a été remplacée.- Avant la compilation U4 : déplacer (pas supprimer) le
Makefile.bindu jeu 5.8 construit sans addon (lp-build§ 8), prévu par la fiche BUILD. - Les scripts de l'addon 5.8 ne peuvent plus viser la copie 5.5 par
-GameRoot(pas d'Engine.ps1dans le jeu 5.5) : arrêt explicite, voir § 4.5.
8. Preuves
- Établi : contenu des diffs (
git diff), lignes d'en-têtes 5.8 et 5.5 citées (lues parsed/grepdansD:\Game\Launcher\Engine\UE_5.8\Engine\SourceetUE_5.5), JSON valides, fins de ligne, jonction, critèregit grep= 0, A/B restantes = 0, comportement du dot-sourcing et des .bat par scripts témoins. - Estimé : la compilation 5.8 passe sans les 8 C4996 et la 5.5 reste inchangée (branches 5.5 identiques à l'octet près au code d'origine ; formes 5.8 vérifiées contre les signatures) ; équivalence de
GetMaterialRelevancehors usage normal ; rendu de la police inchangé (même police composite, repliFF_LastResortFallbackdansSlateFontRenderer.cpp:390-403dans les deux cas) ;CompilerVersionde l'addon lu seulement en compilation autonome. - Incertain : compilation réelle 5.8 et 5.5 (essai : fiche BUILD,
Tools\Build.ps15.8 puis build 5.5 de contrôle, comparer les C4996 restants au seul W6) ;CompilerVersionde l'addon effectivement retenu (essai : ligneUsing Visual Studio … 14.50.35717d'un buildLPSandboxEditordeLPSandbox.uproject) ; exécution réelle des 5 scripts (essai :AnimPipeline.ps1 -Pack quaternius -DryRundepuis le worktree 5.8 doit afficherUE_5.8\…\UnrealEditor-Cmd.exe).
9. Résumé
- Addon
LifePlay-Sandbox-5.8passé en 5.8 : uproject (5.8, LPAnimCore du jeu 5.8), Target.cs V7 / Unreal5_8, MSVC 14.50.35717 épinglé comme le jeu. - Atelier :
GameRoot=..\LifePlay-master 5.8; 5 .ps1 lisent le moteur par<jeu>\Tools\Engine.ps1(portée vérifiée) ; 3 .bat :LP_ENGINE_ROOTsinon UE 5.8. - Jonction
Content→LifePlay-master 5.8\Contentcréée, ignorée par git. - Jeu 5.8 :
AdditionalPluginDirectories../LifePlay-Sandbox-5.8/Pluginsrétabli au même endroit qu'en 5.5. - 8 C4996 corrigés sous garde
UE_VERSION_OLDER_THAN(5, 8, 0), branche 5.5 intacte ; sémantique identique (GetMaterialRelevance : identique en usage normal). - Critère
git grephors Docs/skills/JSON = 0 ; A/B restantes = 0 ; 2 .uproject valides ; fins de ligne conservées. - Écarts : police W3 gardée identique (pas Roboto) ; README aussi passé au dossier
LifePlay-Sandbox-5.8. - Non compilé ; W6 (addon, 9e C4996) hors fiche, attendu au build.
- Suite : lp-builder doit déplacer
Makefile.bindu jeu 5.8 puis lancerTools\Build.ps1 -Lot U4, état : modifications en place, non commitées, dans les deux dépôts ue5.8.