LifePlay-Revival/Docs/Migration/etat/AG/PIPE1/PIPE1-REVUE-02.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

224 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Fiche PIPE1-REVUE-02 — Niveau N3 — Modèle prévu opus xhigh | utilisé claude-opus-5-5 — Session Medium-xHigh · PIPE1
# PIPE1-REVUE-02 : revue critique du barème PIPE1-SPEC-02 (2026-10-15)
Révision du 2026-10-15 (demande de l'utilisateur) : le § 4 est remplacé par `PIPE1-REVUE-02-MODELE.md` (grille
question × enjeu). F14 et l'état de M4 y sont corrigés : base O0 et critères du projet, export Insights sans interface
éprouvé en 5.5 (F15 à F18).
Objet : `AG\PIPE1\PIPE1-SPEC-02-BAREME.md` (barème des demandes de mesure → palier M0 à M4). Revue faite seule, sans
sous-agent. Lecture seule : aucun skill ni autre fichier modifié, aucun éditeur, build, jeu ni téléchargement, aucun git
qui écrit. Niveaux : **établi** (fichier:ligne relu pendant cette revue, entrée de BC établie), **estimé** (déduction),
**incertain** (non vérifiable sans essai).
## 0. Verdict en bref
- Le score additif est **à remplacer** : il envoie une question de fonction (A3) vers M1, qui n'y répond pas, et il
met dans le score de départ un critère (D, doute) qui n'existe qu'après une première mesure (§ 3).
- Deux faits d'outillage sont faux : **la build Test n'existe pas avec le moteur du lanceur** (F2), et **`-csvprofile`
n'est pas une option de ligne de commande** ; l'option voisine `-csvCaptureFrames` est proscrite par le projet (F5, F6).
- M0 n'est pas « sans prérequis » : il faut une build Development, une partie jouée et `-LPHitchLog` (F10, F11).
- M2 n'est pas un cran au-dessus de M1 : il répond à une autre question (cadence de la Shipping). Le joindre à M1
pour G3 / G4 coûte un palier non éprouvé sans rien prouver de plus.
- Les budgets de M1 (≈ 30 k) et de M1 + M2 (≈ 50 k) sont sous le coût fixe d'un agent neuf (55 à 140 k) : ils ne
tiennent que **sans agent**, par un script lancé par la session (§ 6).
- Le projet a déjà des lanceurs de mesure (Session C pour le CSV, Session A pour Insights) que le barème ignore :
les reprendre coûte moins que de réinventer les recettes (F7).
## 1. Faits vérifiés (moteur 5.8 local `D:\Game\Launcher\Engine\UE_5.8\Engine\`, projet)
| # | Fait | Preuve | Niveau | Effet sur le barème |
|---|---|---|---|---|
| F1 | CSV Profiler compilé partout sauf en Shipping (donc en Development et en Test) | `Source\Runtime\Core\Public\ProfilingDebugging\CsvProfilerConfig.h:9-10, :30-31` | établi | M1 possible en Development |
| F2 | Le moteur installé n'a pas de configuration Test pour un jeu Win64 : seulement DebugGame, Development, Shipping | `Config\BaseEngine.ini:4002-4007` ; dossier `Intermediate\Build\Win64\x64\UnrealGame\` = DebugGame, Development, Shipping | établi (le refus d'UBT sur `-Config Test` est estimé, non essayé) | retirer « Test » de M1 ; la build instrumentée est Development, plus lente donc pessimiste (R4-11) |
| F3 | `StartFPSChart` / `StopFPSChart` hors Shipping ; fichiers écrits si `ALLOW_DEBUG_FILES` (1 en Development et en Test) ; sortie `Saved\Profiling\FPSChartStats\` | `Source\Runtime\Engine\Private\UnrealEngine.cpp:5752` (`#if !UE_BUILD_SHIPPING`) à `:5826-5828`, `:6664-6665` ; `Core\Public\Misc\Build.h:260-261, :288-289, :316-317` ; `ChartCreation.cpp:1243` | établi | utilisable en Development ; redondant avec le CSV : le FPS chart démarre lui-même une capture CSV si son réglage le demande (`ChartCreation.cpp:27-28, :1561-1573`). Option, pas socle |
| F4 | `-ExecCmds` n'est lu que hors Shipping (ou en build PGO) | `UnrealEngine.cpp:2543, :2552` | établi | la build alpha Shipping ne se pilote pas par commandes : seule une mesure externe (M2, M3) la voit |
| F5 | Aucune option de ligne de commande `-csvprofile` : `CsvProfile` est le nom de la commande console ; options lues : `csvCaptureFrames=`, `ExitAfterCsvProfiling`, `csvGpuStats` | `Core\Private\ProfilingDebugging\CsvProfiler.cpp:1118` (commande) ; `:5049, :5177`, `:4309`, `:5098` (options) | établi (absence : grep sur `CsvProfiler.cpp` et `Engine\Private`) | écrire `-ExecCmds="csvprofile frames=N"` |
| F6 | `-csvCaptureFrames` est proscrit sur ce projet : la capture démarre avant le RHI et le moteur s'arrête | `Docs\09_Commandes_Utiles.md:167` ; `Docs\18_Build_Debug.md:66` ; `Docs\19_Plan_Outillage_Debug.md:159` ; `etat\BASES\REF\REF-OPERATIONNEL.md:20` | établi | la recette `lp-perf\recettes\csvprofile.md:14` le contredit (suite S1) |
| F7 | Lanceurs existants, déposés par `BuildDebug.ps1` : Session C (`-csvGpuStats -llm -llmcsv -ExecCmds="csvprofile repeat=20, csvprofile frames=9000"`), Session A (`-trace=cpu,frame,bookmark,loadtime,memory -statnamedevents -tracefile=… -LPHitchLog`) ; synthèse `Tools\SummarizeDebugCsv.ps1` (médiane FrameTime, images longues) | `Tools\debug\LifePlay_debug_sessionC_profil.bat:2-5` ; `LifePlay_debug_sessionA_insights.bat:7` ; `Tools\LISEZMOI.md:25, :35` | établi (existence) ; essai connu en 5.5 seulement, d'après l'exemple `LifePlay_Backup_5.5\Dbg-I6\SessionC` (`SummarizeDebugCsv.ps1:6`) : estimé | M1 et M4 ont déjà une recette du projet, à éprouver en 5.8 |
| F8 | Insights (trace) actif par défaut hors Shipping sous Windows, avec traces CPU et GPU | `Source\Programs\UnrealBuildTool\Configuration\Rules\TargetRules.cs:1327-1345` ; `Runtime\TraceLog\Public\Trace\Config.h:12-17` ; `Core\Public\ProfilingDebugging\CpuProfilerTrace.h:19-24` ; `RHI\Public\GpuProfilerTrace.h:13` | établi | M4 possible en Development ; la lecture d'un `.utrace` passe par l'interface (humain) ou par un export sans interface non vérifié en 5.8 (R4-09) |
| F9 | En Test, `STATS` vaut 0 par défaut ; la console reste active | `Build.h:314, :319-320` | établi | sans objet après F2 |
| F10 | Pas de journal en Shipping : `LifePlay.Target.cs:6-15` n'active pas `bUseLoggingInShipping` ; aucun `Saved\Logs` sous la build alpha, contre un `LifePlay.log` dans les 13 builds Development 5.8 de `D:\Game\` | relecture du fichier ; listage du 2026-10-15 | établi (listage), estimé (cause) | M0 ne lit qu'une partie jouée sur une build Development |
| F11 | La section « à-coups » de `LogStats -Stats` lit le message `LPDebug hitch`, écrit seulement avec `-LPHitchLog` (seuil 50 ms, `-LPHitchMs=`), hors Shipping | `Source\LifePlay\LPDebugSubsystem.cpp:7, :652-654` ; `Tools\LogStats.ps1:83` | établi | M0 compte les à-coups seulement si la partie a été lancée avec `-LPHitchLog` |
| F12 | PresentMon en direct : 0 image en 6 essais ; Windows émet bien l'ETW (50 Mo en 10 s) ; `--etl_file` jamais essayé (fichier supprimé avant) | `OPT0-TACHES.md:203-218` | établi | M2 non éprouvé ; il peut échouer pour la même cause que la capture en direct (incertain) |
| F13 | Journal d'AMD Adrenalin : format à relever sur un vrai fichier | `OPT0-TACHES.md:217` | établi (lacune) | M3 non éprouvé ; grain (par seconde ou par image) incertain |
| F14 | Aucun seuil PASS/FAIL standard | BC R4-14 ; `BC-INDEX.md:32` | établi | une précision « ± 5 % » n'a de sens qu'après mesure de la dispersion du poste |
## 2. Question 1 : les critères
| Critère | Pertinent | Mesurable à la demande | Recouvrement | Correction |
|---|---|---|---|---|
| A. Question | oui : c'est le seul qui désigne l'outil | oui | le niveau 0 « non-régression » n'est pas un grain mais un mode (A/B), qui vaut pour tous les grains | A devient le **grain** : 0 compteurs du jeu, 1 cadence, 2 fil, 3 fonction ; le mode A/B découle de C |
| B. Précision | oui, mais pour régler la statistique, pas l'outil | non pour « ± 5 % » tant que la dispersion d'une passe à l'autre n'est pas connue (F14 ; portable à GPU hybride, dispersion probablement forte : estimé) | avec A (A3 entraîne presque toujours B3) et avec C (plus l'enjeu monte, plus on exige) | B fixe le **nombre de passes N** et la statistique, sans changer le palier |
| C. Enjeu | oui | oui | le niveau 2 mêle un nettoyage sans gain (G2, preuve P2 + P3 + P4) et un gain revendiqué (G3, preuve P5) : `OPT0-A3-GRILLE.md` § 4 (G2 et G3) | C1 = réversible **sans** gain revendiqué ; C2 = gain revendiqué (BP, C++) ; C3 = rendu, plateforme ou peu réversible |
| D. Doute | oui, comme déclencheur | **non** : le doute naît d'un résultat, il vaut 0 à la première demande | avec la règle 1 (monter si D monte) : compté deux fois | D sort du score ; il ne sert qu'à monter d'un cran (R4 ci-dessous) |
Critères manquants :
- **V, build visée** : Development (instrumentée, pessimiste) ou ressenti Shipping. Il choisit l'outil pour une question
de cadence : seule une mesure externe voit la Shipping (F4, F10).
- **H, coût humain** : 0 aucun ; 1 geste de poste (session élevée, activation d'Adrenalin) ; 2 une partie jouée par
passe. C'est un **prérequis à réserver**, pas un point de score : un score plus haut ne doit pas acheter plus de
temps de l'utilisateur sans qu'il le sache.
- **N, reproductibilité** : passes par côté A/B et conditions figées (même build hors changement, même carte et même
scénario, secteur branché, même plan d'alimentation). Porté par B.
- **Durée et machine** : build Development à refaire (`BuildDebug.ps1`, BUILD-GO) ou déjà présente (F10). Prérequis.
## 3. Question 2 : le score additif envoie au mauvais palier
| Demande | Ancien calcul | Ancien palier | Pourquoi c'est faux |
|---|---|---|---|
| « Quel Blueprint coûte au menu ? » | A3 B0 C0 D0 = 3 | M1 | le CSV s'arrête à la catégorie ; la fonction ou le Blueprint demande M4 |
| « SM6 ne régresse pas ? » | A0 B1 C3 D0 = 4 | M1 | C3 exige GPU, cadence Shipping et session sans plantage (preuve P6, `OPT0-A3-GRILLE.md` § 2 et G6 au § 4) : **sous-mesure d'une décision coûteuse** |
| G3 Ticks de Person | A2 B2 C2 D0 = 6 | M1 + M2 | M2 ne dit rien du fil (au mieux MsGPUBusy, R11-04) : un palier non éprouvé (F12) payé sans preuve en plus |
| cadence globale, doute fort | A1 B2 C2 D3 = 8 | M1 + M2 | le doute fait monter le palier sans que la question change ; il faut d'abord savoir quelle mesure doute |
Règle plus sûre (adoptée au § 4.3) : **le palier est fixé par A (et V pour la cadence), C impose un plancher, B règle
le nombre de passes, D ne sert qu'à monter d'un cran après un résultat.**
## 4. Barème corrigé (tableaux prêts à copier)
### 4.1 Outillage
| Palier | Outil (recette) | Build | Répond à | Prérequis | État sur ce poste |
|---|---|---|---|---|---|
| M0 | `Tools\LogStats.ps1 -Compare <A>,<B> -Stats` sur `LifePlay.log` | Development | compteurs du jeu : F5, DESTROY, à-coups ≥ 50 ms | une partie jouée par côté (H2), lancée avec `-LPHitchLog` | outil en service ; à-coups seulement avec le drapeau (F11) |
| M1 | CSV Profiler par `-ExecCmds="csvprofile frames=N"` (lanceur Session C), puis `Tools\SummarizeDebugCsv.ps1` et PerfReportTool `-writeSummaryCsv` ; `-csvGpuStats` si le GPU est en jeu ; FPS chart en option. **Jamais `-csvCaptureFrames`** | Development (Test indisponible, F2) | cadence de la build instrumentée ; coût par fil et par catégorie (GT, RT, GPU) | build Development à jour (BUILD-GO si elle est à refaire) ; partie jouée, ou scénario par `-ExecCmds` | lanceur présent ; essai en 5.8 à faire (essai 5.5 seulement, estimé) |
| M2 | trace ETW hors ligne (`wpr` ou `logman`, fournisseurs relevés dans le source de PresentMon 2.6.0) puis `PresentMon --etl_file` | Shipping (alpha) ou Development | cadence réelle de la Shipping, à-coups vus à l'écran | session élevée (H1) ; disque : environ 5 Mo/s (F12) | jamais essayé ; peut échouer comme le direct (incertain) |
| M3 | journal de performance d'AMD Adrenalin | toutes | cadence (grain à relever) | activation par l'utilisateur (H1) | format inconnu (F13) |
| M4 | Unreal Insights par le lanceur Session A ; ajouter `gpu` aux canaux si le GPU est en jeu | Development | quelle fonction, quel Blueprint | lecture dans UnrealInsights par l'utilisateur, ou export sans interface à éprouver (R4-09) | lanceur présent ; lecture par un agent non éprouvée |
| (plus tard) | Gauntlet pour rejouer M1 sans humain : tests compilés en Development seulement (R11-17), éditeur hôte requis (R11-18) | Development | rejouer M1 | BuildCookRun | non éprouvé ; Tracy abandonné |
### 4.2 Critères
| Critère | Rôle | 0 | 1 | 2 | 3 |
|---|---|---|---|---|---|
| A. Grain de la question | **fixe le palier** | compteurs du jeu (F5, DESTROY, à-coups) | cadence globale | quel fil coûte (GT, RT, GPU) | quelle fonction / quel Blueprint |
| V. Build visée | change l'outil pour A1 | Development suffit | ressenti Shipping exigé | — | — |
| C. Enjeu | **plancher** | contrôle, aucune décision | réversible, sans gain revendiqué (nettoyage, réglage) | gain de performance revendiqué (Blueprint, C++) | rendu, plateforme ou peu réversible (SM6, Lumen) |
| B. Exigence | **nombre de passes et statistique** | oui / non, 1 passe | moyenne, 1 passe par côté | médiane, p95, p99, à-coups ; 3 passes par côté | série image par image ; 3 passes par côté et une trace |
| H. Coût humain | **prérequis réservé avant lancement** | aucun | geste de poste | une partie jouée par passe | — |
D (doute) n'est pas noté à la demande : il sert à la règle R4.
### 4.3 Règles
1. **Palier de base par A** : A0 → M0 ; A1 → M1 si V0, M2 si V1 (M3 en repli) ; A2 → M1 (`-csvGpuStats` si le GPU est
en jeu) ; A3 → M4, avec M1 pour situer les images en cause.
2. **Plancher par C** : C0 et C1 → rien de plus ; C2 → M1 en A/B (preuve P5) + M0 (preuve P4) ; C3 → M1
`-csvGpuStats` + M0 + cadence Shipping (M2 ou M3) + session sans plantage (ERR-138), et **décision explicite de
l'utilisateur** avant lancement.
3. **Palier retenu = base ∪ plancher.** B fixe N et la statistique ; H et la build sont réservés avant le BUILD-GO.
4. **Montée par D, d'un seul cran, après un résultat** : écart inexpliqué ou contradiction → M0 → M1 ; M1 → M4 (du fil
à la fonction) ; M1 ↔ M2 (Development contre Shipping). Jamais deux crans sans retour à Big Boss.
5. **A/B honnête** : même build hors le changement, même carte et même scénario, mêmes conditions de poste, N passes
par côté ; un chiffre M1 (Development) n'est jamais présenté comme un chiffre Shipping.
6. **Épreuve** (ancienne règle 3) : un palier jamais éprouvé en 5.8 l'est par une fiche à part (recette seule, budget
à part). Ordre proposé : M1, M4, M2, M3 (§ 8, point U3).
7. **Notation dans la fiche**, vérifiée par Big Boss au BUILD-GO :
`Mesure : A2 V0 C2 B2 H2 → M1 A/B ×3 + M0 (plancher C2) ; prérequis : build Development, 6 parties jouées`.
### 4.4 Budgets (jetons, estimés)
Base : un agent neuf coûte 55 à 140 k (chiffre de Big Boss ; 55 à 82 k pour un gardien, `PIPE1-SPEC-01.md:4-5`). Un
budget sous 55 k n'est donc tenable **que sans agent**.
| Palier | Rodé, sans agent (script lancé par la session) | Rodé, avec un agent | Première fois (épreuve, règle 6) |
|---|---|---|---|
| M0 | ≤ 10 k | inutile | — (outil en service) |
| M1 | ≤ 20 k, une fois le script enveloppe écrit | 60 à 80 k | 80 à 120 k |
| M2 | ≤ 15 k | 60 à 80 k | 90 à 140 k (fiche B2-ter) |
| M3 | ≤ 10 k | 55 à 70 k | 60 à 90 k |
| M4 | non tenable sans humain (lecture du `.utrace`) | 90 à 140 k | ≥ 120 k, décision explicite de l'utilisateur |
Comment les tenir :
- Aucun agent neuf pour M0 ni pour un M1 rodé : la session lance le script et lit sa synthèse. Si un agent est
nécessaire, reprendre une session lp-perf existante plutôt qu'en créer une (règle des sessions réutilisées).
- Sorties bornées : chaque script rend un JSON et un `.md` de 10 lignes au plus ; ni la session ni l'agent ne lisent
un CSV brut ou un journal entier (`LogStats -Pattern`, `-Tail`, `-Compare -Stats` seulement).
- Prompt de l'agent : les lignes utiles de la recette, pas le skill entier ; `maxTurns` par palier (M1 : 12 ; épreuve
M2 : 20 ; M4 : 25), estimés.
- Haiku baisse le prix par jeton, pas le nombre de jetons : l'objectif PIPE1 se mesure en jetons, le modèle se choisit à
part.
- Relevé réel par `Tools\FicheStats.py` ; budgets recalés après 3 mesures par palier.
## 5. Question 3 : chaque palier répond-il à sa question sur ce poste ?
| Palier | Réponse | Fait faux ou non vérifié dans la SPEC-02 |
|---|---|---|
| M0 | oui pour la non-régression des compteurs ; non pour la cadence (aucun temps d'image dans le journal) | « prérequis : aucun » est faux (F10, F11) |
| M1 | oui pour cadence (Development) et fil ; non pour la fonction | « build Test » impossible (F2) ; « `-csvprofile` » inexistant (F5) ; FPS chart utile mais redondant (F3) ; lanceur Session C ignoré (F7) |
| M2 | oui pour la cadence Shipping, **si** l'analyse hors ligne marche | « geste de l'utilisateur (ETW) » juste ; jamais essayé, peut échouer (F12) |
| M3 | incertain (format et grain inconnus) | non vérifié (F13) |
| M4 | oui pour la fonction, en Development | « build Development » juste (F8) ; lecture par un agent non éprouvée (R4-09) ; lanceur Session A ignoré (F7) |
## 6. Question 4 : budgets
Les budgets de la SPEC-02 comptent le travail d'analyse mais pas le coût fixe d'un agent neuf. Avec 55 à 140 k par
agent, « M1 ≈ 30 k, lp-perf Haiku » et « M1 + M2 ≈ 50 k » sont intenables ; « M1 + M4 ≈ 80 k » l'est à peine.
Correction au § 4.4 : deux colonnes (sans agent, avec agent) et une ligne d'épreuve séparée, puisque tous les paliers
sauf M0 sont encore à éprouver en 5.8 et que la règle 3 de la SPEC-02 s'appliquera donc à presque toute première
demande.
## 7. Question 5 : règles et exemples
- Règle 1 de la SPEC-02 (« le plus bas palier qui répond ») + score additif = **risque de sous-mesure** d'une décision
coûteuse (exemple SM6 au § 3). Corrigé par le plancher C (règle 2).
- Règle 1 (« monter si D monte ») compte D deux fois. Corrigé : D hors score (règle 4).
- Règle 2 : bonne ; la notation ajoute V, C, H et le plancher ; Big Boss refuse un lancement dont H n'est pas réservé.
- Règle 3 : bonne, mais elle touche M1 à M4 ; mieux vaut une épreuve planifiée par palier qu'au fil des demandes.
- Exemples : les deux lignes G3 et G4 font payer M2 sans motif ; G6 sort à 8 alors que c'est la décision la plus
coûteuse de la grille.
Exemples recalculés :
| Demande | A | V | C | B | H | Ancien palier | Nouveau palier | Budget (rodé, sans agent) |
|---|---|---|---|---|---|---|---|---|
| G2 nettoyage U9 : rien n'a régressé ? | 0 | 0 | 1 | 0 | 2 | M0 | M0 | ≤ 10 k |
| G3 Ticks de Person | 2 | 0 | 2 | 2 | 2 | M1 + M2 | M1 A/B ×3 + M0 | ≤ 30 k |
| G4 AnimBP thread-safe | 2 | 0 | 2 | 2 | 2 | M1 + M2 | M1 A/B ×3 + M0 | ≤ 30 k |
| G6 SM6 | 2 | 1 | 3 | 2 | 2 | M1 + M2 | M1 `-csvGpuStats` + M0 + M2 (ou M3) + session sans plantage ; décision de l'utilisateur | ≥ 45 k sans agent ; épreuves de M2 / M3 à part |
| à-coup inexpliqué après G3 | 3 | 0 | 2 | 3 | 2 | M1 + M4 | M4, avec M1 pour situer | 90 à 140 k (agent) ou lecture par l'utilisateur |
| « Quel Blueprint coûte au menu ? » | 3 | 0 | 0 | 0 | 1 | M1 | M4 | idem |
## 8. Changements et motifs
| # | Changement | Motif |
|---|---|---|
| C1 | Score additif remplacé par : palier par A (et V), plancher par C, N par B, montée par D | § 3 : contre-exemples de mauvais palier et de sous-mesure |
| C2 | D retiré du score de départ | inconnu à la demande ; compté deux fois avec la règle 1 |
| C3 | Critères V (build visée) et H (coût humain) ajoutés ; reproductibilité portée par B | la Shipping ne se mesure que de l'extérieur (F4, F10) ; le temps de l'utilisateur est le goulot |
| C4 | C2 scindé : sans gain revendiqué (C1) / gain revendiqué (C2) | la grille A3 exige P5 pour G3 et G4, pas pour G2 |
| C5 | M1 : « Test » retiré, `-ExecCmds="csvprofile frames=N"` au lieu de `-csvprofile`, jamais `-csvCaptureFrames`, lanceur Session C et `SummarizeDebugCsv.ps1` repris, FPS chart en option | F2, F3, F5, F6, F7 |
| C6 | M0 : prérequis « build Development, partie jouée, `-LPHitchLog` » | F10, F11 |
| C7 | M2 n'est plus empilé sur M1 : il sert à la cadence Shipping (V1) et au plancher C3 | il ne dit rien du fil ; non éprouvé (F12) |
| C8 | M4 : lanceur Session A ; lecture humaine tant que l'export sans interface n'est pas éprouvé | F7, F8, R4-09 |
| C9 | Budgets en deux colonnes (sans agent / avec agent) et épreuve à part | coût fixe d'un agent neuf : 55 à 140 k |
| C10 | Règle 5 (A/B honnête) ajoutée | sans N passes ni conditions figées, « ± 5 % » n'est pas mesurable (F14) |
## 9. Points à trancher par l'utilisateur
- **U1.** Adopter la règle « palier par A, plancher par C, D seulement après un résultat » à la place du score
additif ? (Recommandé.)
- **U2.** Accepter Development comme seule build instrumentée (chiffres pessimistes, Test indisponible avec le moteur
du lanceur) ? L'autre voie, un moteur compilé depuis les sources, coûte bien plus cher (estimé) ; non recommandée.
- **U3.** Ordre d'épreuve des paliers : M1 (Session C en 5.8), puis M4 (Session A), puis M2 (B2-ter), puis M3 ?
(Recommandé : M1 sert G3 et G4.) Ou M2 d'abord, si la cadence Shipping de l'alpha passe avant.
- **U4.** Faire écrire un script enveloppe pour M1 (lanceur Session C + `SummarizeDebugCsv.ps1` + PerfReportTool,
synthèse de 10 lignes), condition pour tenir M1 sous 20 k ?
- **U5.** Coût humain d'un A/B en B2 : 3 passes par côté, soit 6 parties jouées pour G3 ou G4. Acceptable, ou B1
(une passe par côté) tant que la dispersion du poste n'est pas mesurée ?
## 10. Suites (hors de cette revue, rien n'est fait)
- S1. Recette `lp-perf\recettes\csvprofile.md` : la ligne 14 utilise `-csvCaptureFrames` (proscrit, F6) et la ligne 7
propose « Development ou Test » (F2). Fiche à part sur le skill de l'addon.
- S2. BC R4-11 (« construire le banc sur une build Test ») et `OPT0-PIPELINE.md` P2a (« Development ou Test ») :
à corriger par F2.
- S3. Script enveloppe de M1 (si U4 = oui) : outil neuf, réservation de Big Boss.
## 11. Limites
- Rien n'a été lancé : le refus d'UBT en Test, l'arrêt du FPS chart commandé par `-ExecCmds` et l'essai de la
Session C en 5.8 ne sont pas vérifiés.
- La dispersion d'une passe à l'autre sur ce portable est inconnue ; les N passes de B sont estimées.
- Budgets estimés à partir du coût d'agent cité par Big Boss ; à recaler par `Tools\FicheStats.py`.
- Recherche d'essais passés limitée aux docs `Docs\` (grep) ; un essai CSV en 5.8 a pu m'échapper.