22 KiB
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 <script> … (code relevé par $LASTEXITCODE). Les Check du pilote d'essai sont dans le fichier d'essais ; les numéros de ligne renvoient à ce fichier.
| # | Commande (abrégée) | Code relevé | Attendu | Verdict |
|---|---|---|---|---|
| V1 | Octets lus par [IO.File]::ReadAllBytes sur les 3 fichiers ; FileCheck.ps1 Tools\<s>.ps1 -ProjectRoot … ×3 ; analyse syntaxique Parser.ParseFile ; git ls-files --eol -o |
FileCheck 0, 0, 0 | LF, pas de BOM, ASCII | PASS : CR=0, LF=228 / 291 / 412, octets > 0x7F = 0, NUL = 0, BOM faux, 0 erreur de syntaxe ; FileCheck : LF, CRLF=0, alertes 0 ; git : w/lf ×3, non suivis (??) (l. 1-52) |
| V7a | Verrou.ps1 -Etat / -Prendre T4B-A -Session … / -Prendre T4B-B / -Etat / -Rendre -Ticket AUTRE-TICKET / -Rendre -Ticket T4B / -Rendre -Ticket T4B-A / -Rendre / -Etat -Racine <test> |
0, 0, 1, 1, 1, 1, 0, 1, 0 | 0, 1, 1, 1, 0, 1, 0 (+ préfixe refusé) | PASS : dossiers 1 1-libre 2 2-libre 3 puis … 3-libre ; qui.txt d'une ligne, LF seul, sans BOM, T4B-A, session VAL B essai, 2026-10-11 HH:MM ; qui.txt inchangé après le refus (MD5) (V7-1 à V7-8, l. 176-220) |
| V7b | -Etat -Json ; -Prendre sans -Session ; -Rendre -Ticket T4B-R1 (R10 tenu) ; -Ticket t4b-r10 ; tri 9 9-libre 10 ; racine vide ; verrou daté de 45 min ; -Prendre sur verrou ancien |
0, 0, 1, 0, 1, 0/1/0, 1, 1 | idem SPEC § 3.2 | PASS : JSON valide ; session non precisee ; R1 ne rend pas R10 ; k=10 (tri numérique) ; ANCIEN (signaler, ne pas forcer) ; rien forcé (V7-9 à V7-15b) |
| V7c | Codes 2 : aucune action ; deux actions ; racine introuvable ; -Ticket avec -Etat ; -Prendre ' ' |
2 ×5 | 2 | PASS ; dossiers inchangés, aucun dossier créé (V7-16) |
| V7d | Course simulée : -Prendre T4B-C -TestCourse ; -Etat ; -Rendre -TestCourse |
1, 1, 1 | 1, qui.txt du tiers conservé |
PASS : qui.txt = TIERS-TEST…, aucun T4B-C (V7-17 à 17c). Le crochet -TestCourse crée par New-Item (usage d'essai, voir Constats 3) |
| V7e | Atomicité entre processus : w.ps1 aligne N processus sur un instant commun puis lance Verrou.ps1 -Prendre <ticket unique> dans le même processus : 8 tours × 8 (v7d), 5 tours × 12 (v7e, w2.ps1) |
par tour : un 0, le reste 1 (13 tours / 13) ; aucun autre code | un seul gagnant | PASS : 13 gagnants pour 124 processus (64 + 60), 111 refus (code 1), 0 code 2 ; à chaque tour un seul nouveau dossier k+1, son qui.txt = celui du gagnant ; sur les 5 tours de w2.ps1 : start_ms max 3 ms, dur_ms min 444 ms, les processus se chevauchent (tous ont lu k avant la création du premier, car Add-Type précède CreateDirectoryW) (l. 315-437) |
| V7f | -Rendre simultanés ×8 sur un verrou tenu |
un 0, sept 1 | un seul k-libre |
PASS (l. 391-399) |
| V7g | Contre-preuve E1 en threads (8 threads sur barrière, 60 tours) | — | CreateDirectoryW : 1 succès partout ; New-Item : non atomique |
PASS : CreateDirectoryW 60/60 tours à exactement 1 succès ; New-Item 10/60 (plusieurs succès dans 50 tours : 2 à 8) (l. 439-444). L'écart E1 est justifié |
| V7h | Vrai VERROU, Verrou.ps1 -Etat et -Etat -Json sans -Racine |
1 et 1 (occupé : ticket STE-R7, gardien lp-gardien, k=98 à l'essai ; l'orchestrateur indique k=99 ensuite, EVAL-R1) |
lecture sans écriture | PASS : liste des dossiers identique avant et après chaque appel (195 / 195, 0 différence). Entre le départ (188 dossiers, l. 3) et la fin (195) : 8 dossiers 95 … 98 apparus, créés par un gardien tiers (qui.txt relus : aucun ticket de mes essais, T4B, CONC, TEST absents ; l. 831-841) |
| V8a | Numero.ps1 -Dernier CHG / ERR / DOC -Fichier <copie> ; -Json |
0 ×4 | maxima corrects, aucun verrou créé | PASS : max=327 (5.8=326 5.5=297 registre=327), ERR 88 (86 / 88), DOC 33 (28 / 33), égaux à un calcul indépendant (Select-String / regex / split), racine de test inchangée (l. 604-660) |
| V8b | -Reserver CHG -Lot TEST -Demandeur … -Fichier <copie> -Racine <test> ×2, puis -Nombre 2, puis ERR, DOC, CHG -Json |
0 ×6 | numéros consécutifs, préfixe identique, CRLF | PASS : CHG-328, CHG-329, CHG-330 CHG-331, ERR-089, DOC-34, CHG-332 ; verrous 3 à 8 ; k-libre présent après chaque appel ; préfixe de 12 601 octets : MD5 CD7800199276A0AB4F2019D4044816DF avant = après ; taille 12 601 → 13 415 ; 7 lignes ajoutées, 7 CRLF, 0 LF seul, finit par CRLF, sans BOM, toutes au format SPEC ; FileCheck de la copie : CRLF, LF seul 0, alertes 0 ; demandeur `a |
| V8c | -Reserver CHG avec verrou 2 tenu par un tiers |
1 | 1, rien écrit | PASS : NUMERO REFUSE …, MD5 entier de la copie inchangé, dossiers inchangés |
| V8d | Codes 2 : fichier introuvable ; aucun type ; type inconnu ; -Nombre 0 ; sans -Lot ; racine de verrou introuvable |
2 ×6 | 2, fichier inchangé | PASS (MD5 du fichier inchangé) |
| V8e | Fichier LF sans saut final ; CRLF sans saut final ; fichier vide | 0, 0, 2 | séparateur conservé ; vide = 2 avec verrou rendu | PASS : LF conservé (0 CR), CRLF conservé (0 LF seul), préfixes identiques ; fichier vide : code 2, k-libre posé |
| V8f | Concurrence Numero : 3 tours × 6 processus -Reserver CHG simultanés sur une copie |
un 0 et cinq 1 par tour | pas de doublon, pas de corruption | PASS : CHG-328, 329, 330 (distincts, consécutifs) ; refusés = NUMERO REFUSE : verrou occupe, code 1 ; 3 lignes ajoutées = 3 gagnants ; préfixe identique ; 0 LF seul ; verrou final libre (l. 762-796) |
| V8g | Vrai NUMEROS.md |
— | jamais écrit | PASS : MD5 CD7800199276A0AB4F2019D4044816DF au départ, après la copie, et à la fin des essais V8 / V7 (relevé de d4, l. 828) |
| V9a | GitEtat.ps1 -Json encadré par deux git --no-optional-locks status --porcelain=v1 -z --untracked-files=all (jeu, addon, modules) |
0 | une entrée par fichier, comptes égaux | PASS : jeu 102, addon 268, modules 0 ; ensembles (XY + chemin) identiques à git status ; champ n = longueur de fichiers ; code process = code du JSON ; synthèse GIT OK jeu=ue5.8@7bceea6 102 fichiers ; addon=ue5.8@22dd7c3 268 fichiers ; modules=main@c8661cd 0 fichiers ; alertes_fins=0 (l. 5318-5325) |
| V9b | GitEtat.ps1 (texte) encadré de même |
0 | une ligne par fichier | PASS : lignes par dépôt 102 / 268 / 0 = git status ; 3 en-têtes == <depot> <branche>@<head> <n> fichiers ; date d'écriture des index jeu et modules inchangée (l. 5701-5709) |
| V9c | -Chemin Docs/Migration/etat/REPO/NUMEROS.md -Tous |
0 | i/crlf w/crlf, CR arbre = CR HEAD |
PASS : .. = i/crlf w/crlf CR:45/45 ; comptes indépendants (ReadAllBytes / git cat-file blob) 45 / 45 ; git ls-files --eol : i/crlf w/crlf. Fichier propre (déjà committé) : l'écart de 3 CR noté par l'IMPL a disparu |
| V9d | -Depot jeu -Chemin …/REPO/README.md -Tous ; -Chemin Tools/UeState.ps1 -Tous |
0, 0 | statut =, CR égaux ; LF pur |
PASS : README CR:13/13 (indépendant 13 / 13) ; UeState .M M i/lf w/lf CR:0/0 |
| V9e | Codes 2 : -Tous sans -Chemin ; -Copie inexistante ; -Depot foo ; copie sans nom 5.5 / 5.8 et sans -Addon ; -Json -Tous |
2 ×5 | 2 | PASS ; le JSON d'erreur est {synthese, erreur, code:2} |
| V10 | Dépôt jetable A (git init, .gitattributes * -text, t.txt LF committé puis passé en CRLF par WriteAllBytes) : GitEtat.ps1 -Copie A -Addon A -ModulesGitDir A\.git -Depot jeu |
1 | ALERTE FINS, code 1 |
PASS : GIT ALERTE jeu=main@… 1 fichiers ; alertes_fins=1 et jeu .M M i/lf w/crlf CR:3/0 t.txt ALERTE FINS ; propre avant : code 0 ; retour en LF : code 0 ; -Json : alerte FINS, cr_arbre 3, cr_head 0, code 1 (V10-0, 1, 1b, 1c) |
| V10b | Trois dépôts jetables (jeu c, addon, modules par --git-dir / --work-tree), 5 fichiers modifiés à alerte + 5 sans |
1 ; 0 sur dépôts propres ; 1 pour -Depot modules ; 0 pour -Chemin crlf_ok.txt |
5 alertes sur lf.txt (LF→CRLF), crlf.txt (CRLF→LF), mix.txt (LF→mixte), a.txt (addon), m1.txt (modules) ; aucune sur LF resté LF, CRLF resté CRLF, binaire, non suivi, nom avec espace |
PASS (voir ci-dessous le seul CHECK ECART de la série v10b : attente fausse de l'essai) |
| V11 | Relecture en entier des 3 scripts (neufs, non suivis : pas de diff) ; recherche négative par Grep | — | aucune ligne hors périmètre, aucune commande git d'écriture, aucun Remove-Item |
PASS-STATIC (§ 4) |
Dernier écart de V10 (demande de l'orchestrateur) : la série v10b se termine par ECARTS D6 = 1, V10-3b alertes sur exactement lf.txt, crlf.txt, mix.txt, a.txt, m1.txt … trouves=crlf.txt,mix.txt,a.txt,m1.txt (essais l. 6157). Ce n'est pas un défaut de GitEtat.ps1 : c'est une attente fausse de mon essai. Preuve : la sortie de la même exécution (l. 6147) porte bien jeu .M M i/lf w/crlf CR:3/0 lf.txt ALERTE FINS, et la synthèse annonce alertes_fins=5 avec 5 lignes ALERTE FINS (le Check précédent, l. 6156, est OK). Cause : mon test cherchait le motif lf.txt et exigeait exactement une ligne d'alerte ; or le motif est aussi contenu dans crlf.txt (2 lignes trouvées, -eq 1 faux). La règle appliquée par le script est celle de OUTC-SPEC.md § 3.4 (CR de 0 à > 0, de > 0 à 0, ou mixte nouveau) : lf.txt passe de CR 0 à CR 3, donc alerte attendue, et c'est ce que le script rend. Les alertes réelles de la série : lf.txt, crlf.txt (i/crlf w/lf CR:0/3), mix.txt (i/lf w/mixed CR:2/0), a.txt, m1.txt ; aucune alerte sur lf_ok.txt (i/lf w/lf CR:0/0), crlf_ok.txt (CR:3/2), sp ace.txt (CR:2/1), bin.dat (CR:bin/bin), new.txt (?? ?). Je n'ai pas relancé la série (consigne de l'orchestrateur : aucun nouvel essai hors de ce tri, qui se fait par relecture de la sortie brute).
4. Diff lu en entier
Les trois fichiers sont neufs (git status --short : ?? Tools/GitEtat.ps1, ?? Tools/Numero.ps1, ?? Tools/Verrou.ps1) : pas de diff, lecture intégrale au lieu du diff (Verrou.ps1 l. 1-228, Numero.ps1 l. 1-291, GitEtat.ps1 l. 1-412).
- Recherche négative (Grep sur les 3 fichiers) de
Remove-Item,rm,del,Set-Content,Out-File,Rename-Item,Move-Item,Copy-Itemet des verbes git d'écriture (add commit reset checkout restore push rm mv tag stash merge rebase cherry-pick revert apply clean gc fetch pull init config) : 0 occurrence. Témoin de la méthode (même glob, motif positifcat-file|New-Item|WriteAllText|AppendAllText|FileMode]::Append) : 11 occurrences, donc la recherche couvre bien les 3 fichiers. GitEtat.ps1: seules sous-commandes git lancées, lues dans le code :branch --show-current,rev-parse --verify --quiet --short HEAD,status --porcelain=v1 -z --untracked-files=all,diff --name-status -z -M HEAD,ls-files -z,ls-files --eol -z,cat-file blob(l. 202-268, 161) ;--no-optional-locks;GIT_DIR,GIT_WORK_TREE,GIT_INDEX_FILEretirées de l'environnement (l. 98). Pour le dépôt Modules : toujours--git-dir+--work-tree(l. 366).Numero.ps1: une seule écriture de fichier, l'ajout d'octets parFileStreamenAppend(l. 251), suivie du contrôle du préfixe, de la longueur et de la fin (l. 255-263) ; le verrou est rendu dansfinally(l. 273-276) ; aucune suppression.Verrou.ps1: écritures =CreateDirectoryW,qui.txt(WriteAllText, l. 167, 174) ;New-Itemaux l. 165 et 206 uniquement sous-TestCourse; aucun paramètre de forçage, aucune suppression, aucun renommage.- Hors périmètre : aucune ligne hors périmètre trouvée dans les trois fichiers.
- Fins de ligne : voir V1 (LF pur ×3). Modification par script : non vérifiable (fichiers neufs, pas de diff).
5. Verdict
T4b : PASS (Verrou.ps1, Numero.ps1, GitEtat.ps1 ; V1, V7, V8, V9, V10 PASS, V11 PASS-STATIC), avec réserves listées en Constats. Codes 0, 1 et 2 prouvés pour chacun des trois scripts :
| Script | Code 0 | Code 1 | Code 2 |
|---|---|---|---|
Verrou.ps1 |
V7a (Etat libre, Prendre, Rendre) | V7a (occupé, refus, déjà libre), V7d, vrai -Etat (occupé) |
V7c ×5 |
Numero.ps1 |
V8a, V8b, V8e | V8c, V8f | V8d ×6, fichier vide (V8e) |
GitEtat.ps1 |
V9a, V9b, V9c, V10 propre | V10, V10b | V9e ×5 |
Le verdict global du lot est « le pire des deux » (OUTC-VAL-A.md est la VAL de l'autre moitié) : le verdict de T4b seul est PASS ; il ne préjuge pas de T4a. Le critère de la fiche § 8 (« essai réel V3 sur la copie 5.8 ») relève de T4a.
6. Points à confirmer par l'utilisateur
- Accepter l'écart E1 de T2 (
CreateDirectoryWdansVerrou.ps1, ≈ 0,5 s de plus par appel) — la VAL confirme l'atomicité (13 / 13 tours à un seul gagnant) ; décision déjà prise par l'orchestrateur. - Mettre à jour
sk-repo§ 2 etlp-repo§ 7 (lot DOC) :mkdirde cmd est atomique,New-Itemde PowerShell ne l'est pas (10 tours sur 60 à un seul succès en threads). - Décider des écarts de forme de T3 (champ eol en deux jetons,
.pour le blanc de XY, synthèse en tête, garde-fou 500, listes par virgule) et du statut du-Rendresans-Ticket(E5). - Prévoir, à la DOC, la réservation réelle (
Numero.ps1 -Reserver CHGsans-Fichierni-Racineécrit dans le vraiNUMEROS.mdet prend le vraiVERROU) : non rejouée ici par interdit.
Tours : 57 / 55 (40 + 15 de prolongation) — compte propre, à confirmer par python -I Tools/FicheStats.py --lot OUTC ; budget dépassé de 2 tours (rédaction du livrable en deux Write)
Constats
- Essais invalides conservés dans le fichier d'essais (pas de suppression possible) : quatre lancements de mes pilotes ont échoué par des erreurs de mon script d'essai, pas des scripts validés, et sont signalés par une ligne
########## NOTE: (a) premierd1_v7(collision de variables$r/$R, PowerShell est insensible à la casse), sans effet sur le projet ; (b) premierd2_conc(collision$out/$Out), basev7c; (c) premierd3_v8: 8CHECK ECARTdus à mes attentes fausses (premier verrou k=2 et non 3, 7 lignes ajoutées et non 9), sorties deNumero.ps1correctes ; rejoué surv8b; (d) premierd6_v10: aliasGM=Get-Member; rejoué surv10b, qui garde le seul écart traité en § 3. Le fichier compte donc 30CHECK ECARTau total (16 + 8 + 5 + 1) et aucun ne vient d'un script validé. Le contrôle « aucun dossier nouveau n'est de mes essais » ded4était vide (préfixe=>mal retiré) ; refait dansd5sur lesqui.txtrelus (l. 831-841). - Vrai VERROU : il a changé pendant la VAL (188 dossiers au départ, 195 ensuite, tenu par
STE-R7puisEVAL-R1, gardien d'une autre session). Aucun de ces dossiers ne vient de moi ; j'ai fait seulement-Etat(4 appels, listes identiques avant / après chaque appel). Le critère d'arrêt « le vrai verrou change pendant l'essai » est donc noté, non déclenché par mes actes. -TestCourse(crochet d'essai caché, E2) crée parNew-Item, non atomique, et n'est utilisé que pour la simulation ; il ne sert pas en production mais reste appelable : à connaître, pas un défaut de V7.- Non rejoué par la VAL : Windows PowerShell 5.1 (les trois scripts sont ASCII / LF, l'IMPL en a joué 6 commandes) ; HEAD détaché,
index.lock, rebase en cours, fichier de l'arbre illisible, suppression indexéeD.et renommageR(cas cités par T3 § 4 et sa table F01 ; je n'ai pas utiliségit rm/git mv, même dans le scratchpad) ; droits d'écriture refusés ; appel réelNumero.ps1 -Reserversur le vrai fichier (interdit). Le comptage de CR d'un fichier de plus de 8 000 octets a été vérifié surNUMEROS.md(45 / 45) etREADME.md(13 / 13). - Mon écart de méthode : j'ai envoyé une commande Bash contenant
rm -f(sur un fichier d'essais qui n'existait pas encore) ; le système de permissions l'a refusée, elle n'a pas été exécutée, aucune suppression n'a eu lieu. - Information V10 : sans
.gitattributes* -text, un dépôt jetable (a0) montre le comportement de git aveccore.autocrlfdu poste (valeur relevéefalseen global / système ; voir le détail dans l'essai V10-2) ; l'attribut du projet (.gitattributes:* -text) est donc ce qui rend l'alerteFINSfiable, conformément à T3 § 5.3. - Observation V9 : l'index de l'addon (
D:\Game\LifePlay-Sandbox-5.8\.git\index) n'existe pas comme fichier à ce chemin (relevé de date 0 avant et après) : l'addon est probablement un.gitde type fichier (arbre de travail lié) ; sans effet surGitEtat.ps1, qui répond correctement. Non élucidé. - Le HEAD du jeu a avancé pendant la VAL (
ae5d5e4→7bceea6) :NUMEROS.mdest passé de modifié (CR:45/42, IMPL T3) à propre (45/45). Ce n'est pas une divergence du script.
Fichiers écrits : D:\Game\LifePlay-master 5.8\Docs\Migration\etat\OUTC\OUTC-VAL-B.md, D:\Game\LifePlay-master 5.8\Docs\Migration\etat\OUTC\OUTC-VAL-B_essais.txt (ignoré par git), scratchpad …\scratchpad\OUTC-T4b\.
Fichiers à commiter (dépôt du jeu, branche ue5.8) : A Docs/Migration/etat/OUTC/OUTC-VAL-B.md. Aucun autre : aucun script modifié, aucune écriture git hors du scratchpad (git init, add, commit dans les dépôts jetables du scratchpad seulement).