20 KiB
Fiche AMEL1-T0 — Niveau N2 — Modèle prévu Opus 5.5 | utilisé claude-opus-5-5 — Agent orchestrateur (session EVAL) — Skills aucun préchargé
AMEL1-INDICATEURS : un indicateur mesurable par recommandation R1 à R14, mesure « avant » (P3) et mode opératoire « après » (2026-10-14)
Demande de l'utilisateur (2026-10-14, session EVAL) : « implémentons les recommandations pour chaque recommandation je
veux un indicateur mesurable. avec une mesure maintenant et après basé sur un mode opératoire net et complet ».
Recommandations : etat\EVAL2\EVAL2-RAPPORT.md § 4. Valeurs « avant » : etat\EVAL2\EVAL2-STATS.md et les relevés T1a à
T6 (période P3, 2026-10-11 05:30 → 2026-10-14 18:25:41).
1. Mode opératoire de la mesure (identique avant et après)
1.1 Périodes
| Période | Bornes | Rôle |
|---|---|---|
| AVANT = P3 | 2026-10-11 05:30:00 → 2026-10-14 18:25:41 (UTC+2), coupure P3a/P3b 2026-10-13 12:07:16 | valeur de référence, déjà relevée (§ 2, colonne « Avant ») |
| APRÈS = P4 | début : date du dernier commit d'AMEL1 (toutes les recommandations « en place ») ; fin : la première des deux bornes 72 h de calendrier ou 30 h actives cumulées des sessions principales ; au moins 5 builds et 1 essai commun dans la fenêtre, sinon la fenêtre est prolongée jusqu'à les atteindre | mesure de l'effet |
La période P4 ne commence pas avant que toutes les recommandations soient en place, sinon l'effet est mélangé. Une recommandation non en place à P4 est mesurée quand même et notée « non en place » (sa valeur sert de témoin).
1.2 Commande unique
python -I -X utf8 Tools\Indicateurs.py --debut "AAAA-MM-JJ HH:MM:SS" --fin "AAAA-MM-JJ HH:MM:SS" --sortie Docs\Migration\etat\EVAL2\AMEL1\AMEL1-MESURE-<periode>.md
- Le script (
Tools\Indicateurs.py, fiche AMEL1-M1) lance les relevés T1a à T6 d'EVAL2 sur la fenêtre donnée, avec les mêmes définitions, et écrit une ligne par indicateur : valeur, numérateur, dénominateur, source, et la commande de contrôle à rejouer à la main. - Contrôle de non-régression du script :
--debut "2026-10-11 05:30:00" --fin "2026-10-14 18:25:41"doit redonner les valeurs « Avant » du § 2 (tolérance : ± 1 sur les comptes, ± 0,5 point sur les pourcentages ; écart plus grand = script faux, la mesure P4 n'est pas faite). - Session EVAL et ses sous-agents exclus, comme en EVAL et EVAL2. Métadonnées des sessions lues avec le chemin MSIX
(
%USERPROFILE%\AppData\Local\Packages\Claude_*\LocalCache\Roaming\Claude\claude-code-sessions).
Tools/ n'est plus suivi par git (décision de l'utilisateur du 2026-10-14 : « on gitignore Tools. c'est un dossier
pour Agent IA », CHG-357). Tools\Indicateurs.py et Tools\EssaiJournal.* vivent donc seulement sur le poste. Avant la
mesure P4, vérifier leur MD5 contre la référence (Indicateurs.py 42feceb7… ; écart = rejouer d'abord le contrôle
sur P3 du § 1.2) ; copie des versions finales, hors git, dans D:\Game\LifePlay_Backup_5.5\AMEL1-OUTILS\ (2026-10-14 :
Indicateurs.py 42feceb7…, EssaiJournal.ps1 39d511f2…, EssaiJournal.regles.json a34e684b…, CopieEtat.ps1
a5298113…, FicheStats.py 25938733…).
Transcriptions (décision de l'utilisateur du 2026-10-14 : « Copier avant suppression ») : 4 sessions supprimées le
2026-10-14 ont emporté leurs transcriptions (P3 n'est plus rejouable à l'identique ; la référence « Avant » reste
AMEL1-MESURE-P3.md, figée). Copie complète faite le 2026-10-14 : D:\Game\LifePlay_Backup_5.5\TRANSCRIPTIONS\complet\ (dossier d'abord nommé 2026-10-14\, renommé pour servir de base à
-Tout ; premier -Tout incrémental : 8 copies, manifeste écrit)
(2 077 fichiers, 837 Mo). Avant toute suppression de session : Tools\SauverTranscriptions.ps1 -Session <id> ; avant la
mesure P4 : -Tout. I15 : valeur « avant » retenue = 10,9 pour 100 appels shell (mesurée par l'outil sur les données
P3 restantes ; décision de l'utilisateur « 10,9 mesuré par l'outil ») ; cible ≤ 5,5.
1.3 Règles de lecture
- Atteint : la valeur P4 franchit la cible. Amélioré : elle va dans le bon sens sans franchir la cible. Sans effet : écart inférieur à la tolérance. Dégradé : mauvais sens.
- Les valeurs P4 sont rapportées à la même unité que P3 (par heure active, par 100 appels, par commit) : P4 n'aura pas la même durée ni le même type de travail. Le type de travail de P4 est décrit en tête de la mesure (lots, builds, essais).
- Biais déclaré : la session EVAL conçoit, met en œuvre et mesure ; la VAL de la mesure P4 est confiée à un
lp-validatorindépendant (fiche AMEL1-V2).
2. Indicateurs
| Rec. | Indicateur | Formule exacte | Source (relevé, script) | Avant (P3) | Cible P4 | Tolérance |
|---|---|---|---|---|---|---|
| R1 Recentrer Big Boss | I1a part de Big Boss dans tous les jetons lus | jetons lus des transcriptions Big Boss (ebc15012, 92a3927f et suivantes, identifiées par local_7f1c9fb1 dans les métadonnées) / jetons lus de toutes les principales et de tous les sous-agents |
T1a eval2_sessions.py, T1b eval2_subagents.py |
20,4 % (605,6 M / 2 970 M) | ≤ 15 % (clause D-P7.8) | ± 0,5 pt |
| I1b part de Big Boss dans les heures actives | heures actives Big Boss / somme des heures actives des sessions principales | T1a | 36,1 % (24,66 / 68,27 h) | ≤ 20 % | ± 1 pt | |
| I1c contexte médian des principales (E1, rotation) | médiane du contexte par tour, toutes principales | T1a | 295 k | < 200 k (doc 33 § 7) | ± 5 k | |
| R2 Crochet v2 | I2a taux de refus à tort | refus opérationnels du crochet classés « à tort » (règle v2, eval2_refus.py) / refus opérationnels |
T6 eval2_commandes.py, eval2_refus.py |
47 % (36 / 76) | ≤ 10 % | ± 2 pts |
| I2b cas adverses bloqués (sécurité conservée) | cas adverses de la batterie P7-H2 refusés par le crochet en place / cas adverses de la batterie | etat\AG\P7\P7-H2* (batterie cas.jsonl), rejouée par le script de test de P7-H2 |
à mesurer en AMEL1-M1 sur le crochet actuel | 100 % | 0 | |
| R3 Contrôles en jeu automatiques | I3 part des KO trouvés avant l'utilisateur | KO (cas KO, KO partiels et défauts hors fiche KO) dont le découvreur est « agent » ou « script » / tous les KO des essais communs de la période | T4 eval2_commun.py (data\commun.csv, colonne découvreur) |
12,5 % (6 / 48 ; 9 / 48 = 18,8 % avec les mixtes) | ≥ 30 % | ± 2 pts |
R4 lp-mcp-bp en Sonnet (essai ORGA2) |
I4a jetons lus par passage lp-mcp-bp |
jetons lus des sous-agents lp-mcp-bp* / nombre de passages |
T1b | 3,90 M (144,2 M / 37) | ≤ 2,3 M (−40 %) | ± 0,1 M |
| I4b temps d'éditeur par correctif (garde-fou ORGA2 § 6) | somme des durées éditeur des passages lp-mcp-bp* (premier → dernier appel MCP) / passages |
T1b (horodatages des appels MCP) | à mesurer en AMEL1-M1 | ≤ valeur avant + 10 % | ± 5 % | |
| R5 Journal au fil de l'eau | I5a part des ERR consignées en rattrapage | ERR de la période dont la ligne porte « JOURNAUX » ou dont l'écart date du fait → date d'inscription dépasse 24 h / ERR de la période | T3 eval2_journal.py |
100 % (50 / 50) | ≤ 10 % | 0 |
| I5b plus long intervalle sans écriture de journal pendant l'activité | plus grand écart entre deux écritures successives d'un CHG, d'un ERR ou d'un brouillon *-JOURNAL-BROUILLON.md (dates de commit et dates de modification), borné aux heures actives |
T3 + dates des brouillons | ≈ 29 h (CHG-343, 10-13 13:04 → 3af7324, 10-14 18:22) |
< 4 h | ± 0,5 h | |
| R6 PubCheck dès la fiche | I6 refus de commit pour fuite (nom de compte, chemin machine) pour 100 commits | (refus PubCheck + refus du gardien pour nom de compte, lus dans etat\REPO\REPO-JOURNAL.md) × 100 / commits de la période |
T2 eval2_commits.py (data\tickets.csv) |
12,2 (6 / 49) | 0 | 0 |
| R7 Consignes de shell | I7a refus que les agents se causent eux-mêmes, pour 1 000 appels shell des sous-agents | refus du crochet sur python -c, heredoc Python, tee par un agent dont la fiche les interdit × 1 000 / appels Bash + PowerShell des sous-agents |
T6 | numérateur 14 (T6) ; dénominateur à mesurer en AMEL1-M1 (appels shell des seuls sous-agents) ; borne basse 2,4 ‰ si rapporté aux 5 910 appels de toutes les sessions | ≤ 1 ‰ | ± 0,5 ‰ |
| I7b erreurs de guillemets et d'échappement pour 1 000 appels shell | erreurs classées « guillemets / échappement » × 1 000 / appels Bash + PowerShell (tous) | T6 § 2.8 | 4,4 ‰ (26 / 5 910) | ≤ 2 ‰ | ± 0,5 ‰ | |
| R8 VAL « témoin en jeu » | I8a part des VAL PASS-STATIC de comportement qui nomment leur cas de fiche de tests | VAL PASS-STATIC dont le livrable cite un cas COMMUN-n / VAL PASS-STATIC d'un correctif de comportement |
T5 eval2_val.py (data\val.csv) |
à mesurer en AMEL1-M1 (estimé ≈ 0 %) | ≥ 90 % | ± 5 pts |
| I8b PASS (ou PASS-STATIC) suivis d'un KO en jeu sur le même cas | compte | T5 × T4 | 4 (S-F5m, B2p-E, B2q-a, B2s) pour 70 PASS / PASS-STATIC = 5,7 % | ≤ 2 % | ± 1 cas | |
R9 Fiches lp-cart plus étroites |
I9 taux de hors budget lp-cart |
passages lp-cart hors budget (tours ou pic, critère EVAL) / passages lp-cart |
T1b | 79 % (11 / 14) | ≤ 40 % | ± 5 pts |
| R10 Outils de copie, contrôle d'instantané | I10a part des contrôles faits par les outils | appels CopieEtat + GitEtat / (ces appels + git status + calculs d'empreinte improvisés) |
T6 familles a.*, c.git-status, § 2.9 |
4,0 % (66 / 1 655) | ≥ 30 % | ± 1 pt |
| I10b écritures sans instantané préalable | relevés « instantané manquant » (cas distincts) | T5 data\ecarts.csv |
3 cas distincts (7 relevés) | 0 | 0 | |
| R11 Registres et BOSS-JOURNAL horodatés | I11a lignes du BOSS-JOURNAL avec heure | lignes de la période avec HH:MM / lignes de la période |
T3 | 18,6 % (86 / 462) | ≥ 90 % | ± 2 pts |
I11b livrables de rôle avec ligne Tours |
livrables de rôle avec Tours : / livrables de rôle |
T5 | 68,6 % | ≥ 95 % | ± 2 pts | |
| R12 Sessions renommées au lot servi | I12 sessions dont le titre dans l'application ne correspond pas au lot servi | sessions principales actives dont le titre de l'application ≠ titre de la transcription / lot servi (table data\lots.csv vs lots_transcription.csv) |
T1a | 3 sur 25 (ARCH427 et TRACE1 sous « STG », PUB3 sous « REL ») | 0 | 0 |
| R13 Pièges de poste versés | I13 fiches lp-inventory reprises pour une cause d'environnement ou de consigne de shell |
fiches lp-inventory reprises ou arrêtées par un refus ou un piège de poste / fiches lp-inventory |
registres de lot, T1b | 3 / 7 dans EVAL2 (T1a, T4, T6), 43 % | 0 | 0 |
| R14 Budget de tours du build | I14 passages lp-builder au-delà du budget de tours de leur fiche |
passages dont les tours mesurés dépassent le budget déclaré / passages lp-builder |
T1b § 2.6 | 1 / 32 (3 %) | 0 | 0 |
2.1 Valeurs « Avant » de référence, figées par l'outil (AMEL1-M1, 2026-10-14)
La comparaison avant / après se fait entre deux sorties du même outil : la référence « Avant » est
AMEL1-MESURE-P3.md, produite par Tools\Indicateurs.py sur P3 (MD5 de l'outil f6703323…, 50 lignes sur 53 dans la
tolérance du tableau ci-dessus). Les valeurs du tableau ci-dessus restent la trace de la lecture manuelle. Là où les deux
diffèrent, l'outil fait foi (décision de l'orchestrateur), parce que la mesure P4 sera faite par lui :
| Ind. | Lecture manuelle | Avant de référence (outil) | Cause de l'écart |
|---|---|---|---|
| I2b | à mesurer | 88,5 % (154 / 174 cas adverses refusés ; cas.jsonl de P7-H2 seul : 32 / 35) |
mesuré |
| I4b | à mesurer | 3,4 min par passage lp-mcp-bp (127,5 min / 37) |
mesuré |
| I7a | numérateur 14 | 5,9 ‰ (14 / 2 370 appels shell des sous-agents) | mesuré |
| I8a | à mesurer | 2,9 % (1 / 34 VAL PASS-STATIC citent un cas COMMUN-n précis) |
critère strict retenu, conforme au texte R8 approuvé (« nomme le cas ») ; critère large (mention d'un essai en jeu) : 88,2 %, non retenu |
| I8b | 4 / 70 = 5,7 % | 5,8 % (4 / 69) | retouche en bloc filtrée |
| I11a | 18,6 % (86 / 462, fichier entier) | 19,0 % (51 / 268 lignes de la fenêtre) | fenêtre P3 seule ; le fichier entier donne 18,8 % (87 / 463, une ligne ajoutée depuis) |
| I12 | 3 sessions | 5 / 25 | relevé automatique complet (lecture manuelle partielle) |
| I13 | 3 / 7 (lot EVAL2) | 2 / 7 dans P3 | le 3 / 7 portait sur le lot EVAL2, hors fenêtre et session exclue |
| I14 | 1 / 32 | 2 / 32 | GEL1-D1 (19 tours pour 15 déclarés) aussi au-delà |
| I15 (R7 / OUTIL1) | — (indicateur ajouté par OUTIL1-D1, 2026-10-14) | 10,9 pour 100 appels shell (465 / 4 281 ; principales 320, sous-agents 145) | mesuré sur les données P3 restantes : 4 sessions « STG » et leurs 66 sous-agents ont été supprimés de ~/.claude/projects après P3 ; à données complètes, la définition T6 (lancements de scripts écrits dans Tools\ inclus) donnait 723 / 5 910 = 12,2 (957 appels h.* moins 234 Write, T6-INV § 2.8). Cible proposée : −50 % |
Définitions fixées par l'outil et retenues (décision de l'orchestrateur, à appliquer à l'identique en P4) :
- I5b : intervalles comptés seulement pendant l'activité (heures où les sessions principales cumulent au moins 25 % d'activité) ; sans ce filtre, 39,2 h.
- I6 : un refus = une opération du
REPO-JOURNAL.mdqui commence par « COMMIT refus » (les lignes de reprise qui rappellent un refus ne comptent pas). - I8b : les retouches en bloc (≥ 20 fichiers à la même seconde) sont exclues ; les liens VAL → KO viennent d'une table
saisie (
--liens-val-ko). - I10b : un « cas distinct » = un lot.
- I15 : appels Bash et PowerShell (principales et sous-agents) portant une des familles T6
h.python-heredoc,h.python-pipe-stdin,h.python-c(plus de 200 caractères) ou le lancement d'un script écrit parWritehorsTools\dans la même transcription, pour 100 appels shell ; ventilé par lot (titre de la transcription, à défaut celui de l'application). Détail :OUTIL1-D1-MESURE-P3.md. - Attention, rejeu de P3 après suppression de données : les transcriptions de 4 sessions « STG » (dont celle de 902 tours) et de 66
sous-agents (114,9 M de jetons lus) ont disparu de
~/.claude/projectsdepuis la mesure d'origine. Un rejeu de P3 ne redonne plus les valeurs de ce tableau pour les indicateurs fondés sur les transcriptions (I1, I2a, I4, I7, I10a, I12 à I14, G-a, G-b) ni, à cause des journaux vivants et du crochet v2, pour I2b, I6, I11a.AMEL1-MESURE-P3.mdn'a donc pas été réécrit : il reste la référence « Avant ». Le rejeu actuel est dansOUTIL1\OUTIL1-D1-MESURE-P3.md(même outil, mêmes lignes sauf I15). La non-régression de l'outil se prouve en rejouant l'ancienne et la nouvelle version sur les mêmes données (sortie identique pour les 27 indicateurs).
Données saisies nécessaires à la mesure P4 (sinon l'indicateur sort « non mesurable » et le code est 1) : --commun-csv
et --builds-csv (I3, G-c, G-d), --ecarts-csv (I10b), --liens-val-ko (I8b). Elles sont tirées des bilans d'essai écrits au
gabarit BILAN (colonne découvreur, heures) par une fiche lp-writer AMEL1-P4a, juste avant la mesure, au format des CSV
d'EVAL2 (etat\EVAL2\data\commun.csv, builds.csv, ecarts.csv). Après le 2026-10-25 (heure d'hiver) : --decalage-utc 1.
Indicateurs de résultat global (ne mesurent pas une recommandation seule, ils suivent l'effet d'ensemble) :
| Indicateur | Avant (P3) | Cible P4 |
|---|---|---|
| G-a jetons lus par CHG + ERR | 39 M | ≤ 30 M |
| G-b part des appels faite par les sous-agents | 57 % | > 70 % (doc 33 § 7) |
| G-c délai fin d'essai → exe suivant (médiane) | 53 min | ≤ 53 min (ne pas ralentir) |
| G-d KO par essai commun | 19 KO + KO partiels / 13 builds = 1,46 | baisse |
3. Mise en œuvre (lot AMEL1)
Chaque recommandation devient une fiche, avec instantané (Tools\Snapshot.ps1 -Lot AMEL1-<n>) avant toute écriture,
livrable dans etat\EVAL2\AMEL1\, et commit par le gardien sur ticket. Les textes de skills et de règles sont soumis à
l'utilisateur avant le ticket (usage du projet, « approuvé tel quel »).
| Fiche | Rec. | Contenu | Où | Agent | Dépend de | Décision préalable |
|---|---|---|---|---|---|---|
| AMEL1-M1 | toutes | Tools\Indicateurs.py : scripts EVAL2 paramétrés (--debut, --fin, --coupure), calcul des 14 indicateurs ; contrôle sur P3 ; mesure des « avant » manquants (I2b, I4b, I7a, I8a) |
jeu Tools\ |
lp-impl (sonnet) |
— | — |
| AMEL1-R1 | R1, F1, F6 | règle « Big Boss = file UE, arbitrages, GO » ; gabarits fiche de tests et bilan d'essai tenus par un lp-writer ; rotation à 250 k et à chaque FIN-LOT pour toutes les sessions |
addon : lp-lot, lp-doc/gabarits.md ; doc 32 § 15.9 |
lp-writer |
— | F1 = a, F6 = a |
| AMEL1-R2 | R2, F2 | crochet v2 : motifs cherchés hors texte cité, écriture permise dans le scratchpad et %TEMP%, crochet lu depuis le profil seulement ; batterie de cas (P7-H2 + 36 cas « à tort » de P3) |
profil %USERPROFILE%\.claude\hooks\, copie versionnée addon |
lp-impl (opus) + lp-validator |
M1 (I2b avant) | F2 = a |
| AMEL1-R3 | R3, F3 | Tools\EssaiJournal.ps1 : relecture du journal de jeu par cas de la fiche de tests (PASS / FAIL), lancé par le builder avant la remise |
jeu Tools\ |
lp-impl (sonnet) |
— | F3 = a |
| AMEL1-R4 | R4, F4 | essai ORGA2 § 5 (agent lp-mcp-bp-s en Sonnet, gabarit SPEC-MCP, script de relecture) |
addon agents et skills | session ORGA2 | après le 2026-10-18 (ORGA2) | F4 = a |
| AMEL1-R5 | R5 | règle « brouillon <LOT>-JOURNAL-BROUILLON.md à chaque BUILD-FIN et à chaque KO » |
lp-lot, lp-doc |
lp-writer |
— | F5 = a |
| AMEL1-R6 | R6 | PubCheck.ps1 dans la VAL et le BUILD-FIN |
lp-validate, lp-lot |
lp-writer |
— | F5 = a |
| AMEL1-R7 | R7, R13 | consignes de shell et pièges de poste (MSIX, ls-remote, test d'interpréteur) |
sk-windows-shell, lp-paths, agent lp-inventory |
lp-writer |
— | F5 = a |
| AMEL1-R8 | R8 | règle « VAL témoin en jeu » | lp-validate |
lp-writer |
— | F5 = a |
| AMEL1-R9 | R9 | rappel « une question, liste fermée » en tête de toute fiche lp-cart, et modèle de l'en-tête de l'agent respecté |
sk-orchestrate |
lp-writer |
— | F5 = a |
| AMEL1-R10 | R10 | CopieEtat.ps1 : avertissement si aucun instantané du lot depuis le GO ; outils nommés dans le gabarit de fiche |
jeu Tools\, lp-lot |
lp-impl (sonnet) |
— | F5 = a |
| AMEL1-R11 | R11, R12 | horodatage obligatoire du BOSS-JOURNAL, colonnes Tours et statut dans les registres ; renommage des sessions au lot servi | lp-doc, lp-lot, doc 32 § 15 |
lp-writer |
— | F5 = a |
| AMEL1-R13 | R13 | FicheStats.py : lp-mcp-bp, lp-diag, lp-cart-max dans AGENTS_N3 |
jeu Tools\ |
lp-impl (sonnet) |
— | — |
| AMEL1-R14 | R14 | budget 60 tours pour un build dont la chaîne de vérification dépasse 50 étapes | lp-build, agent lp-builder |
lp-writer |
— | F5 = a |
| AMEL1-V1 | — | VAL de chaque fiche (diff, LF, PubCheck, critère de la fiche) | — | lp-validator |
chaque fiche | — |
| AMEL1-P4 | toutes | mesure P4 par Tools\Indicateurs.py, tableau avant / après |
etat\EVAL2\AMEL1\AMEL1-MESURE-P4.md |
orchestrateur | toutes en place + fenêtre P4 | — |
| AMEL1-V2 | — | VAL indépendante de la mesure P4 | — | lp-validator |
P4 | — |
Coordination : Big Boss tient le jeton du journal, les numéros CHG et les tickets du gardien ; R1 change son propre rôle et lui est soumis en même temps qu'à l'utilisateur.
Tours : sans objet (fiche de l'orchestrateur)