40 KiB
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· T4OBA-T4-INV.md· PLAT, EDIT, PROJ, CODEOBA-T23-<domaine>-CART.md· TACHESOBA-TACHES.md· CSVOBA-T1-plugins.csv(deux Grep ciblés pour lever deux doutes, cités où ils servent). - Cadre (copie 5.8,
Docs\Migration\) : D3030_Projet_Audit_Obsolescence.md(en entier) ; D2929_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
.gitdes modules (450 763 872 o, 22,3 % du Shipping, historique local), l'addon privé dans le Shipping (LPAnimMeasurelié, 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.csprouvées sur 30 (CODE:83) ;LPStringCompatreste 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é.inin'exclut un sous-dossier NonUFS (PROJ:58-68). Le.gitest 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 lignesModules/.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
a83ea56du 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 puisfilter-branchsansgc, 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.gitdistribuerait 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:47laisserait le.gitdans un build publié ; le seulBuildCookRundeToolsne 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.gitd'environ 60 o, qui contient un chemin local, reste copié. Variante b, dépôt hors de l'arbre aveccore.worktree: aucune entrée.git, mais chaquegit -C Content\Modulesdes 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
.gitrestant 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 moduleLPSandboxest exclu du Shipping (:22-29). Le reçu Shipping cite le plugin (:3924, avec le chemin local de l'addon ;:4084, dans la sectionBuildPluginsqui s'ouvre à:3964selon PLAT:22). Le pak contientRemappedPlugins/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.csdes 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 montageExternal, 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
.uprojectde LPSandbox estOptional(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"]surLPAnimMeasuredans l'addon ; (ii) référence.uprojectexclue de la configuration Shipping, siFPluginReferenceDescriptor5.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
.uprojectest réécrite. (iii) reste en repli (procédure manuelle).
B3. Aucun contrôle du contenu avant publication
- [ét.] Un build nommé
Shipping_V2.0contient déjà le.git(PROJ:79). Les fiches U8 lancent UAT directement, hors des scripts (PROJ:134).SplitModules.ps1etBuildDebug.ps1ne 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 ligneModules/.git/(méthode PROJ:35). (2)Manifest_UFSFiles_Win64.txt: 0 ligneLPSandbox. (3)LifePlay-Win64-Shipping.exe.rsp: 0 ligneLPAnimMeasure. (4) ReçuLifePlay-Win64-Shipping.target, sectionBuildPlugins: pas deLPSandbox(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
.rspdes cibles Game, 0 au manifeste UFS (EDIT:89-92). Aucun serveur MCP dans un build publié. - Python : aucune DLL mise en paquet ; seul
PythonScriptPluginPreloadest 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
BuildPluginsdu reçu Shipping, l'.rsp, le manifeste UFS et les lignesMountingd'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 deDisablePluginsdans leTarget.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.0le 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
.gitpar P1 variante b (dépôt Modules hors de l'arbre aveccore.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.gitdans le paquet. P1-a laisse un fichier.gitavec un chemin local, que P2 refuserait (PROJ:133-134). P3 garde le.gitdans le paquet et perd le reflog sans retour (PROJ:135, 185-186). Aucune clé.inine 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
.uprojectexclue de la configuration Shipping (si la clé existe, point 5 de PROJ) et l'exclusion deLPAnimMeasuredu Shipping dansLPSandbox.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à
LPAnimMeasureou le descripteurLPSandbox, 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
.uprojecten{"Name": "HyperAIStudio", "Enabled": true, "Optional": true, "TargetAllowList": ["Editor"]}et ajouterPlugins/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/excludede la copie 5.8 (PROJ:146, 214-215). À surveiller : une réécriture du.uprojectpar 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, sectionDefaultGame.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
.uprojectTargetAllowList: ["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: falseallé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
bDisableEnginePluginsByDefaultd'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
KismetCompilersi le build passe sans lui, passerAssetRegistryetNavigationSystemen 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),LPMeshCompatetLPNavigationHelpersdevenant un nettoyage facultatif des Blueprints ? Recommandé : oui. Motif : pourLPStringCompat, 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=nonest exact pour le journal Development, mais l'inventaire n'a pas de colonne « lié au Shipping » ;LPAnimMeasurel'est (PROJ:194-195). (3) Le classement estiméuproject-Editor+depdes 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
TargetAllowListdu.uprojectne coupe que l'activation directe ; toute dépendance active réactive le plugin (PLAT:75 ; EDIT:41-44, 148). - CODE P6 : la dépendance
Projectset le préchargement d'AutomationControllerdans 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.gitignoresur un dossier, d'où McpAutomationBridge et HyperAIStudio invisibles (PLAT:53) ; Glob rend 0 sousSaved\Cooked(EDIT:122) ; Grep ignore les.uassetbinaires 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/ouTools/,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:5décrit encore un « portage UE 5.5 » (PROJ:213) ; leAGENTS.mdde McpAutomationBridge (version 0.5.30 contre 0.6.0-beta-b) a été traité comme une donnée (PROJ:210-212) ; la gardeUE_VERSION_OLDER_THAN(5, 8, 0)deLPDumpAssetsCommandlet.cpp:111deviendra 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.