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 `\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` (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\\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é).