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 ;--essaireste 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éfautcas-v2.jsonlvoisin ;--cwd(défaut = racine du projet calculée depuisTools\hooks\) à la place de la constanteD:\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/compareconservées,--hash-ext; code 2 pour racine ou manifeste absent, écriture impossible, fichier illisible,SORTIEsousRACINE(refusée : le relevé se modifierait lui-même) ; lecture seule horsSORTIE;--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 ;
Rapidepar défaut,Tous),-Racine,-Sauvegardes,-Sortie,-Avant,-Echantillon,-Reference,-Rapport; étapes d'essais3(Dates, Recents, Index, Doublons) fusionnées ; l'étape T4b appelleCorbeille.essais.ps1; jamais-Envoyer(Invoke-Scriptle refuse) ; codes 0 / 1 / 2 ;Get-Help. - LISEZMOI.md : une ligne par outil de
Tools\(scripts, sous-dossiershooks\,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 deLogStats.ps1,Indicateurs.py(option--detail) etSauverTranscriptions.ps1sont celles du coordinateur (messages en cours de fiche). Aucun nom de compte niC:\Users\…(grepdu compte et deC:\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 pasSnapshot.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'originetest_crochet.py <crochet> [cas].--toutet--resumesont 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 sousSaved\ouetat\» : non retenu (trop contraignant pour un outil générique) ; seul est refusé le casSORTIEsousRACINE. La ligne de bilan descanmasque%USERPROFILE%(l'original imprimait le chemin brut). - E4
CmpPie.py: libellés de sortiesignatures cible / ref / seulement en cibleà la place de5.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 plusTools\Build.ps1(non suivi par git depuis CHG-357, il ne serait plus refusé poursuivi-git) mais le premier fichier suivi sousDocs\Migration\etathorsREPO. Les contrôles statiques de l'original (critères 6 et 7 : motifs de suppression, analyse, aide) sont passés dans l'étape Code deTracesCorbeille.essais.ps1. La sectiongit status/check-ignoreest 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-Echantillonpremiers chemins (300 par défaut) au lieu de tous, avec-Avant moispar défaut ; Index utilise un index témoin généré (un journal deSaved\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
TousKO ou non joué (le premier passage, en-tête de la version initiale, rendaitOK=8 KO=2 NON-JOUE=2) :Fin:differences=1, ligne=> manifeste|MEN1-D|122|815D2475…: un autre lot avait pris un instantané (nouveaumanifest.csv) pendant l'essai.Finn'échoue plus que sur une empreinte du départ modifiée ou disparue (<=) ; les ajouts sont signalés.- 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é.
Doublons:copies=0, rôlescopie-seule=56 ; original=876, donc aucune paire original + copie à contrôler (état du poste du jour, les copies deLifePlay_Backup_5.5n'ont plus d'original hors sauvegarde). Le contrôle porte désormais sur 2 membres d'un même groupe. Essai suivant : OK.Chaine: avec-Avant moisla liste est vide (non joué) ; avec-Avant 2026-10-10: 2266 entrées,Corbeille.ps1refuse 4 lignessuivi-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'exittrouvé parGreplors 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 deEVAL2-STATS.md:187sont déjà en LF) ;ARCH427_manifest.py(arbreD:\Game\LifePlay-mastervivant, 2 770 fichiers deARCH427-T3-AVANT.md:31périmés) ;cmp_pie.py(journal 5.8 du 08/10 disparu) ; témoin négatif246 / 417detest_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, ligneecriture-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 ;
-Envoyerjamais lancé ;TRACE1-T4cv-essais2.ps1non repris. - Témoin négatif
246 / 417non reproduit. Je n'ai pas comparé aux MD5f00d9739…les deux autres copies trouvées (Backup_5.5\P7-H2\v2\ecriture-gardien.py,ecriture-gardien-ext.py) ni celle deBackup_5.5\P7\jetable copie\. - Cas cités non rejoués à l'identique : voir E9.
Tools\Indicateurs.pyetLogStats.ps1non touchés (autres fiches). - Appels
python -Isans-X utf8duLISEZMOI.mdpouruasset58.py,FicheStats.pyetDiffRemplacementNoeuds.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 --resumerendconformes : 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.pye03d4332…,lp-mcp-garde-lecture.pyf787d205…. PubCheck.ps1 -Fichierssur les 10 fichiers deTools\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 deEVAL2\data→ 24 MD5 égaux à l'origine. - Rejeu
Manifeste.py scansur un dossier témoin : manifeste identique à celui deARCH427_manifest.py;compare0 / 1 / 2. - Rejeu
CmpPie.py: mêmes comptes quecmp_pie.pysur les mêmes journaux ; code 1 si une signature est nouvelle. Corbeille.essais.ps1code 0 sur le poste, corbeille et fichiers inchangés ;TracesCorbeille.essais.ps1 -Etape Rapidecode 0 (≈ 1 min) et-Etape Touscode 0 (≈ 13 min).- Tranché par la reprise OUTIL1-A-b (coordinateur, décision 1) :
NormaliserLF.pyest à blanc par défaut,--appliquerécrit. À rejouer en VAL : à blanc code 1,--appliquercode 0, rejeucr=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-10retient 4 journauxD:\Game\LifePlay_Publication\repo\Build\{Linux,Windows}NoEditor\FileOpenOrder\{Cooker,Editor}OpenOrder.log, suivis par git ;Corbeille.ps1les 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 dansTraces.ps1, ou documenter le refus global). Sortie :Traces.ps1 -Avant 2026-10-10 : TRACES entrees=2266 …puisCorbeille.ps1 : code=2 ; lignes A-BLANC=0 ; REFUS=4. PubCheck.ps1 -Fichierssur 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.
NormaliserLF.pyà blanc par défaut, écriture avec--appliquer(commeCorbeille.ps1sans-Envoyer).--essaireste accepté comme synonyme du défaut ;--essai --appliquerensemble : refus d'argparse, code 2. Docstring,--help, epilog et ligne deLISEZMOI.mdmis à jour. InstantanéOUTIL1-A2pris avant (voir § 3). Aller-retour rejoué sur 24 nouvelles copies CRLF deEVAL2\data(%TEMP%\claude\outil1-a\lf-new3\data) :
Cas limites :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--essaicode 1 ;--essai --appliquererror: argument --appliquer: not allowed with argument --essaicode 2 ; dossier avecc.txtà octet NULREFUSE (octet NUL : fichier binaire)code 2 ; sans chemin code 2 ;--appliquer a.md:2 CR retires, code 0, puis 0 CR relu partr.LISEZMOI.md: la ligneIndicateurs.pyancienne (« 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 ligneSauverTranscriptions.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_…>versTRANSCRIPTIONS\sessions\<cliId>\,-ToutversTRANSCRIPTIONS\complet\,manifest.csv (Rel, Octets, MD5, Date),-Essai, codes 0 / 1 / 2) ;grep -c '^| SauverTranscriptions.ps1'= 1.- Étape Chaine : « code 2 = observation » accepté (décision 3) ; les contrôles d'innocuité de
TracesCorbeille.essais.ps1(aucun envoienvoyes=0, empreintes, liste, corbeille) n'ont pas été modifiés par la reprise. - Hooks : copies de référence conservées, pas de lien (décision 4) ; rien à changer (MD5 inchangés :
ecriture-gardien.pye03d4332…,lp-mcp-garde-lecture.pyf787d205…,TestCrochet.py578a73c7…). - 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