LifePlay-Revival/Docs/Migration/etat/OB/OBA/OBA-T5-EVAL.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

40 KiB
Raw Blame History

Fiche OBA-T5 — Niveau N4 — Modèle prévu modèle de l'agent opus-max | utilisé Opus 5.5 (claude-opus-5-5) — Agent opus-max — Skills sk-protocol (préchargé aussi : debug-verification)

OBA-T5-EVAL : synthèse de l'audit OBA, dossier de la porte G-OB (2026-10-09)

Hors gabarit : synthèse d'audit pour la porte G-OB (sections (a) à (e) de la fiche, numérotées 1 à 5, puis ## Constats).

Lecture seule : aucun build, UE, commandlet ni journal ouvert ; seul fichier écrit : ce livrable. Sources lues en entier (dossier D:\Game\LifePlay-master 5.5\Docs\Migration\etat\OB\OBA\), citées ABR:ligne :

  • T1 OBA-T1-INV.md · T4 OBA-T4-INV.md · PLAT, EDIT, PROJ, CODE OBA-T23-<domaine>-CART.md · TACHES OBA-TACHES.md · CSV OBA-T1-plugins.csv (deux Grep ciblés pour lever deux doutes, cités où ils servent).
  • Cadre (copie 5.8, Docs\Migration\) : D30 30_Projet_Audit_Obsolescence.md (en entier) ; D29 29_Projet_Stabilisation_V2.md (lignes 48-61, 128-193, 236-275).
  • Les références internes des CART (.rsp, reçus .target, manifestes UFS / NonUFS, journal JEU) passent par la ligne du CART qui les cite ; elles n'ont pas été relues ici.

Niveaux : [ét.] établi par le compte rendu cité (lu ou recompté à la source par son auteur) ; [est.] estimé, méthode donnée ; [inc.] incertain, essai nommé au § 5. « Non trouvé » dans un CART = non trouvé dans ce qui a été lu, jamais « inutilisé » (D30:55-56, PLAT:157). Mo = Mio (T4:5).

En bref :

  • Trois bloquants de publication, tous à corriger avant la V2.0 : le .git des modules (450 763 872 o, 22,3 % du Shipping, historique local), l'addon privé dans le Shipping (LPAnimMeasure lié, descripteur au pak), l'absence de contrôle du paquet (§ 1).
  • Code du jeu : aucune API dépréciée à HEAD (CODE:114) ; 29 dépendances Build.cs prouvées sur 30 (CODE:83) ; LPStringCompat reste nécessaire en 5.8 (CODE:148).
  • 22 plugins de plateforme, média et réseau (PLAT:132) et deux chaînes d'outils éditeur (EDIT:136-141) peuvent quitter le jeu par groupes A/B après la V2.0 ; aucun gain n'est chiffré (T4:147).
  • 17 décisions au § 4 ; 137 des 177 plugins montés en jeu restent sans grille O3 (§ 5, L8).

1. Constats bloquants pour toute publication

Cadre : aucune publication avant la sortie de ST et d'OB (D29:57, S5). B1 touche les 7 builds 5.8 (PROJ:23), dont LifePlay_Build_5.8_Shipping_V2.0 (PROJ:79). B2 est établi pour le Shipping U8 (PROJ:147). Pour B1, aucun build distribué n'est touché : archives V1.4 et V1.5 sans .git (PROJ:29, 109-110), 2026.10.2.0 non publié (PROJ:111-112), Releases\2026.10.2.0 sans .git (PROJ:28) [ét.]. Pour B2, la V1.5 publiée n'a pas été vérifiée (PROJ:176-177 ; § 5, L1).

# Constat Gravité Preuve Options des CART Option retenue par la synthèse (décision au § 4)
B1 Content\Modules\.git (142 fichiers, 450 763 872 o, 22,3 % du Shipping) copié dans chaque build 5.8, avec un historique qui dépasse celui des modules bloquant : fuite d'historique [est.], taille [ét.] PROJ:22-23, 35, 53-68, 95-96 ; T4:46, 54 P1-a, P1-b, P2, P3 ; P4 rejetée (PROJ:133-137) P1-b + P2, sans P3 (G-OB-3)
B2 Addon privé dans le Shipping : LPAnimMeasure lié à l'exe, LPSandbox.uplugin au pak bloquant : confidentialité de l'addon [ét. pour la présence] PROJ:147, 161-162 (i) module exclu dans l'addon ; (ii) référence .uproject hors Shipping ; (iii) empaqueter sans l'addon (PROJ:147, 190-191) (ii) + (i), repli (iii) (G-OB-5)
B3 Aucun contrôle du contenu du paquet avant publication bloquant de procédure : sans lui, B1 et B2 reviennent [est.] PROJ:79, 122-125, 134 P2 (PROJ:134) P2 étendu à 4 contrôles (G-OB-7)

B1. Content\Modules\.git

  • Mécanisme [ét.] : +DirectoriesToAlwaysStageAsNonUFS=(Path="Modules") existe depuis L0, identique en 5.5 et en 5.8 (PROJ:53-56). UAT 5.5 et 5.8 copie tout le dossier, dossiers cachés compris, et aucune clé .ini n'exclut un sous-dossier NonUFS (PROJ:58-68). Le .git est apparu le 2026-10-07 à 20:26:39, 9 min après le dernier build 5.5 (PROJ:70-83 ; H1 retenue, PROJ:103). Manifeste NonUFS : 142 lignes Modules/.git/ dans Shipping_U8, 0 dans DC4 (PROJ:35, 85-87).
  • Contenu : objets atteignables depuis HEAD 10 238 344 o ; reflog compris 450 046 383 o ; 313 commits (428 − 115) et 439 808 039 o tenus par le seul reflog ; le commit a83ea56 du dépôt du jeu y figure (PROJ:32-33, 95-98) [ét.]. Origine estimée par PROJ : clone du dépôt du jeu puis filter-branch sans gc, donc l'historique complet du jeu (PROJ:164-167) [est.]. Contenu des objets non lu (PROJ:4-5).
  • Fuite [est.] : le lot PUB2 a placé les modules dans un dépôt local séparé pour garder un dépôt public sans contenu sexuel (.gitignore:76-77, PROJ:90-92). Publier ce .git distribuerait un historique jamais destiné aux joueurs : versions supprimées des modules et, selon l'estimation ci-dessus, l'historique du jeu avant filtrage. Tout commit git porte aussi le nom, le courriel et la date de son auteur.
  • Propagation [ét.] : Tools\SplitModules.ps1:47 laisserait le .git dans un build publié ; le seul BuildCookRun de Tools ne filtre rien (PROJ:122-125). Un build 5.5 fait aujourd'hui le contiendrait aussi (PROJ:168-169) [est.].
  • Options (PROJ:133-137). P1 sort le dossier git de l'arbre mis en scène. Variante a, --separate-git-dir : un fichier .git d'environ 60 o, qui contient un chemin local, reste copié. Variante b, dépôt hors de l'arbre avec core.worktree : aucune entrée .git, mais chaque git -C Content\Modules des skills et scripts doit passer à --git-dir/--work-tree. P2 refuse un build qui contient …\Content\Modules\.git. P3 (reflog expire + gc) ramène le .git à environ 10 Mo, toujours copié, avec une perte irréversible. P4 est rejetée. PROJ recommande P1 + P2.
  • Lecture de la synthèse [est.] : P1-a et P2 se contredisent, car le fichier .git restant ferait échouer P2 (PROJ:133-134). P1-b + P2 est la seule combinaison sans exception au garde-fou. P3 n'apporte rien au paquet une fois P1 fait, et il exige d'abord le point 2 de PROJ (PROJ:185-186).
  • Gain attendu [est.] : Shipping 2 024 056 223 → 1 573 292 351 o (1 930,3 → 1 500,4 Mo). C'est la différence de T4:27 et T4:46, rien d'autre ne changeant.

B2. Addon privé LPSandbox dans le Shipping (dans le périmètre au titre de la dépendance, D30:30)

  • Présence [ét.] : LPAnimMeasure, module Runtime sans exclusion (LPSandbox.uplugin:30-34), est lié à l'exe Shipping (.rsp:915), alors que le module LPSandbox est exclu du Shipping (:22-29). Le reçu Shipping cite le plugin (:3924, avec le chemin local de l'addon ; :4084, dans la section BuildPlugins qui s'ouvre à :3964 selon PLAT:22). Le pak contient RemappedPlugins/LPSandbox/LPSandbox.uplugin (manifeste UFS :958) (PROJ:147, 161-162).
  • Usage par le jeu [ét.] : aucun asset du jeu (PROJ:147) ; aucune dépendance Build.cs des modules du jeu vers l'addon (T1:68-69). Service : développement seulement (PROJ:147).
  • Inventaire [inc.] : CSV:151 donne LPSandbox monte_jeu=non, ce qui est exact pour le journal Development (aucun montage External, T1:25). Mais « lié » n'est pas « monté », et le montage en Shipping reste inconnu faute de journal Shipping (T4:105 ; PROJ:194-195).
  • Mécanisme du descripteur [inc.] : la référence .uproject de LPSandbox est Optional (PROJ:147). Or un descripteur part au paquet par une référence non optionnelle, ou par un besoin de contenu ou de dépendance (EDIT:45). La cause exacte n'est donc pas établie.
  • Options (PROJ:147, 190-191) : (i) TargetConfigurationDenyList: ["Shipping"] sur LPAnimMeasure dans l'addon ; (ii) référence .uproject exclue de la configuration Shipping, si FPluginReferenceDescriptor 5.8 accepte la clé (point 5 de PROJ ; le gestionnaire de plugins teste cible, plateforme et configuration d'une référence, PLAT:75) ; (iii) empaqueter sans l'addon, comme DC4.
  • Lecture de la synthèse [est.] : (ii) retire d'un seul point le plugin, le code et le descripteur, aucun plugin du jeu ne requérant LPSandbox. (i) garde l'effet si l'entrée .uproject est réécrite. (iii) reste en repli (procédure manuelle).

B3. Aucun contrôle du contenu avant publication

  • [ét.] Un build nommé Shipping_V2.0 contient déjà le .git (PROJ:79). Les fiches U8 lancent UAT directement, hors des scripts (PROJ:134). SplitModules.ps1 et BuildDebug.ps1 ne filtrent rien (PROJ:122-125).
  • Garde-fou proposé (P2 de PROJ:134, étendu par la synthèse) : 4 contrôles en lecture, après tout empaquetage destiné à la publication et à la VAL de publication. (1) Manifest_NonUFSFiles_Win64.txt : 0 ligne Modules/.git/ (méthode PROJ:35). (2) Manifest_UFSFiles_Win64.txt : 0 ligne LPSandbox. (3) LifePlay-Win64-Shipping.exe.rsp : 0 ligne LPAnimMeasure. (4) Reçu LifePlay-Win64-Shipping.target, section BuildPlugins : pas de LPSandbox (méthode de relecture EDIT:121).
  • Preuve par l'échec attendue sur Shipping_U8 : (1) 142 (PROJ:35) ; (2) et (3) au moins 1 ; (4) présent (PROJ:147).

Vérifié non bloquant [ét.]

  • Famille MCP (ModelContextProtocol, ToolsetRegistry, EditorToolset, MCPClientToolset, Terminal, 15 toolsets) : 0 ligne dans les reçus et les .rsp des cibles Game, 0 au manifeste UFS (EDIT:89-92). Aucun serveur MCP dans un build publié.
  • Python : aucune DLL mise en paquet ; seul PythonScriptPluginPreload est lié (EDIT:63), compilé WITH_PYTHON=0 [est.].
  • HyperAIStudio : 0 code et 0 contenu cuit dans le jeu ; seul son descripteur est au pak, et le plugin est monté (EDIT:82-85). Voir R5, non bloquante.

2. Tableau des recommandations

Ordre : bloquants, puis recommandations avant la V2.0, puis lots d'exécution (§ 3). Effort [est.], changement seul, compté sur les fichiers et les sites cités par les CART : S une entrée ou un fichier, avec ses contrôles ; M plusieurs fichiers, outils ou skills, ou les deux copies ; L plusieurs lots ou des centaines de nœuds Blueprint. Chaque lot d'optimisation coûte en plus un cycle A/B : environ 6,5 min machine à DDC chaud (compilations 56,31 + 55,07 s, cuisson UAT 166,38 s, empaquetages 55,04 + 55,34 s : T4:73-74, 78, 83, 86) [est. : somme], plus le parcours S2 ; la cuisson à froid n'est pas mesurée (T4:141). Gains : les octets de code lié par plugin ne sont jamais mesurés (T4:147, PLAT:168, EDIT:114) ; « code lié » compte les plugins, modules ou lignes de l'.rsp Shipping cités par les CART. Démarrage : aucun gain mesuré ni mesurable avec les données de T4 (T4:144-147) ; la colonne ne le répète pas.

R Élément Constat Action Gain attendu Risque Effort Preuve Mesure A/B requise
R1 Content\Modules\.git B1 P1-b dans les copies 5.5 et 5.8 ; mise à jour de lp-paths, des skills et scripts qui appellent git -C Content\Modules, du commentaire .gitignore:76 taille −450 763 872 o, soit −22,3 % [est.] ; fuite d'historique supprimée [est.] faible pour le jeu [est.] ; effet sur l'énumération des dossiers de modules par le jeu (GetAllFilesFromFolder, PROJ:143) [inc.] M PROJ:53-68, 95-96, 133, 137 ; T4:46, 54 manifeste NonUFS 142 → 0 ; taille Shipping ; démarrage et S2 sans erreur nouvelle
R2 addon LPSandbox (LPAnimMeasure) B2 référence .uproject hors Shipping (si le point 5 de PROJ le permet) + LPAnimMeasure exclu du Shipping dans LPSandbox.uplugin ; repli : empaqueter sans l'addon confidentialité de l'addon ; −1 module lié, −1 descripteur au pak [est.] faible : aucun usage par le jeu (T1:68-69, PROJ:147) S PROJ:147, 161-162, 190-191 contrôles (2) à (4) de B3 à 0 ; taille de l'exe ; démarrage Shipping et S2 court
R3 garde-fou de publication B3 les 4 contrôles de B3 dans SplitModules.ps1, BuildDebug.ps1 et la VAL de publication ; consigne pour les fiches qui lancent UAT directement empêche le retour de B1 et B2 [est.] nul (lecture seule) S PROJ:79, 122-125, 134 ; EDIT:121 échec sur Shipping_U8, succès après R1 et R2
R4 McpAutomationBridge désactivé (D4), 0 référence, absent du Shipping ; remplacé par le MCP d'Epic ; requérant éditeur d'OSS déplacer le dossier en sauvegarde ; retirer l'entrée .uproject et la section DefaultGame.ini:76-79 0 o au paquet [ét.] ; simplifie OB-4 faible S PROJ:145 ; PLAT:89, 141 ; D29:188-192, 269-270 builds Editor et Game code 0 ; démarrage de l'éditeur et session MCP (non-régression STM)
R5 HyperAIStudio plugin du projet monté en jeu par défaut ; descripteur au pak ; 0 code, 0 contenu ; ignoré par .git/info/exclude seulement entrée .uproject Enabled, Optional, TargetAllowList: ["Editor"] ; Plugins/Marketplace/ au .gitignore −1 plugin monté, −1 descripteur tiers au pak [est.] faible ; l'outil de mise en place peut réécrire le .uproject (EDIT:127) S EDIT:81-86, 142 ; T1:83 ; PROJ:146, 214-215 journal de jeu sans Mounting … HyperAIStudio ; manifeste UFS sans son .uplugin ; MCP éditeur intact
R6 PLAT G1 mobile et Apple : AndroidPermission, GooglePAD, LocationServicesBPLibrary, MobilePatchingUtils, AppleImageUtils, AvfMedia activés par défaut, non trouvés dans les lectures, aucun requérant en jeu retirer du jeu (méthode G-OB-10) code : 6 plugins liés faible ; 5 noms /Script/… du groupe dans la table de noms du registre d'assets [inc.] (PLAT:165) S PLAT:104-109, 139 lot OB-2
R7 PLAT G2 distribution : ChunkDownloader, LauncherChunkInstaller, ExampleDeviceProfileSelector chunks désactivés ; sélecteur remplacé sous Windows retirer du jeu ; garder WindowsDeviceProfileSelector (utilisé) code : 3 plugins liés faible S PLAT:110-113, 140 OB-2
R8 PLAT G4b WebM : WebMMoviePlayer, WebMMedia aucun .webm ; le film de démarrage .mp4 est lu par WindowsMoviePlayer retirer du jeu ; WmfMedia seulement après G-OB-11 code : 2 plugins liés faible ; WmfMedia : moyen si des mods jouent de la vidéo S PLAT:115-117, 143 OB-2
R9 PLAT G4a média de production : MediaPlate, MediaCompositing, ImgMedia, TmvMedia, MP4Utilities activés par défaut ; TMV expérimental en 5.8 ; seul contenu cuit du domaine retirer du jeu code : 5 plugins (dont ImgMedia 5, TmvMedia 4, MP4Utilities 3 modules) ; 1 paquet cuit, taille non relevée faible S PLAT:92, 118-122, 142 OB-3 : + /mediaplate/sm_mediaplatescreen absent du cuit
R10 PLAT G3 en ligne : OnlineSubsystemNull, OnlineSubsystemUtils, OnlineSubsystem, OnlineServices, OnlineBase, OodleNetwork (+ OnlineSubsystemGooglePlay et OnlineSubsystemIOS côté éditeur, seulement avec Enabled: false) OSS NULL créé au démarrage sans appel du jeu ; pilote réseau déclaré par la seule config moteur retirer du jeu si G-OB-12 code : 6 plugins liés ; une instance OSS de moins au démarrage [est.] moyen : pilote réseau par défaut, PIE multijoueur S PLAT:67, 123-128, 141 OB-4 : point P1 de PLAT (PLAT:171)
R11 XInputDevice ; InputDebugging aucun mapping manette, assets Enhanced Input non lus ; InputDebugging absent du Shipping garder XInputDevice (sauf G-OB-13) ; laisser InputDebugging — moyen si XInputDevice part (perte de la manette) — PLAT:68, 129-130 —
R12 Concert : ConcertMain, ConcertSyncClient, ConcertSyncCore, ConcertSharedSlate 0 code Concert ; entré par ConsoleVariables, activé par défaut ConsoleVariables au .uproject en TargetAllowList: ["Editor"] −4 descripteurs, −1 .ini, −1 module faible ; préréglages de CVar en jeu [inc.] S EDIT:49-52, 136 OB-5a : relecture EDIT:121
R13 Interchange, InterchangeAssets entrés par GLTFExporter (activé par défaut) et InterchangeAxfAssets ; 0 référence dans Source ; mods non lus GLTFExporter et InterchangeAxfAssets en Editor au .uproject, si OBA-T7 prouve l'absence de glTF à l'exécution code : 11 modules (16 .obj) + draco.lib, plus InterchangeAssets, InterchangeAxFAssets, GLTFExporter moyen : un import ou export glTF à l'exécution disparaîtrait S EDIT:67-71, 118, 139-140 OB-5b : relecture EDIT:121 et S2
R14 HairStrands entré par Interchange ; 5 matériaux cuits (10 fichiers, 650 122 o) chargés par le constructeur de UGroomComponent suit R13 si OBA-T7 prouve « aucun groom » ; sinon le garder et l'autoriser en jeu code : 4 modules (8 .obj) ; cuit −650 122 o [ét. pour le poids] moyen : des cheveux groom, s'il y en a, ne s'afficheraient plus S EDIT:74-78, 110, 117, 141 OB-5b : 10 fichiers absents du cuit ; contrôle visuel des personnages
R15 Takes, PythonScriptPlugin entrés par Niagara, ControlRig, ChaosCloth et Dataflow ; contenu déjà exclu par le lot O1 ; Python vide en jeu garder ; piste ShouldIgnorePluginDependency seulement si G-OB-15 la rouvre aucun (6 + 1 modules restent liés) couper ChaosCloth casserait la simulation de tissu — EDIT:55-64, 119, 137-138 —
R16 Famille MCP, 15 toolsets déjà hors du jeu garder tel quel — nul — EDIT:89-92, 143-144 —
R17 bDisableEnginePluginsByDefault 123 plugins en jeu par défaut ; 12 seulement nommés au .uproject option, lot à part après OBA-T8 le plus large possible [inc.] élevé : tout ce que le jeu utilise doit être nommé L EDIT:129 ; T1:52-55, 95 OB-8 (option)
R18 KismetCompiler (LifePlayEditorTools.Build.cs:29) ni inclusion ni symbole direct ; chemin d'inclusion déjà fourni par UnrealEd retirer si le build Editor passe sans aucun au paquet (module Editor) faible S CODE:74, 85-95 OB-6 : build LifePlayEditor code 0 (CODE:193-194)
R19 AssetRegistry, NavigationSystem Public → Private besoin interne à LifePlay passer en Private si les builds passent propreté faible S CODE:98-105 OB-6 : builds Editor et Shipping (CODE:195)
R20 branche UE4 morte, LPDumpFunctionCommandlet.cpp:89-90 garde ENGINE_MAJOR_VERSION >= 5 toujours vraie dans les deux copies supprimer la branche propreté nul S CODE:142 OB-6 : build Editor
R21 U9 : LPStringCompat 60 écarts du moteur 5.8 contre UE4 sur 3120 cas, 0 pour le correctif ; pas d'équivalent natif ; ParseIntoArray hors du banc garder le correctif ; étendre le banc à ParseIntoArray ; interrupteur U9 limité à ces 4 fonctions évite un changement du découpage des données de jeu élevé en cas de passage au natif M CODE:148, 198-199 OB-7 : banc LPTestStringCompat étendu
R22 U9 : LPMeshCompat, LPNavigationHelpers aucun écart de valeur avec le natif 5.8 nettoyage facultatif des Blueprints (56 et 6 nœuds, comptes historiques) −2 fonctions C++ faible ; faible à moyen (réévaluation d'un nœud pur) M (56 nœuds) / S (6) CODE:149-150, 196-197, 204-205 OB-7 : recompte des appelants, CompileAllBlueprints, S2
R23 WindowsMoviePlayer (loading.mp4) seul plugin média utilisé ; cadre « Startup Movie Player » déprécié, sans date de retrait garder ; suivre la dépréciation — retrait futur, sans date — PLAT:65, 93, 114, 177 —
R24 StreetMap, ModdingExtra, LPAnimCore utilisés, liés, au cœur du jeu garder ; ModdingExtra : retirer ModdingExtraSampleFunction après le point 7 de PROJ ; StreetMap : relire les 7 C4996 du build U3-T2 — élevé à critique en cas de retrait S PROJ:142-144, 193 ; CODE:119 build et S2 pour la fonction retirée

3. Ordre proposé des lots OB d'exécution

Règles communes (O4, D30:38 ; méthode D30:45, 57-62) :

  • Base : build Development à la sortie de ST et parcours S2 (D30:38, D29:54) ; taille en configuration Shipping (D30:60-62). OB-0 la produit. La base U8 de T4 (DDC chaud, T4:81) ne sert qu'aux contrôles de paquet.
  • Un lot = un groupe, un mécanisme de retrait, un A/B. Après chaque lot, relire BuildPlugins du reçu Shipping, l'.rsp, le manifeste UFS et les lignes Mounting d'un journal neuf (EDIT:121). Un plugin retiré revient en effet par tout requérant actif (PLAT:75, EDIT:43), avec au mieux un avertissement (EDIT:120) ; le comportement d'UBT n'est pas établi (PLAT:166). Pas de DisablePlugins dans le Target.cs : ce n'est pas une voie propre (EDIT:120).
  • Démarrage : deux points seulement, 3,446 s et 5,564 s, le build du second n'étant pas établi (T4:101, 104). La dispersion est inconnue : plusieurs lancements par côté, nombre fixé par la SPEC. Cuisson : comparer à état de DDC égal (T4:81, 141). Journal : chercher Failed to load '/Script/…' (PLAT:165) en plus des erreurs du parcours S2.
  • Copie partagée : builds, éditeur et commandlets s'excluent (D29:174-177) ; un lot OB ne tourne pas en même temps qu'un lot ST sur la copie 5.8.
Lot Contenu Avant V2.0 ? Préalables Mesure A/B (O4) Risque Effort
OB-1 Hygiène du paquet publié : R1, R2, R3 ; R5 recommandé oui (bloquants) G-OB-1, 3, 5, 7, 8 ; OBA-T6 (§ 5, L1 et L2) contrôles de B3 ; taille Shipping ; démarrage Development répété ; S2 sans erreur nouvelle faible M
(STM-T5) R4 McpAutomationBridge sans effet sur le paquet ; avant OB-4 G-OB-9 (porte G-STM) builds code 0 ; éditeur et MCP faible S
OB-0 Base A/B : builds Development et Shipping ; tailles (méthode T4) ; démarrage Development et Shipping -log, répété ; plugins montés en Shipping ; cuisson à chaud et à froid ; memreport ; S2 et LogStats ; part des plugins dans les conteneurs mesure seule sortie de ST ; scripts de T1 et T4 rangés — nul M
— Publication de la V2.0 par U8 (S5, D29:57) — ST et OB-1 revérifié sur OB-0 ; G-OB-2 — — —
OB-2 R6 + R7 + R8 : G1 + G2 + G4b, 11 plugins non (V2.0.x) G-OB-10, 11, 14 ; OBA-T7 taille de l'exe et des conteneurs ; plugins montés en jeu 177 → 166 attendu [est.] ; démarrage ; cuisson ; S2 faible S
OB-3 R9 : G4a, 5 plugins non comme OB-2 comme OB-2, plus le paquet MediaPlate absent du cuit faible S
OB-5a R12 : Concert par ConsoleVariables non G-OB-10 ; préréglages de CVar (OBA-T7) relecture EDIT:121 ; S2 faible S
OB-4 R10 : G3 en ligne non G-OB-12 ; R4 fait ; OBA-T7 point P1 de PLAT (PLAT:171) ; PIE de l'éditeur moyen S
OB-5b R13 + R14 : chaîne GLTFExporter → Interchange → HairStrands non OBA-T7 : ni groom ni glTF à l'exécution (jeu et mods connus) relecture EDIT:121 ; cuit HairStrands absent ; S2 et contrôle visuel des cheveux moyen S
OB-6 R18 à R20 : nettoyage du code non ; indépendant des autres lots G-OB-16 builds Editor et Shipping code 0 ; taille de l'exe inchangée attendue [est.] faible S
OB-7 R21, et R22 si voulu : U9 réduit non G-OB-17 ; recompte des appelants (OBA-T7) banc étendu ; CompileAllBlueprints ; S2 si des nœuds changent faible (banc) M
OB-8 R17 : option bDisableEnginePluginsByDefault non OBA-T8 ; bilan d'OB-2 à OB-5 A/B complet élevé L

Enchaînement. Sans G-OB-1 : sortie de ST → OB-0 → OB-1 → V2.0 → OB-2 à OB-8. Avec G-OB-1 : OB-1 passe entre deux lots ST (contrôles de paquet contre la base U8 de T4) → sortie de ST → OB-0, qui revérifie OB-1 → V2.0 → OB-2 à OB-8. Motif de l'ordre : d'abord les seuls risques de publication établis ; ensuite par risque croissant et selon les préalables (les groupes à faible risque, qui ne touchent pas le code du jeu, puis les groupes à risque moyen, qui attendent une décision produit ou une preuve d'usage). OB-6 est indépendant. OB-8 n'a de sens qu'après l'audit des 137 plugins restants (§ 5, L8). Les gains n'entrent pas dans l'ordre, faute de chiffres (T4:147).

4. Décisions à soumettre à la porte G-OB

Chaque décision est une question fermée. L'option recommandée est en gras, suivie du motif et des sources. La mention « reprend » renvoie aux questions des CART.

  • G-OB-1. Tenir la porte en deux temps : décider maintenant du lot OB-1 (bloquants) et l'exécuter entre deux lots ST, les lots OB-2 et suivants restant soumis à G-OB après la sortie de ST ? Recommandé : oui. Motif : OB-1 ne touche que le paquet, la configuration Shipping et les outils, sans effet attendu sur le comportement du jeu [est.], sauf l'énumération des dossiers de modules, à vérifier (§ 5, L12). Chaque build produit d'ici là porte B1 (PROJ:119-120), et un build nommé Shipping_V2.0 le contient déjà (PROJ:79). Écart à accepter : O1 et O4 placent les retraits et leur A/B après ST (D30:35, 38). OB-1 serait contrôlé contre la base U8 (T4:27, 46), puis revérifié sur OB-0. (Ajoutée par la synthèse.)
  • G-OB-2. La « sortie d'OB » exigée par S5 avant la publication de la V2.0 se limite-t-elle à OB-1 vérifié, les lots OB-2 et suivants partant en V2.0.x ? Recommandé : oui. Motif : S5 prévoit déjà des V2.0.x par lot (D29:57). Seuls B1 à B3 sont des risques de publication établis (§ 1). Les gains des autres lots ne sont pas chiffrés (T4:147, PLAT:168, EDIT:114), et chacun demande un cycle A/B complet (D30:38). (Ajoutée par la synthèse.)
  • G-OB-3. Exclure le .git par P1 variante b (dépôt Modules hors de l'arbre avec core.worktree, dans les copies 5.5 et 5.8), avec le garde-fou P2 et sans P3 ? Recommandé : oui. Motif : c'est la seule voie qui ne laisse aucune entrée .git dans le paquet. P1-a laisse un fichier .git avec un chemin local, que P2 refuserait (PROJ:133-134). P3 garde le .git dans le paquet et perd le reflog sans retour (PROJ:135, 185-186). Aucune clé .ini ne peut l'exclure (PROJ:58-68). (Reprend PROJ Q1.)
  • G-OB-4. Laisser tels quels les builds locaux 5.8 qui contiennent le .git, avec la règle « aucun build antérieur à OB-1 n'est publiable » ? Recommandé : oui. Motif : aucun n'est distribué (PROJ:108-120) ; le garde-fou les refuserait ; les refaire coûterait des cycles sans bénéfice (T4:73-86). (Reprend PROJ Q2.)
  • G-OB-5. Sortir l'addon privé du Shipping de deux façons : une référence .uproject exclue de la configuration Shipping (si la clé existe, point 5 de PROJ) et l'exclusion de LPAnimMeasure du Shipping dans LPSandbox.uplugin, avec en repli « empaqueter sans l'addon » ? Recommandé : oui. Motif : du code et un descripteur privés sont dans le Shipping (PROJ:147, 161-162), sans usage par le jeu (T1:68-69, PROJ:147). La cause exacte du descripteur au pak n'est pas établie (EDIT:45, PROJ:147) : une exclusion au niveau de la référence la couvre quelle qu'elle soit [est.]. (Reprend PROJ Q3.)
  • G-OB-6. Faire vérifier en lecture seule (fiche proposée OBA-T6) si la V1.5 publiée contient déjà LPAnimMeasure ou le descripteur LPSandbox, avant OB-1 ? Recommandé : oui. Motif : ce n'est pas vérifié (PROJ:176-177, 187-188). Si c'est le cas, une exposition existe déjà, et seul l'utilisateur peut décider qu'en faire. (Ajoutée par la synthèse.)
  • G-OB-7. Rendre obligatoires les 4 contrôles de paquet de B3 après tout empaquetage destiné à la publication, dans les scripts et dans les fiches qui lancent UAT directement ? Recommandé : oui. Motif : B1 est passé inaperçu jusque dans un build nommé Shipping_V2.0 (PROJ:79) ; U8 lance UAT hors des scripts (PROJ:134). (Ajoutée par la synthèse ; étend P2 de PROJ.)
  • G-OB-8. Si G-STM garde HyperAIStudio : l'inscrire au .uproject en {"Name": "HyperAIStudio", "Enabled": true, "Optional": true, "TargetAllowList": ["Editor"]} et ajouter Plugins/Marketplace/ au .gitignore, dans OB-1 ? Recommandé : oui. Motif : le plugin est monté en jeu et son descripteur tiers est au pak, sans aucun service rendu (EDIT:81-86). Optional évite l'échec d'un clone qui n'a pas le plugin (EDIT:127). L'exclusion n'existe que dans .git/info/exclude de la copie 5.8 (PROJ:146, 214-215). À surveiller : une réécriture du .uproject par l'outil de mise en place (EDIT:127, D29:139-140). (Reprend EDIT Q2 et PROJ Q5.)
  • G-OB-9. Retirer McpAutomationBridge dès la porte G-STM (dossier déplacé en sauvegarde, entrée .uproject, section DefaultGame.ini:76-79) ? Recommandé : oui. Motif : il est désactivé depuis D4, sans référence, absent du Shipping et remplacé par le MCP d'Epic (PROJ:145 ; D29:188-192, 269-270). S'il revenait, il réactiverait OSS dans l'éditeur (PLAT:89, 141). (Reprend PROJ Q4.)
  • G-OB-10. Retirer un plugin du jeu par une entrée .uproject TargetAllowList: ["Editor"], y compris sur les requérants (ConsoleVariables, GLTFExporter, InterchangeAxfAssets), plutôt que par "Enabled": false ? Recommandé : oui. Motif : c'est la seule coupure par descripteur qui agit sur le jeu sans conflit avec les requérants de l'éditeur (EDIT:41-44, 126 ; PLAT:75, 139, 141). Le projet suit déjà cette pratique pour 36 entrées (T1:31). L'éditeur et l'outillage des mods gardent le plugin (PLAT:183). Limite : Enabled: false allégerait aussi l'éditeur, ce qu'OB ne vise pas (mesure en empaqueté, D30:60-62). (Reprend PLAT Q4 et EDIT Q1.)
  • G-OB-11. Accepter la règle suivante : un plugin moteur qu'aucun asset du jeu ni aucun mod connu n'utilise (preuve par OBA-T7) sort du contrat des mods et peut quitter le jeu ; WmfMedia reste en place jusqu'à cette preuve ? Recommandé : oui. Motif : le contrat des mods est figé (D30:30), mais aucun CART n'a lu les mods (EDIT:111, PLAT:173). Sans règle écrite, chaque retrait reste suspendu à une hypothèse. WmfMedia est le cas où un mod vidéo est plausible (PLAT:117, 181). Risque résiduel : un mod de la communauté, inconnu, qui utiliserait un plugin retiré ; à signaler dans les notes de version. (Reprend PLAT Q2.)
  • G-OB-12. Le jeu reste-t-il sans réseau (ni multijoueur, ni PIE multi-clients), ce qui autorise OB-4 ? Recommandé : oui, sous A/B dédiée. Motif : le code du jeu n'a aucune référence au réseau (PLAT:60). OSS NULL est créé sans appel du jeu, et le projet ne configure aucun pilote réseau (PLAT:67). Risque moyen (PLAT:141, 182). (Reprend PLAT Q3.)
  • G-OB-13. Garder XInputDevice (pas de groupe G5 pour la manette) ? Recommandé : oui, le garder. Motif : le gain (un module et une bibliothèque) n'est pas mesuré (PLAT:129) ; l'usage n'est pas tranché, les assets Enhanced Input n'ayant pas été lus (PLAT:68) ; un joueur à la manette verrait la perte (PLAT:129, 180). (Reprend PLAT Q1.)
  • G-OB-14. Approuver le plan du § 3 : des groupes A/B successifs (OB-2 = G1 + G2 + G4b fusionnés, puis OB-3, OB-5a, OB-4, et OB-5b sous condition), plutôt que bDisableEnginePluginsByDefault d'emblée (gardé en option OB-8, après OBA-T8) ? Recommandé : oui. Motif : un groupe à la fois avec A/B (D30:45, 57-59) ; fusion proposée par PLAT (PLAT:145, 184). Avec 137 plugins montés en jeu sans grille O3 (§ 5, L8), l'approche racine est risquée (EDIT:129). (Reprend PLAT Q5 et EDIT Q4.)
  • G-OB-15. Garder Takes et PythonScriptPlugin dans le jeu, sans ouvrir pour l'instant la piste ShouldIgnorePluginDependency ? Recommandé : oui. Motif : leur contenu est déjà exclu par le lot O1 et Python est vide en jeu. On ne peut pas les couper sans retirer Niagara, ControlRig ou ChaosCloth (EDIT:58, 63-64, 137-138). La piste repose sur du code UBT non lu (EDIT:119). (Reprend EDIT Q3.)
  • G-OB-16. Faire le nettoyage du code OB-6 après la V2.0 : retirer KismetCompiler si le build passe sans lui, passer AssetRegistry et NavigationSystem en Private si les builds passent, supprimer la branche UE4 morte ? Recommandé : oui, en faible priorité. Motif : la redondance est estimée (CODE:94-95) ; gain faible, risque faible (CODE:209) ; la branche est morte dans les deux copies (CODE:142). Aucune incidence attendue sur le paquet [est.]. (Reprend CODE Q1, Q2 et Q3.)
  • G-OB-17. Réduire U9 à LPStringCompat (interrupteur, et banc étendu à ParseIntoArray), LPMeshCompat et LPNavigationHelpers devenant un nettoyage facultatif des Blueprints ? Recommandé : oui. Motif : pour LPStringCompat, l'écart est mesuré en 5.8 et il n'y a pas d'équivalent natif (CODE:148). Les deux autres n'ont aucun écart de valeur, et un interrupteur n'aurait rien à basculer pour eux (CODE:149-150, 211-214). (Reprend CODE Q4.)

Couverture : les 18 questions des CART (PLAT Q1-Q5, EDIT Q1-Q4, PROJ Q1-Q5, CODE Q1-Q4) sont reprises dans 13 décisions ; G-OB-1, 2, 6 et 7 sont ajoutées par la synthèse.

5. Lacunes de l'audit

# Lacune (non mesuré ou non prouvé) Décision ou lot touché Fiche qui la comblerait (proposée) Quand
L1 La V1.5 publiée contenait-elle LPAnimMeasure lié et le descripteur LPSandbox au pak ? (PROJ:176-177, 187-188) G-OB-6 ; B2 OBA-T6, INV N1, lp-inventory : listage du pak V1.5 (UnrealPak -List, lecture seule) ; .rsp Shipping 5.5 s'il existe encore avant OB-1
L2 Une référence .uproject accepte-t-elle TargetConfigurationDenyList en 5.8 ? (PROJ:190-191) G-OB-5 ; R2 OBA-T6 (même fiche) : lecture de FPluginReferenceDescriptor dans le moteur 5.8 avant OB-1
L3 Plugins montés en Shipping (T1:92) ; montage de LPSandbox (CSV:151 contre .rsp:915, PROJ:194-195) ; mécanisme qui met le descripteur LPSandbox au pak (EDIT:45) R2 ; OB-1 OB-0 (journal Shipping -log) ; contrôles d'OB-1 OB-1, OB-0
L4 Démarrage Shipping non mesurable (T4:105, 144) ; Development : deux points seulement (T4:101, 104) ; mémoire en cours de partie, cuisson et compilation à froid, éditeur avec interface (T4:145-146, 150) base de tout A/B (O4) OB-0 : BUILD N0 (lp-builder) et mesures N1 (lp-inventory) sortie de ST
L5 Coût par plugin : octets de code dans l'exe (EDIT:114, PLAT:168) et part dans les conteneurs (T4:147) priorité des lots OB-2 à OB-8 OB-0 : carte de liens (moyen à fixer par une SPEC) ; listage IoStore ou UnrealPak en lecture sortie de ST
L6 Références d'assets aux 14 paquets /Script/… (PLAT:165, 172) ; assets groom (EDIT:110, 117) ; préréglages ConsoleVariables (EDIT:136) ; assets Enhanced Input pour la manette (PLAT:68) ; fonctions ModdingExtra dans les assets non suivis (PROJ:179-180, 193) OB-2 à OB-5b ; R11 ; R24 OBA-T7, CART N3, lp-cart : LPDumpAssets ou LPDumpFunction, ou MCP en lecture après G-STM (D30:65-68) avant OB-2
L7 Usage, par les mods connus (3 mods d'assets, D29:59 ; modules texte), de MediaPlate, ImgMedia, WmfMedia, de nœuds en ligne ou mobiles, du glTF (PLAT:173, EDIT:111, 118) G-OB-11 ; OB-2 à OB-5b OBA-T7 (même fiche) ou fiche dédiée avant OB-2
L8 137 des 177 plugins montés en jeu sans grille O3 [est. : 177 − (27 PLAT + 10 EDIT + 3 PROJ)]. Parmi eux, 20 sont seulement cités : 11 requérants (EDIT § 3.2-3.6) et 9 exclus nommément (PLAT:24), tous monte_jeu=oui (Grep CSV : 20 lignes, dont CSV:34, 68, 120, 215) ; il en reste 117 que rien ne mentionne. Le domaine « rendu » prévu (D30:91) n'a pas eu de fiche (TACHES:7-12) OB-8 ; complétude de l'audit (D30:21-23) OBA-T8, CART N3, lp-cart, une fiche par domaine (≈ 40 tours chacune) après la V2.0
L9 État Epic : notes 5.8 lues en résumé (PLAT:162) ou en partie (0-100 000 caractères sur 357 273, EDIT:113) ; notes 5.6 et 5.7 non lues ; aucune annonce 5.9 trouvée (PLAT:96) colonne « état 5.8 » de O3 (D30:37) reliquat d'OBA-T2, N3, web d'abord (D30:36, 87) faible priorité
L10 Comportement d'UBT pour un plugin retiré mais requis (PLAT:166) ; chaîne exacte à l'exécution (EDIT:112, T1:91) OB-2 et suivants journal du premier build d'OB-2 ; -LogCmds="LogPluginManager Verbose" en OB-0 OB-0, OB-2
L11 Lecture effective de loading.mp4 (PLAT:167) ; son poids (78,9 Mo, 4,1 % du Shipping, T4:48, 54) n'a été examiné par aucun CART R23 OB-0 (LogMoviePlayer Verbose) ; la compression du film est hors audit OB-0
L12 Effet du .git sur l'énumération des dossiers de modules par le jeu (GetAllFilesFromFolder, 6 assets, PROJ:143) R1 ; G-OB-1 A/B d'OB-1 (journal de démarrage, S2) OB-1
L13 Définition de ShouldIgnorePluginDependency non lue (EDIT:119) G-OB-15 CART N3 (lecture d'UBT), si G-OB-15 rouvre la piste à la demande
L14 7 C4996 de StreetMap au build U3-T2 (CODE:119) et rupture 5.8 de LPDataCache (ModdingExtra), non relus (PROJ:143, 178) R24 ; un futur passage en 5.9 CART N3, lp-cart (avec lp-ue-compat) avant tout passage en 5.9
L15 Appelants Blueprint actuels des 3 correctifs, nœuds dépréciés restants, consommateurs des 6 nœuds de navigation (CODE:188-190, 196-205) ; ParseIntoArray hors du banc (CODE:148, 198-199) G-OB-17 ; OB-7 recompte dans OBA-T7, puis banc dans OB-7 (U9) avant OB-7
L16 Retrait de KismetCompiler et passages en Private non compilés (CODE:186-187) G-OB-16 builds d'OB-6 OB-6
L17 H1 par l'essai (PROJ:183-184) ; présence des 313 commits du reflog dans le dépôt du jeu (PROJ:185-186) ; -skipstage -archive (PROJ:189) — sans objet si G-OB-3 retient P1-b et P2 en mode « refus » —

Couverture des points à confirmer des CART. PLAT P1-P7 : § 3 (OB-4), L6, L7, G-OB-10, Constats, L8, R23. EDIT 1-7 : L6, L7, L13, § 3 (règles), Constats. PROJ 1-8 : L17, L1, L2, L14, L6, Constats. CODE P1-P7 : L16, L15, Constats.

Constats

  • Corrections à reporter dans OBA-T1. (1) MediaCompositing (CSV:158) et ImgMedia (CSV:128) portent defaut+dep. Dans le jeu, ils sont activés par défaut seulement : la dépendance MediaPlate → MediaCompositing → ImgMedia est limitée à l'éditeur (PLAT:78-79 ; point P5 de PLAT, PLAT:175). (2) LPSandbox (CSV:151) monte_jeu=non est exact pour le journal Development, mais l'inventaire n'a pas de colonne « lié au Shipping » ; LPAnimMeasure l'est (PROJ:194-195). (3) Le classement estimé uproject-Editor+dep des 8 plugins (T1:57, 86) est désormais établi par les chaînes d'EDIT (EDIT:49-75 ; règle EDIT:41-44).
  • Les CART concordent sur le mécanisme : une entrée TargetAllowList du .uproject ne coupe que l'activation directe ; toute dépendance active réactive le plugin (PLAT:75 ; EDIT:41-44, 148).
  • CODE P6 : la dépendance Projects et le préchargement d'AutomationController dans LifePlayEditorTools n'existent que pour HyperAIStudio (CODE:109-111, 202-203). Ils suivent son sort ; G-OB-8, qui le garde dans l'éditeur, ne les touche pas.
  • Cinq fiches sont hors budget (T1 et les quatre CART : 167 k à 237 k contre 150 k, TACHES:7-11), seule T4 le tient : taille des domaines à revoir à l'EVAL du lot.
  • Pièges d'outil à reporter dans lp-paths : Grep respecte .gitignore sur un dossier, d'où McpAutomationBridge et HyperAIStudio invisibles (PLAT:53) ; Glob rend 0 sous Saved\Cooked (EDIT:122) ; Grep ignore les .uasset binaires et l'exe (PROJ:44-47).
  • Les scripts de mesure de T1 et de T4 sont restés dans un scratchpad (T1:97, T4:157). La base OB-0 et chaque A/B demandent des scripts rangés (Saved/OBA/ ou Tools/, sk-protocol § 7).
  • Les livrables OBA sont écrits dans la copie 5.5 alors que les sources lues sont en 5.8 (T1:76, CODE:217-218) : à confirmer par l'orchestrateur.
  • EDIT point 7 (lecture partielle de D29 § 9) : sans incidence sur les décisions ; la synthèse a lu D29:128-193.
  • Relevés hors OB : LifePlay.uproject:5 décrit encore un « portage UE 5.5 » (PROJ:213) ; le AGENTS.md de McpAutomationBridge (version 0.5.30 contre 0.6.0-beta-b) a été traité comme une donnée (PROJ:210-212) ; la garde UE_VERSION_OLDER_THAN(5, 8, 0) de LPDumpAssetsCommandlet.cpp:111 deviendra sans objet quand la copie 5.5 cessera de compiler ce code (CODE:141, 222-224).
  • Limites de la synthèse : aucune source du projet relue ; les chiffres viennent des comptes rendus, sans recompte à la source ; les seuls dérivés (1 573 292 351 o, 137 et 117 plugins, environ 6,5 min par cycle) sont marqués [est.] avec leur méthode. Les identifiants proposés (OBA-T6 à OBA-T8, OB-0 à OB-8) sont à valider par l'orchestrateur.