Fiche EVAL-T7 — Niveau N2 — Modèle prévu orchestrateur (Opus 5.5) | utilisé claude-opus-5-5 — Agent session « EVAL » — Skills sk-orchestrate, sk-recount # EVAL-STATS : statistiques de l'organisation multi-agents, 2026-10-08 05:30 → 2026-10-11 05:30 (2026-10-11) Sources : les 7 relevés `EVAL-T1a` à `EVAL-T6` (`lp-inventory`), recomptés par l'orchestrateur à réception (`sk-recount`, § 9). Tables : `data\*.csv`. Scripts rejouables : `scripts\*.py`. Ces scripts sont ignorés par git (`.gitignore:75`), comme ceux de `Saved\STAT1\` (doc 31) : ils restent sur le disque. Heures : locales (UTC+2). « h active » = somme des écarts ≤ 10 min entre événements horodatés, toutes sessions confondues (méthode du doc 31). Les sessions parallèles ne sont pas additionnées. ## 0. Sous-périodes | | P0 | P1 | P2 | |---|---|---|---| | Bornes | 10-08 05:30 → 13:30 | 10-08 13:30 → 10-10 10:45:20 | 10-10 10:45:20 → 10-11 05:30 | | Organisation | agents génériques, avant `lp-*` | agents `lp-*`, chaque session commite | **Big Boss** (file de la copie UE, jeton du journal) + **gardien** (`lp-gardien`, tickets) | | Heures de calendrier | 8,0 | 45,25 | 18,75 | | Heures actives (toutes activités) | 3,70 | 25,95 | 11,68 | | Sessions principales actives | 4 | 21 | 12 | | Heures-sessions (somme des sessions) | 3,09 | 27,61 | 29,39 (parallélisme moyen 2,5) | Début de P2 = premier événement de la session titrée « Big Boss » (`92a3927f`, 10:45:20). Premier commit sur ticket du gardien : `3aaaf2c`, 10:45:50 (T2). P0 et P1 recouvrent la fenêtre du doc 31 (« après » = 10-08 13:30 → 10-09 16:41, inclus dans P1). ## 1. Production | Indicateur | P0 | P1 | P2 | Total | Commande, compte brut | |---|---:|---:|---:|---:|---| | Commits distincts (jeu 5.8 + addon + Modules 5.8 + jeu 5.5 propre) | 5 | 80 | 47 | **132** | `EvalT2_Commits.py` ; `git rev-list --count --all --since/--until` : jeu 90, addon 40 (recompte orchestrateur identique) ; Modules 1 ; jeu 5.5 : 1 propre sur 10 | | dont addon (skills, agents) | 0 | 28 | 12 | 40 | dont **15 paires de commits jumeaux** 5.5 / 5.8 (T2 § 2) | | Entrées CHG (par commit d'introduction) | 4 | 47 | 28 | **79** | `eval_journal.py` ; `chg.csv` 79 lignes ; CHG-245 → 323 sans trou | | Entrées ERR | 0 | 14 | 31 | 45 | `err.csv` 45 lignes ; ERR-044 → 088. Ce sont surtout des **défauts du jeu** (STB, STE…). Une seule touche l'organisation : ERR-087 (`--amend` du gardien) | | Livrables `.md` sous `etat\` (date de modification) | 15 | 153 | 246 | **414** (4,57 Mo) | `eval_fiches.py` ; `fiches.csv` 414 = `Get-ChildItem` 414 | | Journaux bruts sous `etat\` (`.txt`, `.log`, `.csv`) | 0 | 268 | 262 | 530 (105 Mo) | idem | | Tickets du gardien | — | — | 63 | 63 | `tickets\` : 62 `fait` (dont 10 annotés), 1 `abandonné` (OBB-R11) | | Sous-agents lancés | 15 | 121 | 124 | **260** | `eval_subagents.py` ; `subagents.csv` 260 lignes (recompte : 260 / 362 fichiers) | **Débit par heure active** | Indicateur | P0 | P1 | P2 | Doc 31 « avant » | Doc 31 « après » | |---|---:|---:|---:|---:|---:| | Commits / h active | 1,35 | 3,08 | **4,02** | — | — | | CHG / h active | 1,08 | 1,81 | **2,40** | 2,4 (59 CHG, règle d'avant « un CHG par lot » non appliquée) | 1,2 | | Livrables `.md` / h active | 4,1 | 5,9 | **21,1** | — | — | ## 2. Coût (jetons, temps) | Indicateur | P0 | P1 | P2 | Doc 31 avant | Doc 31 après | Commande | |---|---:|---:|---:|---:|---:|---| | Jetons lus, total (M) | 108,5 | 1 458,0 | 1 520,3 | 771 | 786 | `eval_sessions.py` (`tableaux.md` § Sous-périodes) | | Jetons lus, sessions principales (M) | 70,2 | 898,7 | **1 266,5** | 632 | 375 | idem | | Jetons lus, sous-agents (M) | 38,3 | 559,3 | 253,8 | 139 | 411 | idem ; `subagents.csv` = 851,5 M | | Jetons / h active, total (M) | 29,3 | 56,2 | **130,2** | 31,7 | 47,6 | idem | | Jetons / h active, principales (M) | 19,0 | 34,6 | **108,4** | 26,0 | 22,7 | idem | | Jetons / h active, sous-agents (M) | 10,4 | 21,6 | 21,7 | 5,7 | 24,9 | idem | | **Jetons par CHG (M)** | 27,1 | 31,0 | **54,3** | — | — | calcul : total / CHG | | **Jetons par commit (M)** | 21,7 | 18,2 | **32,3** | — | — | total / commits distincts | | Contexte moyen par tour, principales | 329 k | 307 k | **377 k** | 376 k | 269 k | `eval_sessions.py` | | Contexte médian par tour, principales | 228 k | 245 k | **323 k** | 344 k | 216 k | idem | | Tours des principales > 150 k | 83 % | 77 % | **88 %** | 85 % | 74 % | idem | | Compactages | 1 | 1 | 2 | 5 | 0 | idem | | Lecture en cache | 97,0 % | 98,5 % | 99,2 % | 98,6 % | 99,1 % | idem | Plus lourdes sessions principales de la fenêtre (jetons lus) : LOT STE `37530d8d` 439 M (995 tours, pic 898 k) ; Lot 29 `87a0d630` 390 M (815 tours, pic 965 k) ; **Big Boss `92a3927f` 267 M** (679 tours, pic 825 k) ; U7 `ab8918a1` 181 M ; LOT STF `637ffab6` 179 M (`tableaux.md` § contexte). **Temps machine de la copie UE** (journaux `Saved\Logs\portage`, horodatages internes en UTC, décalage de 2,00 h vérifié sur 202 fichiers) : 265 `.log`, 509,6 min. P1 : 133 fichiers, 241,6 min ; P2 : 132 fichiers, 268,0 min. Par type : éditeur interactif et PIE 151,9 min ; `LPDumpFunction` **129 lancements**, 103,4 min ; éditeur headless 92,6 ; CompileAllBlueprints 17 lancements, 58,6 ; Build 50 lancements, 57,7 ; cuisson 13,6 ; UAT 9,5 ; LPTestStringCompat 4,7 (`eval_boss.py logs`, `portage_logs.csv`). ## 3. Délégation et niveaux | Indicateur | P0 | P1 | P2 | Doc 31 avant | Doc 31 après | Commande | |---|---:|---:|---:|---:|---:|---| | Appels d'outils, total | 721 | 9 270 | 7 899 | 4 154 | 5 090 | `eval_sessions.py` | | Appels d'outils / h active | 195 | 357 | **676** | 171 | 308 | idem | | Part faite par les sous-agents | 72 % | 65 % | **57 %** | 51 % | 72 % | idem | | Commandes shell des principales / h | 23,0 | 54,6 | **125,3** | 51 | 46 | idem | | Appels MCP Unreal des principales | 34 | 660 | 515 | — | — | idem (1 070 `mcp__unreal*__call_tool` ; **aucun agent `lp-*` n'a d'outil MCP**) | | Sous-agents `general-purpose` | 14 | 0 | 0 | 106 (tous génériques) | 0 | `aggregats.md` | | Tours par sous-agent, médiane / moyenne | 18 / 21,9 | 27 / 37,7 | **16,5 / 19,6** | — / ≈ 17 | 26 / ≈ 40 | `aggregats.md` | | Pic médian des sous-agents | 171 k | 107 k | **84 k** | — | — | idem | | Sous-agents hors budget (niveau, BUD1) | 33 % | 26 % | **17 %** | — | — | idem ; 58 / 260 (tours 28, pic 44) | | Part des jetons des sous-agents au pic > 150 k | 67 % | 81 % | **63 %** | — | 84 % | idem | | Escalades (`lp-impl-max`, `opus-xhigh`, `opus-max`, `fable-top`) | 0 | 3 | 1 | 1 | 2 | U7-T6, U7-T7, OBA-T5, CAM-T5 : toutes hors budget ; `fable-top` 0 | | Sous-agents coupés sans compte rendu (doit valoir 0) | 0 | 0 | **2** | — | — | lp-builder STE-D (10 tours), lp-gardien OBB-R11 (4 tours) | | Seuil `maxTurns` probablement atteint | — | — | — | — | — | 19 agents, tous avec compte rendu | | Taux d'erreur des outils | 3,3 % | 3,3 % | **1,6 %** | 3,9 % | 3,6 % | 24/720, 306/9 271, 130/7 897 | | Refus d'autorisation | 1 | 7 | 3 | — | — | `toolDenialKind` : 6 `automode-blocked`, 5 `permission-rule` | **Par type d'agent (fenêtre entière, `aggregats.md`)** | Agent | Modèle usuel | Nombre | Tours méd. | Pic méd. | Jetons | Part | Hors budget | |---|---|---:|---:|---:|---:|---:|---:| | lp-builder | haiku | 52 | 20,5 | 77 k | 75,9 M | 9 % | 10 % | | lp-gardien | sonnet | 48 | 11 | 61 k | 34,0 M | 4 % | **0 %** | | lp-validator | sonnet | 42 | 19,5 | 104 k | 85,1 M | 10 % | 19 % | | lp-cart | opus | 38 | **48** | **243 k** | **340,6 M** | **40 %** | **55 %** | | lp-writer | sonnet | 28 | 13 | 83 k | 35,3 M | 4 % | 14 % | | lp-inventory | sonnet | 17 | 22 | 120 k | 27,8 M | 3 % | 12 % | | lp-impl | opus | 16 | 41 | 176 k | 106,6 M | 13 % | 56 % | | general-purpose | divers | 14 | 18 | 173 k | 38,6 M | 5 % | 36 % | | escalade (4) | opus | 4 | — | — | 107,7 M | 13 % | 100 % | Par modèle : sonnet 141 agents (24 % des jetons), opus 61 (**66 %**), haiku 54 (9 %), fable 4 (1 %). Niveau lu dans la fiche : 168 / 260 ; déduit de l'agent : 92. ## 4. Orchestration : Big Boss, file de la copie UE, journal, gardien (P2 seulement) | Indicateur | Valeur | Commande, compte brut | |---|---|---| | BUILD-DEMANDE / BUILD-GO / BUILD-FIN / ATTENTE | 37 distinctes / 38 distincts (+ 7 répétitions, + 1 GO parallèle pour la copie 5.5) / 39 fermetures / 17 | `eval_boss.py all` ; `buildqueue.csv` 464 lignes (journal + transcription) | | GO par lot | STE 25, STF 9, OBB 3, LISIB 3, U8 3, CAM 2 | idem | | Attente DEMANDE → GO | médiane **0,4 min**, max 19,5 (LISIB-J1), n = 34 | idem | | Occupation GO → FIN | médiane 9,4 min, max 109,8 (STE-GARDES), somme 698 min, n = 39 | idem | | Copie UE sur P2 (1 125 min) | occupée **61,6 %** (692,5 min) ; gelée 5,6 % (62,8) ; libre 32,9 % (369,7, dont 41 min de réserve « mesure ») | idem | | Occupation déclarée et temps machine | 692 min de GO ouverts pour **268 min** de journaux machine (rapport 2,6) | `portage_logs.csv` ; un GO couvre aussi le PIE avec l'utilisateur et l'analyse entre deux commandlets | | GO sans FIN, FIN sans GO | 0 / 0 | idem | | GO simultanés | 2 formels (fin constatée par Big Boss avant le GO suivant, FIN reçue 1,4 et 2,8 min plus tard) | T4 § 2.4 | | Contre-vérifications de BUILD-FIN par Big Boss | 32 acceptations : MD5 17, processus Unreal 25, `git status` 9 ; MD5 changé : **0** | T4 § 2.7 | | Jeton du journal | 7 demandes, 14 jetons accordés, 19 JOURNAL-LIBRE ; attente médiane 0,3 min (max 17,2) ; détention médiane 5,6 min (max 94,6) | T4 § 2.6 | | Arbitrages, conflits, gels, FIN-LOT | CONFLIT 14, ARBITRAGE 12, GEL 9 (dont 1 gel documentaire DOCMV), DÉCLARATION 8, FIN-LOT 18 | `buildqueue.csv` | | Incidents | processus étranger 5 ; fausse alerte 1 ; dossier parasite 1 ; verrou orphelin 1 ; refus d'autorisation 1 ; session fermée pendant un GO 1 ; plantage de l'éditeur pendant un GO 1 ; MD5 changé 0 | T4 § 2.8 (lignes source) | | **Coût de Big Boss** | 8,04 h actives, 679 tours, **272 M jetons lus = 18 % des jetons de P2**, 287 messages sortants, 195 entrants, 27 messages humains, Bash 282, PowerShell 47 | T4 § 2.10 ; T1a | | Gardien | 48 passages `lp-gardien`, 34,0 M jetons (0,7 M par passage), 1,4 min médiane ; 63 tickets ; verrous 82 pris, 82 rendus | T1b, T2 | | Commits après le gardien | 47 ; 41 citent leur ticket ; 6 n'en citent aucun, tous antérieurs à 11:36 et rattachés à un ticket (ETAT3-R1/R2/R5, STC-R1, REPO-MV-R1, STD-R1) ; **commit sans ticket : 0** | T2 § 2 | | Identités d'auteur | 2 (l'adresse courte, 28 commits addon, disparaît avant le gardien) | T2 | | Hook `pre-commit` | non installé dans les 4 arbres (`core.hooksPath` absent) | T2 | ## 5. Charge de l'utilisateur et coordination | Indicateur | P0 | P1 | P2 | Doc 31 avant | Doc 31 après | Commande | |---|---:|---:|---:|---:|---:|---| | Messages humains (entrées tapées + file) | 26 | 207 | 119 | 190 | 100 | `origin.kind == "human"` | | Messages humains, méthode du doc 31 (« prompts ») | 27 | 190 | 117 | 190 | 100 | idem, hors file | | **Messages humains / h active** (méthode doc 31) | 7,3 | 7,3 | **10,0** | 7,8 | 6,1 | idem | | Messages entre sessions reçus | 2 | 148 | **423** | — | — | `origin.kind == "peer"` | | Messages entre sessions / h active | 0,5 | 5,7 | **36,2** | — | — | idem | | `SendMessage` émis (principales) | 4 | 183 | 509 | — | — | idem | | Questions fermées à l'utilisateur (`AskUserQuestion`) | — | — | — | — | — | 95 dans la fenêtre (`commands_resume.txt`) | | Messages humains par CHG | 6,5 | 4,4 | 4,25 | — | — | calcul | | Messages entre sessions par CHG | 0,5 | 3,1 | **15,1** | — | — | calcul | ## 6. Qualité des fiches et des registres | Indicateur | P0 | P1 | P2 | Doc 31 après | Commande | |---|---:|---:|---:|---:|---| | En-tête complet (prévu + utilisé + agent + skills + niveau), livrables de rôle | 0/3 | 106/111 (95,5 %) | 107/119 (89,9 %) | 77/79 (97 %, motif modèle seul) | `eval_fiches.py` | | Ligne `Tours :` en fin de livrable | 0 % | 6,3 % | **70,6 %** | — | idem (92 lignes) | | Section « État de reprise » | — | — | 1 / 233 livrables | — | idem | | Lots avec VAL (17 registres modifiés) | — | — | 12 / 17 | 10 / 10 | sans VAL : CAM (audit en cours), ETAT3, OBA, STA, STD | | Statuts au gabarit (17 registres, 200 lignes) | — | — | acceptée 96, à faire 15, envoyée 4, reçue 3 ; **hors gabarit** : « faite » 64, « en cours » 2, autre 16 | — | idem | | `escaladée`, `reprise`, `bloquée`, `coupée` dans les statuts | — | — | **0** alors que 20 lignes de tentative `b/c/d` et 20 mentions « hors budget » | — | idem | | Colonnes de mesure remplies (Tours / Pic / Jetons / Durée) | — | — | 40 % / **11 %** / 38 % / 41 % | — | idem | | Tours déclarés contre tours mesurés | — | — | sous-comptés (OBB : 12 / 15 ; ici T4 : 37 déclarés contre 39 mesurés) | — | OBB-EVAL § 3 ; FicheStats | ## 7. Commandes répétées (mutualisation) 7 764 appels Bash + PowerShell examinés (principales 2 966, sous-agents 4 798). Recoupement avec `sessions.csv` exact (34 sessions, 0 écart). Durée shell mesurée (tool_use → tool_result) : 15,7 h au total (`eval_commandes.py`, `commands_resume.txt`). | Famille | Appels | Principales | Fiches | Part des appels shell P0 → P1 → P2 | Outil du projet déjà disponible | |---|---:|---:|---:|---|---| | c. état git, diff, fins de ligne, comptes de CR | **1 794** | 827 | 180 | 8 % → 17 % → **36 %** | aucun script d'état unique | | f. verrou, tickets, `NUMEROS.md`, `REPO-JOURNAL.md` | 1 085 | 363 | 65 | 1 059 en P2 | aucun (141 `mkdir` / `New-Item` / `Remove` de verrou) | | d. scripts `Tools\` | 996 | 407 | 102 | — | 25 scripts. En contournement : `UnrealEditor-Cmd` / `-run=` sans `RunCommandlet.ps1` 68 appels, `RunUAT` sans `BuildDebug.ps1` 32 | | h. Python par heredoc, `python -c` long, scripts temporaires | 684 | 311 | 75 | — | aucun (282 heredocs, dont 201 en principale ; 135 scripts écrits) | | a. empreintes MD5 / SHA | 543 | 256 | 90 | 0 % → 4 % → **14 %** | `FileCheck.ps1` (10-09) : 60 appels, contre 538 `md5sum` / `Get-FileHash` / `sha*sum` | | b. processus Unreal / jeu | 455 | 216 | 55 | 2 % → 5 % → 8 % | `UeState.ps1` (10-09) : 161 appels, contre 452 `Get-Process` / `tasklist` / `Get-CimInstance` | | e. comptes de journaux (`Accessed None`, `Error:`, `Warning:`) | 272 | 83 | 43 | — | `LogStats.ps1` (09-29) : 68 appels | | g. taille et date de dossiers de build | 252 | 128 | 50 | — | `CheckPackage.ps1` (10-10), en partie | | i. `SendMessage` / `ListAgents` | 696 / 24 | 720 | — | — | coordination | Scripts de `Tools\` créés pendant la fenêtre et déjà adoptés : `UeState.ps1` 161 mentions, `Build.ps1` 125, `Engine.ps1` 60, `FileCheck.ps1` 60, `EtatDir.ps1` 50, `uasset58.py` 40, `CheckPackage.ps1` 34, `FicheStats.py` 32, `uasset.py` 30 (T6 § 2.3). ## 8. Le lot EVAL lui-même (mesure FicheStats) `python -I Tools/FicheStats.py --lot EVAL` : 7 fiches `lp-inventory` (6 sonnet, 1 haiku), 18,4 M jetons lus, durée de 8 à 17 min. **6 fiches sur 7 hors budget de pic** : de 163 k à 315 k, contre 150 k au budget N1. En tours, toutes sont dans le budget : de 17 à 39 sur 40. Cause : chaque fiche lit des transcriptions de plusieurs Mo, et mes fiches demandaient trop d'indicateurs à la fois (consigne). Synthèse faite par l'orchestrateur (N2), sans N3+ : aucune escalade. ## 9. Recompte de l'orchestrateur (sk-recount) | Fiche | Recompté | Résultat | |---|---|---| | T1a | sommes des sessions = P0 + P1 + P2 pour 12 grandeurs (contrôle du script) ; borne P2 relue dans `tableaux.md` | conforme ; 2 points ouverts : la session `e3d15049` du dossier 4-27 est exclue (hors périmètre de la fiche) ; les 9 sessions sans message humain restent comptées (sessions latérales) | | T1b | `subagents.csv` : 260 lignes ; P0 15 / P1 121 / P2 124 ; modèles 141 / 61 / 54 / 4 | conforme ; motif de fiche élargi accepté | | T2 | `commits.csv` 141 lignes (132 distinctes) ; `git rev-list --count` jeu 90, addon 40 | conforme | | T3 | `chg.csv` 79, `err.csv` 45 ; `grep -c "^| ERR-"` = 88 | conforme ; CHG-316 mal découpé dans le CSV (cellule contenant `|`) | | T4 | `buildqueue.csv` 464 lignes, mots-clés recomptés ; occupé + gelé + libre = 1 125 min | conforme ; 2 GO simultanés formels acceptés comme tels | | T5 | `fiches.csv` 414 lignes ; P0 15 / P1 153 / P2 246 | conforme ; registre STE exclu de la fenêtre (mtime 05:30:05) | | T6 | familles et totaux relus dans `commands_resume.txt` ; 2 966 appels shell des principales = `sessions.csv` | conforme | Tours : sans objet (fiche de l'orchestrateur)