12 KiB
Fiche VAG1-VAL — Niveau N1 — Modèle prévu sonnet | utilisé sonnet (claude-sonnet-5-5) — Agent lp-validator (classe O de PIPE1-SPEC-03, distinct de l'auteur) — Skills sk-protocol, lp-validate, sk-recount, debug-verification
VAG1-VAL : validation de Tools\Vague.ps1 (2026-10-20, v1 FAIL puis reprise après correctifs E1 à E6)
Révision 2 : verdict global PASS (avec réserves, § 5). La révision 1 (FAIL) est conservée dans les tableaux « avant ».
Aucune écriture hors de ce livrable et du scratchpad. Essais uniquement sur les clones %TEMP%\claude\VAG1\{jeu,LifePlay-Sandbox,VERROU} avec -Racine, -Addon, -RacineVerrou explicites ; seules altérations des clones : reset --hard origin/ue5.8 + clean -fdq (garde de préfixe), un commit de préparation (fichier de 15 / 21 lignes) et des hooks post-commit / pre-commit posés puis déplacés (*.off*). Dépôts réels : jamais écrits par mes essais. Remarque : git status --short du jeu réel a changé entre le début et la fin de la reprise (Docs/37_Feuille_De_Route_Alpha2.md, CG2-TACHES.md modifiés, tickets/ROAD1-T2.md non suivi) : travail d'autres sessions (aucune de mes commandes ne vise le dépôt réel, le script n'a jamais reçu -Racine réel) ; non prouvé autrement, donc estimé.
1. Fiches amont relues
| Fiche | Relue |
|---|---|
AG\VAG1\VAG1-SPEC-01.md § 1-9 |
oui (révision 1) |
AG\VAG1\VAG1-IMPL.md § 1-7 et § 6 bis (fix E1 à E6) |
oui |
Tools\Vague.ps1 v2, 494 lignes |
MD5 relu 24B2EF4F6A6729C98B6958C7E8D09619 = demandé (confirmé) |
Copie v1 D:\Game\LifePlay_Backup_5.5\VAG1\Vague.ps1.v1-avant-fix |
diff v1 → v2 lu en entier (git diff --no-index -U0 : 29 insertions, 4 suppressions, 8 blocs) |
Saved\VAG1\essais.ps1 v2 |
MD5 056E378967D1936E56A71A869A596AB3 = IMPL § 6 bis (confirmé) |
Diff v1 → v2, par bloc : l.83-86 -File (premier mot de la cellule, code 2 si ligne illisible) ; l.185-194 P2 avant la vague (avant le verrou) ; l.238 quelconque seulement pour PARTAGES ; l.241 hash hexadécimal d'au moins 7 caractères ; l.262 chemin non normalisé refusé (\, / initial, X:, ./..) ; l.309-310 ReadAllLines().Length et seuil 1,6 ; l.364 status --porcelain -uall ; l.451-459 C12 deuxième moitié. Aucun push, --amend, --no-verify, reset --hard, add -A, forçage de verrou ajouté (le diff n'en contient aucun).
2. Points à confirmer des IMPL
| Point (IMPL) | Verdict r2 | Preuve |
|---|---|---|
-Json, journal CRLF, HEAD antérieur dans la vague, C12 name-status |
PASS (r1) | non modifiés par le diff ; E5a rejoué ci-dessous |
| Écart assumé : seuil C8 1,6 × lignes (SPEC : 2 ×) | PASS, écart accepté sous réserve | E1a/E1b mesurent la frontière réelle (§ 3) ; à faire entériner par Big Boss dans la SPEC |
| Écart assumé : P2 avant la vague sans réécriture de statut | PASS, écart accepté sous réserve | E4 : ticket « en cours » intact, rien écrit ; la SPEC § 5 (statut refusé) ne s'applique plus qu'aux refus après démarrage (c6b r1) |
Hook ecriture-gardien, garde-fou pre-commit (LP_REPO_TICKET) |
reporté / BLOCKED-clone | non rejouables sans écrire sur les dépôts réels ; inchangé |
3. Critères rejoués
3.A Avant / après des FAIL et PARTIEL
| Écart | r1 (avant) | Sonde à moi (après), attendu écrit avant | r2 |
|---|---|---|---|
| E1 C8 réécriture complète | FAIL (Count=1) |
E1a 21 lignes, 17 changées (34 ≥ 33,6) : refus C8 … reecriture complete (17 17) ; E1b 16 changées (32 < 33,6) : essai-OK ; E1c 21 sur 21 : refus ; E1d fichier de 15 lignes entièrement changé : essai-OK (non concerné : seuil -gt 20, comportement voulu, constaté) ; E1e 1 ligne : essai-OK |
PASS |
E2 -File |
FAIL | E2a FILE.md réel complet : code 2 P1 plafond (13 tickets) (donc les 13 lignes sont toutes lues, sinon message « lignes lisibles ») ; E2b réel tronqué à 2 lignes (QG1-T2 (vague 4), QG1-T3 BAR (vague 4)) : tickets lus QG1-T2, QG1-T3 (le clone les contient, statut fait → refusé P2-STATUT, EN-FILE QG1-T3) ; E2c cellule vide : code 2 2 lignes de table, 1 tickets lisibles ; E2d cellule annotée seule : essai-OK |
PASS (réserve : E2b a donné autre chose que mon attendu « introuvable », car ces tickets existent dans le clone ; la conclusion de parsing est la même) |
E3 C12 git status |
FAIL | E3a hook post-commit modifie un fichier suivi hors ticket : refusé C12-ECART-POST … M Docs/21_Sandbox_Addon.md, code 1, verrou libre ; E3b hook crée un fichier non suivi : refus ?? …/hors-liste.md ; E3c fichier non suivi présent avant le commit : fait (pas de faux positif) |
PASS |
| E4 P2 avant la vague + statut | PARTIEL | E4 premier ticket « en cours », 2e « demandé », -Executer : VT-Q1 — refusé P2-STATUT, EN-FILE VT-Q2, HEAD inchangé, journal 192 → 192 lignes, dossiers VERROU [], VERROU LIBRE k=0 (verrou jamais pris) ; E4b 2e ticket « fait » : rien commité |
PASS |
| E5 HEAD attendu | PARTIEL | E5a hash 7 car. d'un HEAD ancien de la vague (2 tickets addon) : les deux fait ; E5b 7 car. hors vague : C2-HEAD ; E5d quelconque sur COMMIT : C2-HEAD … n'est admis que pour un ticket PARTAGES ; E5e abc : refus (< 7) ; E5c hash en MAJUSCULES du HEAD courant : refus C2-HEAD (limite mineure : comparaison sensible à la casse) |
PASS (réserve mineure, casse) |
| E6 C4 chemins | PARTIEL | E6a tools/x.ps1 et E6b TOOLS/x.ps1 : C4-CHEMIN-INTERDIT (regex insensible à la casse, sûr sous Windows) ; E6e Docs\x.md, ./Docs/x.md, C:/x.md : refus « chemin non normalisé » ; E6c Docs//VAGTEST/x.md : essai-OK (non couvert : le double / n'est pas dans le test de normalisation) ; E6d même ticket en exécution : refusé C6 add (ici à cause du sparse-checkout du clone, pas de C6-LISTE) et rien commité |
PARTIEL : trou résiduel // en essai à blanc ; l'exécution se protège (git normalise //, donc la chaîne du ticket diffère de la liste réelle : estimé, non prouvé hors sparse) |
3.B Pilote complet r2
pwsh -NoProfile -File "…\Saved\VAG1\essais.ps1" : 36 PASS, 0 FAIL, TOTAL 36 sur 36, code 0 (comptés par grep -c '^PASS' = 36). Les nouveaux cas N1 à N6 sont ceux de l'auteur ; mes sondes E1 à E6 ci-dessus sont indépendantes (autre jeu de tickets, cas limites).
3.C Régression
Vague indépendante (sonde R1) addon + jeu (avec ligne REPO-JOURNAL) + PARTAGES (HEAD quelconque) : essai essai-OK ×3 (code 0), puis -Executer : VT-Y1 — fait a6f8772, VT-Y2 — fait 922efc0, VAGUE-20261020-5-PARTAGES — fait b01e2af, code 0 ; statuts fait ×3 ; VERROU LIBRE k=1 ; seul reste de git status du clone du jeu : le fichier du ticket PARTAGES non suivi. Aucune régression constatée ; le S3 du pilote reste vert.
4. Diff lu en entier
Voir § 1 (diff v1 → v2 en 8 blocs). Outil local non suivi (CHG-357) : pas de git diff de dépôt. FileCheck / PubCheck sur le script v2 : non rejoués (l'IMPL § 6 bis annonce PubCheck 0 et \u00 = 0 : non vérifié par moi).
5. Verdict : PASS avec réserves
E1, E2, E3, E4, E5 : corrigés, prouvés par des sondes indépendantes, cas limites compris. E6 : corrigé pour \, ., .., absolu, casse ; trou résiduel // (essai à blanc seulement). Aucune régression.
Réserves, à décider par l'orchestrateur (non bloquantes pour l'usage en -Executer, où C6 / git refusent) :
Docs//x.mdpasseessai-OK: ajouter//au test de normalisation.- Hash en majuscules refusé : normaliser en minuscules.
- Écarts SPEC assumés à entériner dans la SPEC : seuil C8 à 1,6 ×, P2 sans réécriture de statut.
- Incertains : hook
ecriture-gardienet garde-foupre-commiten conditions réelles ;PubCheck/FileChecksur le script v2 ; chemin déguisé non ignoré par git (c9 r1). - Avant la première vague réelle : lancer
-Essai -Filesur le vrai FILE.md après avoir réduit à ≤ 8 tickets (E2a : le plafond s'applique, 13 lignes refusées), puis-Executersous la responsabilité de Big Boss.
6. Points à confirmer par l'utilisateur
- Entériner le seuil 1,6 × lignes et l'absence de statut
refuséavant démarrage (SPEC § 4 C8, § 5). - Décider du correctif des réserves 1 et 2 (fiche IMPL mineure).
- Premier usage réel sous surveillance (hook,
pre-commit).
Mesuré
Commandes : pwsh -NoProfile -File …\Saved\VAG1\essais.ps1 > pilote2.txt ; pwsh -NoProfile -File …\scratchpad\sonde4.ps1 (E1 à E6, R1) ; sonde5.ps1 (E2b) ; (Get-FileHash -Algorithm MD5 …Vague.ps1).Hash ; git diff --no-index -U0 <v1> <v2>.
Get-FileHash MD5 Tools\Vague.ps1 -> 24B2EF4F6A6729C98B6958C7E8D09619
git diff --no-index --stat : 1 file changed, 29 insertions(+), 4 deletions(-)
grep -c '^PASS' pilote2.txt -> 36 ; TOTAL 36 sur 36 ; exit 0 ; MD5 essais.ps1 056E378967D1936E56A71A869A596AB3
E1a VERDICT VT-V1 — refusé C8-FINS-DE-LIGNE : …l21.md : reecriture complete (17 17 …) rc=1
E1b VERDICT VT-V2 — essai-OK rc=0 E1c VERDICT VT-V3 — refusé C8-FINS-DE-LIGNE … (21 21 …) rc=1
E1d VERDICT VT-V4 — essai-OK (15 lignes toutes changées) E1e VERDICT VT-V5 — essai-OK
E2a Vague.ps1 : P1 plafond V3 depasse (13 tickets, 8 au plus) : deux vagues de suite rc=2
E2b VERDICT QG1-T2 — refusé P2-STATUT : Statut : fait ; EN-FILE QG1-T3 rc=1
E2c Vague.ps1 : FILE.md : 2 lignes de table, 1 tickets lisibles rc=2
E2d VERDICT VT-J1 — essai-OK — fichiers 1 rc=0
E3a VERDICT VT-P1 — refusé C12-ECART-POST : git status a change hors du ticket (d2ed3f3 existe) : M Docs/21_Sandbox_Addon.md rc=1 ; VERROU LIBRE k=1
E3b VERDICT VT-P2 — refusé C12-ECART-POST : … (2d7b7af existe) : ?? Docs/Migration/etat/REPO/VAGTEST/hors-liste.md rc=1
E3c VERDICT VT-P3 — fait 79810d8 — fichiers 1 rc=0
E4 VERDICT VT-Q1 — refusé P2-STATUT : Statut : en cours ; EN-FILE VT-Q2 rc=1
HEAD inchange : True ; journal lignes 192 -> 192 ; statuts Statut : en cours / Statut : demandé ; dossiers VERROU : [] ; VERROU LIBRE k=0
E4b VERDICT VT-Q4 — refusé P2-STATUT : Statut : fait ; EN-FILE VT-Q3 rc=1 ; HEAD inchange : True
E5a VERDICT VT-AA1 — fait 80018ea ; VERDICT VT-AA2 — fait d010d14 rc=0
E5b VERDICT VT-W5 — refusé C2-HEAD : HEAD attendu : 11eb616 ; courant : 8ff3457 rc=1
E5c VERDICT VT-W6 — refusé C2-HEAD : HEAD attendu : 8FF3457 ; courant : 8ff3457 rc=1
E5d VERDICT VT-W7 — refusé C2-HEAD : HEAD attendu : quelconque n'est admis que pour un ticket PARTAGES
E5e VERDICT VT-W8 — refusé C2-HEAD : HEAD attendu : abc n'est pas un hash de 7 caracteres au moins
E6a VERDICT VT-X6a — refusé C4-CHEMIN-INTERDIT : A tools/x.ps1 ; E6b … A TOOLS/x.ps1
E6c VERDICT VT-X6c — essai-OK — fichiers 1 (A Docs//VAGTEST/x.md) rc=0
E6d VERDICT VT-X6c — refusé C6 add : The following paths and/or pathspecs matched paths that exist / outside of your sparse-checkout definition … ; HEAD inchange : True ; Statut : refusé (C6 add)
E6e VERDICT VT-X6e/f/g — refusé C4-CHEMIN-INTERDIT : A Docs\x.md / A ./Docs/x.md / A C:/x.md (chemin non normalisé …)
R1 VERDICT VT-Y1 — fait a6f8772 ; VT-Y2 — fait 922efc0 ; VAGUE-20261020-5-PARTAGES — fait b01e2af ; rc=0 ; VERROU LIBRE k=1 ; statuts fait / fait / fait
Écarts attendu / obtenu : E2b (attendu « introuvable », obtenu P2-STATUT car les tickets existent dans le clone ; E2b a d'abord été mal tronqué par ma sonde, rejoué par sonde5.ps1), E5c (attendu essai-OK idéal, noté limite mineure), E6c (trou), E6d (refus par le sparse-checkout, pas par C6-LISTE). Autres essais conformes.
Non mesuré : exécution sur les dépôts réels ; hook ecriture-gardien ; pre-commit ; PubCheck / FileCheck sur v2 ; chemin // en exécution hors sparse ; ticket PIN au milieu d'une vague.
Constats
- Établi : MD5 v2 et pilote conformes ; 36/36 rejoué ; E1 à E5 prouvés ; régression absente (S3 et R1 verts, verrou rendu).
- Estimé : le trou
//est sans conséquence en exécution (chaîne du ticket ≠ chemin git, C6). - Incertain : hooks réels.
Fichiers écrits : D:\Game\LifePlay-master 5.8\Docs\Migration\etat\AG\VAG1\VAG1-VAL.md (réécrit en entier). Fichiers à commiter : jeu (A) Docs/Migration/etat/AG/VAG1/VAG1-VAL.md.
Tours : 21 (14 en r1 + 7 en reprise) / 25 de reprise
À verser : lp-repo — Vague.ps1 v2 passe la VAL avec 2 réserves mineures (//, casse du hash) ; sk-windows-shell — un attendu de sonde doit tenir compte de l'état du clone (tickets réels déjà présents).
Suite : orchestrateur doit décider des réserves 1 à 3 puis autoriser un premier essai réel par Big Boss, état : VAL r2 écrite, verdict PASS avec réserves.