18 KiB
Fiche OUTIL1-D1 — Niveau N3 — Modèle prévu sonnet | utilisé claude-sonnet-5-5 — Agent lp-impl — Skills sk-protocol, ue-cpp-build, lp-build, lp-ue-compat
OUTIL1-D1-IMPL : Tools\Indicateurs.py, option --detail et indicateur I15 (2026-10-14)
Résultat : réussi sur l'outil, avec un écart majeur à la fiche : AMEL1-MESURE-P3.md n'a pas été réécrit, parce que les transcriptions de 4 sessions « STG » et de 66 sous-agents de P3 ont été supprimées depuis la mesure d'origine (C3). --detail écrit 15 CSV de détail plus recoupement.csv ; I15 est mesuré (10,9 pour 100 appels shell, sur les données restantes). La non-régression est prouvée par la comparaison de l'ancienne et de la nouvelle version sur les mêmes données (27 indicateurs identiques, C2) ; le « 50 PASS, 3 FAIL » de P3 ne se reproduit plus sur les données d'aujourd'hui (26 PASS, 27 FAIL, causes en C3) : à trancher par l'orchestrateur.
1. Fichiers modifiés
| Fichier | Changement | Empreinte |
|---|---|---|
D:\Game\LifePlay-master 5.8\Tools\Indicateurs.py |
--detail <dossier> ; indicateur I15 ; relevé des commandes enrichi (une fiche par appel d'outil, familles T6 a à h, refus de toutes catégories avec « suite ») ; relevé des sessions (bornes du fichier), des sous-agents (modèles, session parente, mention de limite) |
avant 1 720 lignes, MD5 42feceb7e7f34b9ff12d319ebd1272da ; après 2 482 lignes, LF (0 CR), MD5 c957a0e8acfb5f18edb74f7bc55ed84e |
D:\Game\LifePlay-master 5.8\Docs\Migration\etat\EVAL2\AMEL1\AMEL1-INDICATEURS.md |
§ 2.1 : ligne I15 dans le tableau, définition de I15, avertissement sur le rejeu de P3 (3 ajouts, rien d'autre) | — |
D:\Game\LifePlay-master 5.8\Docs\Migration\etat\EVAL2\AMEL1\OUTIL1\OUTIL1-D1-MESURE-P3.md |
neuf : rejeu de P3 par la nouvelle version, sur les données d'aujourd'hui | 19 730 o, LF |
D:\Game\LifePlay-master 5.8\Saved\OUTIL1-D1\ |
non versionné : detail-P3\ (16 CSV), detail-essai\ (essai sur fenêtre vide), manquants.py, comparer_ecarts.py (scripts de diagnostic, lecture seule) |
— |
Nouvelles fonctions de Indicateurs.py : familles_t6, texte_appel_t6, periode_de (commandes) ; detail_sessions, detail_sousagents, detail_commits, detail_journal, detail_fiches, detail_commandes, ecrire_csv, ecrire_detail, titres_sessions, lire_tickets ; i_I15. Option --detail ajoutée à l'aide (--help).
2. Écarts à la SPEC
- E1
AMEL1-MESURE-P3.mdnon réécrit (la fiche demandait un rejeu). Raison : le rejeu d'aujourd'hui donne I1a 25,2 % au lieu de 20,4 %, 2 398,9 M de jetons au lieu de 2 970 M, etc. (C3) ; l'écraser aurait détruit la référence « Avant » (AMEL1-INDICATEURS.md§ 2.1 : « la comparaison se fait entre deux sorties du même outil »). Fichier inchangé : MD54bc336fdb8d8fca14a05138d96a24a18avant et après (copie de contrôle comparée). Le rejeu est dansOUTIL1\OUTIL1-D1-MESURE-P3.md. Si l'orchestrateur veut quand même l'écrasement : même commande avec--sortie Docs\Migration\etat\EVAL2\AMEL1\AMEL1-MESURE-P3.md(une réserve : la référence P3 serait alors celle des données restantes). - E2 Preuve de non-régression : changée en « ancienne version (instantané, MD5
42feceb7…) contre version finale, mêmes données, même commande » ; la sortie ne diffère que par l'en-tête, la ligne I15 et ses notes (C2). Le « 50 PASS, 3 FAIL » est inatteignable (C3). - E3 I15 : un appel Bash ou PowerShell compte s'il porte
h.python-heredoc(<<),h.python-pipe-stdin,h.python-c(>200 car.)ou le lancement (même transcription, chemin complet) d'un script écrit parWritehorsTools\(famille nouvelleh.lance-un-script-ecrit-hors-Tools; la famille T6 d'origine comptait aussi les scripts deTools\). Les appelsWriteeux-mêmes ne sont pas des appels shell : ils sont comptés à part (158). Lot = titre de la transcription (derniercustom-title), à défaut celui de l'application : le titre de l'application a été renommé depuis P3 (« Medium », « Low », « Medium-High »). - E4
sessions.csv: une ligne par session sur la fenêtre entière (pas de lignes P3a / P3b par session ni de ligne de période, ni parallélisme) ;commandes.csv: lignesfamilleseulement (pas de lignesoutilavec date de création pargit log, pas de ligneserreur_shell) ;refus.csv: classement v2 seul (le classement v1 n'est pas porté) mais une colonnesuite, une ligne par refus de toute catégorie (135 lignes attendues en P3, 103 aujourd'hui) ;commits.csv: trois dépôts du jeu 5.8, lien commit-ticket par le message puis par le hash (le lien « parent estimé » n'est pas porté), pas de reflog, de tags ni dels-remote. - E5
tickets.csv: seuls les tickets de la fenêtre (Date dans la fenêtre ou cités par une ligne de journal de la fenêtre, et créés avant--find'après la date de création du fichier, parce que les dates de ticket sont au jour près) ; sans ce filtre, 71 lignes au lieu de 58. - E6
decisions.csv: une décision datée avec une heure après--finest écartée (le journal du 2026-10-14 a grossi depuis ; 22 lignes sans ce filtre, 20 avec). Les indicateurs I6 et I11a gardent leur lecture « au jour près » (inchangée, demandée). - E7 Règle de shell : une de mes commandes (tour 24) contenait
2>&1, interdit par la fiche ; elle n'a rien écrit ni été refusée. J'ai aussi lu quelques CSV aveccatetheadau lieu de Read. Aucunpython -c, heredoc,teeni->. Mes commandes d'écriture ont toutes passé par Edit, Write ou par le script (sortie--sortie,--detail). - E9 Masquage : un premier passage de PubCheck a trouvé 2 constats PROFIL dans
refus.csv(un chemin de profil donné en exemple dans une commande citée, et un nom de compte coupé par la troncature à 200 caractères).scrub()masque maintenant tout chemin de profil utilisateur (même règle que PubCheck) et s'applique avant la troncature. Nouveau passage de PubCheck : 0 constat (C1). - E8
AMEL1-INDICATEURS.mdmodifié sans instantané (la fiche n'en demandait qu'un pourIndicateurs.py) ; retour arrière : retirer les trois ajouts décrits en § 1.
3. Instantané
pwsh -NoProfile -Command "& 'D:\Game\LifePlay-master 5.8\Tools\Snapshot.ps1' -Lot OUTIL1-D1 -Path @('Tools\Indicateurs.py')" → sauvegarde : Tools\Indicateurs.py (42FECEB7E7F34B9FF12D319EBD1272DA) puis 1 entree(s) ajoutee(s) a D:\Game\LifePlay_Backup_5.5\OUTIL1-D1\manifest.csv. MD5 avant 42feceb7e7f34b9ff12d319ebd1272da, après c957a0e8acfb5f18edb74f7bc55ed84e (2 482 lignes). Retour arrière (proposé, non lancé) : Tools\Restore.ps1 -Lot OUTIL1-D1.
4. Ce qui n'a pas été fait
Couverture de l'inventaire OUTIL1-I1a.csv (colonne doublon_tools, « Non couvert ») :
| Élément | Statut |
|---|---|
tickets (tickets.csv) |
couvert (E5) |
| verrous | couvert : verrous.csv (numéro, pris, rendu, durée ; 82 pris dans la fenêtre, date de création Windows) |
| délais décision → livraison | couvert : decisions.csv (20 décisions, comme data\decisions.csv) |
| rotation par lot | couvert : lots.csv (titre de l'application et titre de la transcription, contexte médian, vie du fichier) |
| builders coupés | couvert : builders_coupes.csv (critère A : tours ≥ maxTurns de l'en-tête de l'agent ; critère B : dernier message = outil ou vide). Vide aujourd'hui : le builder de COMMUN-9 (55 tours pour 40 déclarés) était sous une session supprimée (estimé, non vérifié nominalement) |
fiches-registres.csv, dp716.csv |
non couvert : essai D-P7.16 clos, lignes de registre lues à la main par les lots ; ne sert à aucun indicateur |
fiches-stats.txt, subagents-aggregats.md, tableaux.md |
non couvert : tableaux de synthèse recalculables depuis les CSV |
reflog, tags, push, ls-remote, dépôts 5.5 |
non couvert : ls-remote proscrit (réseau, invite d'identifiants) ; dépôts 5.5 abandonnés |
sensibilité à la coupure (7 coupures), escalades par fiche, parallélisme, refus_motifs.csv |
non couvert : la coupure est un paramètre (rejouer avec une autre) ; escalades et motifs se filtrent dans subagents.csv et refus.csv ; parallélisme non reproduit |
Aussi non fait : rien dans Tools\LISEZMOI.md ni LogStats.ps1 (consigne) ; pas d'écrasement de AMEL1-MESURE-P3.md (E1). |
5. Points à confirmer en VAL
- P1 : décision sur
AMEL1-MESURE-P3.md(E1) : garder la référence d'origine, ou la réécrire sur les données restantes. - P2 : base de la cible de I15 (−50 %) : 10,9 pour 100 (données restantes) ou 12,2 pour 100 (T6 complet, définition T6, C5).
- P3 : I15 compte les lancements de scripts hors
Tools\mais pas lesWriteeux-mêmes (158) : confirmer. - P4 : lot de I15 = titre de la transcription ; les titres « Low », « Medium », « Medium-High » ne sont pas des lots (limite de R12).
- P5 :
recoupement.csv: 12 lignes PASS sur 14 ;ecarts.csvFAIL (+15, fichiers vivants, C4) ;commandes.csvNON-RECOUPABLE (transcriptions supprimées). - P6 :
tickets.csv: filtre sur la date de création du fichier (E5). - P7 : E7 (
2>&1) et E8 (pas d'instantané pourAMEL1-INDICATEURS.md).
6. Fichiers à commiter
Dépôt jeu D:\Game\LifePlay-master 5.8, branche ue5.8 :
- M
Tools/Indicateurs.py - M
Docs/Migration/etat/EVAL2/AMEL1/AMEL1-INDICATEURS.md(fichier non suivi jusqu'ici : A si le dossier AMEL1 n'est pas encore commité) - A
Docs/Migration/etat/EVAL2/AMEL1/OUTIL1/OUTIL1-D1-MESURE-P3.md - A
Docs/Migration/etat/EVAL2/AMEL1/OUTIL1/OUTIL1-D1-IMPL.mdNon à commiter :Saved/OUTIL1-D1/(CSV de détail et scripts de diagnostic).
Tours : 38 / 50
Constats
C1. Commandes jouées (copie 5.8, Python 3.14.4)
- Contrôle P3 avec détail :
python -I -X utf8 Tools/Indicateurs.py --debut "2026-10-11 05:30:00" --fin "2026-10-14 18:25:41" --coupure "2026-10-13 12:07:16" --sortie "Docs/Migration/etat/EVAL2/AMEL1/OUTIL1/OUTIL1-D1-MESURE-P3.md" --detail "Saved/OUTIL1-D1/detail-P3"→ 29 indicateurs, code 0, environ 40 s. Sortiedetail : Saved/OUTIL1-D1/detail-P3 (sessions.csv 63, lots.csv 37, subagents.csv 192, builders_coupes.csv 0, commits.csv 49, tickets.csv 58, verrous.csv 82, chg.csv 26, err.csv 50, decisions.csv 20, fiches.csv 634, val.csv 87, ecarts.csv 271, commandes.csv 740, refus.csv 103, recoupement.csv 14). - Même commande sans
--detail: sortie identique (à l'en-tête et à une ligne vivante deBOSS-JOURNAL.mdprès). - Fenêtre sans essai commun avec détail (
--debut "2026-10-14 18:30:00" --fin "2026-10-14 21:00:00" --seulement essais) : I3, G-c, G-d « NON MESURABLE : … », détail écrit (sessions 2, commits 4, tickets 12…), code 1. - PubCheck (chemins absolus) sur
Indicateurs.py,AMEL1-INDICATEURS.md,OUTIL1-D1-MESURE-P3.md,OUTIL1-D1-IMPL.mdet les 33 fichiers deSaved\OUTIL1-D1\:PubCheck : 0 constat(s), code 0 (après la correction E9 ; le premier passage en avait 2). - Format des CSV : séparateur
;, en-tête, 0 CR dans les 16 fichiers, nombre de champs de l'en-tête vérifié (tr -cd ';'), compte Windows et profil masqués (%USERNAME%,%USERPROFILE%).
C2. Non-régression : ancienne contre nouvelle version, mêmes données
Ancienne version = instantané OUTIL1-D1 (MD5 42feceb7…), lancée avec --racine "D:/Game/LifePlay-master 5.8" ; nouvelle = MD5 db2ec44e… (la version finale c957a0e8… n'en diffère que par le masquage des chemins de profil, E9, sans effet sur les valeurs) ; même fenêtre P3, sans --detail. diff ancien.md nouveau.md, lignes sans « I15 » :
4,5c4,5 (commande et heure d'exécution)
7c7 (durées des relevés)
37a38 (ajout de la ligne I15)
70a72,88 (ajout des notes I15)
136c154 « Indicateurs calcules : 28 sur 28 » devenu « 29 sur 29 »
Aucune ligne des 27 indicateurs, de leurs notes ni du tableau de comparaison n'a changé.
C3. Rejeu de P3 sur les données d'aujourd'hui, et pourquoi il diffère de AMEL1-MESURE-P3.md
Tableau de comparaison de OUTIL1-D1-MESURE-P3.md : 26 PASS, 27 FAIL sur 53 lignes (l'ancienne version donne les mêmes 27 FAIL). Causes constatées :
- Transcriptions supprimées : 4 sessions « STG » (
90154b30,09f8dd29,2bc561ed,8d9744a8, dont 902 tours) et 66 sous-agents (3lp-inventory, 8lp-gardien, 18lp-builder, 26lp-validator, 2lp-writer, 3lp-impl, 6lp-mcp-bp; 114,9 M de jetons lus) ont disparu de~/.claude/projects; il ne reste que quatre fichiers*.desktop-released.json(manquants.py, recherche dans le profil, le dossier de sauvegarde etSaved). Effets : I1a 25,2 % (2 398,9 M), I1b 56,92 h, I1c 285 k, I2a 25 / 45, I4a 31 passages, I7a 8 refus / 1 558 appels, I7b 19 / 4 281, I10a 66 / 1 298, I13 1 / 4, I14 1 / 14, G-a 31,6 M, G-b 55 %. - Crochet remplacé :
ecriture-gardien.pydu profil a pour MD5e03d4332d46392a44d5fa66a8fc0b57d(v2, 117 116 o, 21:01) au lieu def00d9739…: I2b passe à 100 % (174 / 174). - Journaux vivants (jour entier) : I6 7 refus sur 49 (14,3), I11a 25,2 % (73 / 290) et 22,5 % (109 / 485 du fichier entier).
- Titres de l'application renommés depuis P3 : I12 7 sessions. Les lignes qui ne dépendent ni des transcriptions supprimées, ni des journaux, ni du crochet restent PASS : I3, I5a, I5b, I8b, I9, I10b, I11b, G-c, G-d.
C4. Recoupement des CSV de détail avec etat\EVAL2\data\ (Saved\OUTIL1-D1\detail-P3\recoupement.csv)
Colonne « supprimées » = lignes d'EVAL2 qui portent sur les transcriptions ou fichiers disparus ou retouchés après la fenêtre ; écart ajusté = outil − (EVAL2 − supprimées) ; tolérance ± 1.
| Fichier | Outil | EVAL2 | Supprimées | Écart ajusté | Verdict |
|---|---|---|---|---|---|
| sessions.csv (niveau session) | 63 | 67 | 4 | 0 | PASS |
| lots.csv (titre application) | 17 | 18 | 0 | -1 | PASS (titres renommés, vivant) |
| lots.csv (titre transcription) | 20 | 22 | 3 | +1 | PASS |
| subagents.csv | 192 | 258 | 66 | 0 | PASS |
| commits.csv (3 dépôts) | 49 | 49 | 0 | 0 | PASS |
| tickets.csv | 58 | 58 | 0 | 0 | PASS |
| chg.csv | 26 | 26 | 0 | 0 | PASS |
| err.csv | 50 | 50 | 0 | 0 | PASS |
| decisions.csv | 20 | 20 | 0 | 0 | PASS |
| fiches.csv | 634 | 641 | 7 | 0 | PASS (7 fichiers retouchés ou déplacés après la fenêtre) |
| val.csv | 87 | 87 | 0 | 0 | PASS |
| ecarts.csv | 271 | 274 | 18 | +15 | FAIL (fichiers vivants) |
commandes.csv (familles, hors d.script:) |
630 | 751 | — | -121 | NON-RECOUPABLE (transcriptions supprimées) |
| refus.csv | 103 | 135 | 32 | 0 | PASS |
ecarts.csv : comparer_ecarts.py (clés catégorie, fichier, ligne) montre seulement des écarts sur BOSS/BOSS-JOURNAL.md (13 lignes dans l'outil seul, 10 dans EVAL2 seul : lignes décalées par les lignes ajoutées depuis), BOSS/BOSS-ETAT.md (+1), 2 lignes ajout_grep et 3 fichiers retouchés après la fenêtre (ORGA2-PROPOSITION.md, P7-TACHES.md, P7-H2.md de fiches). Le fichier de détail est donc cohérent ; l'écart est celui de fichiers vivants, au-delà du ± 1. |
C5. I15 : valeur avant sur P3 (données restantes)
I15 = 465 / 4 281 = 10,9 pour 100 appels shell (principales 320, sous-agents 145). Familles (un appel peut en porter plusieurs) : h.python-heredoc 214, h.python-c 118, h.lance-un-script-ecrit-hors-Tools 139, h.python-pipe-stdin 0 ; 158 appels Write de scripts hors Tools\ (hors compte).
Par lot (titre de la transcription), appels I15 / appels shell = pour 100 :
| Lot | I15 | Shell | Pour 100 |
|---|---|---|---|
| P7 (n° 1, passée la main) | 17 | 79 | 21,5 |
| PUB3 | 49 | 235 | 20,9 |
| P7 | 55 | 279 | 19,7 |
| Big Boss | 135 | 819 | 16,5 |
| Lot outil copie partagée | 31 | 204 | 15,2 |
| VERR1 | 14 | 92 | 15,2 |
| LOT STE | 11 | 79 | 13,9 |
| « Medium » | 31 | 240 | 12,9 |
| (sans titre : essais jetables) | 1 | 12 | 8,3 |
| « Low » | 51 | 716 | 7,1 |
| STE (remplacée) | 6 | 95 | 6,3 |
| CAM | 8 | 155 | 5,2 |
| REG1 | 4 | 79 | 5,1 |
| EVAL : produit Fab | 2 | 40 | 5,0 |
| « Medium-High » | 48 | 972 | 4,9 |
| Reporter les pièges U8 dans les skills | 2 | 76 | 2,6 |
Repère à données complètes (T6, EVAL2-T6-INV § 2.8, établi) : h.python-heredoc 335 (contre 214), h.python-c 152 (contre 118), 5 910 appels shell (contre 4 281) ; la définition T6 avec lancements de Tools\ donnait 957 appels h.* dont 234 Write, soit 723 / 5 910 = 12,2 pour 100 (estimé : les Write ne portent que la famille h.Write-script). La valeur de l'outil (10,9) n'est pas comparable terme à terme à ce 12,2 (lancements de Tools\ exclus, STG manquant). Ligne ajoutée dans AMEL1-INDICATEURS.md § 2.1, cible proposée −50 %. |
C6. Ligne à mettre dans l'index Tools\LISEZMOI.md (non écrite, consigne)
| Indicateurs.py | Mesure les indicateurs AMEL1 (I1a à I15, G-a à G-d) sur une fenêtre de temps ; --detail écrit les CSV de détail des relevés EVAL2 | python -I -X utf8 Tools\Indicateurs.py --debut "AAAA-MM-JJ HH:MM:SS" --fin "AAAA-MM-JJ HH:MM:SS" [--coupure "…"] --sortie <fichier.md> [--detail <dossier>] |
C7. Limites
- Les CSV de détail ne reproduisent pas tout EVAL2 (E4, § 4) ;
commandes.csvne peut plus être recoupé avec EVAL2 tant que les transcriptions de P3 manquent. - La valeur avant de I15 est mesurée sur des données amputées (C3, C5) ; une réécriture de la référence P3 (E1) fige cette amputation.
- Les lots de I15 dépendent des titres de session : 3 des 16 lots (« Low », « Medium », « Medium-High ») ne sont pas des noms de lot.
- Les 27 indicateurs existants n'ont pas changé ; leur reproduction sur les données d'origine n'est plus testable ; seuls les tests ancienne / nouvelle version le sont.
- Le « jour entier » reste la granularité de
REPO-JOURNAL.md,BOSS-JOURNAL.mdetecarts.csv(I6, I10b, I11a).