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

138 lines
13 KiB
Markdown
Raw Permalink Normal View History

Fiche OBB-T1b — Niveau N2 — Modèle prévu modèle de l'agent lp-impl | utilisé claude-opus-5-5 — Agent lp-impl — Skills sk-protocol, sk-windows-shell, lp-doc (gabarit IMPL lu dans `gabarits.md`) ; préchargés aussi : ue-cpp-build, lp-build, lp-ue-compat ; sk-change-safety non invoqué (instantanés pris par l'orchestrateur)
# OBB-T1b-IMPL : B1 étape 1, commandes des modules en `--git-dir` explicite et exclusion de `Content\Modules\.git\` (2026-10-10)
Entrées : fiche OBB-T1b (registre `OBB-TACHES.md`), `OBB-T1-SPEC.md` § 3 (piège), § 4, § 6. Aucun déplacement de `.git`,
aucune écriture git, aucun lancement d'Unreal, d'UAT ou d'UBT.
## 1. Fichiers modifiés (chemins, lignes)
| Dépôt | Fichier | Lignes après modification | Changement |
|---|---|---|---|
| addon `D:\Game\LifePlay-Sandbox` (`lot/DC3-atelier`, HEAD `cc649fd`) | `Tools\claude\skills\lp-paths\SKILL.md` | 16 ; 66, 67 ; 68 (ajoutée) | l. 16 : colonne arbre = texte de la fiche ; l. 66-67 : `git --git-dir='D:\Game\LifePlay_ModulesGit\<5.8\|5.5>.git' --work-tree='D:\Game\LifePlay-master <5.8\|5.5>\Content\Modules' status --porcelain # modules <x>` ; l. 68 : commentaire de la fiche (sans `git -C`) |
| idem | `Tools\claude\skills\lp-repo\SKILL.md` | 18 | texte de la fiche |
| addon `D:\Game\LifePlay-Sandbox-5.8` (`ue5.8`, HEAD `450fb3e`) | `Tools\claude\skills\lp-paths\SKILL.md` | 16, 66, 67, 68 | identique à l'addon 5.5 (`cmp` = identiques) |
| idem | `Tools\claude\skills\lp-repo\SKILL.md` | 18 | identique (`cmp` = identiques) |
| jeu `D:\Game\LifePlay-master 5.8` (`ue5.8`, HEAD `2cca224`) | `.gitignore` | 82 (+ fins de ligne 87-90, voir § 2 E1) | commentaire PUB2 = texte de la fiche ; l. 83 `/Content/Modules/` inchangée |
| idem | `Tools\CheckIntegrity.ps1` | 30-31 ; 38-40 ; 71 | l. 30 commentaire `# OBB-T1 : …` ; l. 31 `$gitDirLike = 'Content\Modules\.git\*'` ; `Hash-Tree` l. 38-40 : chemin relatif dans `$relPath`, `return` s'il est sous `.git\` (le fichier n'est plus haché) ; l. 71 : `Where-Object { $_.Rel -notlike $gitDirLike }` sur `Import-Csv $refCsv` |
Encodage et fins de ligne (relevé avant / après, `[IO.File]::ReadAllBytes`) : les 4 SKILL.md restent en UTF-8 sans BOM et LF seul
(avant 72/93 LF, après 73/93 LF, UTF-8 valide) ; `CheckIntegrity.ps1` reste en ASCII et LF seul (89 → 93 LF) ; `.gitignore` était
**mixte** (4 CRLF aux lignes 87-90, 86 LF) et est maintenant en LF seul (90 LF) : voir E1.
## 2. Écarts à la SPEC
- **E1 (fins de ligne du `.gitignore`)** : la fiche demande de garder les fins de ligne, mais l'outil Edit (seul permis) ramène
en LF un fichier à fins de ligne mixtes, exception connue et nommée pour ce fichier dans `sk-protocol` § 7. Essai préalable
sur une copie jetable (`scratchpad\obb-t1b\gitignore-essai`), même résultat : CRLF 4 → 0. Le diff du jeu touche donc aussi
les lignes 87-90 (bloc `# BEGIN/END HYPERAISTUDIO MANAGED RUNTIME IGNORE`), en fins de ligne seulement :
`git diff --ignore-cr-at-eol --stat -- .gitignore` = `1 +, 1 -`. À trancher par l'orchestrateur : accepter, ou repartir de
l'instantané `D:\Game\LifePlay_Backup_5.5\OBB\.gitignore` et faire appliquer la ligne 82 autrement.
- **E2 (Grep (1) sur `%USERPROFILE%\.claude`)** : le Grep brut ne donne pas 0 mais 147 occurrences dans 69 fichiers, toutes
dans l'historique de Claude Code : transcriptions `projects\**\*.jsonl` (121 lignes, 55 fichiers, `rg -c`), y compris celle
de cette session, et `file-history\92a3927f-…\d344a2d78fb4f32d@v4…v17` (14 fichiers). Le même Grep sans ces dossiers
(glob `!{projects/*/*.jsonl,projects/*/*/subagents/**,file-history/**}`) donne 0. La configuration active (skills, agents,
réglages, mémoire) n'a donc aucune occurrence. Je n'ai pas touché à l'historique (hors périmètre).
- **E3 (`|` dans les cellules de tableau)** : le texte dicté pour `lp-paths:16` et `lp-repo:18` contient `<5.8|5.5>` dans une
cellule de tableau markdown. Il est appliqué tel quel. En rendu GFM, un `|` non échappé coupe la cellule, même entre
accents graves : les colonnes se décalent à l'affichage, mais le texte brut que lisent les agents est correct. Je ne l'ai pas
corrigé d'initiative (proposition : `\|`, ou `5.8.git` et `5.5.git` écrits en entier).
- **E4 (HEAD du jeu)** : la fiche annonce `08c1a49`, j'ai relevé `2cca224` (`git rev-parse --short HEAD`). C'est le commit
suivant (registre AG, CHG-299). Les lignes 82 et 31-75 avaient bien le texte attendu, ce n'est pas un critère d'arrêt.
- **E5 (`-InitRef`)** : `Hash-Tree` sert aussi à `-InitRef`, donc une future référence ne contiendra plus les lignes `.git`.
C'est cohérent avec l'exclusion des deux côtés. Je ne l'ai pas exécuté (il écrit).
- **E6 (mon propre défaut, corrigé avant les preuves finales)** : la première version nommait la variable `$rel`. Comme
PowerShell ignore la casse, elle écrasait le paramètre `$Rel` (`[string[]]`) de `Hash-Tree`, et `Rel` devenait un tableau.
Résultat de l'essai : `ECHEC … 2053 ecart(s) sur 2053`, tous `absent`. J'ai renommé la variable en `$relPath`, puis rejoué
les preuves (3), (4) et (5) ci-dessous. Piège à reporter dans un skill.
- **E7** : le contrôle conseillé par SPEC § 3 (`git --git-dir=<GITDIR> rev-parse --show-toplevel` dans `lp-paths`) n'a pas été
ajouté, car la fiche ne le demande pas.
- **E8 (méthode)** : quelques comptages en lecture seule ont été faits au shell (`rg -c`, `grep -ci`, `grep -v '^index '`) au
lieu de l'outil Grep (`sk-protocol` § 7) : répartition des 147 occurrences, 142 lignes `.git` de la référence,
comparaison des deux diffs d'addon.
## 3. Instantané
Pris par l'orchestrateur avant la fiche (relu dans les manifestes) :
- `D:\Game\LifePlay_Backup_5.5\OBB\manifest.csv` : `.gitignore` (2633 o, MD5 `8E7421D6…`, 12:15:19), `Tools\CheckIntegrity.ps1`
(3958 o, MD5 `A7EE18B8…`, 12:15:19). Il contient aussi `Tools\BuildDebug.ps1` et `Tools\SplitModules.ps1` (OBB-T3, 11:11:44) :
un retour arrière d'OBB-T1b doit viser seulement les 2 fichiers (options de `Restore.ps1` non lues : incertain).
- `…\OBB-addon\manifest.csv` et `…\OBB-addon58\manifest.csv` : `lp-paths\SKILL.md` (6403 o, `06BE11FC…`) et `lp-repo\SKILL.md`
(7403 o, `CC2F74E7…`), 12:15:20.
- Les tailles correspondent à mon relevé de départ (2633, 3958, 6403, 7403 o). Les MD5 n'ont pas été recalculés avant
modification.
## 4. Ce qui n'a pas été fait
- Étape 2 (déplacement de `Content\Modules\.git`, création de `D:\Game\LifePlay_ModulesGit`, `core.worktree`) : hors fiche,
ticket MOVE au gardien sous BUILD-GO. `Test-Path D:\Game\LifePlay_ModulesGit` = False avant et après.
- `.gitignore` de la copie 5.5 et `D:\Game\LifePlay-master 5.5` : non touchés (Grep sur `Tools` 5.5 = 0, rien à remplacer).
- Docs 21, 27 et 29 (descriptions) : fiche DOC après la VAL (SPEC § 4).
- Déclaration à Big Boss des lignes de `CheckIntegrity.ps1` : rôle de l'orchestrateur. Pour l'aider, j'ai cherché les
appelants : Grep `CheckIntegrity` sur `D:\Game\LifePlay-master 5.8\Tools` ne trouve que le script lui-même (l. 15-16) et
`Engine.ps1:23` (commentaire) ; sur `D:\Game\LifePlay-Sandbox-5.8\Tools\claude` = 0.
- Pas de `-InitRef`, aucune référence réécrite, aucun build, aucune écriture git.
- Les modifications en cours de `D:\Game\LifePlay-Sandbox` (`Config/DefaultEngine.ini`, `Config/DefaultGame.ini`,
`Plugins/LPSandbox/Source/LPAnimMeasure/LPAnimMeasure.cpp`) appartiennent à une autre session : je n'y ai pas touché.
## 5. Points à confirmer en VAL
P1 Grep `git -C.*Content[\\/]Modules` (-i) = 0 sur `D:\Game\LifePlay-Sandbox\Tools\claude`, `D:\Game\LifePlay-Sandbox-5.8\Tools\claude`, `D:\Game\LifePlay-master 5.8\Tools`, `D:\Game\LifePlay-master 5.5\Tools`
P2 même Grep sur `%USERPROFILE%\.claude` hors `projects/*/*.jsonl`, `projects/*/*/subagents/**`, `file-history/**` = 0 (brut = 147 dans l'historique, E2)
P3 témoin : même Grep sur `D:\Game\LifePlay_Backup_5.5\OBB-addon` = 2 et `…\OBB-addon58` = 2 (`lp-paths\SKILL.md:66-67`)
P4 `git --git-dir='D:\Game\LifePlay_ModulesGit\5.8.git' --work-tree='D:\Game\LifePlay-master 5.8\Content\Modules' status --porcelain` → `fatal: not a git repository: 'D:\Game\LifePlay_ModulesGit\5.8.git'`, code 128 (idem 5.5)
P5 `pwsh -NoProfile -File "D:\Game\LifePlay-master 5.8\Tools\CheckIntegrity.ps1" -Modules` → `1 ecart(s) sur 2053`, seule ligne `different : Content\Modules\Clothes4.txt`, code 1 (avant : 1 sur 2195)
P6 faux projet sans `.git` avec la référence copiée (`-ProjectRoot`, `-BackupRoot`) : script d'origine 143 écarts (142 `absent : …\.git\…`), script modifié 1 écart sur 2053
P7 `ParseFile` de `Tools\CheckIntegrity.ps1` = 0 erreur
P8 `cmp` des deux exemplaires de `lp-paths\SKILL.md` et de `lp-repo\SKILL.md` = identiques ; diffs des deux addons identiques hors lignes `index`
P9 `git status` : seuls les 6 fichiers sont modifiés par cette fiche (plus le livrable) ; les 3 fichiers en cours de `LifePlay-Sandbox` ne sont pas les miens
P10 `lp-paths\SKILL.md:68` ne contient pas `git -C`
P11 décision E1 (fins de ligne du `.gitignore`, lignes 87-90) prise par l'orchestrateur
P12 décision E3 (`|` dans les cellules de tableau) prise par l'orchestrateur
P13 `ref_modules_5.8.csv` inchangée (date 2026-10-08 23:04:41, `cmp` identique à la copie prise avant les essais)
## 6. Fichiers à commiter
Ordre addon → jeu (`lp-repo`) ; chemins explicites, jamais `add -A`.
- addon `D:\Game\LifePlay-Sandbox` (`lot/DC3-atelier`) :
- `M Tools/claude/skills/lp-paths/SKILL.md`
- `M Tools/claude/skills/lp-repo/SKILL.md`
- addon `D:\Game\LifePlay-Sandbox-5.8` (`ue5.8`) :
- `M Tools/claude/skills/lp-paths/SKILL.md`
- `M Tools/claude/skills/lp-repo/SKILL.md`
- jeu `D:\Game\LifePlay-master 5.8` (`ue5.8`) :
- `M .gitignore` (voir E1 avant le commit)
- `M Tools/CheckIntegrity.ps1`
- `A Docs/Migration/etat/OB/OBB/OBB-T1b-IMPL.md`
Tours : 15 / 40
## Constats
### Preuves (commandes et sorties brutes)
- (1) Grep (outil Grep, `-i`, motif `git -C.*Content[\\/]Modules`) : `LifePlay-Sandbox\Tools\claude` 0, `LifePlay-Sandbox-5.8\Tools\claude` 0,
`LifePlay-master 5.8\Tools` 0, `LifePlay-master 5.5\Tools` 0, `%USERPROFILE%\.claude` 147 / 69 fichiers bruts, 0 hors historique
(E2). Témoin : `OBB-addon` 2, `OBB-addon58` 2. Avant modification, les addons vivants donnaient aussi 2 + 2.
- (2) `pwsh -NoProfile -Command "git --git-dir='D:\Game\LifePlay_ModulesGit\5.8.git' --work-tree='D:\Game\LifePlay-master 5.8\Content\Modules' status --porcelain; \$LASTEXITCODE"`
→ `fatal: not a git repository: 'D:\Game\LifePlay_ModulesGit\5.8.git'` puis `code=128` ; 5.5 : même message avec `5.5.git`,
`code=128`.
- (3) `pwsh -NoProfile -File "D:\Game\LifePlay-master 5.8\Tools\CheckIntegrity.ps1" -Modules` (lecture seule : le chemin
`-Modules` ne fait que `Import-Csv`, `Get-FileHash` et `Report`, et `Engine.ps1 -NoCheck` lit seulement le `.uproject`).
Avant (12:16:58) : `ECHEC T-STAT-02 Modules = reference 5.8 : 1 ecart(s) sur 2195` / `different : Content\Modules\Clothes4.txt`, code 1.
Après : `ECHEC T-STAT-02 Modules = reference 5.8 : 1 ecart(s) sur 2053` / `different : Content\Modules\Clothes4.txt`, code 1.
2195 − 2053 = 142 = fichiers de `Content\Modules\.git` (`find … -type f`) = lignes `.git` de la référence.
Aucune écriture dans `D:\Game\LifePlay_Backup_5.5` (`find -maxdepth 2 -newer` à 12:16:50) en dehors de `AG-R6\` (manifeste
12:20:05, `Config` et `Plugins` : instantané d'une autre session, ticket `AG-R6` non suivi dans le jeu ; estimé : pas
produit par CheckIntegrity, qui ne crée aucun dossier).
- (4) Faux projet `%USERPROFILE%\AppData\Local\Temp\claude\D--Game-LifePlay-master-5-8\0b6366db-34d6-4803-8aee-2e309785cb38\scratchpad\obb-t1b\fake\proj`
(`robocopy … /E /XD .git`, 2053 fichiers, 14 987 391 o, pas de `.git`) et `…\fake\backup\ref_modules_5.8.csv` (copie) :
script d'origine `143 ecart(s) sur 2195` (les 20 premières lignes affichées sont `absent : Content\Modules\.git\…`) ; script
modifié `1 ecart(s) sur 2053` (`Clothes4.txt`). L'exclusion côté référence est donc prouvée par l'exécution, pas seulement
par lecture.
- (5) `[System.Management.Automation.Language.Parser]::ParseFile(…CheckIntegrity.ps1…)` → `erreurs ParseFile = 0`.
- (6) `git diff` des 3 dépôts : jeu `.gitignore` (blob `8d52499..941fe14`) l. 82 et, en fins de ligne seulement, l. 87-90 ;
`Tools/CheckIntegrity.ps1` (`bdfeb6c..14858a5`) `8 ++++++--` ; addon Sandbox et Sandbox-5.8 :
`lp-paths/SKILL.md 7 ++++---`, `lp-repo/SKILL.md 2 +-` dans chacun, les deux diffs étant identiques hors lignes `index`.
Diff complet relu : lignes conformes au § 1, rien d'autre.
### Compte rendu (sk-protocol § 3)
1. Résultat : réussi, avec deux écarts à trancher (E1 : fins de ligne du `.gitignore` ; E2 : historique de Claude Code dans le Grep de `%USERPROFILE%\.claude`).
2. Preuves : voir (1) à (6) ci-dessus.
3. Chiffres : Grep 0 / 0 / 0 / 0 (+ 0 hors historique), témoin 2 / 2 ; code 128 ×2 ; CheckIntegrity 1 sur 2195 → 1 sur 2053 ; faux projet 143 → 1 ; ParseFile 0.
4. Incertitudes : effet du passage en LF sur le bloc géré par HyperAIStudio (non vérifié, l'outil peut réécrire son bloc) ; options de `Restore.ps1` non lues.
5. Écarts : § 2. Fichiers écrits : les 6 du § 1 et ce livrable ; dans le scratchpad, `obb-t1b\gitignore-essai`, `obb-t1b\fake\…`, `obb-t1b\marqueur-debut`, `obb-t1b\backuproot-avant.txt`.
6. Tours : 15 / 40.
7. Suite : l'orchestrateur doit trancher E1 et E3, puis envoyer la VAL statique (P1-P13) et le ticket COMMIT (OBB-R2) au gardien. État : étape 1 de B1 appliquée, non commitée ; le `.git` des modules est toujours en place.