LifePlay-Revival/Docs/Migration/etat/EVAL2/AMEL1/OUTIL1/OUTIL1-D1-IMPL.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

18 KiB
Raw Blame History

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.md non 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é : MD5 4bc336fdb8d8fca14a05138d96a24a18 avant et après (copie de contrôle comparée). Le rejeu est dans OUTIL1\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 par Write hors Tools\ (famille nouvelle h.lance-un-script-ecrit-hors-Tools ; la famille T6 d'origine comptait aussi les scripts de Tools\). Les appels Write eux-mêmes ne sont pas des appels shell : ils sont comptés à part (158). Lot = titre de la transcription (dernier custom-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 : lignes famille seulement (pas de lignes outil avec date de création par git log, pas de lignes erreur_shell) ; refus.csv : classement v2 seul (le classement v1 n'est pas porté) mais une colonne suite, 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 de ls-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 --fin d'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 --fin est é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 avec cat et head au lieu de Read. Aucun python -c, heredoc, tee ni ->. 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.md modifié sans instantané (la fiche n'en demandait qu'un pour Indicateurs.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 les Write eux-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.csv FAIL (+15, fichiers vivants, C4) ; commandes.csv NON-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é pour AMEL1-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.md Non à 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. Sortie detail : 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 de BOSS-JOURNAL.md prè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.md et les 33 fichiers de Saved\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 (3 lp-inventory, 8 lp-gardien, 18 lp-builder, 26 lp-validator, 2 lp-writer, 3 lp-impl, 6 lp-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 et Saved). 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.py du profil a pour MD5 e03d4332d46392a44d5fa66a8fc0b57d (v2, 117 116 o, 21:01) au lieu de f00d9739… : 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.csv ne 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.md et ecarts.csv (I6, I10b, I11a).