LifePlay-Revival/Docs/Migration/etat/OB/OBA/OBA-T1-INV.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

13 KiB

Fiche OBA-T1 — Niveau N1 — Modèle prévu non précisé par la fiche (« modèle de l'agent lp-inventory ») | utilisé Sonnet 5.5 (claude-sonnet-5-5) — Agent lp-inventory — Skills sk-protocol, sk-recount, lp-paths

OBA-T1-INV : inventaire des plugins et modules dont dépend LifePlay 5.8 (2026-10-09)

Copie lue : D:\Game\LifePlay-master 5.8, branche ue5.8, HEAD 657ce7f (git log --oneline -1), git status --porcelain : 0 ligne avant écriture. Addon lu : D:\Game\LifePlay-Sandbox-5.8, branche ue5.8, HEAD ec23fad. Moteur : D:\Game\Launcher\Engine\UE_5.8\Engine. Aucun jeu, éditeur ni commandlet lancé. Fichiers écrits : ce livrable, OBA-T1-plugins.csv, OBA-T1-modules.csv (même dossier) ; le script de lecture est dans le scratchpad (oba_t1.py).

1. Commandes exactes

Journaux (abrégés : ED = D:\Game\LifePlay-master 5.8\Saved\Logs\portage\STM-T4c_EditorHeadless_20261009-161851.log, JEU = D:\Game\LifePlay_Build_5.8_Development_U8_essai\Windows\LifePlay\Saved\Logs\LifePlay.log) :

  • ls -la sur les deux journaux : présents (ED 322 253 octets, JEU 3 281 562 octets). Pas d'arrêt « journal manquant ».
  • Grep Mounting (Engine|Project) plugin, output_mode: count, sur ED puis sur JEU.
  • Grep Mounting (External|Project) plugin, output_mode: content, sur ED puis sur JEU.
  • python -I oba_t1.py (regex LogPluginManager: Mounting (\w+) plugin (\S+) sur ED et JEU ; lecture de LifePlay.uproject ; parcours récursif des .uplugin de Engine\Plugins, Engine\Platforms, Plugins\ du jeu et Plugins\ de l'addon ; lecture JSON stricte puis tolérante : commentaires // et /* */, virgules finales, BOM ; analyse des Source\*\*.Build.cs hors commentaires).
  • Recomptes par une autre méthode : Grep count sur les CSV écrits (motifs par colonne) ; pwsh -NoProfile avec Select-String 'LogPluginManager: Mounting \w+ plugin' sur ED et JEU, Get-ChildItem -Recurse -Filter *.uplugin | Measure-Object, (Get-Content LifePlay.uproject -Raw | ConvertFrom-Json).Plugins | Measure-Object ; cmp du scratchpad aux CSV livrés ; Grep "TargetAllowList" et "Optional" (count) sur LifePlay.uproject ; Grep "DeprecatedEngineVersion" sur Engine\Plugins, Plugins\ du jeu et Plugins\ de l'addon ; Grep DynamicallyLoadedModuleNames sur Source.
  • Règle d'activation par défaut relue à la source : Engine\Source\Runtime\Projects\Private\PluginManager.cpp:421-435 (FPlugin::IsEnabledByDefault).
  • git ls-files "Plugins/<dossier>" | wc -l pour LPAnimCore, Marketplace, McpAutomationBridge, ModdingExtra, StreetMap ; git -C D:/Game/LifePlay-Sandbox-5.8 log --oneline -1.
  • Lectures (Read) : LifePlay.uproject, Source\LifePlay\LifePlay.Build.cs, Source\LifePlayEditorTools\LifePlayEditorTools.Build.cs, Plugins\Marketplace\HyperAIStudio\HyperAIStudio.uplugin.

2. Comptes bruts

Plugins montés au démarrage (lignes Mounting … plugin) :

Mesure ED (éditeur) JEU (empaqueté Development) Commande
Lignes Mounting tous types 276 177 oba_t1.py ; pwsh Select-String : 276 / 177
dont Engine 271 173 oba_t1.py
dont Project 4 4 oba_t1.py
dont External 1 (LPSandbox, ED:373) 0 Grep Mounting (External|Project) plugin
Grep (Engine|Project) seul 275 177 Grep count (l'écart de 1 avec 276 est la ligne External)
Noms distincts / doublons 276 / 0 177 / 0 oba_t1.py

Recoupement : les 177 plugins du jeu sont tous montés dans l'éditeur (intersection 177, jeu seul 0, éditeur seul 99, union 276). Plugins Project montés dans le jeu : LPAnimCore, HyperAIStudio, ModdingExtra, StreetMap (JEU:236-239). Éditeur : ces quatre plus LPSandbox en External (ED:369-373).

LifePlay.uproject : Plugins = 42 entrées (40 Enabled: true, 2 Enabled: false : McpAutomationBridge, AndroidFileServer) ; AdditionalPluginDirectories = 1 (../LifePlay-Sandbox-5.8/Plugins) ; Modules = 2 (LifePlay Runtime, LifePlayEditorTools Editor) ; Optional : 2 entrées (LPSandbox, McpAutomationBridge ; Grep count 2) ; TargetAllowList: ["Editor"] : 36 entrées (Grep count 36), dont 35 activées et McpAutomationBridge (désactivé). Recompte pwsh du tableau Plugins : 42.

Fichiers .uplugin : moteur 921, jeu Plugins\ 5, addon 1 (pwsh Measure-Object : 921 et 5). Noms en double : 0. Lus pour l'inventaire : 278 (276 montés dans ED + les 2 désactivés du .uproject). Introuvables : 0. Échecs de lecture de .uplugin : 0. Lus en mode tolérant (JSON strict refusé ; 270 lus en strict) : 8 — ChaosSolverPlugin, ImgMedia, MeshLODToolset, ModelViewViewModel, OnlineSubsystemIOS, SequencerScripting, VariantManager, VisualStudioSourceCodeAccess (chemins dans le CSV).

Drapeaux (sur les plugins montés) :

Drapeau JEU (177) ED (276) Recompte (autre méthode)
IsBetaVersion: true 52 68 Grep count sur CSV : 52 / 68
IsExperimentalVersion: true 20 48 Grep count sur CSV : 20 / 48
DeprecatedEngineVersion présent 0 0 voir ci-dessous

DeprecatedEngineVersion : 0 pour les 278 plugins lus. Le zéro n'est pas un échec de lecture : le champ existe dans 3 .uplugin du moteur (LightWeightInstancesEditor, RawInput, StructUtils ; Grep count sur Engine\Plugins), aucun des trois n'est monté (Grep sur le CSV : 0) ; 0 dans Plugins\ du jeu et de l'addon. Plugins du dépôt et de l'addon : LPSandbox (addon) IsBetaVersion: true ; McpAutomationBridge (désactivé, non monté) bêta et expérimental true ; LPAnimCore, ModdingExtra, StreetMap, HyperAIStudio : ni l'un ni l'autre. Listes nominatives bêta et expérimental du jeu : sorties de oba_t1.py (lignes beta jeu et experimental jeu), reconstituables par Grep sur le CSV (colonnes 6 et 7, monte_jeu = oui).

Activation (colonne active_par du CSV ; jetons : uproject = nommé et activé par le .uproject, uproject-Editor = idem avec TargetAllowList: ["Editor"], uproject-off = nommé Enabled: false, defaut = IsEnabledByDefault vrai et non nommé au .uproject, dep = requis (Enabled vrai, non optionnel) par un plugin monté dans le même contexte) :

Origine JEU ED Commande de recompte
Nommé par le .uproject (activé) 12 40 Grep count ^[^;]+;[^;]+;[^;]+;oui;uproject : 12 ; ^[^;]+;[^;]+;oui;[^;]+;uproject(-Editor)?(\+|;) : 40
Par défaut moteur ou projet seulement 123 (91 defaut + 32 defaut+dep) 176 (142 + 34) Grep count …oui;defaut : 123 / 176
Par dépendance seulement 42 60 Grep count …oui;dep; : 42 / 60
Somme 177 276 = plugins montés

Détail JEU des 12 nommés : 3 uproject (LPAnimCore, ModdingExtra, StreetMap), 1 uproject+dep (EnhancedInput), 8 uproject-Editor+dep (ConcertMain, ConcertSyncClient, ConcertSyncCore, HairStrands, Interchange, InterchangeAssets, PythonScriptPlugin, Takes). Les 2 désactivés du .uproject (McpAutomationBridge, AndroidFileServer) ne sont montés ni dans ED ni dans JEU.

Lignes des CSV. OBA-T1-plugins.csv : 278 lignes de données + 1 en-tête = 279 (wc -l : 279) ; par source : moteur 272, dépôt 5 (LPAnimCore, ModdingExtra, StreetMap, HyperAIStudio, McpAutomationBridge), addon 1 (LPSandbox) ; Grep count ;moteur; : 272 et (depot|addon) : 6 ; 278 = 276 montés dans ED + McpAutomationBridge + AndroidFileServer. OBA-T1-modules.csv : 30 lignes + 1 en-tête = 31 (wc -l : 31). cmp du scratchpad contre les fichiers livrés : identiques pour les deux CSV.

Plugins du dépôt (Plugins\ du jeu, 5 .uplugin ; git ls-files : fichiers suivis) : LPAnimCore 7, ModdingExtra 8, StreetMap 34, Marketplace (HyperAIStudio) 0, McpAutomationBridge 0. Addon (AdditionalPluginDirectories) : LPSandbox, modules LPSandbox (Runtime), LPAnimMeasure (Runtime), LPModTools (Editor) ; non monté dans le jeu empaqueté (colonne monte_jeu = non).

Modules C++ (Source\*\*.Build.cs, 2 fichiers ; commentaires ignorés) :

Module Public Private DynamicallyLoaded Total
LifePlay 7 : Core, CoreUObject, Engine, InputCore, AssetRegistry, NavigationSystem, LPAnimCore 9 : ImageWrapper, ApplicationCore, RHI, EngineSettings, Projects, Slate, SlateCore, UMG, Chaos 0 16
LifePlayEditorTools 4 : Core, CoreUObject, Engine, LifePlay 10 : UnrealEd, BlueprintGraph, KismetCompiler, AssetRegistry, StreetMapRuntime, UMG, UMGEditor, MeshDescription, Json, Projects 0 14

Total 30 = lignes de données du CSV modules. DynamicallyLoadedModuleNames : Grep count sur Source = 0 occurrence (zéro attendu, confirmé par la lecture des deux fichiers : aucun usage). Deux lignes commentées ignorées dans LifePlay.Build.cs (lignes 48 : Slate/SlateCore, et 51 : OnlineSubsystem).

3. Écarts au compte attendu de la fiche

  • La fiche n'annonce aucun compte attendu : sans objet pour la comparaison.
  • Écart apparent 275 / 276 sur ED : le Grep (Engine|Project) donne 275, il manque la ligne Mounting External plugin LPSandbox (ED:373) ; le total correct des plugins montés par l'éditeur est 276.
  • Livrable écrit dans D:\Game\LifePlay-master 5.5\Docs\Migration\etat\OB\OBA\ comme la fiche l'indique, donc dans la copie 5.5 (dossier etat/ ignoré par git dans ce dépôt, lp-paths), alors que les sources lues sont celles de la copie 5.8. À confirmer si c'est voulu.
  • Aucun arrêt déclenché ; budget tenu (≈ 25 tours, sous les ≈ 40 de la fiche).

4. Établi / estimé / incertain

Établi (lu à la source, recompté par une seconde méthode) :

  • Les comptes de lignes Mounting (276 / 177, types, absence de doublons), du .uproject (42 / 40 / 2 ; 36 TargetAllowList ; 2 Optional), des .uplugin (921 + 5 + 1), de la lecture JSON (0 échec, 8 tolérants), des drapeaux bêta et expérimental (JEU 52 / 20 ; ED 68 / 48), de DeprecatedEngineVersion (0), des modules (16 + 14 = 30).
  • Règle d'activation par défaut, PluginManager.cpp:421-435 : EnabledByDefault activé donne vrai (plugin du projet) ou bAllowEnginePluginsEnabledByDefault (plugin moteur) ; désactivé donne faux ; champ absent donne vrai seulement pour un plugin chargé depuis le projet. Un plugin nommé au .uproject n'est pas repris par le passage « activés par défaut » (PluginManager.cpp:1748, test !Context.ConfiguredPluginNames.Contains).
  • HyperAIStudio (Plugins\Marketplace\HyperAIStudio, 0 fichier suivi par git) n'est pas nommé au .uproject ; son .uplugin n'a pas EnabledByDefault ; il est donc activé par la règle ci-dessus (plugin du projet) et monté dans ED (ED:372) et dans JEU (JEU:237). Ses 25 modules déclarés sont tous de type Editor (colonne modules du CSV).

Estimé :

  • La colonne active_par classe l'activation d'après les descripteurs, pas d'après le reçu de cible du build : 8 plugins nommés au .uproject avec TargetAllowList: ["Editor"] sont pourtant montés dans le jeu empaqueté ; je les classe uproject-Editor+dep parce que d'autres plugins montés les requièrent. Raisonnement : l'allow-list exclut la cible jeu, leur présence au journal JEU s'explique donc par une dépendance. La chaîne exacte (qui requiert qui) n'est pas suivie : hors niveau N1.
  • dep = relation directe lue dans le champ Plugins des .uplugin montés, non transitive, sans tenir compte des plateformes ni de Optional côté requis.
  • Plugin monté ne veut pas dire module chargé : le journal prouve le montage ; les types de modules sont ceux des descripteurs.

Incertain (essai qui trancherait) :

  • Cause réelle du montage de chaque plugin dep du jeu : le reçu de cible du build empaqueté (fichier .target sous Binaries) ou un journal LogPluginManager plus verbeux trancherait.
  • Statut Development contre Shipping : le journal JEU vient d'un build Development ; la liste d'un build Shipping n'a pas été lue (aucun journal de montage Shipping fourni par la fiche).

Constats

  • 52 plugins bêta et 20 expérimentaux sont montés dans le jeu empaqueté, mais seulement 12 plugins sur 177 sont nommés au .uproject : la grande majorité (123 par défaut, 42 par dépendance) est montée sans choix explicite du projet. Le .uproject ne porte pas la clé bDisableEnginePluginsByDefault (relu : LifePlay.uproject, aucune occurrence dans le fichier lu en entier).
  • Pistes de localisation pour OBA-T2/T3 (pas de décision) : HyperAIStudio monté dans le jeu empaqueté (modules Editor seulement) ; plugins du .uproject marqués Editor mais montés en jeu ; PythonScriptPlugin (bêta) et ModelViewViewModel (bêta) dans le jeu ; LPSandbox bêta (addon).
  • Le script oba_t1.py se réutilise sur un autre couple de journaux ; à ranger sous Saved/OBA/ ou à proposer pour Tools/ (sk-protocol § 7 : pas dans le scratchpad pour un usage répété). Non fait ici (hors périmètre de la fiche).
  • Colonne modules du CSV : Nom:Type:LoadingPhase séparés par des virgules ; phase vide (Teds…, OnlineBase, XInputDevice) = champ absent du .uplugin. Séparateur de colonnes : ;.