12 KiB
Fiche OBB-T1bv — Niveau N1 — Modèle prévu modèle de l'agent lp-validator | utilisé claude-sonnet-5-5 — Agent lp-validator — Skills sk-protocol, sk-recount, debug-verification, lp-validate, lp-doc (gabarit VAL lu dans gabarits.md)
OBB-T1b-VAL : validation de l'étape 1 de B1 (commandes des modules en --git-dir/--work-tree, .gitignore, CheckIntegrity.ps1) (2026-10-10)
Validation en lecture seule : aucun fichier projet modifié, aucune écriture git, D:\Game\LifePlay_ModulesGit absent avant et après
(Test-Path = False, relevé deux fois), aucun Unreal / UAT / UBT lancé. -InitRef jamais lancé.
Scripts d'essai (scratchpad …\scratchpad\obb-t1bv\) : eol.ps1, gitfail.ps1, ci.ps1 ; faux projet dans …\obb-t1bv\fake\.
1. Fiches amont relues
D:\Game\LifePlay-master 5.8\Docs\Migration\etat\OB\OBB\OBB-T1b-IMPL.md(lu en entier, 138 lignes ; § 5 P1-P13 repris au § 2).…\OBB\OBB-T1-SPEC.md(lu en entier : § 3 piège, § 4 liste des remplacements, § 6 ordre imposé).- Gabarit VAL :
D:\Game\LifePlay-Sandbox\Tools\claude\skills\lp-doc\gabarits.md. - Corrections de l'orchestrateur après l'IMPL (E1, E3) : vérifiées ci-dessous, elles font foi. Écarts acceptés E2, E4, E5, E7 : pris tels quels.
- Conformité de l'IMPL au gabarit : sections 1 à 6 présentes, dans l'ordre, en-tête de
sk-protocol§ 4 présent, « Fichiers à commiter » etTours : 15 / 40présents. Aucun écart de forme.
2. Points à confirmer des IMPL
| Id | Point | Résultat | Preuve |
|---|---|---|---|
| P1 | Grep git -C.*Content[\\/]Modules (-i) = 0 sur 4 chemins |
PASS | outil Grep : LifePlay-Sandbox\Tools\claude 0, LifePlay-Sandbox-5.8\Tools\claude 0, LifePlay-master 5.8\Tools 0, LifePlay-master 5.5\Tools 0. Aussi 0 sur %USERPROFILE%\.claude\skills et …\agents ; %USERPROFILE%\.claude\CLAUDE.md n'existe pas (ls). Couverture : Grep git -C sur .claude\skills = 5 (tous dans sk-repo, aucun vers Content/Modules) ; sur master 5.5\Tools git -C = 0 (rien à remplacer ; le témoin non nul est celui de P3) |
| P2 | même Grep sur %USERPROFILE%\.claude hors historique = 0 |
PASS | Grep avec glob !{projects/**,file-history/**} = 0 (brut non rejoué : 147 dans l'historique selon l'IMPL, écart E2 accepté) |
| P3 | témoin OBB-addon = 2 et OBB-addon58 = 2 |
PASS | Grep : OBB-addon\…\lp-paths\SKILL.md:66-67 et OBB-addon58\…\lp-paths\SKILL.md:66-67 (2 chacun, git -C 'D:\Game\LifePlay-master 5.x\Content\Modules' status --porcelain) |
| P4 | --git-dir inexistant, code 128 (5.8 et 5.5) |
PASS | gitfail.ps1 : fatal: not a git repository: 'D:\Game\LifePlay_ModulesGit\5.8.git' code=128 ; idem 5.5.git code=128. Témoin du piège (lecture seule, le .git est encore là) : git -C '…\LifePlay-master 5.8\Content\Modules' rev-parse --show-toplevel rend D:/Game/LifePlay-master 5.8/Content/Modules (code 0) ; 5.5 rend D:/Game/LifePlay-master 5.5/Content/Modules. Test-Path …\Content\Modules\.git = True des deux côtés (déplacement non fait, voulu) |
| P5 | CheckIntegrity.ps1 -Modules : 1 écart sur 2053 (Clothes4.txt), code 1 |
PASS | ci.ps1 : ECHEC T-STAT-02 Modules = reference 5.8 : 1 ecart(s) sur 2053 / different : Content\Modules\Clothes4.txt, code=1. Lecture seule établie : script lu en entier (-Modules ne fait que Import-Csv, Get-FileHash, affichage ; les écritures sont dans -InitRef seul, l. 57-64) ; Engine.ps1 : Grep des commandes d'écriture = 0 ; ref_modules_5.8.csv avant / après : même date 2026-10-08T23:04:41.399 et MD5 8C1EB509… ; aucun fichier de D:\Game\LifePlay_Backup_5.5 (niveaux 1 et 2) plus récent que le début du run |
| P6 | faux projet sans .git : script d'origine 143 écarts, modifié 1 écart |
PASS | faux projet = robocopy /E /XD .git du Content\Modules réel : 2053 fichiers, .git absent. Script d'origine (copie de l'instantané OBB\Tools\CheckIntegrity.ps1, MD5 a7ee18b8… = blob HEAD) : 143 ecart(s) sur 2195, les 20 lignes affichées sont absent : Content\Modules\.git\… ; script modifié : 1 ecart(s) sur 2053 (Clothes4.txt). Compte indépendant : Grep des lignes Content\Modules\.git\ dans ref_modules_5.8.csv = 142 ; 142 + Clothes4.txt = 143 ; 2195 − 142 = 2053 |
| P7 | ParseFile = 0 erreur |
PASS | Parser::ParseFile : erreurs ParseFile = 0 |
| P8 | cmp des deux exemplaires de chaque skill ; diffs d'addon identiques |
PASS | cmp lp-paths : identiques ; cmp lp-repo : identiques ; les deux git diff lus côte à côte (hors lignes index) sont identiques |
| P9 | seuls les 6 fichiers sont modifiés par la fiche | PASS | git status --short : addon Sandbox = 2 fichiers (lp-paths, lp-repo), Sandbox-5.8 = 2 fichiers ; jeu : .gitignore et Tools/CheckIntegrity.ps1 (+ livrables non suivis). Les M du jeu hors OBB (Content/UI/MainMenu.uasset, Docs/… d'AG, BOSS, REPO, STE, STF, Docs/Registre_Erreurs.md) relèvent d'autres lots, non examinés. Dans D:\Game\LifePlay-Sandbox, les 3 fichiers d'une autre session annoncés par la fiche (Config/DefaultEngine.ini, Config/DefaultGame.ini, Plugins/LPSandbox/Source/LPAnimMeasure/LPAnimMeasure.cpp) ne sont plus modifiés à ce relevé (HEAD toujours cc649fd, git status --short = les 2 skills seulement) : constat, aucun lien avec OBB |
| P10 | lp-paths\SKILL.md:68 sans git -C |
PASS | Grep : l. 68 = # modules : jamais sans --git-dir ; sans .git local, git remonte au dépôt du jeu (Content/Modules y est ignoré) et répond pour lui (OBB-T1) |
| P11 | décision E1 (fins de ligne du .gitignore) |
PASS | corrigée par l'orchestrateur, vérifiée : git diff -- .gitignore = 1 insertion(+), 1 deletion(-) sans --ignore-cr-at-eol ; octets avant (instantané) / après : CR=4, CRLF=4, LF seul=90 des deux côtés ; FileCheck.ps1 -Lot OBB -OnlyChanged : .gitignore mixte vers mixte (CRLF 4, LF 86), alertes=0. Seule la ligne 82 change |
| P12 | décision E3 (| dans les cellules) |
PASS | texte final <5.8 ou 5.5> aux l. 16 (lp-paths) et 18 (lp-repo) des deux addons ; Grep de l'ancienne forme dans les deux skills = 0. Nombre de barres verticales (regex) : lp-paths l. 12 = 6, l. 13 = 6, l. 16 = 6 ; lp-repo l. 12 = 5, l. 13 = 5, l. 18 = 5 ; identique dans les deux addons |
| P13 | ref_modules_5.8.csv inchangée |
PASS (réserve) | date 2026-10-08 23:04:41 et MD5 8C1EB5093B05831D3124B6AB0D68B41B avant et après mon run ; 2196 lignes = en-tête + 2195. La comparaison cmp à « la copie prise avant les essais » de l'IMPL n'est pas rejouée (copie dans le scratchpad d'une autre session) : estimé |
| E6 | variable $rel écrasant $Rel : relire Hash-Tree et la comparaison en entier |
PASS | voir § 3 (relecture ligne à ligne) et preuve par l'exécution (2053 clés, 1 écart) |
3. Critères rejoués
Commande, résultat : détail au § 2. Synthèse des recomptes (autre méthode que celle de l'IMPL) :
| Élément | IMPL | Recompté | Méthode |
|---|---|---|---|
| Diff addon lp-paths | +4/−3 | +4/−3 (les deux addons) | git diff --stat et git diff --no-index --stat contre l'instantané OBB-addon[58] |
| Diff addon lp-repo | +1/−1 | +1/−1 (les deux addons) | idem |
Diff .gitignore |
1/1 | 1/1 vs HEAD et vs instantané | git diff --stat, git diff --no-index --stat |
Diff CheckIntegrity.ps1 |
8 lignes | +6/−2 (8 lignes) vs instantané et vs HEAD | idem ; instantanés = blobs HEAD (MD5 8e7421d6… / a7ee18b8… identiques) |
| Fins de ligne et BOM | LF / CRLF inchangés | 6 fichiers : CR et CRLF inchangés, aucun BOM, UTF-8 valide ; 1 LF de plus pour lp-paths (73 vs 72, ligne 68 ajoutée) et 4 de plus pour CheckIntegrity.ps1 (93 vs 89) |
eol.ps1 (octets), FileCheck.ps1 |
| Écarts 143 / 142 / 2053 | 143 / 142 / 2053 | 143 / 142 / 2053 | exécution sur faux projet + Grep du CSV |
Grep des anciens git -C |
0 / témoin 2 + 2 | 0 / témoin 2 + 2 | outil Grep |
Relecture complète de Hash-Tree (l. 33-43) et de la comparaison (l. 71-75), Tools\CheckIntegrity.ps1 :
$relPath(l. 38) ne partage aucun nom avec les paramètres$Base/$Relni avec la boucle$r; PowerShell ignore la casse,$ret$Relrestent deux variables distinctes (leforeach ($r in $Rel)existait déjà). Pas d'autre collision.returndans le blocForEach-Objectne sort que de l'itération courante (pas de la fonction) : le fichier sous.git\n'est ni haché ni émis.$gitDirLikeest lue depuis la portée du script (portée dynamique) ;-likeest insensible à la casse, sans caractère générique autre que*final ; le motif est ancré surContent\Modules\.git\.- Côté référence (l. 71) :
Where-Object { $_.Rel -notlike $gitDirLike }avant le remplissage de$ha; côté disque, le filtre est dansHash-Tree.$keys.Count(2053) est donc cohérent. - Limite connue : un
.gitqui serait un fichier (gitlink) ou un.gitimbriqué dans un sous-dossier deContent\Modulesne serait pas exclu ; aucun cas aujourd'hui (SPEC § 3 étape 5 : le.gitdisparaît deContent\Modules). E5 (-InitRefexclut aussi.git) : lu, accepté.
4. Diff lu en entier
| Dépôt | Fichiers | Compte | Conforme aux lignes annoncées |
|---|---|---|---|
addon D:\Game\LifePlay-Sandbox (lot/DC3-atelier, HEAD cc649fd) |
Tools/claude/skills/lp-paths/SKILL.md (l. 16, 66-67 remplacées, l. 68 ajoutée), …/lp-repo/SKILL.md (l. 18) |
2 fichiers, +5/−4 | oui |
addon D:\Game\LifePlay-Sandbox-5.8 (ue5.8, HEAD 450fb3e) |
mêmes 2 fichiers, cmp identiques à l'autre addon |
2 fichiers, +5/−4 | oui |
jeu D:\Game\LifePlay-master 5.8 (ue5.8, HEAD 2cca224) |
.gitignore (l. 82), Tools/CheckIntegrity.ps1 (l. 30-31, 38-40, 71) |
2 fichiers, +7/−3 (.gitignore +1/−1, CheckIntegrity.ps1 +6/−2) |
oui |
Total : 6 fichiers modifiés, 17 insertions et 11 suppressions (addons 2 × (+5/−4) + jeu +7/−3). Aucune ligne non annoncée. La ligne 83 /Content/Modules/ du .gitignore est inchangée. Rien d'ajouté hors périmètre ; git diff --cached --stat du jeu est vide.
5. Verdict
PASS.
Motifs : diffs = lignes annoncées (6 fichiers, fins de ligne et BOM intacts, .gitignore à 1/1 après correction E1) ; Grep = 0 sur tous les chemins demandés avec témoins 2 + 2 ; --git-dir inexistant : code 128 pour 5.8 et 5.5 ; CheckIntegrity.ps1 -Modules = 1 écart (Clothes4.txt) sur 2053 ; preuve par l'échec rejouée sur copie jetable (script d'origine 143 écarts dont 142 .git, script modifié 1 écart) ; ParseFile = 0 ; tableaux Markdown alignés (E3 corrigé). D:\Game\LifePlay_ModulesGit n'existe pas et Content\Modules\.git est toujours en place : l'étape 2 (déplacement) n'est pas validée ici, elle relève d'OBB-R3 / OBB-T1v.
Non rejoué ou reporté :
- Grep brut de
%USERPROFILE%\.claude(147 dans l'historique, E2) : accepté, non rejoué. - Effet d'une réécriture par HyperAIStudio du bloc
.gitignorel. 87-90 (CRLF) : non testé ; les octets sont conformes à l'instantané aujourd'hui. - Docs 21, 27, 29 : fiche DOC, hors périmètre.
- Comportement de
CheckIntegrity.ps1 -Moduleset contrôle--show-toplevelsur<GITDIR>après le vrai déplacement du.git: à rejouer en OBB-T1v (SPEC § 5).
6. Points à confirmer par l'utilisateur
- Accepter le report à l'étape 2 (OBB-T1v) du contrôle
rev-parse --show-toplevelsur<GITDIR>(E7), puisque le git-dir n'existe pas encore. - Autoriser le ticket COMMIT OBB-R2 (ordre addon puis jeu, chemins explicites) pour les 6 fichiers de l'IMPL et les deux livrables.
- Les 3 fichiers de
D:\Game\LifePlay-SandboxsignalésMpar la fiche ne le sont plus à ce relevé : confirmer qu'ils ont été commités ou rétablis par l'autre session (observé seulement, non vérifié).
Fichiers à commiter
Le validateur n'a modifié aucun fichier projet. Livrable :
- jeu
D:\Game\LifePlay-master 5.8(ue5.8) :A Docs/Migration/etat/OB/OBB/OBB-T1b-VAL.md
(Les 6 fichiers de l'IMPL restent à commiter par OBB-R2 : addons Sandbox et Sandbox-5.8 M Tools/claude/skills/lp-paths/SKILL.md et M Tools/claude/skills/lp-repo/SKILL.md ; jeu M .gitignore, M Tools/CheckIntegrity.ps1, A Docs/Migration/etat/OB/OBB/OBB-T1b-IMPL.md.)
Tours : 15 / 40
Constats
- Au relevé,
D:\Game\LifePlay-master 5.8contient de nombreuxMd'autres lots (voirgit status), sans lien avec OBB-T1b ; le commit OBB-R2 doit les exclure (chemins explicites). - Le script d'origine ne signale que les 20 premières lignes d'écart (
Select-Object -First 20) : le compte 143 vient de l'en-tête143 ecart(s) sur 2195, recoupé par le Grep du CSV (142 lignes.git).