Fiche OBA-T23-PROJ — Niveau N3 — Modèle prévu modèle de l'agent lp-cart | utilisé Opus 5.5 (claude-opus-5-5) — Agent lp-cart — Skills sk-protocol, lp-paths, ue-cpp-build, lp-commandlets # OBA-T23-PROJ-CART : plugins du dépôt et de l'addon, `.git` de Content\Modules embarqué dans les builds 5.8 (2026-10-09) Lecture seule : aucun fichier modifié hors ce livrable, ni UE ni UAT lancé, aucun commit. Dépôt Modules : seuls les noms de références, les comptes, les tailles et les dates ont été lus (aucun message de commit, aucun contenu). Dates de fichiers en heure locale (UTC+2) ; horodatages des manifestes UAT en UTC (suffixe `Z`). ## 1. Objet et périmètre Domaine « projet » du lot OBA : (a) comment `Content\Modules\.git` (450 763 872 o, 142 fichiers) entre dans les builds 5.8 et pas dans les builds 5.5, et quelle règle l'exclurait ; (b) les plugins du dépôt (StreetMap, ModdingExtra, LPAnimCore, McpAutomationBridge, HyperAIStudio) et de l'addon (LPSandbox), soit les 6 lignes `source=depot|addon` de `OBA-T1-plugins.csv` (l. 126, 150, 151, 156, 169, 244), évalués selon la grille O3 (`30_Projet_Audit_Obsolescence.md:37`). Copies : `D:\Game\LifePlay-master 5.8` (ue5.8), `D:\Game\LifePlay-master 5.5` (main), addon `D:\Game\LifePlay-Sandbox-5.8`. Hors périmètre : l'audit détaillé de HyperAIStudio (fiche OBA-T23-EDIT) et les dépréciations C++ (fiche OBA-T23-CODE). ## 2. Commandes et lectures (exactes) avec compte brut Environnement vérifié : moteurs `D:\Game\Launcher\Engine\UE_5.5` et `UE_5.8` présents, avec les sources AutomationTool (Glob de `CopyBuildToStagingDirectory.Automation.cs` : 1 résultat par moteur) ; addon 5.8 présent (1 `.uplugin`). | # | Commande ou lecture | Compte brut | |---|---|---| | C1 | `pwsh` : `Get-Item` + `Get-ChildItem -Recurse -File -Force` sur `\Content\Modules` et `\.git` (copies 5.5, 5.8, 4.27) | 5.5 et 5.8 : `Modules` dossier ordinaire (`LinkType` vide) ; `.git` `Hidden, Directory`, `Created=2026-10-07T20:26:39.6364479`, 142 fichiers, 450 763 872 o. 4.27 : `.git` absent | | C2 | `pwsh` : pour chaque `D:\Game\LifePlay_Build_*`, mesure de `Content\Modules` et de `Content\Modules\.git` | 7 builds 4.27/5.5 : `.git` absent (DC4 2 053 fichiers / 14 987 403 o ; V1.5 1 426 / 12 928 932 ; AP7 2 168 / 35 077 499). 7 builds 5.8 : `Modules` 2 195 fichiers / 465 751 275 o dont `.git` 142 / 450 763 872 o. `Shipping_U8_PDB` : pas de `Content\Modules` | | C3 | `pwsh` : `CreationTime` du dossier de build, de `Content\Modules` et `LastWriteTime` de l'exe | voir tableau § 3 A3 | | C4 | `git -C "…5.5\Content\Modules"` : `remote -v`, `rev-list --all --count`, `log --all --reverse --format='%ai \| %ci'` (1re et dernière ligne), `count-objects -v`, `branch -a`, `rev-parse --is-shallow-repository`, `rev-parse --short HEAD` ; idem copie 5.8 | remotes 0 ; 115 commits ; 1re date auteur `2018-01-05 00:40:51 +0700` ; dernière `2026-10-07 15:49:08 +0200` ; `in-pack: 14063`, `size-pack: 439864` (Kio), 115 objets libres ; 1 branche ; non superficiel ; HEAD `ade587f`. Copie 5.8 : 115, `ade587f`, `size-pack: 439864` | | C5 | Grep `DirectoriesToAlwaysStage…` dans `Config\` des deux copies | 5.8 `DefaultGame.ini:74`, 5.5 `DefaultGame.ini:71` : `+DirectoriesToAlwaysStageAsNonUFS=(Path="Modules")` ; aucun `DirectoriesToAlwaysStageAsUFS`, aucun `StagingExclude` | | C6 | Grep et Read dans les sources UAT 5.5 et 5.8 (`CopyBuildToStagingDirectory.Automation.cs`, `AutomationUtils\DeploymentContext.cs`) | voir § 3 A2 | | C7 | `pwsh` : listage de `D:\Game\LifePlay-master 5.8\Releases` et recompte de `2026.10.2.0` | 1 dossier `2026.10.2.0` ; 5 fichiers, 1 294 248 283 o ; chemins contenant `\.git\` : 0 ; dossiers `.git` : 0 | | C8 | `7z l -slt` sur `LifePlay_Revival_V1.5_Windows_Game.7z` et `…V1.4_Windows_Game.7z`, comptes `awk` des lignes `Path =` | V1.5 : 1 596 entrées, 0 `.git`, 1 530 sous `Content\Modules` ; V1.4 : 1 613, 0, 1 539 (code de sortie 0) | | C9 | `git -C tag --format='%(refname:short) %(creatordate:iso)'` (jeu, deux copies) | `v1.0` 2026-09-30 … `v1.5` 2026-10-03 11:19:49 ; `lot-VQ0-avant` 2026-10-07 20:24:40 ; aucun tag 5.8 de publication | | C10 | `git -C …\Content\Modules reflog --date=iso --format='%gd %gs'` (dates et type d'entrée seulement) | 2 entrées : `clone:` à `2026-10-07 20:24:23` ; `filter-branch:` horodatée `2026-10-07 15:49:08` | | C11 | Modules : `for-each-ref --format='%(refname)'` ; `rev-list --count HEAD`, `--all`, `--all --reflog` ; jeu : `rev-list --all --count`, `count-objects -v` ; `cat-file -t a83ea56` dans les deux dépôts ; `merge-base --is-ancestor a83ea56 HEAD` ; jeu : `log --all -1 -- Content/Modules`, `ls-files Content/Modules` ; Modules : `rev-list --objects HEAD` et `--all --reflog` comptés | 1 réf. (`refs/heads/main`) ; 115 / 115 / **428** commits ; jeu 731 commits, `in-pack: 15306`, `size-pack: 429198` ; `a83ea56` = commit dans **les deux** dépôts, non ancêtre de HEAD dans Modules ; dernier commit du jeu touchant `Content/Modules` : `69f975c 2026-10-03 10:14:37` ; 0 fichier suivi ; objets 6 607 (HEAD) contre 14 172 (reflog compris) | | C12 | `git rev-list --objects \| cut -d' ' -f1 \| git cat-file --batch-check='%(objectsize:disk)'`, somme `awk` (1er essai sans `cut` : `+inf`, sortie invalide, refait) | HEAD : **10 238 344 o** ; reflog compris : **450 046 383 o** | | C13 | `find "$M" -maxdepth 1` (comptes seulement) | racine de `Content\Modules` : 21 fichiers (21 `.txt`), 17 dossiers hors `.git` ; pas de `.gitignore` propre | | C14 | Grep `Modules[\\/]\.git[\\/]` (count) dans `Manifest_NonUFSFiles_Win64.txt` de Shipping_U8 et de DC4 | Shipping_U8 : **142** ; DC4 : **0** ; lignes 175-177 : `…/.git/objects/pack/pack-e259cb6b….{idx,pack,rev} 2026-10-07T18:24:23.2xxZ` | | C15 | `git log -S'DirectoriesToAlwaysStageAsNonUFS' -- Config/DefaultGame.ini` (deux copies) ; `git diff -U0 main ue5.8 -- Config/DefaultGame.ini` | `1122e17 2026-09-29 00:56:10 L0 : etat initial du projet 5.5…` dans les deux ; diff : 5 insertions, 2 suppressions (`ProjectVersion`, `StagingDirectory`, `bUseZenStore=False` + 2 commentaires), aucune ligne de staging | | C16 | Read `Tools\SplitModules.ps1`, `Tools\BuildDebug.ps1` ; Grep `Releases\|Content[\\/]Modules\|\.git\|robocopy\|-Exclude` dans `Tools\*.{ps1,py,bat,cmd,psm1}` ; Grep `BuildCookRun\|archivedirectory\|createreleaseversion` dans `Tools\` et `etat\U58\U8` | 1 seul `BuildCookRun` dans `Tools` (`BuildDebug.ps1:52`) ; aucun filtre `.git` ni `robocopy` ; U8 lance UAT directement (`U8-T4-BUILD.md:9`) | | C17 | Glob `Plugins/**/*.uplugin` (copie 5.8, copie 5.5, addon 5.8) ; Read des 5 `.uplugin` + Grep des champs de `HyperAIStudio.uplugin` ; Read `LifePlay.uproject` (5.8) | 5.8 : 5 ; 5.5 : 4 (pas de `Marketplace`) ; addon : 1 | | C18 | Grep (count puis content) des noms de plugins et modules dans `Source\` (5.8) ; Grep dans `Config\` ; Grep `.gitignore` | `Source` : 58 occurrences dans 13 fichiers ; `Config` : 1 (`DefaultGame.ini:76`) | | C19 | `git ls-files Plugins/

` ; `git status --porcelain --ignored Plugins/

` ; `ls Binaries/Win64/*.dll` ; `git check-ignore -v` | voir § 3 B ; addon `Plugins/LPSandbox` : 66 fichiers suivis, HEAD `ec23fad 2026-10-09 18:58:19` | | C20 | `git grep -l --text -F -- Content` (assets **suivis** seulement, 292 `.uasset/.umap`) ; `ls -R Content/Heavy/StreetMap` compté | `ModdingExtraBPLibrary` 12 ; `StreetMapRuntime` 30 ; `/Script/LPAnimCore`, `/Script/LPSandbox`, `/Script/LPAnimMeasure`, `McpAutomationBridge`, `HyperAIStudio` : 0 ; fonctions `LoadTxt` 9, `SaveTxt` 4, `GetAllFilesFromFolder` 6, `ContentDirectory` 4, `GetAllSubfolders` 0, `IsPointInsidePolygon` 0, `ModdingExtraSampleFunction` 0 ; `Heavy/StreetMap` : 560 assets sur disque | | C21 | Grep dans `Manifest_UFSFiles_Win64.txt` (Shipping_U8), `Binaries\Win64\LifePlay-Win64-Shipping.target`, `Intermediate\Build\Win64\x64\LifePlay\Shipping\LifePlay-Win64-Shipping.exe.rsp` ; `find` des plugins cuits | voir § 3 B ; plugins cuits : 2 fichiers (`StreetMap/Content/StreetMapDefaultMaterial.uasset/.uexp`) | Méthodes en échec (0 résultat = échec de méthode, non pris comme absence) : Grep outil sur `Content\*.uasset` (0, fichiers binaires ignorés ; remplacé par C20) ; Grep outil sur `LifePlay-Win64-Shipping.exe` (0 pour `LPAnimMeasure` **et** pour le témoin `LPAnimCore`, forcément lié : non concluant ; remplacé par le `.rsp`, C21) ; Grep `Module\.LPAnimMeasure` dans `Saved\Logs\portage\*Ship*.log` (0 : aucun journal de compilation Shipping complète conservé sous ce nom). ## 3. Constats `fichier:ligne` ### A. `Content\Modules\.git` dans les builds 5.8 **A1. La règle qui copie `Content\Modules` est la même dans les deux branches, depuis L0.** `Config/DefaultGame.ini:74` (5.8) et `:71` (5.5), section `[/Script/UnrealEd.ProjectPackagingSettings]` (`:12`) : `+DirectoriesToAlwaysStageAsNonUFS=(Path="Modules")`. Introduite par `1122e17` (2026-09-29, « L0 : etat initial »), donc héritée du projet d'origine ; `git diff main ue5.8 -- Config/DefaultGame.ini` ne touche aucune ligne de staging (C15). **A2. UAT copie tout le dossier, y compris les dossiers cachés, et le code est identique en 5.5 et en 5.8.** - 5.8 `CopyBuildToStagingDirectory.Automation.cs:2056` → `StageAdditionalDirectoriesFromConfig` (`:817-857`), branche NonUFS `:852` : `SC.StageFiles(StagedFileType.NonUFS, InputDir, StageFilesSearch.AllDirectories, OutputDir);` (la seule vérification est `Directory.Exists`, `:838`). 5.5 : `:1512`, `:779-819`, `:814`, à l'identique. - Récursion : `DeploymentContext.cs` 5.8 `:784-790`, 5.5 `:749-755` : un sous-dossier n'est écarté que s'il figure dans `RestrictedFolderNames`, c'est-à-dire noms de plateformes + `RestrictedFolder.GetNames()` (5.8 `:581-587`, 5.5 `:561-567`). Aucun filtre sur l'attribut caché ni sur `.git`. - Clés `[Staging]` lues (5.8 `:594-646`, 5.5 `:574-622`) : `RemapDirectories`, `AllowedDirectories`, `DisallowedLocalizationTargets`, `AllowedConfigFiles`, `DisallowedConfigFiles`, `ExtraAllowedFiles`. **Aucune clé n'exclut un sous-dossier d'un répertoire NonUFS.** `RestrictedFolder` est défini dans le code (`UnrealBuildTool\System\RestrictedFolders.cs`, accesseur `GetNames()` `:146`), pas dans une configuration du projet. **A3. La différence entre 5.5 et 5.8 tient à la date : le `.git` a été créé après le dernier build 5.5.** | Build | `Content\Modules` créé | `.git` dans le build | |---|---|---| | `LifePlay_Build_5.5_Shipping_V1.5` | 2026-10-03 10:51:07 | absent | | `LifePlay_Build_5.5_Shipping_AP7` | 2026-10-07 02:33:32 | absent | | `LifePlay_Build_5.5_DC4` (dernier build 5.5) | **2026-10-07 20:17:04** | absent | | **création de `Content\Modules\.git` (copies 5.5 et 5.8)** | **2026-10-07 20:26:39** (C1) | — | | `LifePlay_Build_5.8_Development` | 2026-10-08 22:17:59 | 142 fichiers, 450 763 872 o | | `LifePlay_Build_5.8_U7d` | 2026-10-09 10:20:00 | idem | | `LifePlay_Build_5.8_Shipping_V2.0` | 2026-10-09 10:39:08 | idem | | `LifePlay_Build_5.8_Shipping_U8` / `_essai` | 2026-10-09 18:12:23 / 18:16:09 | idem | | `LifePlay_Build_5.8_Development_U8` / `_essai` | 2026-10-09 18:19:42 / 18:23:46 | idem | Hors `.git`, le contenu des builds 5.8 égale celui de DC4 : 2 195 − 142 = 2 053 fichiers et 465 751 275 − 450 763 872 = 14 987 403 o, soit exactement les valeurs de DC4 (C2). **A4. C'est bien UAT qui le copie.** `Windows\Manifest_NonUFSFiles_Win64.txt` (écrit par la mise en scène) liste 142 fichiers `Modules/.git/` dans Shipping_U8, 0 dans DC4 (C14). Le pack porte l'horodatage `2026-10-07T18:24:23Z` (= 20:24:23 locale, `Manifest_NonUFSFiles_Win64.txt:175-177`), qui correspond à l'entrée `clone` du reflog (C10). **A5. Origine et contenu du dépôt Modules (métadonnées seulement).** - `.gitignore:76-77` : `# PUB2 (2026-10-07) : depot public sans contenu sexuel ; modules de jeu dans un depot local separe (Content/Modules/.git)` puis `/Content/Modules/`. Le dépôt du jeu ne suit plus aucun fichier sous `Content/Modules` (0 fichier ; dernier commit qui y touche : `69f975c`, 2026-10-03 10:14:37) (C11). - Dépôt Modules : aucun remote, une seule référence (`refs/heads/main`), 115 commits depuis HEAD (1re date auteur 2018-01-05). Le reflog compte 2 entrées : `clone` (2026-10-07 20:24:23) puis `filter-branch` (C10). - Poids : les objets atteignables depuis HEAD occupent **10 238 344 o** sur disque ; reflog compris, **450 046 383 o** (C12). Les 97,7 % restants (439 808 039 o, 313 commits, 7 565 objets) ne sont retenus que par le reflog. Le pack (439 864 Kio) a la taille de celui du dépôt du jeu (429 198 Kio), et le commit `a83ea56` du jeu (cité par CHG-097, `Journal_Modifications.md:1073`) existe dans les objets de Modules sans être ancêtre de HEAD (C11). **A6. Hypothèses classées.** | # | Hypothèse | Verdict | Preuve | |---|---|---|---| | H1 | Chronologie : `.git` créé le 2026-10-07 à 20:26:39, après le dernier build 5.5 (DC4, 20:17:04) ; tout build fait depuis le copie | **retenue** | A1-A4 | | H2 | Configuration de staging différente entre 5.5 et 5.8 | réfutée | règle identique (A1), diff sans ligne de staging (C15) | | H3 | UAT 5.5 filtre les dossiers cachés, UAT 5.8 non | réfutée par lecture | code identique (A2) ; reste à exclure seulement un écart de comportement du runtime .NET (improbable, non testé) | | H4 | `Content\Modules` est une jonction différente selon la copie | réfutée | `LinkType` vide dans les deux copies (C1) | **A7. Aucun build distribué n'est touché.** - Archives publiées : `LifePlay_Revival_V1.4_Windows_Game.7z` et `…V1.5…` : 0 entrée `.git` sur 1 613 et 1 596 (C8) ; tags `v1.0` à `v1.5` posés entre le 2026-09-30 et le 2026-10-03 (C9), donc avant le 2026-10-07. - 2026.10.2.0 n'a pas été publié : commit `f90eec1` (« U8 : reprise partielle T2-T5 sans publication, reference 2026.10.2.0 gardee ») ; `etat\U58\U8\U8-SUIVI.md:15` (« aucune publication »). - `Releases\2026.10.2.0` (C7) : `Windows\AssetRegistry.bin` 4 569 308, `Windows\Metadata\DevelopmentAssetRegistry.bin` 8 611 567, `LifePlay-Windows.pak` 20 216 202, `.ucas` 1 259 275 600, `.utoc` 1 575 606 o (créés le 2026-10-09 entre 10:38:24 et 10:38:38). C'est le dossier de référence produit par `-createreleaseversion` (conteneurs cuits + registre d'assets, pour les correctifs et les mods), pas une copie du jeu. Il est exempt parce que **les fichiers NonUFS n'y vont jamais**, pas grâce à un filtre (voir § 4). Même minute que `Shipping_V2.0` (dossier créé à 10:38:28) ; `U8-T4-BUILD.md:43` le rattache à U7-T14. - Builds locaux concernés (non distribués) : `5.8_Development`, `5.8_U7d`, `5.8_Shipping_V2.0`, `5.8_Shipping_U8`, `5.8_Development_U8`, ainsi que les copies `_essai`. **A8. Une publication par `SplitModules.ps1` garderait le `.git`.** `Tools\SplitModules.ps1:47` appelle `Get-ChildItem $modules -Directory` sans `-Force` et ne retient que les dossiers qui ont un `.lpmod`. Le `.git` caché n'est donc ni listé ni déplacé, et resterait dans le build publié. `Tools\BuildDebug.ps1:52` (seul `BuildCookRun` de `Tools`) ne filtre rien non plus. **A9. Coût** : 450 763 872 o, soit 22,3 % du Shipping (`OBA-T4-INV.md:46,54`). **A10. Règles d'exclusion possibles (aucune n'est appliquée ici).** Aucune ne s'écrit en `.ini` : UAT 5.5/5.8 n'a pas de clé pour exclure un sous-dossier NonUFS (A2). | # | Règle | Où elle s'écrit | Effet / limite | |---|---|---|---| | P1 (structurelle, minimale côté staging) | Sortir le dossier git de l'arbre mis en scène. Variante a : `git init --separate-git-dir=` dans `Content\Modules` (le `.git` devient un fichier texte d'environ 60 o qui contient un chemin local et reste copié). Variante b : dépôt hors de l'arbre avec `core.worktree` = `Content\Modules`, sans aucune entrée `.git` | config du dépôt Modules (non suivie) dans chaque copie (5.5 et 5.8) ; mise à jour de `lp-paths` (ligne « Modules ») et du commentaire `.gitignore:76` | supprime les 450 Mo à la source pour tout moteur et tout script ; la variante b oblige à remplacer `git -C Content\Modules` par `--git-dir/--work-tree` dans les skills et les scripts | | P2 (garde-fou) | Refuser (`throw`) un build qui contient `Windows\LifePlay\Content\Modules\.git`, ou le déplacer vers une sauvegarde après l'archivage (`sk-change-safety`) | `Tools\SplitModules.ps1` après `:37` ; `Tools\BuildDebug.ps1` après `:60` ; consigne des fiches qui lancent UAT directement (cas U8, `U8-T4-BUILD.md:9`) | ne protège que les chemins qui passent par ces scripts | | P3 (poids seulement) | `git reflog expire --expire=now --all` puis `git gc --prune=now` dans le dépôt Modules | dépôt Modules | `.git` estimé à environ 10 Mo (C12) mais toujours copié ; perte irréversible des objets retenus par le reflog (à vérifier d'abord qu'ils sont tous dans le dépôt du jeu, point 5.2) | | P4 (rejetée) | Remplacer `(Path="Modules")` par 17 entrées, une par sous-dossier | `Config/DefaultGame.ini:74` | perd les 21 `.txt` de la racine (la règle ne prend que des dossiers, 5.8 `:838`) et demande une ligne par nouveau module | Recommandation (la décision revient à l'utilisateur) : P1 et P2 ensemble. ### B. Plugins du dépôt et de l'addon (grille O3) | Plugin | Origine, suivi git | `.uplugin` (version ; modules : type : phase) | Activation | Usage prouvé | Dans le Shipping 5.8 | État 5.8 | Service | Action proposée | Risque | |---|---|---|---|---|---|---|---|---|---| | **StreetMap** | dépôt (tiers, Mike Fricker / ue4plugins) ; 34 fichiers suivis dont 28 `.cpp/.h` ; `Binaries` ignorés `.gitignore:19-20` | `StreetMap.uplugin:3-4` 1 / « 1.0 » ; `:13` `EnabledByDefault` ; `:17-30` `StreetMapRuntime` Runtime Default, `StreetMapImporting` Editor Default | `LifePlay.uproject:41-44` | 30 assets suivis citent `StreetMapRuntime` ; 560 assets sous `Content/Heavy/StreetMap` ; `LPDataCompat.cpp:274-275` (`/Game/Heavy/StreetMap/…/CentralLondon`) ; `LifePlayEditorTools.Build.cs:31-32` (commandlet `LPCheckStreetMap`) ; `LPDebugSubsystem.cpp:190,254` ; `LPDirectControlSubsystem.cpp:388` | oui : `LifePlay-Win64-Shipping.exe.rsp:1095` ; manifeste UFS `:963`, `:5306-5307` (`StreetMapDefaultMaterial`) ; `CentralLondon.uexp` cuit 137,3 Mo (`OBA-T4-INV.md:67`) | compile et se lie (U8) ; avertissements C4996 connus selon `lp-ue-compat`, non relus ici | oui (carte de la ville) | **garder** ; dépréciations à traiter par OBA-T23-CODE | élevé en cas de retrait | | **ModdingExtra** | dépôt (Vinfamy) ; 8 fichiers suivis ; `Binaries` ignorés `.gitignore:21-22` | `ModdingExtra.uplugin:3-4` 1 / « 1.0 » ; `:16-22` `ModdingExtra` Runtime PreLoadingScreen ; contient `Private/LPDataCache.{h,cpp}` | `LifePlay.uproject:37-40` | `ModdingExtraBPLibrary` dans 12 assets suivis : `LoadTxt` 9, `GetAllFilesFromFolder` 6, `SaveTxt` 4, `ContentDirectory` 4 ; `GetAllSubfolders`, `IsPointInsidePolygon`, `ModdingExtraSampleFunction` : 0 (assets suivis seulement) ; `LPSessionLogSubsystem.cpp:498` | oui : `.rsp:947` ; manifeste UFS `:962` | compile (U8) ; `LPDataCache` figure parmi les ruptures 5.8 de `lp-ue-compat` (non relu) | oui : lecture et écriture des modules texte de `Content/Modules`, au cœur du système de modules | **garder** ; corriger : retirer `ModdingExtraSampleFunction` (reste de gabarit) après vérification des assets non suivis | critique en cas de retrait | | **LPAnimCore** | dépôt (LifePlay) ; 7 fichiers suivis | `LPAnimCore.uplugin:4` « 1.0.0 » ; `:11-19` `LPAnimCore` Runtime PreDefault, Win64 | `LifePlay.uproject:22-28` | `LifePlay.Build.cs:43-45` (`PublicDependencyModuleNames.Add("LPAnimCore")`) ; dépendance de l'addon (`LPSandbox.uplugin:15-20`) ; aucun asset (C++ seul) | oui : `.rsp:686` ; manifeste UFS `:960` | compile (U8) | oui (`LPAnimRedirect`, `LPCoupleSim`, `LPAnimCore.uplugin:6`) | **garder** | élevé | | **McpAutomationBridge** | dépôt sur disque, **non suivi** (`.gitignore:41`) ; présent dans les deux copies ; 2 DLL dans `Binaries\Win64` | `McpAutomationBridge.uplugin:3-4` 600 / « 0.6.0-beta-b » ; `:14-16` bêta + expérimental + `EnabledByDefault` ; `:18-39` 2 modules Editor Default ; `:40-216` 36 dépendances, dont `PythonScriptPlugin`, `GameplayAbilities` et `SmartObjects` non optionnels | `LifePlay.uproject:49-56` `Enabled: false`, `Optional`, `TargetAllowList: ["Editor"]` | 0 référence dans `Source` et dans les assets suivis ; reste une section `Config/DefaultGame.ini:76-79` (`bEnableNativeMCP=True`, `NativeMCPPort=3000`, `bLoadAllToolsOnStart=True`) | non (0 ligne au manifeste UFS) | désactivé depuis D4 | non | **retirer** (remplacé par le MCP d'Epic `ModelContextProtocol`, `29_Projet_Stabilisation_V2.md:188-192`, `30_…:65-68`) : déplacer le dossier vers une sauvegarde, retirer l'entrée `.uproject` et la section `.ini` ; décision G-STM / G-OB | faible (désactivé, 0 référence) | | **HyperAIStudio** | Fab, `Plugins/Marketplace`, copie 5.8 seulement ; ignoré **localement** par `.git/info/exclude:15` (absent de `.gitignore`) ; 25 DLL | `HyperAIStudio.uplugin:3-4` 101 / « 1.0.1 » ; `:13` `EngineVersion 5.8.0` ; `:15` `Installed: true` ; 25 modules Editor (`OBA-T1-plugins.csv:126`) | absent du `.uproject` (actif par défaut comme plugin de projet : estimé) | `LifePlayEditorTools.cpp:10-14` et `LifePlayEditorTools.Build.cs:41` (préchargement d'`AutomationController`, lot STM) ; 0 asset | non (0 ligne au manifeste UFS) | installé pour 5.8 | partiel (diagnostic MCP, doc 29 `:188`) | hors périmètre détaillé → **OBA-T23-EDIT** | — | | **LPSandbox** (addon privé) | `D:\Game\LifePlay-Sandbox-5.8`, 66 fichiers suivis (HEAD `ec23fad`) ; chargé par `LifePlay.uproject:317-319` (`AdditionalPluginDirectories: ../LifePlay-Sandbox-5.8/Plugins`) | `LPSandbox.uplugin:4` « 0.1.0 », `:10` bêta ; `:22-29` `LPSandbox` Runtime, exclu du Shipping (`TargetConfigurationDenyList`) ; `:30-34` **`LPAnimMeasure` Runtime sans exclusion** ; `:35-39` `LPModTools` Editor | `LifePlay.uproject:29-36` `Enabled`, `Optional`, Win64 | 0 asset du jeu ; sert à la sandbox, à la mesure d'animation et aux commandlets de l'atelier (`lp-commandlets`) | **oui, partiellement** : `.rsp:915` lie `Intermediate/External/Build/Win64/x64/UnrealGame/Shipping/LPAnimMeasure/Module.LPAnimMeasure.cpp.obj` ; reçu `LifePlay-Win64-Shipping.target:3924` (chemin `D:\Game\LifePlay-Sandbox-5.8\…\LPSandbox.uplugin`) et `:4084` ; manifeste UFS `:958` `RemappedPlugins/LPSandbox/LPSandbox.uplugin` (descripteur privé dans le pak) | compile (U8) | oui en développement, non en jeu | **garder** pour le développement ; **corriger** : sortir l'addon des builds Shipping (exclure `LPAnimMeasure` du Shipping dans l'addon, ou exclure le plugin de la configuration Shipping au `.uproject`, ou empaqueter sans l'addon comme DC4) ; décision utilisateur | confidentialité de l'addon privé dans un build public | ## 4. Établi / estimé / incertain **Établi** : - La règle `+DirectoriesToAlwaysStageAsNonUFS=(Path="Modules")` existe depuis L0 et est identique dans les deux branches. UAT 5.5 et 5.8 copient tout son contenu, dossiers cachés compris (le code est le même), et aucune clé `.ini` ne permet d'en exclure un sous-dossier (A1, A2). - Le `.git` est apparu le 2026-10-07 à 20:26:39, 9 min après la mise en scène de DC4 (dernier build 5.5). Tous les builds 5.8, postérieurs, le contiennent, et le manifeste NonUFS d'UAT le prouve (142 fichiers contre 0) (A3, A4). - 97,7 % du poids du `.git` (439 808 039 o) ne tient qu'au reflog `clone` / `filter-branch` ; depuis HEAD, il ne reste que 10 238 344 o (A5). - Aucune archive publiée ne contient de `.git` (V1.4, V1.5 : 0 entrée). 2026.10.2.0 n'est pas publié. `Releases\2026.10.2.0` ne compte que 5 fichiers, sans `.git` (A7). - `SplitModules.ps1:47` laisserait le `.git` dans un build publié (A8). - Plugins : usages, présence au Shipping et activation selon le tableau B. L'exe Shipping lie `LPAnimMeasure`, un module de l'addon privé (`.rsp:915`), et le pak contient `RemappedPlugins/LPSandbox/LPSandbox.uplugin`. **Estimé** : - Le dépôt Modules a été créé par le lot PUB2 en clonant le dépôt du jeu puis en lançant `filter-branch` pour ne garder que `Content/Modules`, sans `reflog expire` ni `gc` : son `.git` garde donc l'historique complet du jeu, et non seulement celui des modules. Indices : entrées `clone` / `filter-branch`, `a83ea56` commun aux deux dépôts, packs de même taille, `.gitignore:76`. - Un build 5.5 fait aujourd'hui depuis la copie 5.5 contiendrait aussi le `.git` (même règle, même code, `.git` présent). - `Releases\2026.10.2.0` vient de `-createreleaseversion`, qui n'enregistre que les conteneurs cuits et le registre d'assets ; aucun filtre n'est en cause. - HyperAIStudio est actif par défaut comme plugin de projet (pas de champ `EnabledByDefault`, pas d'entrée au `.uproject`). **Incertain** : - Écart de comportement du runtime .NET entre UAT 5.5 et 5.8 sur l'énumération des dossiers cachés. Pour trancher : une mise en scène 5.5 avec le `.git` présent (interdite ici). - Le code source de V1.5 (publié) liait-il déjà `LPAnimMeasure` et embarquait-il le descripteur LPSandbox ? Non vérifié (point 5.3). - Avertissements C4996 de StreetMap et rupture `LPDataCache` en 5.8 : cités de `lp-ue-compat`, non relus ici. - Usage des fonctions de ModdingExtra dans les assets **non suivis** (`Content/Heavy` et autres) : non couvert par `git grep`. ## 5. Points à confirmer (repris par la fiche suivante) 1. H1 par l'essai : mise en scène à blanc d'un build 5.5 avec le `.git` présent, ou relecture d'un manifeste NonUFS 5.5 postérieur au 2026-10-07 20:26 s'il en existe un. 2. Avant P3 : vérifier que tous les commits retenus par le reflog de Modules (428 − 115 = 313) existent dans le dépôt du jeu (`git rev-list --all --reflog` côté Modules, puis `git cat-file -e` côté jeu). 3. Build publié V1.5 : lister le pak (UnrealPak `-List`, lecture seule) pour `RemappedPlugins/LPSandbox` et relire le `.rsp` Shipping 5.5 de la copie `main`, s'il existe encore, pour `LPAnimMeasure`. 4. Pour la variante P2 « déplacer » : comportement de `BuildCookRun -skipstage -archive`, non vérifié. 5. Exclusion de LPSandbox du Shipping : vérifier dans `PluginReferenceDescriptor` (5.8) que l'entrée `.uproject` accepte `TargetConfigurationDenyList`, ou retenir l'exclusion par module dans `LPSandbox.uplugin`. 6. C4996 de StreetMap et `LPDataCache` en 5.8 : fiche OBA-T23-CODE. 7. Recherche des fonctions de ModdingExtra dans les assets non suivis : `LPDumpFunction`, ou MCP en lecture. 8. Écart OBA-T1 : `OBA-T1-plugins.csv:151` donne LPSandbox `monte_jeu=non`, alors que `LPAnimMeasure` est lié dans le Shipping (`.rsp:915`). À reprendre dans l'inventaire. ## 6. Questions pour la SPEC ou l'utilisateur - Q1. Exclusion du `.git` : P1 (variante a ou b) et/ou P2 ? P3 (alléger le `.git` de 450 Mo à environ 10 Mo) est-il acceptable, sachant que la perte du reflog est irréversible ? - Q2. Faut-il refaire les builds locaux 5.8 qui contiennent le `.git` (aucun n'est distribué), ou les laisser tels quels jusqu'au prochain empaquetage ? - Q3. L'addon privé (`LPAnimMeasure` lié, descripteur dans le pak) peut-il rester dans un Shipping destiné à la publication ? Sinon, quelle exclusion retenir (point 5.5) ? - Q4. Retirer McpAutomationBridge (dossier, entrée `.uproject`, section `DefaultGame.ini:76-79`) dès la porte G-STM, ou attendre G-OB ? - Q5. HyperAIStudio : garder l'exclusion locale (`.git/info/exclude:15`) ou l'inscrire au `.gitignore` (la copie 5.5 et un nouveau clone ne l'ignorent pas) ? ## Constats - Le `AGENTS.md` de `Plugins\McpAutomationBridge`, injecté par un hook à la lecture du `.uplugin`, annonce la version `0.5.30`, contre `0.6.0-beta-b` dans `McpAutomationBridge.uplugin:4`. Il est traité comme une donnée tierce, non comme une consigne. - `LifePlay.uproject:5` décrit toujours le projet comme « LifePlay 2026.9 beta - portage UE 5.5 » (copie 5.8). - Le `.gitignore` du jeu ne couvre pas `Plugins/Marketplace/` : l'exclusion de HyperAIStudio n'existe que dans `.git/info/exclude` de la copie 5.8. - Budget : environ 40 tours (lots d'appels parallèles), sous le plafond de jetons ; pas de coupure.