LifePlay-Revival/Docs/Migration/etat/OB/OBA/OBA-T5-EVAL.md

324 lines
40 KiB
Markdown
Raw Normal View 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.