87 lines
11 KiB
Markdown
87 lines
11 KiB
Markdown
|
|
Fiche OUTIL1-I1b — 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-I1b-INV : inventaire des scripts dispersés sous etat\ (2026-10-14)
|
||
|
|
|
||
|
|
Périmètre : `.py`, `.ps1`, `.jsonl` sous `D:\Game\LifePlay-master 5.8\Docs\Migration\etat\`, hors `__pycache__`, `EVAL\scripts\` et `EVAL2\scripts\`. Tableau complet (12 colonnes) : `OUTIL1-I1b.csv` (même dossier). Aucun script n'a été exécuté.
|
||
|
|
|
||
|
|
## 1. Commandes exactes
|
||
|
|
|
||
|
|
1. Recensement (PowerShell, lecture seule) :
|
||
|
|
`pwsh -NoProfile -Command '$f = Get-ChildItem -LiteralPath "D:\Game\LifePlay-master 5.8\Docs\Migration\etat" -Recurse -File -Include *.py,*.ps1,*.jsonl | Where-Object { $_.FullName -notlike "*__pycache__*" -and $_.FullName -notlike "*\EVAL\scripts\*" -and $_.FullName -notlike "*\EVAL2\scripts\*" } | Sort-Object FullName; $f | ForEach-Object { $_.FullName.Substring(48) + "|" + $_.Length + "|" + $_.LastWriteTime.ToString("yyyy-MM-dd") }; "TOTAL_PERIMETRE=" + ($f | Measure-Object).Count'`
|
||
|
|
2. Compte brut sans exclusion : même commande sans les deux `-notlike "*\EVAL...*"` (`TOTAL_BRUT`).
|
||
|
|
3. Liste croisée : Glob `**/*.{py,ps1,jsonl}` sous `etat\`.
|
||
|
|
4. Doublons d'octets : `Get-FileHash -Algorithm MD5` sur `AG\P7\hooks\ecriture-gardien.py`, `EVAL2\AMEL1\R2\ecriture-gardien-v2.py`, la copie du profil (`%USERPROFILE%\.claude\hooks\ecriture-gardien.py`), puis `lp-mcp-garde-lecture.py` (brouillon et copie du profil).
|
||
|
|
5. Dernier usage : Grep du nom de chaque script dans `etat\**\*.md` (un Grep par script ou groupe). Cas de la batterie : Grep `^\{` en mode count sur `cas-v2.jsonl`.
|
||
|
|
6. Outils de `Tools\` : Glob `Tools\*` puis lecture des en-têtes de Traces, Corbeille, TracesRacines, PubCheck, CopieEtat, LogStats, FicheStats, Indicateurs, EssaiJournal, uasset, uasset58, FileCheck, UeState, Snapshot, Verrou.
|
||
|
|
7. Contrôle du CSV : Grep `^([^;]*;){11}[^;]*$` en mode count sur le CSV.
|
||
|
|
|
||
|
|
## 2. Comptes bruts
|
||
|
|
|
||
|
|
```
|
||
|
|
TOTAL_PERIMETRE=35
|
||
|
|
TOTAL_BRUT=68 (dont EVAL\scripts = 17 et EVAL2\scripts = 16, hors périmètre : 68 - 33 = 35)
|
||
|
|
Grep ^\{ cas-v2.jsonl : 417
|
||
|
|
Grep ^([^;]*;){11}[^;]*$ OUTIL1-I1b.csv : 36 (1 en-tête + 35 lignes, 12 champs chacune)
|
||
|
|
MD5 E03D4332D46392A44D5FA66A8FC0B57D : AG\P7\hooks\ecriture-gardien.py = EVAL2\AMEL1\R2\ecriture-gardien-v2.py = copie du profil
|
||
|
|
MD5 F787D205D4102A16109606F4A357E9E5 : lp-mcp-garde-lecture.py du brouillon = copie du profil
|
||
|
|
```
|
||
|
|
|
||
|
|
Répartition par dossier (recompte à la main de la liste du Glob) : AG\TRACE1 12, ST\STE 6, EVAL2\AMEL1\R2 4, U58\U7b 2, OUT1 2, AG\PUB3 2, AG\P7 2, U58\U3 1, ARCH427 1, AG\brouillons 1, AG\VERR1 1, AG\ORGA1 1 = 35.
|
||
|
|
|
||
|
|
Totaux par classe : **(a) 8, (b) 22, (c) 3, (d) 2** = 35.
|
||
|
|
|
||
|
|
| Classe | Fichiers |
|
||
|
|
|---|---|
|
||
|
|
| (a) intégrer à `Tools\` (8) | `ecriture-gardien-v2.py`, `test_crochet.py`, `cas-v2.jsonl`, `lp-mcp-garde-lecture.py`, `ARCH427_manifest.py`, `cmp_pie.py`, `TRACE1-T4b-essai.ps1`, `TRACE1-T4cv-essais.ps1` |
|
||
|
|
| (d) fusionner (2) | `logstats.py` (STE) vers `LogStats.ps1` ; `TRACE1-T4cv-essais3.ps1` vers le futur test des traces |
|
||
|
|
| (c) obsolète, corbeille sur accord (3) | `t6_essai1.ps1` (remplacé par `t6_a2.ps1`), `TRACE1-T4c-essais.ps1` (remplacé par `T4cv-essais`), `TRACE1-T4cv-attente.ps1` |
|
||
|
|
| (b) laisser en trace (22) | les 22 autres (voir CSV) |
|
||
|
|
|
||
|
|
## 3. Écarts au compte attendu de la fiche
|
||
|
|
|
||
|
|
- Attendu ≈ 35 : obtenu 35. Les décomptes de la fiche concordent : TRACE1 12, STE 6, AMEL1 4, U7b 2, OUT1 2, PUB3 2, P7 2, un chacun pour U3, ARCH427, brouillons, VERR1, ORGA1.
|
||
|
|
- `OUT1_uasset_rejeu_brut.py` (18 888 octets) est la pièce citée par `OUT1-UASSET.md:41-42` ; `Tools\uasset.py` en contient le corps (en-tête de `Tools\uasset.py`). Doublon de contenu, gardé (b).
|
||
|
|
- `AG\P7\hooks\ecriture-gardien.py` n'est pas un script de lot de plus : c'est la même chose que le crochet v2 et que la copie installée (3 MD5 égaux).
|
||
|
|
- Aucun de ces 35 fichiers n'est suivi par git (`etat\` ignoré hors `.md` et `.csv`, `.gitignore:75` cité par `TRACE1-T4b-IMPL.md`). Les `.py` et `.ps1` n'existent donc que sur le disque.
|
||
|
|
- Tests exécutés sur aucun script (consigne). Les sorties attendues viennent des livrables cités ; elles n'ont pas été rejouées.
|
||
|
|
|
||
|
|
## 4. Établi / estimé / incertain
|
||
|
|
|
||
|
|
**Établi** (lu à la source ou commande rejouée) : les 35 chemins, tailles et dates ; les en-têtes et le corps des 35 scripts (lus en entier ou sur leurs 20 à 70 premières lignes pour les plus longs, voir ci-dessous) ; les trois MD5 égaux du crochet ; le MD5 égal de `lp-mcp-garde-lecture.py` brouillon et profil ; 417 lignes dans `cas-v2.jsonl` ; l'absence de F5/DESTROY/hitch dans `LogStats.ps1` (Grep : 3 lignes SPAWN seulement) ; la ligne `conformes : 417 / 417` d'`AMEL1-R2-IMPL.md:171`.
|
||
|
|
|
||
|
|
**Estimé** : classement b/c (par jugement sur la dépendance à des données du jour, aux scratchpads de sessions disparues ou à des inventaires figés). Les scripts longs n'ont pas été lus en entier : `ecriture-gardien-v2.py` (40 premières lignes, 117 Ko), `construire_cas.py` (60 lignes), `TRACE1-T4a/T4c/T4cv/T4v-*` (15 à 30 lignes), `p1_analyse.py`, `p3_complements.py`, `p4_tree.py`, `p5_rh.py`, `logstats.py` (30 à 40 lignes), `OUT1_uasset_rejeu_brut.py` (60 lignes). Les entrées et sorties de ces fichiers viennent donc de leurs en-têtes et des livrables.
|
||
|
|
|
||
|
|
**Incertain** : (1) les journaux de build archivés de `logstats.py` (J6, H9) ont pu être mis à la corbeille par la règle TRACE1 : l'essai de non-régression serait alors à refaire sur un journal témoin figé. (2) Les journaux PIE 5.5 de `cmp_pie.py` (08/10) : idem. (3) Le contenu du `PUB3-T4` sorti (`TOTAL : ...`) n'a pas été retrouvé par Grep dans `PUB3-T4*.md`. Essai qui trancherait : `Grep "TOTAL" PUB3-T6b-VAL.md` puis relecture. (4) `cas-v2.jsonl` n'a pas été passé à PubCheck (hors des deux fichiers de la fiche) : il contient des commandes issues de transcriptions, avec des marques de profil.
|
||
|
|
|
||
|
|
## Réponses aux cas particuliers
|
||
|
|
|
||
|
|
- **Crochet v2 et sa batterie** : le crochet (`ecriture-gardien-v2.py`) est installé dans le profil, MD5 égal. Oui, `test_crochet.py` + `cas-v2.jsonl` doivent devenir un outil de test du crochet dans `Tools\hooks\TestCrochet.py` : il rejoue 417 cas (`conformes : 417 / 417`, code 0), a un témoin négatif (`246 / 417`, code 1 sur l'ancien crochet, `AMEL1-R2-IMPL.md:122`) et ne lit que le crochet passé en argument. `construire_cas.py` reste en trace (b) : il lit des transcriptions et des sauvegardes voués à l'archivage. La source du crochet doit être unique : `Tools\hooks\ecriture-gardien.py`, le profil en recevant une copie (politique d'installation à décider).
|
||
|
|
- **Scripts P7** : `P7-T7-codeturion.ps1` et `AG\P7\hooks\ecriture-gardien.py` classés (b), lot P7, selon la fiche. Pas d'évidence contraire, sauf que le second est un doublon exact de la source (a) ci-dessus.
|
||
|
|
|
||
|
|
## Détail des (a) et (d) : cible, normalisation, non-régression
|
||
|
|
|
||
|
|
| Source | Cible proposée | Normalisation | Cas d'origine (commande, sortie attendue citée) |
|
||
|
|
|---|---|---|---|
|
||
|
|
| `EVAL2\AMEL1\R2\ecriture-gardien-v2.py` | `Tools\hooks\ecriture-gardien.py` | codes 0/2 imposés par le protocole des crochets ; aucun chemin d'entrée | `python -I -X utf8 test_crochet.py ecriture-gardien-v2.py` -> `conformes : 417 / 417`, code 0 (`AMEL1-R2-IMPL.md:121`, `:171`) |
|
||
|
|
| `EVAL2\AMEL1\R2\test_crochet.py` | `Tools\hooks\TestCrochet.py` | `--cwd` au lieu de la constante en dur ; usage 64 -> 2 ; cas par défaut à côté du script ; crochet absent = 2 | même commande ; témoin négatif sur l'ancien crochet : `conformes : 246 / 417`, code 1 (`AMEL1-R2-IMPL.md:122`) |
|
||
|
|
| `EVAL2\AMEL1\R2\cas-v2.jsonl` | `Tools\hooks\cas-v2.jsonl` | marques de profil conservées ; PubCheck avant tout dépôt | groupes a 36/36, b 40/40, c 245/245, t 93/93, r 3/3 (`AMEL1-R2-IMPL.md:160-171`) |
|
||
|
|
| `AG\brouillons\agents\lp-mcp-garde-lecture.py` | `Tools\hooks\lp-mcp-garde-lecture.py` | codes 0/2 du protocole ; cas à extraire en jsonl | `python -I lp-mcp-garde-lecture.py` sur stdin : 10 cas sur 10 conformes (`MCPA-T1-ESSAI.md:61`) |
|
||
|
|
| `ARCH427\ARCH427_manifest.py` | `Tools\Manifeste.py` | 0/1/2 aussi pour `scan` (racine absente, erreur d'écriture) ; sortie sous `Saved\` ou `etat\` ; `--hash-ext` | `scan D:\Game\LifePlay-master` -> 2 770 fichiers, 126 377 871 octets, 861 hachés, 205 dossiers (`ARCH427-T3-AVANT.md:31`, arbre vivant : à refaire sur un témoin figé) ; `compare` 0 si `#TOTAL` égaux (`ARCH427-T5-VAL.md:9`) |
|
||
|
|
| `U58\U3\cmp_pie.py` | `Tools\CmpPie.py` (ou `LogStats.ps1 -Compare -Signatures`) | `--ref` / `--cible` au lieu de `--` ; 0 aucune nouveauté, 1 nouveautés, 2 usage | 4 journaux PIE 5.5 contre 5.8 : 5.8 = 47 signatures, 5.5 = 101, 3 seulement en 5.8 (`U3-T4-EDITEUR.md:16-17`) |
|
||
|
|
| `AG\TRACE1\TRACE1-T4b-essai.ps1` | `Tools\Tests\Corbeille.essais.ps1` | racine par `$PSScriptRoot\..` ; listes en fixtures ; `-Sortie` ; 0/1/2 | cas 1 à 5 `REFUS <motif>` code 2, cas 6 code 0, liste témoin `refuses=5`, `ETAT IDENTIQUE=True`, corbeille avant = après (`TRACE1-T4b-IMPL.md:98`) |
|
||
|
|
| `AG\TRACE1\TRACE1-T4cv-essais.ps1` (+ `T4cv-essais3` en (d)) | `Tools\Tests\TracesCorbeille.essais.ps1` | chemins par `$PSScriptRoot\..` ; `-Sauvegardes` et `-Sortie` ; 0/1/2 ; étapes sans inventaire figé | R1, R2, E11 levés, critères 1 à 7 sans régression, corbeille avant = après (`TRACE1-T4cv-VAL.md:164`) |
|
||
|
|
| `ST\STE\STE-J6-TRACE\logstats.py` (d) | `Tools\LogStats.ps1` (compteurs F5, DESTROY, hitch) | interface `-Log` conservée ; 0/1/2 | `python -I -X utf8 logstats.py J6 <journal> H9 <archive>` (`STE-J6-TRACE.md:30`) -> J6 : `lignes=9937`, `No SkeletalMesh=3343`, `F5 LogSkinnedMeshComp=3338`, `DESTROY=31`, `index SPAWN=36` (`:191-197`) |
|
||
|
|
|
||
|
|
## Points à confirmer par l'utilisateur
|
||
|
|
|
||
|
|
- Emplacement : `Tools\` est ignoré par le dépôt public depuis `072a6c8` ; les outils intégrés y seraient versionnés où (addon privé, ou aucun dépôt) ? Les sous-dossiers `Tools\hooks\` et `Tools\Tests\` n'existent pas encore.
|
||
|
|
- Politique du crochet : source unique `Tools\hooks\ecriture-gardien.py` et copie dans le profil, ou lien.
|
||
|
|
- Corbeille des (c) : `t6_essai1.ps1`, `TRACE1-T4c-essais.ps1`, `TRACE1-T4cv-attente.ps1`, après accord et selon `Tools\Corbeille.ps1`.
|
||
|
|
- Amendement des skills : quels skills citent ces scripts par leur chemin sous `etat\` ? Non recherché ici (hors fiche I1b).
|
||
|
|
|
||
|
|
Tours : 17 / 40
|
||
|
|
|
||
|
|
## Constats
|
||
|
|
|
||
|
|
- 22 scripts sur 35 portent des chemins en dur de scratchpads de sessions, d'inventaires figés ou de transcriptions : ils ne sont pas rejouables tels quels, ce qui justifie de ne pas les intégrer.
|
||
|
|
- Aucun script du périmètre n'a de code de sortie 0/1/2 complet aujourd'hui ; trois seulement ont des codes (`ARCH427_manifest.py` 0/1/2, `PUB3-T4-remplacer.ps1` 0/2, `run_pass.ps1` 0/2/3/4).
|