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

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

147 lines
19 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 EVAL2-T1b-b — Niveau N1 — Modèle prévu sonnet | utilisé claude-sonnet-5-5 — Agent lp-inventory — Skills sk-protocol, sk-recount, lp-paths
# EVAL2-T1b-INV : sous-agents lancés pendant P3 (2026-10-14, reprise avec la coupure exacte)
Période P3 : 2026-10-11 05:30 → 2026-10-14 18:25:41 (UTC+2), sur l'heure du **premier événement** de chaque transcription (définition de l'EVAL, doc 33).
**Coupure P3a/P3b : 2026-10-13 12:07:16**, heure établie par EVAL2-T1a. Le script ne lit que `HH:MM` : il a reçu `--coupure "2026-10-13 12:07"`. Équivalent à 12:07:16 car aucun sous-agent ne débute à la minute 12:07 (Grep `,2026-10-13 12:07,` sur le CSV → 0). Table de sensibilité conservée au § 2.9.
Rien n'est écrit hors `etat\EVAL2\`. Aucun contenu de prompt ni de réponse n'est recopié : identifiants, types, chiffres.
## 1. Commandes exactes
Racine `D:\Game\LifePlay-master 5.8`. Fichiers : `etat\EVAL2\scripts\eval2_subagents.py` (copie paramétrée de `etat\EVAL\scripts\eval_subagents.py`, original intact, mêmes définitions, ajouts listés dans son en-tête) et `eval2_subagents_sessions.py` (rattachement aux sessions).
```
python -I "Docs/Migration/etat/EVAL2/scripts/eval2_subagents.py" --coupure "2026-10-13 12:07"
"D:/Game/Launcher/Engine/UE_5.8/Engine/Binaries/ThirdParty/Python3/Win64/python.exe" -I "Docs/Migration/etat/EVAL2/scripts/eval2_subagents_sessions.py"
python -I --version -> Python 3.14.4
python -I Tools/FicheStats.py --help (budgets : N0-N2 40 tours / 150 k ; N3-N5 60 / 250 k ; FicheStats.measure sert de contre-contrôle)
```
Ordre obligatoire : le premier écrit `data\subagents.csv` et `data\subagents-aggregats.md` (la sortie dit « coupure … 12:07 (EXACTE, passee en argument) ») ; le second ajoute des colonnes au CSV et écrit `data\subagents-sessions.md`. Relancer le premier remet le CSV à zéro.
Le second tourne sous le Python d'Unreal car le Python du Store (`WindowsApps\python`, 3.14.4) **ne voit pas** `%USERPROFILE%\AppData\Roaming\Claude\claude-code-sessions` (essai : `os.path.exists` → `False`, 0 fichier ; même chemin vu par `ls` : 67 fichiers). Piège : tout script qui lit `AppData\Roaming` doit utiliser un autre Python.
Sources lues : dossiers `%USERPROFILE%\.claude\projects\` `D--Game-LifePlay-master-5-8`, `…-5-8-Docs-Migration-etat-AG-P7` (0 sous-agent), `D--Game-LifePlay-master-5-5`, `…-5-5--claude-worktrees-measurement-tool-character-animations-028723` (0), `D--Game-LifePlay-Backup-5-5-P7-jetable-copie` ; sessions exclues `be193763…`, `b339a92a…` ; en-têtes d'agents `%USERPROFILE%\.claude\agents\*.md` (16 fichiers ; le projet n'a pas de dossier `.claude\agents`).
Recompte par une autre formulation (première version, 258 lignes inchangées par la coupure) : Grep count `^[0-9a-f]{8},a[0-9a-f]+,` sur le CSV → 258 ; Grep count `,lp-builder,` → 32 ; `tr -cd '\r' < fichier | wc -c` → 0 pour les trois sorties (LF). Les sommes P3a + P3b = 117 + 141 = 258 sont contrôlées par type (§ 2.2).
## 2. Comptes bruts (sortie des scripts ; détail complet dans `data\subagents-aggregats.md` et `data\subagents-sessions.md`)
### 2.1 Couverture
```
- dossiers_projet_lus : 5
- jsonl_subagents_profondeur_quelconque : 630
- jsonl_pattern_session/subagents : 630
- hors_fenetre_avant : 355 (hors_fenetre_apres : absent = 0)
- session_exclue_total : 17 ; session_exclue_dans_fenetre : 13
- retenus : 258
- controle FicheStats.measure (tours, pic, jetons, erreurs, resultats) : 0 ecart(s) sur 258 agents
- jetons lus (total) : 562445300 (562.4 M)
- fiches reconnues (motif principal) : 118 ; non reconnues : 140
- niveau lu dans la fiche : 56 ; déduit de l'agent : 202
- dernier message assistant : handback=239, texte=18, outil=1
```
630 = 258 + 17 + 355 (cohérent). **P3a 117 agents (194.6 M jetons) + P3b 141 (367.9 M) = 258 (562.4 M).** Rattachement aux sessions : 258 agents dans 37 sessions parentes ; 67 fichiers `local_*.json` lus, 65 titrés ; 24 des 37 sessions parentes sans titre dans la table ; **Big Boss (`ebc15012…`) n'a lancé directement qu'1 agent** (lp-gardien, P3b) ; `92a3927f…` : 0. Les sous-agents viennent des sessions de lot : STE `36e41eab` 55, STG `8d9744a8` 45, CAM `e4f91a9c` 42 (soit 142 sur 258).
### 2.2 Par type d'agent, P3 / P3a / P3b (n ; tours med/moy/max ; pic med/max en k ; jetons en M ; % hors budget)
| type | P3 n | tours med / moy / max | pic med / max | jetons M | % hors budget (EVAL) | P3a n | P3b n |
|---|---|---|---|---|---|---|---|
| lp-validator | 77 | 16 / 18.7 / 57 | 102 / 347 | 142.1 | 26 % | 21 | 56 |
| lp-mcp-bp | 37 | 44 / 43.6 / 82 | 129 / 236 | 144.2 | 46 % | 3 | 34 |
| lp-gardien | 34 | 14 / 15.2 / 36 | 64 / 215 | 33.1 | 6 % | 30 | 4 |
| lp-builder | 32 | 19 / 17.7 / 55 | 90 / 136 | 35.9 | 3 % | 8 | 24 |
| lp-writer | 18 | 16.5 / 17.6 / 36 | 91 / 257 | 25.3 | 11 % | 17 | 1 |
| lp-impl | 16 | 23 / 23.3 / 36 | 206 / 364 | 55.4 | 12 % | 9 | 7 |
| lp-cart | 14 | 36.5 / 37.1 / 64 | 307 / 451 | 92.2 | 79 % | 5 | 9 |
| lp-inventory | 7 | 20 / 22.9 / 57 | 106 / 254 | 14.2 | 29 % | 6 | 1 |
| lp-diag | 5 | 31 / 29.8 / 40 | 171 / 193 | 16.6 | 60 % | 0 | 5 |
| opus-xhigh | 1 | 18 | 233 | 2.9 | 0 % | 1 | 0 |
| essais (essai-bash 4, essai-pwsh 3, mcpa-probe-* 8, general-purpose 2) | 17 | 1-4 | ≤ 66 | 0.4 | 0 % | 17 | 0 |
| **TOTAL** | **258** | **19 / 22.1 / 82** | **103 / 451** | **562.4** | **23 %** | **117** | **141** |
P3a : tours med 15 / moy 16.9 / max 82, 194.6 M, 16 % hors budget (4 % sur les tours, 15 % sur le pic). P3b : med 23 / moy 26.4 / max 65, 367.9 M, 29 % hors budget (13 % tours, 21 % pic). Pic > 150 k : P3 61/258 (55 % des jetons), P3a 25/117 (65 %), P3b 36/141 (50 %). Erreurs d'outil : 264/8983 résultats (2.9 %) ; P3a 3.4 %, P3b 2.7 %.
### 2.3 Par modèle (famille du modèle majoritaire des messages)
| famille | P3 agents / jetons M / tours | P3a agents / jetons M (part jetons) | P3b agents / jetons M (part jetons) | % hors budget P3 (P3a / P3b) |
|---|---|---|---|---|
| sonnet-5-5 | 155 (60 %) / 294.8 (52 %) / 2906 (51 %) | 84 / 128.0 (66 %) | 71 / 166.8 (45 %) | 23 % (18 % / 30 %) |
| opus-5-5 | 61 (24 %) / 231.3 (41 %) / 2215 (39 %) | 15 / 60.6 (31 %) | 46 / 170.7 (46 %) | 38 % (27 % / 41 %) |
| haiku-5-5 | 42 (16 %) / 36.3 (6 %) / 586 (10 %) | 18 / 6.0 (3 %) | 24 / 30.4 (8 %) | 2 % (0 % / 4 %) |
Aucun autre modèle (pas de fable). Tours moyens par famille sur P3 : sonnet 18.7, opus 36.3, haiku 14.0.
### 2.4 Par niveau (EVAL : « Niveau Nx » lu dans la fiche, sinon déduit ; `?` = déduit)
| niveau | P3 n | tours med / moy | pic med (k) | % hors budget | P3a n | P3b n |
|---|---|---|---|---|---|---|
| N0 | 7 | 12 / 13.1 | 84 | 0 % | 0 | 7 |
| N1 (lu) | 36 | 13.5 / 15.4 | 84 | 3 % | 9 | 27 |
| N1? (déduit) | 174 | 18 / 20.9 | 100 | 25 % | 93 | 81 |
| N3 (lu) | 13 | 54 / 46.8 | 122 | 23 % | 0 | 13 |
| N3? (déduit) | 28 | 30 / 28.9 | 240 | 43 % | 15 | 13 |
| N2, N4, N5 | 0 | | | | 0 | 0 |
Piège de définition (hérité de `FicheStats.level_of`, laissé tel quel pour comparer à l'EVAL) : `lp-mcp-bp` et `lp-diag` ne sont pas dans `AGENTS_N3` ; sans « Niveau Nx » dans l'en-tête de la fiche, ils sont classés **N1 (budget 40 tours / 150 k)** alors que leur `maxTurns` est 75. Les passages `lp-mcp-bp` sans niveau lu sont classés N1 : leur 43 % de « tours > budget » est mesuré contre 40 ; contre 60 (budget N3) le relevé donne 5 passages au-dessus (tours 82, 65, 63, 62, 62), soit 14 % de 37.
### 2.5 Coupés, maxTurns, escalades
- **Coupés sans compte rendu** (dernier message = outil/vide) : **1** sur 258 : REG1-T1 (lp-inventory, P3a, 16 tours, loin du plafond). Dernier message : handback 239, texte 18.
- **Tours ≥ plafond de niveau** (50 N0-N2, 75 N3-N5) : 13 (P3a 4, P3b 9), dont 10 `lp-mcp-bp` (artefact du niveau déduit N1). **Tours mesurés ≥ `maxTurns` de l'en-tête de l'agent** : 4 (P3a 3, P3b 1) — ARCH427-T1 (lp-inventory, 57 / 50), OUTC-T4b (lp-validator, 57 / 50), `lp-mcp-bp` STE-H10-GI1 (82 / 75), lp-builder « Build COMMUN-9 » (55 / 50). **Les 4 ont rendu un compte rendu** (handback ou texte). La mesure (messages assistant distincts avec usage) dépasse donc le plafond sans que l'agent soit coupé : `maxTurns` n'est pas journalisé dans les transcriptions (Grep `max_turns|Reached max|maximum number of turns|max turns` sur `D--Game-LifePlay-master-5-8` : 1 occurrence, dans un fichier de la session EVAL, exclue) ; **le nombre de coupes réelles par `maxTurns` est incertain, 0 prouvée**.
- **Escalades** (lp-cart-max, lp-impl-max, opus-max, fable-top) : **0** sur P3, P3a et P3b. Seul `opus-xhigh` : 1 (P7-T4b, P3a, N3, 18 tours, 233 k, handback). Paires par fiche lp-cart → lp-cart-max : 0 / 0 ; lp-impl → lp-impl-max : 9 fiches de base, 0 escalade. Escalades « par modèle » : l'en-tête de `lp-cart` est sonnet mais **4 `lp-cart` ont tourné sur opus** (P3a) ; l'en-tête de `lp-impl` est opus mais **2 `lp-impl` ont tourné sur sonnet** (P3a) : 6 agents dont la famille observée diffère de l'en-tête (cause non lue).
- Reprises : SendMessage 40 sur 37 agents (37 après un arrêt) ; reprises après arrêt, tous messages confondus : 45 sur 38 agents.
### 2.6 Agents de build (lp-builder) arrêtés par la limite de tours — liste nominative
32 `lp-builder` (**P3a 8, P3b 24**). Critère A : tours mesurés ≥ 50 (maxTurns de l'en-tête) ; critère B : dernier message = outil/vide.
| fiche / description | début | tours mesurés | tours déclarés / budget | dernier message | transcription |
|---|---|---|---|---|---|
| (aucun identifiant) « Build COMMUN-9 », session 8d9744a8 (STG) | 2026-10-14 11:42 | 55 (60 appels, 5.4 min, pic 107 k) | 40 / 40 | handback, « Résultat : réussi avec un écart. Build 0 erreur, paquet code 0… » | `%USERPROFILE%\.claude\projects\D--Game-LifePlay-master-5-8\8d9744a8-a87e-4585-95b9-b685062a77f3\subagents\agent-a9c185f0cb100b851.jsonl` |
Critère A : 1 (le cas COMMUN-9) ; critère B : 0 ; A et B : 0. **Aucun lp-builder n'a été coupé sans compte rendu.** COMMUN-9 a dépassé le budget de la fiche (mesuré 55 contre 40 déclaré : sous-comptage de 15 tours) et le plafond de 50 par la mesure, mais a livré (« Tours : 40 / 40 » déclaré ; mention d'une limite dans le message : 0). Fiche non reconnue par le motif (description « Build COMMUN-9 », sans identifiant `LOT-Tn`) ; la fiche d'origine est à chercher dans le registre de la session STG (non fait ici). Autres builders proches : COMMUN-7 32 tours (déclaré 31 / 40), « Dumps TopRight (GEL1-D1) » 19 tours (déclaré 18 / 15). Aucun autre builder au-dessus de 40 tours. Par période : P3a 0, P3b 1. lp-builder P3a : tours med 11 / moy 11.2 / max 29 ; P3b : 19 / 19.9 / 55.
### 2.7 Agents arrêtés par un refus du crochet
Comptes (P3 : P3a / P3b) : refus `ecriture-gardien` **83** sur 57 agents (**23 sur 16 / 60 sur 41**) ; refus du crochet `lp-mcp` (lecture) **1** sur 1 agent (MCPA-T1h, P3a, sonde `mcpa-probe-garde2`) ; refus de permission par heuristique de texte d'erreur 23 sur 12 agents (22 / 1) ; décisions de permission non `accept` : 106 (**47 / 59**). Détection : texte du résultat d'outil commençant par « Refus du crochet ecriture-gardien » (script `%USERPROFILE%\.claude\hooks\ecriture-gardien.py` l. 153-154).
**Agents arrêtés par un refus** (critère : le dernier résultat d'outil de la transcription est un refus et l'agent a fini par un texte ou un handback qui mentionne un refus) : **6, tous en P3a, tous des essais volontaires du crochet (P7)** : lp-builder en copie jetable (2026-10-12 23:08, agent a41511601853033f7), essai-bash ×3 (23:17, 23:18, 23:19), essai-pwsh ×2 (23:19, 23:20). Les 6 transcriptions sont listées avec leur chemin dans `subagents-aggregats.md` (section « Refus du crochet »).
Aucun agent de production n'est arrêté **net** par ce critère (0 en P3b). Mais 51 agents (57 − 6) ont reçu au moins un refus et ont continué ; deux cas concordent avec ORGA2-PROPOSITION § 1 (« 2 passages perdus sur refus », STE-H10-GI2) : `lp-mcp-bp` « STE-H10-GI1 » (2026-10-13 00:19, 15 tours, 1 refus) et « STE-H10-GI2 » (00:48, 51 tours, 1 refus). Le critère « dernier résultat = refus » ne détecte pas un agent qui rend la main après un refus suivi d'autres appels : **à confirmer par lecture des transcriptions listées**. La colonne « dernier message mentionne refus » compte aussi « aucun refus » : ne pas la lire comme un arrêt.
### 2.8 Usage par modèle rapporté à ORGA2-PROPOSITION (`etat\AG\ORGA2\ORGA2-PROPOSITION.md`)
La proposition (§ 1, § 2, § 6) pose : BUILD déjà au plancher (haiku), CART/VAL/DOC/gardien sonnet, DIAG et IMPL opus, `lp-mcp-bp` opus xhigh ; seule baisse à fort volume visée = `lp-mcp-bp` (« 16 passages relevés en trois jours », 6 à ≤ 3 tours du budget, 1 arrêt faute de budget, 2 passages perdus sur refus). Comparaison mesurée sur P3 :
| point de la proposition | mesure P3 |
|---|---|
| lp-mcp-bp = Opus xhigh | 37 passages Opus (3 en P3a, 34 en P3b), tous opus-5-5 ; 144.2 M = 26 % des jetons de P3 et 62 % des jetons Opus (Opus hors lp-mcp-bp : 87.1 M) |
| « 16 passages » | 37 sur P3 (période plus longue que celle relevée par la proposition, qui s'arrête au 2026-10-13) |
| passages à 3 tours du budget (60) ou au-delà | 5 passages à plus de 60 tours mesurés (82, 65, 63, 62, 62) ; le nombre à ≥ 57 n'est pas compté séparément |
| lp-mcp-bp tours | moyenne 43.6, médiane 44, max 82 (mesurés ; budget 60, plafond 75) |
| BUILD haiku inchangé | 32 lp-builder, tous haiku ; 3 % hors budget ; 0 coupé |
| VAL sonnet | 77 lp-validator, tous sonnet ; 142.1 M (25 % des jetons) ; 26 % hors budget ; médiane 16 tours |
| gardien sonnet | 34, tous sonnet ; 14 tours médians ; 6 % hors budget |
| CART sonnet xhigh « hors budget dans 55 % des cas » | lp-cart : 79 % hors budget (11/14 par le total des deux critères) ; 10 sonnet + 4 opus |
| IMPL opus | lp-impl 16 : 14 opus + 2 sonnet ; 12 % hors budget |
| DIAG opus | lp-diag 5, tous opus, 60 % hors budget (pic > 150 k, niveau déduit N1) |
Part des familles sur P3 : sonnet 60 % des agents / 52 % des jetons ; opus 24 % / 41 % ; haiku 16 % / 6 %. De P3a à P3b la part Opus des jetons passe de 31 % à 46 %, la part Sonnet de 66 % à 45 % (effet du sprint COMMUN : 34 passages lp-mcp-bp en P3b). Aucun essai `lp-mcp-bp-s` (Sonnet) dans P3 (aucun type d'agent de ce nom).
### 2.9 Sensibilité à la coupure (agents P3a / P3b selon l'heure de coupure le 2026-10-13)
| coupure | P3a n | P3b n | P3a jetons M | P3b jetons M |
|---|---|---|---|---|
| 00:00 | 78 | 180 | 102.3 | 460.2 |
| 06:00 | 88 | 170 | 124.9 | 437.5 |
| 08:00 | 94 | 164 | 139.7 | 422.8 |
| 10:00 (ancienne coupure provisoire) | 104 | 154 | 174.8 | 387.6 |
| **12:07 (coupure exacte, ligne 12:00 = 117 / 141, mêmes chiffres)** | 117 | 141 | 194.6 | 367.9 |
| 14:00 | 125 | 133 | 206.5 | 355.9 |
| 18:00 | 152 | 106 | 293.3 | 269.2 |
La coupure exacte déplace 13 agents de P3b vers P3a par rapport à la coupure provisoire de 10:00 (+19.8 M jetons en P3a). Les 3 passages `lp-mcp-bp` de P3a sont du 2026-10-13 00:19 à 00:48 ; STE-H3d (12:47) et les suivants restent en P3b.
### 2.10 Ce qui n'est pas mesuré ici
- Contenu des fiches, correspondance fiche → registre `<LOT>-TACHES.md` (140 agents sur 258 sans identifiant de fiche reconnu ; description et titre de session donnent le lot dans la plupart des cas, colonnes `description` et `session_titre` du CSV).
- Tours déclarés vs mesurés : 188 agents avec ligne « Tours : n / b » ; écart mesuré − déclaré : médiane +2, moyenne +2.9, min −3, max +57 ; mesure > déclaré pour 136, égal 42, inférieur 10. 6 agents déclarent plus que leur budget (OUTC-T4b 57/55, CAM-B2b-F5 62/60, STE-ORG 63/60, GEL1-D1 18/15, CAM-B2n 63/60, B2p-I 42/40). Le sous-comptage déjà relevé en OBB persiste.
- Refus du **mode auto** : seulement les décisions de permission journalisées et l'heuristique de texte ; aucun comptage fiable.
## 3. Écarts au compte attendu de la fiche
- La coupure est exacte (12:07:16, passée à la minute près, sans effet sur les 258 agents).
- La fiche attendait un niveau N0-N5 par agent : N2, N4 et N5 n'apparaissent pas (0) ; 202 niveaux sont déduits par `level_of` (définition EVAL).
- « Agents de build arrêtés par la limite de tours (cas connu COMMUN-9) » : le cas est retrouvé (55 tours mesurés) mais **non coupé** : le compte rendu est rendu. Rien ne prouve un arrêt par `maxTurns` pour aucun agent de P3.
- Escalades : 0 pour `lp-cart-max`, `lp-impl-max`, `opus-max`, `fable-top` ; zéro vérifié sur la colonne `type_agent` du CSV (258 lignes).
- Table session ↔ transcription lue : 67 fichiers, 65 titres ; 24 sessions parentes sans titre. `Docs-Migration-etat-AG-P7` : dossier lu, 0 sous-agent.
- Les chiffres FicheStats ne sont pas rejoués par `--lot` ici ; le contrôle `measure()` donne 0 écart sur 258.
## 4. Établi / estimé / incertain
**Établi** (sortie des scripts) : 258 agents retenus (CSV 258 lignes, Grep) ; P3a 117 + P3b 141 ; 5 dossiers de projet lus, 630 transcriptions vues ; contrôle `FicheStats.measure` 0 écart ; répartition par type, modèle, niveau (définitions EVAL) ; 0 escalade `*-max`/`fable-top`, 1 `opus-xhigh` ; 1 coupé sans compte rendu (REG1-T1) ; COMMUN-9 : 55 tours mesurés, compte rendu rendu (`agent-a9c185f0cb100b851.jsonl`) ; texte du refus lu dans `ecriture-gardien.py` l. 153-154 ; fichiers de sortie en LF (0 CR sur la première version ; non recontrôlé après relance, les scripts écrivent en LF).
**Estimé** : arrêt par `maxTurns` (la mesure dépasse le plafond de 5 à 7 tours sans coupure observée) ; « arrêtés par refus » = 6 d'après le critère « dernier résultat = refus » (essais P7 volontaires) ; la part des refus à tort ou utiles relève de EVAL2-T6 ; la cause des 6 écarts modèle observé / en-tête n'est pas lue.
**Incertain** (essai qui trancherait) : (a) coupures réelles par `maxTurns` : lire la fin des transcriptions des 4 agents ≥ plafond ; (b) agents de production arrêtés par un refus puis relancés : lire les 51 transcriptions à refus, ou croiser avec `refus.csv` de T6 ; (c) niveau des 202 agents déduits : croiser avec les registres `*-TACHES.md` ; (d) 283 transcriptions modifiées dans la fenêtre (`find -newermt`, mtime) contre 258 + 13 exclues = 271 par premier événement : écart attendu, non élucidé fichier par fichier.
## Fichiers à commiter
Aucun par cet agent (pas de git). Fichiers écrits ou réécrits, sous `D:\Game\LifePlay-master 5.8\Docs\Migration\etat\EVAL2\` (A, dépôt du jeu ; le gardien décide) : `EVAL2-T1b-INV.md` ; `data\subagents.csv` ; `data\subagents-aggregats.md` ; `data\subagents-sessions.md` ; `scripts\eval2_subagents.py` ; `scripts\eval2_subagents_sessions.py`.
Tours : 31 / 40 (cumul des deux passes : 25 + 6)
## Constats
- Piège du Python du Store : `AppData\Roaming` invisible (voir § 1) → utiliser `D:\Game\Launcher\Engine\UE_5.8\Engine\Binaries\ThirdParty\Python3\Win64\python.exe`.
- `FicheStats.AGENTS_N3` ignore `lp-mcp-bp`, `lp-diag`, `lp-cart-max` : leurs budgets sont mal classés en « hors budget » sans ligne « Niveau Nx ».
- `--coupure` n'accepte que `AAAA-MM-JJ HH:MM` (pas de secondes) : limite du script, sans effet ici.