LifePlay-Revival/Docs/Migration/etat/ETAT2/ETAT2-T2-IMPL.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

139 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ETAT2-T2-IMPL — convention etat\<projet>\<lot>\ appliquée aux scripts du jeu 5.5 (étape A1)
Fiche ETAT2-T2-IMPL — Niveau N2 — Modèle prévu lp-impl | utilisé Opus 5.5 (`claude-opus-5-5`, identifiant donné par l'environnement de l'agent) — Agent lp-impl — Skills lp-paths, lp-commandlets, sk-change-safety, sk-protocol (préchargés : sk-protocol, ue-cpp-build, lp-build, lp-ue-compat ; lp-paths, lp-commandlets, sk-change-safety chargés par l'outil Skill en fin d'étape c, voir § 6)
Date : 2026-10-09, 15:10-15:20. Copie `D:\Game\LifePlay-master 5.5`, branche `main`, HEAD `1825884`, arbre propre au départ (`git status --porcelain` vide).
Source : `ETAT2-T1-CART.md` § 2.1, § 2.2 (lignes 131-177), § 2.3, § 6 ligne A1. Décisions : D1 (a), D2 (a), D3 (a), D5 (a), D12 (a).
Aucun lancement d'UE, de commandlet ni de compilation ; aucun commit ; copie 5.8 et addon non touchés ; aucun fichier de `etat\` déplacé.
## 1. Instantané et tag (établi)
| Élément | Valeur | Commande |
|---|---|---|
| Manifeste | `D:\Game\LifePlay_Backup_5.5\ETAT2\manifest.csv`, **4 entrées** (dossier absent avant : `ls` → « No such file ») | `pwsh -NoProfile -Command "Set-Location 'D:\Game\LifePlay-master 5.5'; .\Tools\Snapshot.ps1 -Lot ETAT2 -Path Tools\RunCommandlet.ps1,Tools\ReimportCorrectif.ps1,Tools\AssetHeaders.ps1,Tools\EtatDir.ps1"` → code 0, « 4 entree(s) ajoutee(s) » |
| `Tools\RunCommandlet.ps1` | Existed=True, 3121 o, MD5 `EF3BEC937FDD3562C89C47DD3E0A5076` | manifeste ; `md5sum` du fichier avant édition identique |
| `Tools\ReimportCorrectif.ps1` | Existed=True, 4998 o, MD5 `441A6CFF8E3B3E6B8AA69D03C92066D5` | idem |
| `Tools\AssetHeaders.ps1` | Existed=True, 2302 o, MD5 `F8DA228C434B81260326E43317BB0AA4` | idem |
| `Tools\EtatDir.ps1` | Existed=False (créé par le lot ; `Restore.ps1` le déplacera vers `_retires\`) | idem |
| Fichiers dans `Backup_5.5\ETAT2` | 4 (manifeste + 3 copies) | `find … -type f \| wc -l` |
| Tag local | `ETAT2-avant` → `182588417bdd7571add3d6a776c6d70a4326aea3` (= HEAD `1825884`) | `git tag ETAT2-avant` ; `git rev-parse ETAT2-avant^{commit}` |
## 2. Fichiers écrits (établi)
| Fichier | Nature | Après (MD5, au 2026-10-09 15:15) | Encodage / fins de ligne |
|---|---|---|---|
| `Tools\EtatDir.ps1` | nouveau, 47 lignes, 2656 o | `702f50ce958a1128328933b52bb3f151` | ASCII, LF, 0x0A final |
| `Tools\RunCommandlet.ps1` | 3 hunks | `92913315efa6610cd64568efdf30700b` | ASCII, LF (`i/lf w/lf`) |
| `Tools\ReimportCorrectif.ps1` | 8 hunks | `eac7989681dc5e7fd5069ba9210714b3` | ASCII, LF |
| `Tools\AssetHeaders.ps1` | 1 ligne d'aide | `db9ea31d00c4366548a1b52deecf1a2e` | ASCII, LF |
`EtatDir.ps1` est extrait par `sed -n '131,177p' ETAT2-T1-CART.md` (pas retapé) : `diff <(sed -n '131,177p' …CART.md) Tools\EtatDir.ps1` → aucune différence. Les trois scripts voisins modifiés sont en LF dans l'index et la copie (`git ls-files --eol`) ; `.gitattributes` : `* -text` ; 0 octet CR dans les 4 fichiers (`tr -cd '\r' < f | wc -c` = 0) ; 0 caractère non ASCII (`grep -cP '[^\x00-\x7F]'` = 0).
## 3. Diffs appliqués (`git diff`, établi)
`git diff --stat` : `3 files changed, 18 insertions(+), 11 deletions(-)` (AssetHeaders 2, ReimportCorrectif 20, RunCommandlet 7) + `Tools/EtatDir.ps1` non suivi.
```diff
--- a/Tools/AssetHeaders.ps1
+++ b/Tools/AssetHeaders.ps1
@@ -10,7 +10,7 @@
- .\Tools\AssetHeaders.ps1 -Root Content\BPs -Csv Docs\Migration\etat\headers_BPs.csv -Hash
+ .\Tools\AssetHeaders.ps1 -Root Content\BPs -Csv Docs\Migration\etat\<projet>\<lot>\headers_BPs.csv -Hash
--- a/Tools/ReimportCorrectif.ps1
+++ b/Tools/ReimportCorrectif.ps1
@@ -10,7 +10,8 @@
- Les preuves vont dans Docs/Migration/etat/<Id>_*. Ne commite pas : la validation reste humaine
+ Les preuves vont dans Docs/Migration/etat/<projet>/<lot>/<Id>_* (Tools\EtatDir.ps1 ; -EtatDir l'impose).
+ Ne commite pas : la validation reste humaine
@@ -27,11 +28,14 @@ param(
- [string]$ProjectRoot = (Split-Path $PSScriptRoot -Parent)
+ [string]$ProjectRoot = (Split-Path $PSScriptRoot -Parent),
+ [string]$EtatDir = ''
)
$ErrorActionPreference = 'Stop'
Set-Location $ProjectRoot
-$etat = Join-Path $ProjectRoot 'Docs\Migration\etat'
+. "$PSScriptRoot\EtatDir.ps1"
+# Dossier du lot, transmis tel quel a RunCommandlet : resumes, preuves et nettoyages ci-dessous dans ce seul dossier
+$etat = Resolve-LPEtatDir $ProjectRoot $Id $EtatDir
@@ -41,7 +45,7 @@ (Dump)
- & "$PSScriptRoot\RunCommandlet.ps1" -Lot $Id -Commandlet LPDumpFunction -Args "-BP=$bp -Fn=$fn -Pins" | Out-Null
+ & "$PSScriptRoot\RunCommandlet.ps1" -Lot $Id -Commandlet LPDumpFunction -Args "-BP=$bp -Fn=$fn -Pins" -EtatDir $etat | Out-Null
@@ -57,7 +61,7 @@ (# 3)
-& "$PSScriptRoot\RunCommandlet.ps1" -Lot $Id -Commandlet $Commandlet -Args $DryRunArgs | Out-Null
+& "$PSScriptRoot\RunCommandlet.ps1" -Lot $Id -Commandlet $Commandlet -Args $DryRunArgs -EtatDir $etat | Out-Null
@@ -66,7 +70,7 @@ (# 4)
-& "$PSScriptRoot\RunCommandlet.ps1" -Lot $Id -Commandlet $Commandlet -Args $ApplyArgs | Out-Null
+& "$PSScriptRoot\RunCommandlet.ps1" -Lot $Id -Commandlet $Commandlet -Args $ApplyArgs -EtatDir $etat | Out-Null
@@ -81,8 +85,8 @@ (# 6)
-& "$PSScriptRoot\RunCommandlet.ps1" -Lot $Id -Commandlet LPCheckMeshAssignment | Out-Null
+& "$PSScriptRoot\RunCommandlet.ps1" -Lot $Id -Commandlet LPCheckMeshAssignment -EtatDir $etat | Out-Null
-& "$PSScriptRoot\RunCommandlet.ps1" -Lot $Id -Commandlet CompileAllBlueprints | Out-Null
+& "$PSScriptRoot\RunCommandlet.ps1" -Lot $Id -Commandlet CompileAllBlueprints -EtatDir $etat | Out-Null
--- a/Tools/RunCommandlet.ps1
+++ b/Tools/RunCommandlet.ps1
@@ -5,7 +5,8 @@
- Docs\Migration\etat\<Lot>_<Commandlet>_<horodatage>.txt
+ Docs\Migration\etat\<projet>\<lot>\<Lot>_<Commandlet>_<horodatage>.txt (dossier deduit du lot par
+ Tools\EtatDir.ps1 ; -EtatDir l'impose)
@@ -16,6 +17,7 @@ param(
[string]$Args = '',
+ [string]$EtatDir = '',
[string]$ProjectRoot = (Split-Path $PSScriptRoot -Parent),
@@ -25,7 +27,8 @@
$log = Join-Path $ProjectRoot "Saved\Logs\portage\$name.log"
-$sum = Join-Path $ProjectRoot "Docs\Migration\etat\$name.txt"
+. "$PSScriptRoot\EtatDir.ps1"
+$sum = Join-Path (Resolve-LPEtatDir $ProjectRoot $Lot $EtatDir) "$name.txt"
New-Item -ItemType Directory -Force (Split-Path $log -Parent), (Split-Path $sum -Parent) | Out-Null
```
(Extrait réduit aux lignes changées et à leurs ancres ; diff complet : `git -C "D:\Game\LifePlay-master 5.5" diff`.) `Tools\CheckIntegrity.ps1` : non touché (§ 2.3). Les trois `Remove-Item` de `ReimportCorrectif.ps1` (désormais l. 54, 68, 75) n'ont pas changé de texte (D5 a).
## 4. Contrôles statiques de l'étape A2 (établi, sans moteur)
Script : `%USERPROFILE%\AppData\Local\Temp\claude\D--Game-LifePlay-master-5-5\ab8918a1-261f-45b4-904a-678ecfce98f7\scratchpad\etat2_a2_static.ps1`, lancé par `pwsh -NoProfile -File … -FakeRoot <scratchpad>\fakeroot` → code 0. La table est jouée sur une racine fictive vide (dossier temporaire de session), `-NoCreate` : après l'essai, `Test-Path <fakeroot>\Docs` = False.
| Contrôle | Résultat | Attendu |
|---|---|---|
| `[System.Management.Automation.Language.Parser]::ParseFile` sur les 4 fichiers | 0 / 0 / 0 / 0 erreur (jetons 354, 627, 393, 299) | 0 erreur ×4 — **PASS** |
| Table § 2.2, 22 cas, `-NoCreate` | **22 OK, 0 KO** : `U7-VAL`→`U58\U7`, `U3-T2`→`U58\U3`, `U7b`→`U58\U7b`, `UA`→`U58\UA`, `AP5-PD`→`anim\AP5`, `AP7`→`anim\AP7`, `L4-CX-B02`→`portage55\L4-CX-B02`, `L6e-CX-B09b`→`portage55\L6e`, `L5-diag`→`portage55\L5-diag`, `L0`→`portage55\L0`, `S2-T2`→`sandbox\S2`, `DOC-MOD`→`sandbox\DOC-MOD`, `STUDIO-EST`→`post-v1\STUDIO-EST`, `STM`→`ST\STM`, `STA-T1`→`ST\STA`, `OBA-T1`→`OB\OBA`, `SK-T1`→`SK`, `ETAT2`→`ETAT2`, `PROP`→`PROP`, `O2`→`O2` + 1 avertissement (« lot 'O2' hors table … »), `..\x` → erreur (« lot '..\x' invalide »), `-EtatDir ETAT2\essai`→`ETAT2\essai` | 22/22 — **PASS** |
| `git diff -U0 \| Select-String -SimpleMatch Remove-Item` | 0 correspondance brute ; 0 ligne `+`/`-` ; `Remove-Item` dans `EtatDir.ps1` (non suivi, hors `git diff`) = 0 ; `ReimportCorrectif.ps1` en contient toujours 3 | 0 ligne ajoutée/modifiée — **PASS** |
| Complément A2 : `Select-String -Pattern '-EtatDir \$etat'` dans `ReimportCorrectif.ps1` | 5 | 5 — PASS |
| Complément A2 : racine `R5` | 5 fichiers ; 10 sous-dossiers ; 617 fichiers au total avant ce livrable (616 d'ETAT-T1 + `ETAT2-T1-CART.md`) ; liste des 111 dossiers de `R5` identique avant/après l'essai (`find -type d \| sort \| md5sum` = `35b1593b98722ccef3801adf411a4406` deux fois) | racine = 5 — PASS |
| Hors fiche : `-EtatDir` absolu (forme transmise par `ReimportCorrectif.ps1`) | `Resolve-LPEtatDir <f> L4-CX-B02 <chemin absolu du lot> -NoCreate` rend le même chemin (`-ceq` True) | — |
| Hors fiche : garde des caractères génériques | `-EtatDir 'x[1]'` → « caractere generique dans … » ; lot `A*` → « lot 'A*' invalide » ; rien créé | — |
Essai réel de commandlet : non fait (interdit par la fiche ; reporté en B2, D13 a).
## 5. `git status --short` (établi, 2026-10-09 15:15, avant écriture de ce livrable)
```
M Tools/AssetHeaders.ps1
M Tools/ReimportCorrectif.ps1
M Tools/RunCommandlet.ps1
?? Tools/EtatDir.ps1
```
Ce livrable est sous `Docs/Migration/etat/`, ignoré (`.gitignore:74`) : il n'apparaît pas. Autres dépôts : `Content\Modules` 0 ligne, addon `D:\Game\LifePlay-Sandbox` (`lot/DC3-atelier`) 0 ligne ; copie 5.8 : `Tools\EtatDir.ps1` absent, `git status --short -- Tools` vide.
## 6. Écarts et remarques
1. **Aucun écart de contenu** avec la cartographie : chaque ligne `-`/`+` du § 2.3 (5.5) a été appliquée telle quelle, et `EtatDir.ps1` est identique octet pour octet au § 2.2.
2. **En-têtes de hunk du § 2.3 inexacts (forme, pas contenu)** : `RunCommandlet.ps1` `@@ -5,6 +5,7 @@` montre 5 lignes anciennes, `@@ -17,5 +18,6 @@` en montre 3 ; `ReimportCorrectif.ps1` utilise des en-têtes abrégés (`@@ -44 @@`). Un `git apply` du bloc aurait été refusé ; les hunks ont donc été appliqués par leur contenu (outil Edit, ancres uniques vérifiées), ce qui donne exactement les lignes prévues. À corriger dans la cartographie avant de réutiliser ces diffs pour la copie 5.8 (B1 prévoit un `cherry-pick` du commit A3, qui ne dépend pas de ces en-têtes).
3. **Critère de sortie A1** « `git diff --stat` = 3 modifiés + 1 nouveau » : `git diff --stat` liste les 3 modifiés ; le nouveau fichier, non suivi, n'apparaît que dans `git status` (`??`). Conforme sur le fond.
4. **Skills** : `lp-paths`, `lp-commandlets` et `sk-change-safety` n'étaient pas préchargés ; chargés par l'outil Skill après l'application des diffs. Ils ne contredisent rien de ce qui a été fait (instantané et tag faits avant toute écriture, comme le demande la fiche).
5. **Observation, non corrigée** (établi par lecture, `ReimportCorrectif.ps1:38` puis `:58`) : `Resolve-LPEtatDir` (sans `-NoCreate`) est appelé avant le contrôle `git status --short` ; un lancement refusé pour arbre non propre laisse donc un dossier de lot vide sous `etat\` (ignoré par git). Effet conforme au texte de la cartographie ; à trancher par l'orchestrateur s'il le juge utile.
6. Artefact d'outil : `grep -c $'\r'` sous Git Bash comptait toutes les lignes ; recompté par `tr -cd '\r' | wc -c` = 0 (pas de CRLF).
## 7. Entrée de journal (sk-change-safety) — retour arrière proposé, non lancé
`2026-10-09 15:15 | ETAT2 A1 : Tools\EtatDir.ps1 (nouveau) + -EtatDir dans RunCommandlet/ReimportCorrectif, aide AssetHeaders | Tools\EtatDir.ps1, Tools\RunCommandlet.ps1, Tools\ReimportCorrectif.ps1, Tools\AssetHeaders.ps1 | retour arrière : pwsh -NoProfile -Command "Set-Location 'D:\Game\LifePlay-master 5.5'; .\Tools\Restore.ps1 -Lot ETAT2 -WhatIf" puis sans -WhatIf (recopie les 3 scripts, déplace EtatDir.ps1 vers Backup_5.5\ETAT2\_retires) ; tag : git -C "D:\Game\LifePlay-master 5.5" tag -d ETAT2-avant (orchestrateur) | instantané : D:\Game\LifePlay_Backup_5.5\ETAT2\manifest.csv (4 entrées) + tag ETAT2-avant = 1825884 | vérification : parse 0×4, table 22/22, Remove-Item 0`
## 8. Compte rendu sk-protocol
[sk-protocol] Skills présents : sk-protocol, ue-cpp-build, lp-build, lp-ue-compat (préchargés) ; lp-paths, lp-commandlets, sk-change-safety (chargés en cours).
1. **Résultat** : réussi — convention appliquée au jeu 5.5 selon § 2.2/2.3, sans écart de contenu ; rien commité.
2. **Preuves** : manifeste `Backup_5.5\ETAT2\manifest.csv` ; tag `ETAT2-avant` = `1825884` ; `git diff` § 3 ; `diff` sed/EtatDir vide ; script d'essai § 4.
3. **Chiffres** : diff 3 fichiers, +18/−11, + 1 nouveau (47 l.) ; parse 0 erreur ×4 ; table 22/22 ; `Remove-Item` modifiés 0 ; `-EtatDir $etat` 5 ; racine R5 5.
4. **Incertitudes** : comportement réel en commandlet non essayé (B2) ; `cherry-pick` vers `ue5.8` non essayé (B1).
5. **Écarts** : en-têtes de hunk du § 2.3 inexacts (contenu appliqué tel quel) ; skills chargés tardivement ; fichiers écrits : les 4 scripts ci-dessus et ce livrable.
6. **Suite** : l'orchestrateur doit lancer A2 (ETAT2-T3-VAL, recompte indépendant) puis A3 (commit `main`), état : diffs appliqués et contrôlés statiquement, non commités.