LifePlay-Revival/Docs/Migration/etat/REL/MAPDL1/MAPDL1-E0-INV.md
2026-10-22 21:10:39 +02:00

17 KiB

Fiche MAPDL1-E0 — Niveau N1 — Modèle prévu haiku | utilisé claude-haiku-5-5 — Agent lp-inventory — Skills sk-protocol, lp-paths

MAPDL1-E0-INV : inventaire des Blueprints, de l'API SHA, des dépendances de build (2026-10-22)

Hors gabarit : aucun. Gabarit INV (.claude\skills\lp-doc\gabarits.md, section INV) suivi : 1 commandes, 2 comptes bruts, 3 écarts, 4 établi / estimé / incertain. Note de lecture : Tools\uasset58.py et Tools\ sont dans la copie 5.8 (Tools\uasset58.py présent, Glob). Les chemins Tools\claude\skills\lp-doc\gabarits.md cités par la fiche n'existent pas dans la copie 5.8 (Read : « File does not exist ») ; le gabarit est lu à .claude\skills\lp-doc\gabarits.md (jonction).

1. Commandes exactes

Q1 (Blueprints contenant GetAllFilesFromFolder) :

  • Contrôle de l'outil : python -I -X utf8 "D:/Game/LifePlay-master 5.8/Tools/uasset58.py" strings "D:/Game/LifePlay-master 5.8/Content/UI/CityMenu.uasset" --motif "GetAllFilesFromFolder" (code 0).
  • Grep seul, pour comparaison : Grep GetAllFilesFromFolder sur D:\Game\LifePlay-master 5.8\Content (glob *.uasset), puis sur Content\UI (sans glob, mode count).
  • Scan complet : pwsh -NoProfile -ExecutionPolicy Bypass -File "D:/Game/LifePlay-master 5.8/Saved/MAPDL1/E0/q1-scan.ps1" (script ponctuel écrit par Write dans D:\Game\LifePlay-master 5.8\Saved\MAPDL1\E0\q1-scan.ps1 ; il énumère Content\**\*.uasset hors Content\Heavy\ et Content\Modules\, lance uasset58.py strings --motif "GetAllFilesFromFolder" sur chaque fichier, puis strings --motif "Heavy/StreetMap|StreetMap" sur chaque hit). Sortie : tâche d'arrière-plan bvsj17ox9, fichier <dossier de session>\tasks\bvsj17ox9.output (hors projet).
  • Pour chaque hit, recomptage : Grep ^/Game/Heavy/StreetMap/ (mode count) sur ce fichier de sortie ; Grep Heavy/StreetMap (mode count) sur Content\UI\CityMenu.uasset.

Q2 (Content\UI\City.uasset) :

  • python -I -X utf8 "D:/Game/LifePlay-master 5.8/Tools/uasset58.py" strings "D:/Game/LifePlay-master 5.8/Content/UI/City.uasset" --min 3 --motif "(Installed|Format|Loading)" (code 0)
  • python -I -X utf8 "D:/Game/LifePlay-master 5.8/Tools/uasset58.py" locate "D:/Game/LifePlay-master 5.8/Content/UI/City.uasset" Installed "Not Installed" (code 0)

Q3 (moteur, Core Public) :

  • Grep SHA256 (sensible à la casse), chemin D:\Game\Launcher\Engine\UE_5.8\Engine\Source\Runtime\Core\Public, mode content.
  • Grep FSHA1|FIoHashBuilder|class CORE_API FSHA1|FSHA256Signature|FPlatformMisc\b (glob ciblé).
  • Grep FSHA|SHA1|SHA512|HMAC|Sha1|Sha512|IncrementalSha|Update\(|Final\( sur Core\Public (limite 60 lignes ; bruit de AppendHash/FSHA1 dans Containers et Serialization).
  • Grep class FSHA256|FSHA256|struct FSHA256 sur tout Runtime\Core.
  • Grep ^(struct|class) (CORE_API )?FGenericPlatformMisc sur GenericPlatform\GenericPlatformMisc.h ; Grep FPlatformMisc;|struct FWindowsPlatformMisc|GetSHA256Signature sur Core\Public\Windows.
  • Read GenericPlatform\GenericPlatformMisc.h lignes 318-325 et 1398-1417 ; Read Misc\SecureHash.h lignes 310-350 ; Read IO\IoHash.h lignes 15-60.

Q4 (OpenSSL / libzip) :

  • Read D:\Game\Launcher\Engine\UE_5.8\Engine\Source\ThirdParty\OpenSSL\OpenSSL.Build.cs et ...\ThirdParty\libzip\libzip.Build.cs (entiers).
  • Grep OpenSSL|libzip sur D:\Game\Launcher\Engine\UE_5.8\Engine\Source\Runtime (glob *.Build.cs, mode content, sans limite).
  • Grep libzip sur le même chemin (glob *.Build.cs, mode count).

Q5 (D:\Game\LifePlay-master 5.8\Source\LifePlay\LifePlay.Build.cs) : Read entier (55 lignes).

2. Comptes bruts

Q1 (sorties brutes) :

  • Contrôle de l'outil sur CityMenu : exports 382 contigus=True noms=571 taille=459239 / CallFunc_GetAllFilesFromFolder_Files / CallFunc_GetAllFilesFromFolder_ReturnValue / GetAllFilesFromFolder / EXIT=0.
  • Grep GetAllFilesFromFolder sur Content (glob *.uasset) : No files found. Sur Content\UI (count) : No matches found / Found 0 total occurrences across 0 files. Le Grep ne lit pas les .uasset ici : il ne trouve pas le nom que uasset58.py trouve dans CityMenu.uasset. Grep ne sert donc pas à ce comptage.
  • Scan (q1-scan.ps1), lignes de tête et de synthèse, copiées telles quelles :
    fichiers_uasset_hors_Heavy_Modules=798
    ...
    illisibles=210
    hits_GetAllFilesFromFolder=6
    
  • Les 210 illisibles (ILLISIBLE code=2 …) sont tous sous Content\__ExternalActors__\ (ThirdPersonMap, VehicleExampleMap, VehicleOffroadExampleMap) ou Content\__ExternalObjects__\ (mêmes cartes). Comptage : Grep ^ILLISIBLE code=2 Content\\[^_] sur le fichier de sortie = No matches found (0 hors __).
  • Hits (6), dans l'ordre du scan :
# Fichier (sous Content\) Chaînes StreetMap (strings --motif, code 0) Lecture
1 BPs\GI.uasset /Game/BPs/StreetMap_Static, puis 562 lignes ^/Game/Heavy/StreetMap/… (Grep count, fichier de sortie) dont le sous-dossier /Game/Heavy/StreetMap/Static/… Liste de cartes de villes (noms de cartes, pas de contenu de jeu relevé ici)
2 BPs\Room.uasset /Game/BPs/StreetMap_Static, /Script/StreetMapRuntime, StreetMap, StreetMapBuilding, StreetMapBuilding:Amenity, StreetMapBuilding:Building, StreetMapBuilding:BuildingName, StreetMapBuilding:BuildingPoints, StreetMapStatic, StreetMap_Static_C Aucune chaîne Heavy/StreetMap
3 UI\Builder.uasset aucune ligne (exports 831) Motif absent
4 UI\CharGen.uasset aucune ligne (exports 3600) Motif absent
5 UI\CityMenu.uasset /Game/BPs/StreetMap_Static, /Script/StreetMapRuntime, Heavy/StreetMap (1 ligne, Grep count = 2 lignes binaires), StreetMapBuilding, StreetMapStatic, StreetMap_Static_C, plus une phrase d'infobulle (« The OpenStreetMap data may have a lot of buildings… ») Attendu connu
6 UI\StatMenu.uasset aucune ligne (exports 318) Motif absent

Q2 (sorties brutes) :

exports 101 contigus=True noms=435 taille=251368
CallFunc_Format_ReturnValue
Format
FormatArgumentData
Installed
InstalledText
K2Node_FormatText
Loading, Please Wait ...
Not Installed
SetLoading
EXIT=0

locate :

exports 101 contigus=True noms=435 taille=251368
== Installed : 6
  @136830 export #10 ExecuteUbergraph_City classe=Function +3640/6574
  @139027 export #10 ExecuteUbergraph_City classe=Function +5837/6574
  @164062 export #22 K2Node_CallFunction_0 classe=K2Node_CallFunction +1188/1238
  @201100 export #54 K2Node_FormatText_0 classe=K2Node_FormatText +347/617
  @242145 export #95 InstalledText classe=TextBlock +115/504
  @243189 export #97 InstalledText classe=TextBlock +115/504
== Not Installed : 2
  @242141 export #95 InstalledText classe=TextBlock +111/504
  @243185 export #97 InstalledText classe=TextBlock +111/504
EXIT=0

Q3 (comptes) :

  • Grep SHA256 (Core\Public) : 4 lignes, toutes dans GenericPlatform\GenericPlatformMisc.h (320, 322, 1405, 1414).
  • Grep FSHA|SHA1|…|Final\( (Core\Public) : sortie tronquée à 60 lignes ; visibles : Misc\SecureHash.h:313 (class FSHA1), Misc\SecureHash.h:332/335/345/348 (dans la lecture), Serialization\MemoryLayout.h:322 (HashLayout(…, FSHAHash&)) ; Hash\xxhash.h:214-237 (Update xxHash, non cryptographique) ; IO\IoHash.h:188 (class FIoHashBuilder : public FBlake3).
  • Grep class FSHA256|FSHA256|struct FSHA256 (Runtime\Core) : 3 lignes : Core\Private\GenericPlatform\GenericPlatformMisc.cpp:429 (FSHA256Signature::ToString), …cpp:2019 (FGenericPlatformMisc::GetSHA256Signature), Core\Public\GenericPlatform\GenericPlatformMisc.h:322 (définition de la structure).
  • Grep ^(struct|class) (CORE_API )?FGenericPlatformMisc : 1 ligne, GenericPlatformMisc.h:571 (struct FGenericPlatformMisc).
  • Grep FPlatformMisc;|struct FWindowsPlatformMisc|GetSHA256Signature (Core\Public\Windows) : 2 lignes, Windows\WindowsPlatformMisc.h:113 (struct FWindowsPlatformMisc), Windows\WindowsPlatformMisc.h:414 (typedef FWindowsPlatformMisc FPlatformMisc;). Aucune redéfinition de GetSHA256Signature dans Public\Windows.

Lectures (Read) :

  • GenericPlatformMisc.h:320-322 : /* Holds a computed SHA256 hash. */ / struct FSHA256Signature / uint8 Signature[32];.
  • GenericPlatformMisc.h:1404-1414 : doc « Generates the SHA256 signature of the given data » ; signature exacte, ligne 1414 : static CORE_API bool GetSHA256Signature(const void* Data, uint32 ByteSize, FSHA256Signature& OutSignature);
  • Misc\SecureHash.h:313-348 : class FSHA1 (SHA-1), CORE_API void Reset(); (329), CORE_API void Update(const uint8 *data, uint64 len); (332), template … void Update(const Type& InData) (338), CORE_API void Final(); (345), FSHAHash Finalize() (348).
  • IO\IoHash.h:17-25 : FIoHash = BLAKE3-160 ; « use FIoHashBuilder to hash data in blocks with FIoHashBuilder::Update(Block) followed by FIoHashBuilder::Finalize() » ; IoHash.h:188 class FIoHashBuilder : public FBlake3.

Q4 (comptes) :

  • OpenSSL.Build.cs : version 1.1.1t (ligne 12). Win64 (lignes 33-54) : libssl.lib (ligne 51), libcrypto.lib (ligne 52), crypt32.lib en PublicSystemLibraries (ligne 53). Chemins : Win64\VS<version> (42), config Release ou Debug (17, 49).
  • libzip.Build.cs : version 1.9.2 (ligne 8). Dépendances publiques : OpenSSL (ligne 14), zlib (ligne 15). Win64 : Win64\<WindowsLibDir>\Release\zip.lib (ligne 24). Mac (26-28) et Unix (30-33) hors Win64.
  • Grep OpenSSL|libzip (Runtime, *.Build.cs) : 13 lignes, 9 fichiers :
    Runtime\Experimental\IoStore\HttpClient\IoStoreHttpClient.Build.cs:12  PrivateDependencyModuleNames.Add("OpenSSL");
    Runtime\TraceLog\TraceLog.Build.cs:28                                 PrivateDependencyModuleNames.Add("OpenSSL");
    Runtime\Online\XMPP\XMPP.Build.cs:17,44,46                            (bRequireOpenSSL ; AddEngineThirdPartyPrivateStaticDependencies(Target, "OpenSSL"))
    Runtime\Online\WebSocketServer\WebSocketServer.Build.cs:27            AddEngineThirdPartyPrivateStaticDependencies(… "OpenSSL", "libWebSockets", "zlib")
    Runtime\Online\WebSockets\WebSockets.Build.cs:118                     AddEngineThirdPartyPrivateStaticDependencies(… "OpenSSL", "libWebSockets", "zlib")
    Runtime\RSA\RSA.Build.cs:15                                           PrivateDependencyModuleNames.Add("OpenSSL");
    Runtime\Online\SSL\SSL.Build.cs:45                                    AddEngineThirdPartyPrivateStaticDependencies(Target, "OpenSSL");
    Runtime\Online\HTTP\HTTP.Build.cs:88,183,186                          (bPlatformRequiresOpenSSL ; AddEngineThirdPartyPrivateStaticDependencies(Target, "OpenSSL"))
    Runtime\Online\BuildPatchServices\BuildPatchServices.Build.cs:48,54   (commentaire « OpenSSL is needed on desktop platforms… » ; AddEngineThirdPartyPrivateStaticDependencies(Target, "OpenSSL"))
    
    Total : 13 lignes (sortie complète, head_limit 0).
  • Grep libzip (Runtime, *.Build.cs, mode count) : No matches found / Found 0 total occurrences across 0 files. → 0 module Runtime dépend de libzip dans un *.Build.cs.

Q5 (lignes de LifePlay.Build.cs) :

  • Dépendances publiques : ligne 17 Core, CoreUObject, Engine, InputCore, AssetRegistry ; ligne 28 NavigationSystem ; ligne 45 LPAnimCore.
  • Dépendances privées : ligne 20 ImageWrapper, ApplicationCore ; ligne 23 RHI ; ligne 31 EngineSettings ; ligne 34 Projects ; ligne 38 Slate, SlateCore, UMG ; ligne 41 Chaos.
  • Ligne 15 : PublicIncludePaths.Add(ModuleDirectory) (pas une dépendance). Ligne 48 : Slate/SlateCore en commentaire (inactif).
  • HTTP : absent. Json (et JsonUtilities) : absent. Slate, SlateCore, UMG : présents, tous en privé (ligne 38).

3. Écarts au compte attendu

  • Q1 : attendu connu Content\UI\CityMenu.uasset : confirmé (hit 5). Écarts : 210 fichiers illisibles (code 2) sur 798, tous sous __ExternalActors__ / __ExternalObjects__ ; ces fichiers ne sont donc pas vérifiés. Le Grep natif ne trouve pas le nom dans les .uasset (0 au lieu de 1) : écart d'outil, non de contenu.
  • Q1 : la fiche demande « tous les .uasset » hors Heavy/Modules : 798 lus dont 588 lisibles. Le compte de 798 vient du script (Get-ChildItem -Recurse -Filter *.uasset), pas d'un Glob (le Glob Content/**/*.uasset inclut Heavy : 9074 au total, non filtré).
  • Q2 : la fiche attend « Installed » comme texte comparé au clic. Écart : la chaîne Installed seule n'existe pas comme FText isolé dans la sortie strings ; les occurrences locate de Installed sont des noms (ExecuteUbergraph_City, K2Node_CallFunction_0, InstalledText) et une sous-chaîne de Not Installed (offset +115 = +111 + 4, export 95 et 97).
  • Q3 : aucune API SHA-256 incrémentale trouvée (écart à l'hypothèse de la fiche, qui la supposait possible).
  • Q4 : aucun écart de compte ; libzip n'a aucun dépendant Runtime.
  • Q5 : aucun écart.

4. Établi / estimé / incertain

Établi :

  • Q1 : GI.uasset, Room.uasset, UI\Builder.uasset, UI\CharGen.uasset, UI\CityMenu.uasset, UI\StatMenu.uasset contiennent GetAllFilesFromFolder (6 hits sur 588 fichiers lisibles). Sources : scan q1-scan.ps1, sortie bvsj17ox9.output, lignes 214, 800, 813, 816, 819, 829.
  • Q1 : Heavy/StreetMap (forme exacte) est présent dans CityMenu.uasset seulement parmi les 6 hits ; GI.uasset a /Game/Heavy/StreetMap/… (562 lignes), Room.uasset a StreetMap / StreetMapBuilding / /Game/BPs/StreetMap_Static sans Heavy/.
  • Q2 : textes FText présents : Not Installed (export 95 et 97, TextBlock InstalledText, offset +111), Loading, Please Wait .... Format = K2Node_FormatText (export 54).
  • Q3 : FSHA256Signature (struct, GenericPlatformMisc.h:322), GetSHA256Signature one-shot (GenericPlatformMisc.h:1414), FPlatformMisc = FWindowsPlatformMisc (WindowsPlatformMisc.h:414). SHA-1 incrémental : FSHA1 (SecureHash.h:313-348). BLAKE3 incrémental : FIoHashBuilder (IoHash.h:188). Pas de SHA-256 incrémental dans Public\.
  • Q4 et Q5 : listes ci-dessus, lues dans les fichiers.

Estimé :

  • Q1 : les 210 fichiers __ExternalActors__ / __ExternalObjects__ sont des acteurs externes de cartes d'exemple (nom du dossier) ; leur contenu n'a pas été lu.
  • Q3 : GetSHA256Signature (Core\Private .cpp:2019) est une implémentation générique ; son corps n'a pas été lu, donc la plateforme Windows sous-jacente (CNG ou OpenSSL) est inconnue.
  • Q2 : le texte comparé au clic est probablement Not Installed / Installed, par la logique de l'ExecuteUbergraph_City ; non établi.

Incertain :

  • Q1 : absence de GetAllFilesFromFolder dans les 210 fichiers illisibles : non vérifiée (essai qui trancherait : ouvrir uasset58.py sur un de ces fichiers pour voir la cause du code 2, ou lire les .uasset externes par un autre outil).
  • Q1 : les hits GI.uasset et Room.uasset sont dans Content\BPs\ ; leur rôle n'est pas lu (hors fiche).
  • Q2 : quel FText est comparé au clic (aucun nœud de comparaison n'a été décodé ; un locate sur K2Node_ pins ou Equal serait nécessaire).
  • Q3 : Runtime\Core\Public ne contient pas de SHA-256 incrémental ; la recherche n'a pas couvert Core\Private (hors demande) ni les modules Developer/ ; la sortie Update(/Final( a été tronquée à 60 lignes (ajouts head_limit), donc un Update SHA-256 sous un autre nom est peu probable mais non exclu.
  • Q4 : Runtime\**\*.Build.cs seulement ; les .cpp ou Developer non couverts (demande : Runtime).
  • Q4 : lignes XMPP, HTTP, WebSockets, BuildPatchServices conditionnelles : les conditions ne sont pas relues (AddEngineThirdPartyPrivateStaticDependencies ne prouve que l'appel, pas la liaison effective).

Fichiers à commiter

  • A Docs/Migration/etat/REL/MAPDL1/MAPDL1-E0-INV.md (ce livrable ; dépôt jeu, etat/ suivi en texte).
  • Hors git (ignoré par .gitignore, Saved/) : Saved/MAPDL1/E0/q1-scan.ps1 (script ponctuel, à garder dans le lot).
  • Aucun autre fichier écrit.

Constats

  • Résultat : partiel (Q2 et Q3 établies ; Q1 établie pour 588 fichiers sur 798, 210 illisibles ; Q4 et Q5 établies).
  • Grep (outil) ne cherche pas le nom de fonction dans les .uasset : pour un recensement de Blueprints, utiliser uasset58.py strings --motif (écart constaté : 0 au Grep, 1 au uasset58.py sur CityMenu.uasset).
  • Chemin Tools\claude\skills\lp-doc\gabarits.md de la fiche : absent ; gabarit lu à .claude\skills\lp-doc\gabarits.md.
  • À verser : lp-paths § Pièges de poste — « Grep ne lit pas les .uasset (0 hit sur CityMenu) ; passer par Tools\uasset58.py » (skill à recevoir : lp-paths). Aucune autre ligne à verser.
  • Suite : orchestrateur doit décider si les 210 __ExternalActors__/__ExternalObjects__ sont à lire avec un autre outil, état : non vérifiés.

Tours : 16 / 25 (décompte de l'agent, hors écriture du livrable ; FicheStats non relancé).