LifePlay-Revival/Docs/Migration/etat/OB/OBB/OBB-T1b-VAL.md

87 lines
12 KiB
Markdown
Raw Normal View History

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 » et `Tours : 15 / 40` pré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` / `$Rel` ni avec la boucle `$r` ; PowerShell ignore la casse, `$r` et `$Rel` restent deux variables distinctes (le `foreach ($r in $Rel)` existait déjà). Pas d'autre collision.
- `return` dans le bloc `ForEach-Object` ne sort que de l'itération courante (pas de la fonction) : le fichier sous `.git\` n'est ni haché ni émis.
- `$gitDirLike` est lue depuis la portée du script (portée dynamique) ; `-like` est insensible à la casse, sans caractère générique autre que `*` final ; le motif est ancré sur `Content\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 dans `Hash-Tree`. `$keys.Count` (2053) est donc cohérent.
- Limite connue : un `.git` qui serait un **fichier** (gitlink) ou un `.git` imbriqué dans un sous-dossier de `Content\Modules` ne serait pas exclu ; aucun cas aujourd'hui (SPEC § 3 étape 5 : le `.git` disparaît de `Content\Modules`). E5 (`-InitRef` exclut 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 `.gitignore` l. 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 -Modules` et contrôle `--show-toplevel` sur `<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-toplevel` sur `<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-Sandbox` signalés ` M` par 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.8` contient de nombreux ` M` d'autres lots (voir `git 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ête `143 ecart(s) sur 2195`, recoupé par le Grep du CSV (142 lignes `.git`).