Fiche OUTC-T4b — Niveau N1 — Modèle prévu sonnet | utilisé claude-sonnet-5-5 — Agent lp-validator — Skills sk-protocol, sk-recount, debug-verification, lp-validate (préchargés) ; sk-windows-shell non invoqué # OUTC-VAL-B : validation indépendante de Verrou.ps1, Numero.ps1 et GitEtat.ps1 (2026-10-11) Périmètre T4b (fiche `fiches\OUTC-T4.md`, § Découpage) : `Tools\Verrou.ps1`, `Tools\Numero.ps1`, `Tools\GitEtat.ps1` ; critères V1, V7, V8, V9, V10, V11 d'`OUTC-SPEC.md` § 7. Les 4 autres scripts (V2-V6, V12) relèvent de `OUTC-VAL-A.md`. Sorties brutes : `D:\Game\LifePlay-master 5.8\Docs\Migration\etat\OUTC\OUTC-VAL-B_essais.txt` (ignoré par git, `.gitignore:75`). Essais et scripts d'essai : scratchpad `…\scratchpad\OUTC-T4b\` (`lib.ps1`, `d0_v1.ps1` à `d6_v10.ps1`, `w.ps1`, `w2.ps1`, bases `v7*`, `v8*`, `v10*`). Mesures faites sur pwsh 7.6.6, git 2.56.0.windows.2, copie 5.8 branche `ue5.8`. ## 1. Fiches amont relues Relues en entier : `fiches\OUTC-T4.md`, `OUTC-SPEC.md` (§ 1 à 8), `OUTC-T2-IMPL.md` (Verrou, Numero), `OUTC-T3-IMPL.md` (GitEtat), puis les trois scripts en entier (Read : `Verrou.ps1` 228 lignes, `Numero.ps1` 291, `GitEtat.ps1` 412). Non relus (hors T4b) : `OUTC-T1-IMPL.md`, `OUTC-T6-IMPL.md`, `_essais.txt` d'IMPL (les critères sont rejoués, pas recopiés). Écart de l'orchestrateur accepté : E1 de T2 (`CreateDirectoryW` à la place de `New-Item`), vérifié ci-dessous (V7). Empreintes des fichiers validés (relevées au départ, identiques à celles des IMPL) : `Verrou.ps1` `788B21F30155200A497C3919FB3CBA29` (11 010 o), `Numero.ps1` `8803E6A42DAD21292DFE3024732BF589` (13 849 o), `GitEtat.ps1` `F50A0C23C809CBC446C5D1E3E979BEB3` (20 220 o). Aucun script modifié par moi. ## 2. Points à confirmer des IMPL | Id | Point (IMPL § 5) | Verdict | Preuve | |---|---|---|---| | T2-1 | E1 : `CreateDirectoryW` (recommandé) ou retour à `New-Item` ; rejouer l'essai d'atomicité | PASS | 8 tours × 8 processus + 5 tours × 12 processus : un seul code 0 par tour (13/13) ; threads : `CreateDirectoryW` 60/60 tours à 1 succès, `New-Item` 10/60 seulement (essais l. 315-444). Confirme le choix, décision déjà prise par l'orchestrateur | | T2-2 | V7 rejoué (Prendre 0, Prendre 1, Etat 1, Rendre autre 1, Rendre 0, Rendre 1, Etat 0) | PASS | V7-1 à V7-8 | | T2-3 | V7 course : `-TestCourse` rend 1 pour `-Prendre` et `-Rendre`, `qui.txt` du tiers non écrasé | PASS | V7-17, V7-17b, V7-17c | | T2-4 | V8 rejoué : numéros consécutifs, préfixe identique, CRLF, verrou rendu, occupé = 1 sans écriture | PASS | V8-2 à V8-4 (essais l. 604-760) | | T2-5 | Format de la ligne ajoutée (statut `réservé` avec accents, date avec heure) convient au gardien et à `lp-repo` § 7 | reporté (gardien / orchestrateur) | Format conforme à la SPEC § 3.3 (regex sur les 7 lignes ajoutées, UTF-8 sans BOM) ; l'acceptation par le gardien n'est pas du ressort de la VAL | | T2-6 | `-Rendre` sans `-Ticket` (E5) acceptable, ou exiger `-Ticket` | reporté (décision) | Comportement relevé : rend le verrou tenu quel qu'en soit le titulaire (V7 `-Rendre` simultanés : un 0, sept 1 ; V7-7 sur libre : 1). La SPEC § 3.2 ne demande le contrôle qu'avec `-Ticket` : conforme à la lettre | | T2-7 | Coût ≈ 640 ms d'`Add-Type` par appel acceptable | reporté (décision) ; mesure | `-Etat` 0,5-0,7 s ; `-Prendre` / `-Rendre` 1,1-1,4 s ; `Numero -Reserver` 1,0-1,4 s (champ `duree` des essais) | | T2-8 | À la DOC, `Numero -Reserver` réel sans `-Fichier` ni `-Racine` écrit dans le vrai `NUMEROS.md` / vrai `VERROU` | reporté (DOC T5) | Non rejoué (interdit). Défauts lus dans le code : `Numero.ps1` l. 70 (`-Fichier`), `Verrou.ps1` l. 65 (`-Racine`) | | T3-1 | V9 : une ligne par fichier, comptes égaux à `git status --porcelain` | PASS | V9-1, V9-2 | | T3-2 | V9 NUMEROS : `i/crlf w/crlf`, CR arbre = CR HEAD | PASS | V9-3 : `CR:45/45` (le fichier est désormais committé : HEAD jeu `7bceea6`), comptes indépendants 45/45 ; V9-4 README `13/13` | | T3-3 | V10 : dépôt jetable avec `.gitattributes` `* -text` → `ALERTE FINS`, code 1 | PASS | V10-1, V10-3 ; sans l'attribut : voir Constats 6 | | T3-4 | V11 : fichier neuf, aucun `Remove-Item`, aucune commande git d'écriture | PASS-STATIC | § 4 | | T3-5 | Décision de l'orchestrateur sur les écarts 1 (format eol), 2 (point pour le blanc), 3 (synthèse en tête), 5 (garde-fou 500), 6 (virgule) | reporté (orchestrateur) | Les écarts sont observés et sans effet sur les codes ; aucun n'a fait échouer un critère V9 / V10 | | T3-6 | Durée visée : 5,3 s pour les 3 dépôts | PASS | 3,6 s (JSON) et 3,8 s (texte) sur les 3 dépôts réels ; 2,0 s avec `-Chemin … -Tous` | | T3-7 | `FileCheck.ps1 Tools\GitEtat.ps1` : `LF`, BOM `-`, 0 alerte, MD5 | PASS | V1 : MD5 `F50A0C23…` identique | | T3-8 | P1 : suppression de `explo\b.txt` dans le scratchpad (contraire à la fiche) | reporté (orchestrateur) | Hors périmètre de la VAL ; consigné par l'IMPL | ## 3. Critères rejoués (commande → code → attendu → verdict) Toutes les commandes sont `pwsh -NoProfile -File