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

11 KiB

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).