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

27 KiB

Fiche OUTIL1-A — 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-A-IMPL : 9 intégrations à Tools\ et index Tools\LISEZMOI.md (2026-10-14)

Décision de l'utilisateur (session EVAL, 2026-10-14) : « (a) 9 intégrations » de OUTIL1-PROPOSITION.md § 2, plus la fusion des essais TRACE1 (§ 3, 3e puce). Les originaux restent en place (trace). Aucune commande git écrite ; Tools\ est ignoré par git (.gitignore:91 /Tools/, vu par git check-ignore -v) : la sauvegarde des cibles est l'instantané, pas un commit.

1. Fichiers modifiés

1.1 Source → cible (tous nouveaux ; MD5 relus par md5sum après la dernière écriture)

Source (Docs\Migration\etat\…) MD5 source Cible (Tools\…) MD5 cible Octets CR
EVAL2\scripts\eval2_lf.py 02588153eccc1f7b9125355e7ac154c6 NormaliserLF.py a4b60c5d61eb029990b1f543d7e61d40 (reprise A-b ; première version d07028697d19a1117408a2d15e0ea60f) 6352 0
EVAL2\AMEL1\R2\ecriture-gardien-v2.py e03d4332d46392a44d5fa66a8fc0b57d hooks\ecriture-gardien.py e03d4332d46392a44d5fa66a8fc0b57d (copie exacte, cp) 117116 0
EVAL2\AMEL1\R2\test_crochet.py fef83c3cb2fe0d2438bbb7b2cd9450a1 hooks\TestCrochet.py 578a73c73efaf7e496950007cdad7e05 10477 0
EVAL2\AMEL1\R2\cas-v2.jsonl 40eb34c7f3d250f63bcdb5d626243c52 hooks\cas-v2.jsonl 40eb34c7f3d250f63bcdb5d626243c52 (copie exacte) 175777 0
AG\brouillons\agents\lp-mcp-garde-lecture.py f787d205d4102a16109606f4a357e9e5 hooks\lp-mcp-garde-lecture.py f787d205d4102a16109606f4a357e9e5 (copie exacte) 2113 0
ARCH427\ARCH427_manifest.py e28612e9a2bae4305e8c97d88a8f8094 Manifeste.py b73935d6755158d2bd5c789129d696e0 6747 0
U58\U3\cmp_pie.py a0e3e4f116d73e120ba875f688edf1f1 CmpPie.py 337ae18e6fa54a9f2b9cca1655f5ba60 4070 0
AG\TRACE1\TRACE1-T4b-essai.ps1 045b4a5513f1e31a59962894e57acff8 Tests\Corbeille.essais.ps1 c81d0d306d9d82a7e9328400d43d4960 10200 0
AG\TRACE1\TRACE1-T4cv-essais.ps1 + TRACE1-T4cv-essais3.ps1 6740b8e5ad27b749f7294f358e82a70e + 9a7ff815156f4cbb45436c1a887461db Tests\TracesCorbeille.essais.ps1 781e1a9fc86bd2137ac5a17c4263c91e 31387 0
(nouveau) — LISEZMOI.md 63e5bf05c5a88aef8e950091b8d2f31f (reprise A-b ; première version 21856367c357ea9bfa3f7df75e3b95ce) 15379 0

Copies installées dans le profil (lecture seule, non modifiées) : ecriture-gardien.py E03D4332D46392A44D5FA66A8FC0B57D, lp-mcp-garde-lecture.py F787D205D4102A16109606F4A357E9E5 (Get-FileHash -Algorithm MD5) : égales aux copies de référence.

1.2 Normalisations appliquées

  • NormaliserLF.py : fichiers ou dossier en paramètre (aucun chemin par défaut : sans chemin, code 2) ; à blanc par défaut, --appliquer écrit (reprise A-b ; --essai reste un synonyme du défaut) ; --ext, --recursif, --forcer ; refus des extensions binaires ou exigeant CRLF (.png .7z .uasset .bat .cmd…) et de tout fichier à octet NUL ; codes 0 (conforme, ou corrigé avec --appliquer) / 1 (à blanc, à corriger) / 2 ; --help ; chemins affichés avec %USERPROFILE% ; LF.
  • TestCrochet.py : crochet en premier paramètre, défaut = %USERPROFILE%\.claude\hooks\ecriture-gardien.py ; batterie en second paramètre, défaut cas-v2.jsonl voisin ; --cwd (défaut = racine du projet calculée depuis Tools\hooks\) à la place de la constante D:\Game\LifePlay-master 5.8 ; code d'usage 64 devenu 2, crochet ou batterie introuvable = 2 ; --sortie (rapport LF) ; compte et profil masqués dans toute la sortie ; délai de 30 s traité comme erreur au lieu d'une trace ; --help.
  • Manifeste.py : sous-commandes scan / compare conservées, --hash-ext ; code 2 pour racine ou manifeste absent, écriture impossible, fichier illisible, SORTIE sous RACINE (refusée : le relevé se modifierait lui-même) ; lecture seule hors SORTIE ; --help.
  • CmpPie.py : --cible / --ref à la place de -- ; codes 0 (aucune signature nouvelle) / 1 (au moins une) / 2 (usage, journal absent, aucune signature lue en cible) ; --help. La clé de signature est inchangée.
  • Corbeille.essais.ps1 : racine par défaut déduite de $PSScriptRoot, -Corbeille, -Sauvegardes, -Sortie (défaut %TEMP%\claude\), -Rapport ; listes de cas générées dans -Sortie à partir de fichiers réels du poste (plus de liste figée du lot) ; cas sans fichier convenable « non joué » ; codes 0 / 1 / 2 ; bloc .SYNOPSIS / Get-Help.
  • TracesCorbeille.essais.ps1 : étapes indépendantes du lot (Depart, Inventaire, Refus, Corbeille, Chaine, Code, Dates, Recents, Index, Doublons, Fin ; Rapide par défaut, Tous), -Racine, -Sauvegardes, -Sortie, -Avant, -Echantillon, -Reference, -Rapport ; étapes d'essais3 (Dates, Recents, Index, Doublons) fusionnées ; l'étape T4b appelle Corbeille.essais.ps1 ; jamais -Envoyer (Invoke-Script le refuse) ; codes 0 / 1 / 2 ; Get-Help.
  • LISEZMOI.md : une ligne par outil de Tools\ (scripts, sous-dossiers hooks\, Tests\, debug\, modules\, ui\, VS2026\), colonnes Outil / Rôle / Appel type / Codes de sortie ; sections Mesure, Build, État de la copie, Traces, Hooks, Tests, Fichiers et paquets, Audit dans l'éditeur, Données. Les lignes de LogStats.ps1, Indicateurs.py (option --detail) et SauverTranscriptions.ps1 sont celles du coordinateur (messages en cours de fiche). Aucun nom de compte ni C:\Users\… (grep du compte et de C:\Users : 0 ligne).

1.3 Non-régression : commandes et sorties (toutes rejouées par moi, sorties collées)

Témoins dans %TEMP%\claude\outil1-a\ (les fichiers d'origine des cas cités ont changé ou disparu : voir § 2 E9).

NormaliserLF.py — PASS. 24 copies CRLF (21 csv, 3 md de EVAL2\data, reconverties de LF en CRLF) : eval2_lf.py d'origine sur l'une, NormaliserLF.py sur l'autre.

python -I -X utf8 eval2_lf.py (original)  -> tableaux.md : 166 CR retires ; tickets.csv : 118 CR retires ; val.csv : 88 CR retires ; fini ; code=0
python -I -X utf8 Tools/NormaliserLF.py --essai <24 CRLF>  -> fini (a blanc) : examines=24 a_corriger=24 cr=4795 ; code=1
python -I -X utf8 Tools/NormaliserLF.py <24 CRLF>          -> fini : examines=24 corriges=24 cr=4795 ; code=0
rejeu --essai                                              -> fini (a blanc) : examines=24 a_corriger=0 cr=0 ; code=0
MD5 des 24 fichiers (EVAL2\data d'origine = sortie de eval2_lf.py = sortie de NormaliserLF.py) : identiques 24, écarts 0

Cas limites : sans chemin code 2 ; chemin absent INTROUVABLE code 2 ; x.uasset REFUSE (extension binaire…) code 2 ; dossier contenant c.txt à octet NUL : REFUSE (octet NUL : fichier binaire), fini (a blanc) : examines=2 a_corriger=2 cr=4, code 2 ; --help code 0. Après application, 0 CR relu par tr.

Copies exactes des crochets — PASS. md5sum Tools/hooks/ecriture-gardien.py = e03d4332d46392a44d5fa66a8fc0b57d ; lp-mcp-garde-lecture.py = f787d205d4102a16109606f4a357e9e5 ; cas-v2.jsonl = 40eb34c7f3d250f63bcdb5d626243c52 ; chacun égal à sa source ; les deux crochets égaux aussi à la copie du profil.

TestCrochet.py — PASS. python -I -X utf8 Tools/hooks/TestCrochet.py Tools/hooks/ecriture-gardien.py --resume --sortie <tmp> :

  a : refus a tort de P3     total  36 | refus   1 | passe  35 | erreur  0 | conformes  36 / 36
  b : refus utiles de P3     total  40 | refus  21 | passe  19 | erreur  0 | conformes  40 / 40
  c : cas adverses           total 245 | refus 245 | passe   0 | erreur  0 | conformes 245 / 245
  t : temoins                total  93 | refus   3 | passe  90 | erreur  0 | conformes  93 / 93
  r : charges illisibles     total   3 | refus   3 | passe   0 | erreur  0 | conformes   3 / 3
I2a (definition P3 ...) : 1 / 22 = 4.5 %    I2b (adverses refuses / adverses) : 245 / 245 = 100.0 %
conformes : 417 / 417        code=0

Le test_crochet.py d'origine sur ecriture-gardien-v2.py rend les mêmes lignes de bilan et conformes : 417 / 417, code 0 (durée par cas 96 ms contre 98 ms). Sans crochet en paramètre (défaut = profil) : conformes : 417 / 417, code 0. Crochet absent : crochet introuvable : …, code 2. Batterie absente : batterie introuvable : %USERPROFILE%\…, code 2. --help code 0. Témoin négatif : Backup_5.5\P7-H2\ecriture-gardien.py (MD5 c60f774fe527475d3cd735628f120dc8, ancien crochet) rend conformes : 292 / 417, code 1. Le témoin cité (246 / 417, AMEL1-R2-IMPL.md:122) portait sur un autre crochet (MD5 f00d973927cd292723a82be859d5c5bd, AMEL1-R2-IMPL.md:119) que je n'ai pas retrouvé : non reproduit (voir § 4).

Manifeste.py — PASS. Témoin figé de 6 fichiers (dont .git\HEAD, .uasset, .cpp, .h, .dat), ARCH427_manifest.py d'origine contre Manifeste.py :

original scan  -> …\temoin-manifeste	fichiers=6	octets=142	haches=4	dossiers=3 ; code=0
Manifeste scan -> %USERPROFILE%\…\temoin-manifeste	fichiers=6	octets=142	haches=4	dossiers=3 ; code=0
md5sum man_orig.txt = man_new.txt = a5b41bcd83e30b6ea58312ef112fd092
Manifeste compare man_orig man_new -> avant=['6','142','4','3'] apres=['6','142','4','3'] seulement_avant=0 seulement_apres=0 differents=0 ; code=0
Un fichier de plus (copie -p) : compare man_new man_new2 -> apres=['7','185','4','3'] seulement_apres=1 ; code=1 ; l'original rend la même sortie, code 1
racine absente code 2 ; SORTIE sous RACINE code 2 ; manifeste absent code 2 ; sans argument code 2

Les deux manifestes sont octet pour octet identiques (même MD5).

CmpPie.py — PASS (équivalence). Journaux PIE réels de la copie 5.5 : cible LifePlay-backup-2026.10.08-11.51.03.log, références …10.07-23.36.18.log et …10.07-23.19.06.log.

cmp_pie.py (original)  -> signatures 5.8 : 34 ; 5.5 : 100 ; seulement en 5.8 : 1 ; 1  GI | Execute Ubergraph GI | SetActive | none:ThemeSong ; code=0
CmpPie.py (nouveau)    -> signatures cible : 34 ; ref : 100 ; seulement en cible : 1 ; 1  GI | Execute Ubergraph GI | SetActive | none:ThemeSong ; code=1
même journal contre lui-même -> signatures cible : 34 ; ref : 34 ; seulement en cible : 0 ; code=0
journal absent code 2 ; sans argument code 2 ; --help code 0

Mêmes comptes et même signature ; le code 1 est la normalisation voulue (l'original rendait 0). Le cas cité (47 / 101 / 3, U3-T4-EDITEUR.md:16-17) n'est pas rejouable : le journal 5.8 du 08/10 n'existe plus.

Corbeille.essais.ps1 — PASS. pwsh -NoProfile -File Tools/Tests/Corbeille.essais.ps1 -Rapport <tmp> :

cas1-absent        REFUS absent               code=2 OK
cas2-suivi-git     REFUS suivi-git            code=2 OK
cas3-profil-claude REFUS profil-claude + hors-racines   code=2 OK
cas4-racine-build  REFUS racine-build + racine-autorisee + hors-racines + dossier-non-plantage   code=2 OK
cas5-manifest      REFUS manifest             code=2 OK
cas6-admis         A-BLANC … A BLANC lignes=1 ; CORBEILLE envoyes=0 octets=0 refuses=0 echecs=0   code=0 OK
liste-refus (5 chemins)  CORBEILLE envoyes=0 octets=0 refuses=5 echecs=0   code=2 OK
ETAT IDENTIQUE=True ; CORBEILLE AVANT items=2783 / APRES items=2783 identique=True
RESULTAT cas joues=7 ok=7 ko=0 non-joues=0 ; etat identique=True ; corbeille identique=True ; VERDICT=OK      code=0

Même suite de motifs et de codes que TRACE1-T4b-essai.txt:11-51 (cas 1 à 5 REFUS, code 2 ; cas 6 A-BLANC, code 0 ; liste témoin refuses=5, code 2 ; état et corbeille inchangés). Corbeille.ps1, Traces.ps1, TracesRacines.ps1 : MD5 relus avant et après (61ef5e9c…, cdb3d82f…, 191408d5…), inchangés.

TracesCorbeille.essais.ps1 — PASS (11 étapes sur 11). pwsh -NoProfile -File Tools/Tests/TracesCorbeille.essais.ps1 -Etape Tous -Avant 2026-10-10 -Echantillon 100 -Reference <TRACE1-T4cv-inventaire.txt> -Sortie <tmp> -Rapport <tmp> (version finale, ≈ 13 min) :

VERDICT Depart/Inventaire/Refus/Corbeille/Chaine/Code/Dates/Recents/Index/Doublons/Fin : OK (11)
Inventaire : Traces.ps1 code=1 duree=98s ; TRACES entrees=3334 … ; 0 entrée sous CrashReportClient, UnrealBuildTool, EpicGamesLauncher\Saved\Logs, UnrealHeaderTool, Zen, UnrealTrace, etat\REPO (6 copies)
Refus : cas joues=11 ko=0 non-joues=0 ; liste des 9 refus ensemble : CORBEILLE envoyes=0 octets=0 refuses=9 echecs=0 (code 2)
Code : 5 scripts, erreurs d'analyse=0 ; 9 manifestes de synthèse OK (illisible, vide x2, sans-colonne, chemin-invalide, chemin-introuvable, chemin-absolu, décidables x2)
Dates : 8 noms OK ; Recents : seulement au courant=444, tous récents, anciens=0 ; Index : couvertes=1 (l'entrée attendue) sur 3334
Doublons : groupes=459 ; 3 groupes, MD5 recalculés égaux entre eux et à la liste ; Fin : modifiees ou disparues=0
RESULTAT etapes OK=11 KO=0 NON-JOUE=0 ; code=0

Aussi -Etape Rapide (Depart, Code, Dates, Corbeille, Refus, Fin) : 6 OK, code 0 (première version). Les critères cités de TRACE1-T4cv-VAL.md:164 (R1, R2, E11 levés ; critères 1 à 7 sans régression ; corbeille avant = après ; aucun fichier existant modifié) sont couverts (estimé, d'après les en-têtes de T4cv-essais.ps1 et essais3.ps1, sans relire la VAL en entier) par Refus (R1, R2, E11), Inventaire / Dates / Recents / Index / Doublons (critères 1 à 4), Code (analyse, aide, fins de ligne), Fin et les compteurs de corbeille. Le chiffre 2521 est propre au poste du jour (2783 puis 2784 ici).

1.4 PubCheck et fins de ligne

pwsh -NoProfile -File Tools/PubCheck.ps1 -Fichiers <les 10 fichiers écrits, chemins absolus>
PubCheck : 0 constat(s)        PubCheck code=0

Fins de ligne : 0 CR dans les 10 fichiers (tr -cd '\r' | wc -c, colonne CR du tableau 1.1), dernier octet LF pour les scripts PowerShell (étape Code). PubCheck du présent livrable : voir la fin (section Constats).

2. Écarts à la SPEC

  • E1 NormaliserLF.py (levé par la reprise OUTIL1-A-b : décision du coordinateur, à blanc par défaut et --appliquer écrit ; texte de la première version conservé) : la fiche demande --essai ; l'inventaire I1a proposait « à blanc par défaut et --appliquer ». J'ai suivi la fiche : écriture par défaut (comme l'original), --essai à blanc, mais aucun chemin par défaut. L'outil n'appelle pas Snapshot.ps1 (l'inventaire le suggérait) : l'instantané reste un geste de l'appelant, écrit dans l'en-tête.
  • E2 TestCrochet.py : le crochet reste le premier argument positionnel (pas d'option --crochet), pour garder l'appel d'origine test_crochet.py <crochet> [cas]. --tout et --resume sont devenus exclusifs (l'original tolérait les deux). Ajouts : --sortie, masquage du compte, délai traité en erreur.
  • E3 Manifeste.py : l'inventaire suggérait « sortie obligatoire sous Saved\ ou etat\ » : non retenu (trop contraignant pour un outil générique) ; seul est refusé le cas SORTIE sous RACINE. La ligne de bilan de scan masque %USERPROFILE% (l'original imprimait le chemin brut).
  • E4 CmpPie.py : libellés de sortie signatures cible / ref / seulement en cible à la place de 5.8 / 5.5 / seulement en 5.8 (les comptes sont les mêmes) ; code 2 si aucune signature en cible (zéro résultat = échec probable).
  • E5 Corbeille.essais.ps1 : la liste du cas 2 n'est plus Tools\Build.ps1 (non suivi par git depuis CHG-357, il ne serait plus refusé pour suivi-git) mais le premier fichier suivi sous Docs\Migration\etat hors REPO. Les contrôles statiques de l'original (critères 6 et 7 : motifs de suppression, analyse, aide) sont passés dans l'étape Code de TracesCorbeille.essais.ps1. La section git status / check-ignore est supprimée (propre au lot).
  • E6 TracesCorbeille.essais.ps1 : inventaires figés de T4c / T4v supprimés (l'étape Recents demande -Reference, sinon « non joué ») ; Chaine compare l'empreinte des -Echantillon premiers chemins (300 par défaut) au lieu de tous, avec -Avant mois par défaut ; Index utilise un index témoin généré (un journal de Saved\Logs) au lieu du témoin figé de 31 entrées ; Doublons contrôle 2 membres de chacun des 3 plus petits groupes. TRACE1-T4cv-essais2.ps1 (dossiers de plantage réels du jour) et les autres essais T4a / T4v restent en trace (classe b).
  • E7 Quatre critères de mon propre script ajustés après un premier passage Tous KO ou non joué (le premier passage, en-tête de la version initiale, rendait OK=8 KO=2 NON-JOUE=2) :
    1. Fin : differences=1, ligne => manifeste|MEN1-D|122|815D2475… : un autre lot avait pris un instantané (nouveau manifest.csv) pendant l'essai. Fin n'échoue plus que sur une empreinte du départ modifiée ou disparue (<=) ; les ajouts sont signalés.
    2. Compteur global de corbeille (2783 puis 2784 pendant l'essai long, activité d'une autre session ou de l'utilisateur, non attribuée) : devenu information ; chaque cas de Refus et de Corbeille contrôle la corbeille sur sa propre durée (quelques secondes), contrôle strict conservé.
    3. Doublons : copies=0, rôles copie-seule=56 ; original=876, donc aucune paire original + copie à contrôler (état du poste du jour, les copies de LifePlay_Backup_5.5 n'ont plus d'original hors sauvegarde). Le contrôle porte désormais sur 2 membres d'un même groupe. Essai suivant : OK.
    4. Chaine : avec -Avant mois la liste est vide (non joué) ; avec -Avant 2026-10-10 : 2266 entrées, Corbeille.ps1 refuse 4 lignes suivi-git (D:\Game\LifePlay_Publication\repo\Build\…\FileOpenOrder\*OpenOrder.log, fichiers suivis par git) et rend le code 2, sans rien envoyer ni modifier. Le critère d'origine (« code 0 ») dépendait de la date du jour ; l'étape vérifie l'innocuité (aucun envoi, empreintes, liste, corbeille inchangées) et signale un code 2 comme observation. Voir Constats.
  • E8 LISEZMOI.md : les lignes du coordinateur (LogStats.ps1, Indicateurs.py, SauverTranscriptions.ps1) ont une quatrième colonne « Codes de sortie » ajoutée ; LogStats.ps1 : « aucun code explicite » (pas d'exit trouvé par Grep lors de ma lecture, estimé).
  • E9 Cas d'origine non rejouables à l'identique (remplacés par une équivalence original contre nouveau sur les mêmes données, § 1.3) : eval2_lf.py (les 7 fichiers de EVAL2-STATS.md:187 sont déjà en LF) ; ARCH427_manifest.py (arbre D:\Game\LifePlay-master vivant, 2 770 fichiers de ARCH427-T3-AVANT.md:31 périmés) ; cmp_pie.py (journal 5.8 du 08/10 disparu) ; témoin négatif 246 / 417 de test_crochet.py (crochet f00d9739… introuvable).

3. Instantané

pwsh -NoProfile -Command "& '…\Tools\Snapshot.ps1' -Lot OUTIL1-A -Path <10 cibles>" avant toute écriture : les 10 cibles n'existaient pas (fichiers neufs), consignées Existed=False (« absent (sera retiré à la restauration) ») dans D:\Game\LifePlay_Backup_5.5\OUTIL1-A\manifest.csv (10 entrées). Retour arrière proposé, non lancé : Tools\Restore.ps1 -Lot OUTIL1-A (déplace les cibles, ne supprime pas). Reprise OUTIL1-A-b : instantané OUTIL1-A2 de Tools\NormaliserLF.py (D07028697D19A1117408A2D15E0EA60F) et Tools\LISEZMOI.md (21856367C357EA9BFA3F7DF75E3B95CE) avant écriture, D:\Game\LifePlay_Backup_5.5\OUTIL1-A2\manifest.csv (2 entrées) ; retour arrière proposé : Tools\Restore.ps1 -Lot OUTIL1-A2. Aucun fichier existant du projet n'a été modifié ; Tools\hooks\pre-push (existant) et les autres outils sont intacts. Fichiers temporaires : %TEMP%\claude\outil1-a\, %TEMP%\claude\corbeille-essais\, %TEMP%\claude\traces-essais\.

4. Ce qui n'a pas été fait

  • Aucune installation : le profil (%USERPROFILE%\.claude\hooks\) n'est pas modifié ; la politique « copie ou lien » et le contrôle du MD5 après chaque changement sont à décider (inventaire I1b, ligne ecriture-gardien-v2.py).
  • Skills non amendés (lp-validate, lp-lot, sk-protocol, lp-paths, lp-build, lp-commandlets, lp-doc : OUTIL1-PROPOSITION.md § 6, groupés avec W5).
  • Originaux laissés en place ; aucun envoi à la corbeille ; -Envoyer jamais lancé ; TRACE1-T4cv-essais2.ps1 non repris.
  • Témoin négatif 246 / 417 non reproduit. Je n'ai pas comparé aux MD5 f00d9739… les deux autres copies trouvées (Backup_5.5\P7-H2\v2\ecriture-gardien.py, ecriture-gardien-ext.py) ni celle de Backup_5.5\P7\jetable copie\.
  • Cas cités non rejoués à l'identique : voir E9. Tools\Indicateurs.py et LogStats.ps1 non touchés (autres fiches).
  • Appels python -I sans -X utf8 du LISEZMOI.md pour uasset58.py, FicheStats.py et DiffRemplacementNoeuds.py : repris de leurs en-têtes, non rejoués.

5. Points à confirmer en VAL

  • python -I -X utf8 Tools/hooks/TestCrochet.py Tools/hooks/ecriture-gardien.py --resume rend conformes : 417 / 417, code 0 ; sans argument (crochet du profil) le même résultat.
  • MD5 des copies de référence égaux à ceux du profil : ecriture-gardien.py e03d4332…, lp-mcp-garde-lecture.py f787d205….
  • PubCheck.ps1 -Fichiers sur les 10 fichiers de Tools\ et sur ce livrable : 0 constat.
  • 0 CR dans les 10 fichiers et dans ce livrable.
  • Rejeu de l'aller-retour NormaliserLF.py : 24 copies CRLF de EVAL2\data → 24 MD5 égaux à l'origine.
  • Rejeu Manifeste.py scan sur un dossier témoin : manifeste identique à celui de ARCH427_manifest.py ; compare 0 / 1 / 2.
  • Rejeu CmpPie.py : mêmes comptes que cmp_pie.py sur les mêmes journaux ; code 1 si une signature est nouvelle.
  • Corbeille.essais.ps1 code 0 sur le poste, corbeille et fichiers inchangés ; TracesCorbeille.essais.ps1 -Etape Rapide code 0 (≈ 1 min) et -Etape Tous code 0 (≈ 13 min).
  • Tranché par la reprise OUTIL1-A-b (coordinateur, décision 1) : NormaliserLF.py est à blanc par défaut, --appliquer écrit. À rejouer en VAL : à blanc code 1, --appliquer code 0, rejeu cr=0.
  • Tranché par la reprise OUTIL1-A-b (coordinateur, décision 3) : « code 2 = observation » de l'étape Chaine (E7-4) accepté, contrôles d'innocuité stricts conservés.
  • Les lignes provisoires ou reprises du coordinateur dans LISEZMOI.md (Indicateurs.py --detail, SauverTranscriptions.ps1) sont à relire quand les fiches D1 et OUTIL1-T seront closes.

6. Fichiers à commiter

Dépôt du jeu (branche ue5.8) :

  • A Docs/Migration/etat/EVAL2/AMEL1/OUTIL1/OUTIL1-A-IMPL.md

Hors git (Tools/ ignoré, .gitignore:91, sauvegardé par l'instantané OUTIL1-A) : les 10 fichiers du tableau 1.1 sous D:\Game\LifePlay-master 5.8\Tools\. Rien à commiter pour eux ; si l'utilisateur lève l'ignorance de Tools/, ce sont des A.

Tours : ≈ 53 / 60 (compte estimé ; python -I Tools/FicheStats.py --lot OUTIL1 fait foi)

Constats

  • Traces.ps1 liste des fichiers que Corbeille.ps1 refuse (hors périmètre, non corrigé) : Traces.ps1 -Avant 2026-10-10 retient 4 journaux D:\Game\LifePlay_Publication\repo\Build\{Linux,Windows}NoEditor\FileOpenOrder\{Cooker,Editor}OpenOrder.log, suivis par git ; Corbeille.ps1 les refuse (suivi-git) et refuse alors toute la liste (code 2). La chaîne Traces → Corbeille proposée par la règle TRACE1 ne passe donc pas telle quelle pour cette date : à trancher (filtrer les fichiers suivis dans Traces.ps1, ou documenter le refus global). Sortie : Traces.ps1 -Avant 2026-10-10 : TRACES entrees=2266 … puis Corbeille.ps1 : code=2 ; lignes A-BLANC=0 ; REFUS=4.
  • PubCheck.ps1 -Fichiers sur ce livrable (première version puis reprise) : PubCheck : 0 constat(s), code 0 ; 0 CR.

Reprise OUTIL1-A-b (2026-10-14, budget 15 tours)

Hors gabarit : section de reprise, ajoutée après la décision du coordinateur sur le § 5 de la première version.

  1. NormaliserLF.py à blanc par défaut, écriture avec --appliquer (comme Corbeille.ps1 sans -Envoyer). --essai reste accepté comme synonyme du défaut ; --essai --appliquer ensemble : refus d'argparse, code 2. Docstring, --help, epilog et ligne de LISEZMOI.md mis à jour. Instantané OUTIL1-A2 pris avant (voir § 3). Aller-retour rejoué sur 24 nouvelles copies CRLF de EVAL2\data (%TEMP%\claude\outil1-a\lf-new3\data) :
    python -I -X utf8 Tools/NormaliserLF.py <24 CRLF>              -> fini (a blanc) : examines=24 a_corriger=24 cr=4795 ; code=1 ; CR restants après le passage : 4795 (rien d'écrit)
    python -I -X utf8 Tools/NormaliserLF.py --appliquer <24 CRLF>  -> fini : examines=24 corriges=24 cr=4795 ; code=0
    python -I -X utf8 Tools/NormaliserLF.py <24>                   -> fini (a blanc) : examines=24 a_corriger=0 cr=0 ; code=0
    MD5 des 24 fichiers égaux à ceux de EVAL2\data d'origine : 24, écarts 0                                        PASS
    
    Cas limites : --essai code 1 ; --essai --appliquer error: argument --appliquer: not allowed with argument --essai code 2 ; dossier avec c.txt à octet NUL REFUSE (octet NUL : fichier binaire) code 2 ; sans chemin code 2 ; --appliquer a.md : 2 CR retires, code 0, puis 0 CR relu par tr.
  2. LISEZMOI.md : la ligne Indicateurs.py ancienne (« I1a à I14 », ancienne ligne 20) est supprimée ; reste la ligne « I1a à I15 … --detail » avec ma colonne Codes de sortie (grep -c '^| Indicateurs.py' = 1, ligne 20 après suppression). La ligne SauverTranscriptions.ps1 (ligne 67 après suppression, 68 avant) a été relue : texte identique à la version définitive envoyée par le coordinateur (-Session <cliId ou local_…> vers TRANSCRIPTIONS\sessions\<cliId>\, -Tout vers TRANSCRIPTIONS\complet\, manifest.csv (Rel, Octets, MD5, Date), -Essai, codes 0 / 1 / 2) ; grep -c '^| SauverTranscriptions.ps1' = 1.
  3. Étape Chaine : « code 2 = observation » accepté (décision 3) ; les contrôles d'innocuité de TracesCorbeille.essais.ps1 (aucun envoi envoyes=0, empreintes, liste, corbeille) n'ont pas été modifiés par la reprise.
  4. Hooks : copies de référence conservées, pas de lien (décision 4) ; rien à changer (MD5 inchangés : ecriture-gardien.py e03d4332…, lp-mcp-garde-lecture.py f787d205…, TestCrochet.py 578a73c7…).
  5. Constat Traces.ps1 / Corbeille.ps1 (fichiers suivis par git) : noté par le coordinateur comme suite hors fiche (décision 5), rien fait ici.

MD5 et contrôles après la reprise (relus après la dernière écriture) :

NormaliserLF.py  octets=6352  CR=0  md5=a4b60c5d61eb029990b1f543d7e61d40
LISEZMOI.md      octets=15379 CR=0  md5=63e5bf05c5a88aef8e950091b8d2f31f
PubCheck.ps1 -Fichiers NormaliserLF.py LISEZMOI.md  ->  PubCheck : 0 constat(s) ; code=0

Fichiers à commiter de la reprise : M Docs/Migration/etat/EVAL2/AMEL1/OUTIL1/OUTIL1-A-IMPL.md (ce livrable, déjà A à la première livraison si non commité) ; Tools\NormaliserLF.py et Tools\LISEZMOI.md sont hors git (/Tools/ ignoré), sauvegardés par OUTIL1-A2.

Tours (reprise) : ≈ 7 / 15