104 lines
14 KiB
Markdown
104 lines
14 KiB
Markdown
|
|
Fiche OUTIL1-I1a — Niveau N1 — Modèle prévu non précisé par la fiche | utilisé claude-sonnet-5-5 — Agent lp-inventory — Skills sk-protocol, sk-recount, lp-paths
|
||
|
|
# OUTIL1-I1a-INV : inventaire des 33 scripts EVAL et EVAL2 (2026-10-14)
|
||
|
|
|
||
|
|
Demande : trier les scripts dispersés sous `etat\`, les intégrer à `Tools\`, amender les skills (sous-lot OUTIL1 d'AMEL1). Cette fiche couvre `etat\EVAL\scripts\` (17) et `etat\EVAL2\scripts\` (16). Données détaillées : `OUTIL1-I1a.csv` (même dossier, 33 lignes, séparateur `;`).
|
||
|
|
|
||
|
|
## 1. Commandes exactes
|
||
|
|
1. Glob `**/*.{py,ps1}` dans `...\etat\EVAL\scripts` ; idem dans `...\etat\EVAL2\scripts`.
|
||
|
|
2. `ls -l --time-style=long-iso` des deux dossiers `scripts` (dates de modification).
|
||
|
|
3. Read (en-tête, docstring, constantes) de chacun des 33 scripts ; Read de `Tools\Indicateurs.py` l. 1-62, 824-1003, 1500-1553 ; Grep `^def |^# |^"""` sur `Tools\Indicateurs.py` (liste des fonctions).
|
||
|
|
4. Grep `sys\.exit|raise SystemExit|exit\(`, Grep `add_argument|sys\.argv`, Grep des écritures (`open(... "w"`, `write_bytes`...) dans `etat\**\EVAL*\scripts\*.py`.
|
||
|
|
5. Grep (`output_mode: content`, `-o`) des noms de scripts dans `etat\**\*.md` (dernier usage connu) ; Grep `output_mode: count` du même motif : 176 occurrences, 27 fichiers.
|
||
|
|
6. `git ls-files "Docs/Migration/etat/EVAL/scripts" "Docs/Migration/etat/EVAL2/scripts" | wc -l` ; `git check-ignore -v` sur `eval2_lf.py` et `eval_probe.py` ; `git status --porcelain --ignored` sur les deux dossiers.
|
||
|
|
7. Read de `lp-doc\gabarits.md` (gabarit INV), Grep de `AMEL1-MESURE-P3.md` (l. 27-112) pour les cas de non-régression.
|
||
|
|
8. Recomptes du CSV (Grep `output_mode: count`, deuxième formulation) : voir § 2.
|
||
|
|
|
||
|
|
## 2. Comptes bruts
|
||
|
|
- Glob EVAL : 17 chemins (`EvalT2_Commits`, `eval_boss`, `eval_commandes`, `eval_fiches`, `eval_journal`, `eval_load`, `eval_probe` à `eval_probe8` (8), `eval_sessions`, `eval_sessions_recount`, `eval_subagents`). Glob EVAL2 : 16 chemins. Total 33, aucun `.ps1`.
|
||
|
|
- `git ls-files` des deux dossiers : `0` (sortie de `wc -l`). `git check-ignore -v` : `.gitignore:75:/Docs/Migration/etat/**` pour les deux fichiers testés. `git status --porcelain --ignored` : `!! Docs/Migration/etat/EVAL/scripts/` et `!! Docs/Migration/etat/EVAL2/scripts/`. **Les 33 scripts ne sont pas sous git** (seuls `.md` et `.csv` de `etat\` sont suivis) : leur seule copie est sur le disque.
|
||
|
|
- Recompte du CSV, Grep `^([^;]*;){11}[^;]*$` : 34 lignes (en-tête + 33), donc 12 colonnes partout et aucun `;` dans un champ. Grep par classe (colonne 9) : a = 1, b = 11, c = 12, d = 9 ; 1 + 11 + 12 + 9 = 33.
|
||
|
|
- Citations : 176 occurrences de noms de scripts dans 27 livrables `.md` ; EVAL2 rejoués par AMEL1-V1b (`V1b\rejeu.md`, `V1b\echec.md`, 17 occurrences chacun) ; `AMEL1-I2-GITIGNORE.md:113-120` liste 8 scripts EVAL avec les motifs PROFIL, NOM (chemin du profil, nom de compte).
|
||
|
|
|
||
|
|
## 3. Écarts au compte attendu de la fiche
|
||
|
|
Compte attendu 33 (17 + 16) : conforme. Aucun `.ps1`. Aucun script d'`EVAL\scripts` ni d'`EVAL2\scripts` n'a été exécuté.
|
||
|
|
|
||
|
|
## 4. Tableau (détail dans le CSV)
|
||
|
|
Classes : (a) à intégrer à `Tools\` ; (b) trace de lot à laisser ; (c) obsolète, corbeille sur accord ; (d) à fusionner dans un outil existant. `Ind.` = `Tools\Indicateurs.py`.
|
||
|
|
|
||
|
|
| Script | Lot | Fonction | Dernier usage (modif.) | Doublon Tools | Classe | Cible |
|
||
|
|
|---|---|---|---|---|---|---|
|
||
|
|
| EVAL\EvalT2_Commits.py | EVAL-T2 | commits des 5 dépôts et tickets | 2026-10-11 05:39 | Ind. `releve_commits` (partiel), remplacé par eval2_commits | b | trace |
|
||
|
|
| EVAL\eval_boss.py | EVAL-T4 | file de build et arbitrages Big Boss | 2026-10-14 22:03 (retouche I2) | aucun | b | trace |
|
||
|
|
| EVAL\eval_commandes.py | EVAL-T6 | commandes répétées | 2026-10-14 22:03 | Ind. `releve_commandes`, remplacé par eval2_commandes | b | trace |
|
||
|
|
| EVAL\eval_fiches.py | EVAL-T5 | qualité fiches et registres | 2026-10-11 05:49 | Ind. `releve_fiches`, remplacé par eval2_fiches | b | trace |
|
||
|
|
| EVAL\eval_journal.py | EVAL-T3 | CHG et ERR | 2026-10-11 05:47 | Ind. `releve_journal`, remplacé par eval2_journal | b | trace |
|
||
|
|
| EVAL\eval_load.py | EVAL-T4 | chargeur Big Boss (sonde v1) | 2026-10-14 22:03 | aucun | c | corbeille sur accord |
|
||
|
|
| EVAL\eval_probe.py | EVAL-T4 | liste des sessions | 2026-10-14 22:03 | Ind. `lister_principales` (autre sortie) | c | corbeille sur accord |
|
||
|
|
| EVAL\eval_probe2.py | EVAL-T4 | forme des entrées Big Boss | 2026-10-14 22:03 | aucun | c | corbeille sur accord |
|
||
|
|
| EVAL\eval_probe3.py | EVAL-T4 | liste des messages Big Boss | 2026-10-14 22:03 | aucun | c | corbeille sur accord |
|
||
|
|
| EVAL\eval_probe4.py | EVAL-T4 | entrées sans corps peer (indices en dur) | 2026-10-14 22:03 | aucun | c | corbeille sur accord |
|
||
|
|
| EVAL\eval_probe5.py | EVAL-T4 | mentions BUILD-* | 2026-10-11 05:37 | aucun | c | corbeille sur accord |
|
||
|
|
| EVAL\eval_probe6.py | EVAL-T4 | messages sans mot-clé | 2026-10-11 05:37 | aucun | c | corbeille sur accord |
|
||
|
|
| EVAL\eval_probe7.py | EVAL-T4 | en-têtes U8/CAM/... | 2026-10-11 05:37 | aucun | c | corbeille sur accord |
|
||
|
|
| EVAL\eval_probe8.py | EVAL-T4 | messages hors origin.body | 2026-10-14 22:03 | aucun | c | corbeille sur accord |
|
||
|
|
| EVAL\eval_sessions.py | EVAL-T1a | sessions principales | 2026-10-11 05:39 | Ind. `releve_sessions`, remplacé par eval2_sessions | b | trace |
|
||
|
|
| EVAL\eval_sessions_recount.py | EVAL-T1a | recompte sk-recount | 2026-10-11 05:41 | aucun | b | trace |
|
||
|
|
| EVAL\eval_subagents.py | EVAL-T1b | sous-agents | 2026-10-11 05:38 | Ind. `releve_sousagents`, remplacé par eval2_subagents | b | trace |
|
||
|
|
| EVAL2\eval2_commandes.py | EVAL2-T6 | commandes et refus du crochet | 2026-10-14 18:46 | Ind. `releve_commandes` (agrégats) | d | Ind. `--detail` |
|
||
|
|
| EVAL2\eval2_commits.py | EVAL2-T2 | commits, tickets, reflog, verrous | 2026-10-14 19:00 | Ind. `releve_commits` (3 dépôts, I6) | d | Ind. `--detail` ou ReleveCommits.py |
|
||
|
|
| EVAL2\eval2_commun.py | EVAL2-T4 | essais communs (données saisies) | 2026-10-14 18:50 | Ind. `releve_essais` lit ses CSV | b | trace |
|
||
|
|
| EVAL2\eval2_fiches.py | EVAL2-T5 | fiches, registres, écarts | 2026-10-14 18:57 | Ind. `releve_fiches` | d | Ind. `--detail` |
|
||
|
|
| EVAL2\eval2_journal.py | EVAL2-T3 | CHG, ERR, décisions | 2026-10-14 18:56 | Ind. `releve_journal` | d | Ind. `--detail` |
|
||
|
|
| EVAL2\eval2_lf.py | EVAL2-T9 | normalise CR en LF (data) | 2026-10-14 19:13 | FileCheck.ps1 relève sans corriger | a | NormaliserLF.py |
|
||
|
|
| EVAL2\eval2_meta.py | EVAL2-T1a | app_meta.csv depuis un fichier tool-results | 2026-10-14 18:47 | Ind. `lire_meta_app` | c | corbeille sur accord |
|
||
|
|
| EVAL2\eval2_post.py | EVAL2-T5 | triage manuel des écarts (dictionnaire) | 2026-10-14 18:59 | Ind. `i_I10b` lit le CSV | b | trace |
|
||
|
|
| EVAL2\eval2_recount.py | EVAL2-T1a | recompte ebc15012 | 2026-10-14 18:51 | aucun | b | trace |
|
||
|
|
| EVAL2\eval2_refus.py | EVAL2-T6b | classement v2, échantillon | 2026-10-14 18:51 | Ind. `classe_v2` | d | Ind. `--detail` |
|
||
|
|
| EVAL2\eval2_sessions.py | EVAL2-T1a | sessions principales P3 | 2026-10-14 18:50 | Ind. `releve_sessions` | d | Ind. `--detail` |
|
||
|
|
| EVAL2\eval2_sonde_meta.py | EVAL2-T1a | sonde du chemin Roaming | 2026-10-14 18:47 | Ind. `lire_meta_app` (MSIX) | c | corbeille sur accord |
|
||
|
|
| EVAL2\eval2_sonde_objectif.py | EVAL2-T1a | sonde lignes 9235 et 9343 | 2026-10-14 18:44 | aucun | c | corbeille sur accord |
|
||
|
|
| EVAL2\eval2_subagents.py | EVAL2-T1b | sous-agents P3 | 2026-10-14 18:45 | Ind. `releve_sousagents`, FicheStats | d | Ind. `--detail` |
|
||
|
|
| EVAL2\eval2_subagents_sessions.py | EVAL2-T1b | rattachement aux sessions | 2026-10-14 18:51 | Ind. `lire_meta_app` (le script lit Roaming) | d | Ind. `--detail` |
|
||
|
|
| EVAL2\eval2_val.py | EVAL2-T5 | verdicts des VAL | 2026-10-14 18:58 | Ind. `verdicts_val` | d | Ind. `--detail` |
|
||
|
|
|
||
|
|
### Totaux par classe
|
||
|
|
| Classe | EVAL | EVAL2 | Total |
|
||
|
|
|---|---|---|---|
|
||
|
|
| (a) intégrer à `Tools\` | 0 | 1 | **1** |
|
||
|
|
| (b) trace de lot | 8 | 3 | **11** |
|
||
|
|
| (c) obsolète, corbeille sur accord | 9 | 3 | **12** |
|
||
|
|
| (d) fusionner dans un outil existant | 0 | 9 | **9** |
|
||
|
|
| Total | 17 | 16 | **33** |
|
||
|
|
|
||
|
|
### Ce que couvre `Indicateurs.py` et ce qu'il ne couvre pas
|
||
|
|
- **Établi** (docstring `Indicateurs.py:5-7`, intitulés de relevés l. 267, 405, 589, 825, 861, 955, 985) : il a repris la logique de `eval2_sessions`/`meta` (I1, I12, G-a, G-b), `eval2_subagents`/`_sessions` (I4, I9, I13, I14), `eval2_commandes`/`refus` (I2a, I7, I10a), `eval2_commits` (I6), `eval2_journal` (I5, I11a), `eval2_fiches`/`val`/`post` (I8, I10b, I11b), et il lit `commun.csv`/`builds.csv` (I3, G-c, G-d).
|
||
|
|
- **Établi** : il n'écrit que le fichier `--sortie` (`Indicateurs.py:21-22`, « Lecture seule partout, sauf le fichier --sortie »). Les CSV de détail des scripts (`sessions.csv`, `commandes.csv`, `refus.csv`, `subagents.csv`, `tickets.csv`, `chg.csv`, `err.csv`, `decisions.csv`, `fiches*.csv`, `val.csv`, `ecarts.csv`) ne sont donc plus produits par l'outil. D'où la classe (d) et la proposition d'une option `--detail <dossier>`.
|
||
|
|
- **Non couvert** (voir colonne `doublon_tools` du CSV) : tickets, reflog, verrous, tags et `ls-remote` ; délais décision vers livraison et retard CHG ; rotation par lot, refus par motif et parallélisme ; sensibilité à la coupure et builders coupés ; `dp716` ; échantillon de relecture de `eval2_refus`.
|
||
|
|
- **Non reproductible dans l'outil** : `eval2_commun.py` (dictionnaire `BUILDS` saisi à la main, `eval2_commun.py:28-50`) et `eval2_post.py` (dictionnaire `RETENU`, l. 13-39) sont des tables de données de P3 ; `Indicateurs.py` annonce « non mesurable » hors P3 sans `--builds-csv`/`--commun-csv` (l. 30-31).
|
||
|
|
|
||
|
|
## 5. Propositions de normalisation (classes a et d)
|
||
|
|
| Script | Cible | Paramètres à normaliser | Code de sortie | Cas de non-régression (commande, sortie attendue citée) |
|
||
|
|
|---|---|---|---|---|
|
||
|
|
| eval2_lf.py | `Tools\NormaliserLF.py` | `--dossier`, `--extensions`, `--appliquer` (à blanc par défaut), instantané `Snapshot.ps1` avant écriture | 0 conforme, 1 à corriger, 2 erreur | `EVAL2-STATS.md:187` : « 516 CR retirés sur 7 fichiers », puis recompte à 0 CR ; à rejouer sur une copie des 7 fichiers sous `Saved\` |
|
||
|
|
| eval2_commandes.py, eval2_refus.py | `Tools\Indicateurs.py --detail` | `--detail`, `--hook`, graine en paramètre, plus de `runpy` | 0/1/2 | `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 <tmp>.md` → `AMEL1-MESURE-P3.md:85-87` (I2a 36 sur 76), `:101` (I7a 14), `:103-104` (26 sur 5910) |
|
||
|
|
| eval2_commits.py | `Tools\Indicateurs.py --detail` ou `Tools\ReleveCommits.py` | dépôts, bornes, coupure en paramètres, `GIT_TERMINAL_PROMPT=0` et délai sur `ls-remote` | 0/1/2 | même commande → `AMEL1-MESURE-P3.md:98-100` (I6 12,2 ; 6 refus ; 49 commits) ; `EVAL2-T2-INV.md:97` (34 + 15 + 0 = 49 ; 82 verrous pris = 82 rendus) |
|
||
|
|
| eval2_fiches.py, eval2_val.py | `Tools\Indicateurs.py --detail` | racine `etat`, bornes, sortie | 0/1/2 (1 si VAL sans verdict) | `AMEL1-MESURE-P3.md:27` (I8a 1 sur 34), `:105-107` (I8b 4 sur 69) ; `EVAL2-T5-INV.md:79-80` (P3a 30 VAL, P3b 57 VAL) |
|
||
|
|
| eval2_journal.py | `Tools\Indicateurs.py --detail` | bornes, chemins | 0/1/2 | `AMEL1-MESURE-P3.md:94-97` (I5a 50 sur 50, I5b 29,3 h) |
|
||
|
|
| eval2_sessions.py | `Tools\Indicateurs.py --detail` | fenêtre (existe), dossier, chemin MSIX par défaut | 0/1/2 | `AMEL1-MESURE-P3.md:78-84` (I1a 20,4 % = 605,6 M / 2970 M ; I1b 36,1 %) ; `EVAL2-T1a-INV.md:133` (42 sessions jetables, 61 tours) |
|
||
|
|
| eval2_subagents.py, eval2_subagents_sessions.py | `Tools\Indicateurs.py --detail` | coupure, racine, chemin MSIX | 0/1/2 (aujourd'hui 0/1/3) | `AMEL1-MESURE-P3.md:91-93` (I4a 37 passages, 144,2 M), `:108-110` (I9 11 sur 14) ; `EVAL2-T1b-INV.md:36` (258 agents, 562,4 M, 37 sessions) |
|
||
|
|
|
||
|
|
Règles communes : aucun chemin en dur (racine, `etat`, profil, dépôts passés en paramètres) ; sorties en LF (`lineterminator="\n"`) ; plus de code exécuté à l'import ; code de sortie 0/1/2 ; aucun nom de compte écrit (`%USERPROFILE%`). Les 33 scripts n'étant pas sous git (§ 2), faire une copie sous `Tools\` ou un instantané avant tout déplacement (`sk-change-safety`).
|
||
|
|
|
||
|
|
## 6. Établi / estimé / incertain
|
||
|
|
- **Établi** : les 33 chemins et leurs dates de modification (`ls -l`) ; les entrées, sorties et paramètres lus en tête de chaque script (Read) ; l'absence des 33 scripts de git (`git ls-files` = 0, `.gitignore:75`) ; les fonctions d'`Indicateurs.py` citées ; les valeurs attendues citées de `AMEL1-MESURE-P3.md` et des INV EVAL2.
|
||
|
|
- **Estimé** : « dernier usage ». Les 8 scripts EVAL modifiés le 2026-10-14 22:03 (`eval_boss`, `eval_commandes`, `eval_load`, `eval_probe`, `eval_probe2`, `eval_probe3`, `eval_probe4`, `eval_probe8`) sont exactement ceux listés par `AMEL1-I2-GITIGNORE.md:113-120` (motifs PROFIL, NOM) : retouche probable de AMEL1-I2, contenu non comparé. Le rejeu des EVAL2 par AMEL1-V1b est déduit de `V1b\rejeu.md`, sans relire sa date.
|
||
|
|
- **Incertain** : (1) corps des scripts non lus au-delà des en-têtes (50 premières lignes, sauf petits scripts lus entiers) : les sorties exactes de chaque script viennent des docstrings et des Grep d'écriture ; (2) la classe (b) des scripts EVAL repose sur leur rôle de preuve des chiffres du doc 33 (`EVAL-STATS.md`), à confirmer par l'utilisateur ; une fois ces chiffres reproduits par `Indicateurs.py` ils pourraient passer en (c) ; (3) `eval2_subagents_sessions.py` lit le chemin Roaming (vide sous MSIX d'après `lp-paths`), `EVAL2-STATS.md:174` note qu'il a tourné « sous le Python d'Unreal » : lecture non vérifiée ; (4) le code de sortie des scripts sans `sys.exit` est 0 s'il n'y a pas d'exception (non exécutés) ; (5) rien n'a été mesuré sur les cas de non-régression : les valeurs sont citées, pas rejouées ; (6) les relevés sur les dépôts 5.5 (jeu et modules) de `eval2_commits.py` ne sont pas couverts par `Indicateurs.py` (3 dépôts).
|
||
|
|
- **Piège de forme** : les CSV de `EVAL2\data\` sont en CRLF ou mixtes (`EVAL2-T9-VAL.md:95-96`) car les scripts utilisent `csv.writer` sans `lineterminator` ; à corriger à l'intégration.
|
||
|
|
|
||
|
|
## 7. Fichiers à commiter
|
||
|
|
Fichiers écrits par cette fiche (suivis en texte seul, `.md` et `.csv` de `etat\`) :
|
||
|
|
- A `Docs/Migration/etat/EVAL2/AMEL1/OUTIL1/OUTIL1-I1a-INV.md` (jeu)
|
||
|
|
- A `Docs/Migration/etat/EVAL2/AMEL1/OUTIL1/OUTIL1-I1a.csv` (jeu)
|
||
|
|
|
||
|
|
Tours : 14 / 40
|