LifePlay-Revival/Docs/Migration/etat/ETAT2/ETAT2-T6-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

138 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-T6-IMPL — convention etat\<projet>\<lot>\ dans les scripts de la copie 5.8 (étape B1)
Fiche ETAT2-T6-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-build, sk-change-safety, sk-protocol (présents dans le contexte : sk-protocol, lp-build, ue-cpp-build, lp-ue-compat ; lp-paths et sk-change-safety cités par la fiche mais non préchargés)
Date : 2026-10-09, 15:26-15:31. Copie `D:\Game\LifePlay-master 5.8`, branche `ue5.8`. Aucun UE, commandlet, compilation ni `Build.ps1` lancé ; `Docs\Migration\etat\` de la copie 5.8, `Content` et `.uproject` non touchés ; pas de push ; aucune suppression.
Preuve : « établi » = commande rejouée ou `fichier:ligne` ; « estimé » = déduit (raisonnement donné).
## 1. Vérification de départ (a) — établi
| Contrôle | Résultat | Commande |
|---|---|---|
| Arbre 5.8 propre | sortie vide | `git -C "D:\Game\LifePlay-master 5.8" status --porcelain` |
| Branche / HEAD | `ue5.8` / `cb6697ae8aa4b11ade5435fea44392796680207c` (CHG-260 STM commité) | `git branch --show-current` ; `git rev-parse HEAD` ; `git log -3 --oneline` |
| Processus Unreal | aucun `UnrealEditor`, `UnrealEditor-Cmd`, `UnrealBuildTool` | `tasklist /FI "IMAGENAME eq …"` ; `Get-Process -Name …` (pwsh) |
| Tag `ETAT2*` préexistant en 5.8 | aucun | `git tag -l "ETAT2*"` |
| Dossier d'instantané `Backup_5.5\ETAT2-58` préexistant | absent | `ls D:\Game\LifePlay_Backup_5.5\ETAT2-58` |
## 2. Instantané (b) — établi
Commande de la fiche, telle quelle : `pwsh -NoProfile -Command "Set-Location 'D:\Game\LifePlay-master 5.8'; .\Tools\Snapshot.ps1 -Lot ETAT2-58 -Path Tools\RunCommandlet.ps1,Tools\ReimportCorrectif.ps1,Tools\Build.ps1,Tools\AssetHeaders.ps1,Tools\EtatDir.ps1"` → code 0, « 5 entree(s) ajoutee(s) ».
Manifeste `D:\Game\LifePlay_Backup_5.5\ETAT2-58\manifest.csv` :
| Rel | Existed | Taille | MD5 (avant) |
|---|---|---|---|
| `Tools\RunCommandlet.ps1` | True | 3600 | `2E3324B39FD50D8AAD1B691B053E22BE` |
| `Tools\ReimportCorrectif.ps1` | True | 5037 | `69452AAE541A385EE34B210A273C6A8F` |
| `Tools\Build.ps1` | True | 6645 | `058BAC359A98383FCB32C4990287D7E4` |
| `Tools\AssetHeaders.ps1` | True | 2295 | `0DDD476B132950B8F06856F4C0E1C160` |
| `Tools\EtatDir.ps1` | False | 0 | — |
Copies : `D:\Game\LifePlay_Backup_5.5\ETAT2-58\Tools\{RunCommandlet,ReimportCorrectif,Build,AssetHeaders}.ps1` (`find … -type f`). Retour arrière possible : `Tools\Restore.ps1 -Lot ETAT2-58` (non lancé) ou `git reset` sur le tag (§ 3).
## 3. Tag (c) — établi
`git tag ETAT2-avant` (tag léger, même forme que sur `main` 5.5 : `git cat-file -t ETAT2-avant` = `commit` dans les deux copies) → `ETAT2-avant` = `cb6697ae8aa4b11ade5435fea44392796680207c` (`git rev-parse ETAT2-avant HEAD`, avant cherry-pick).
## 4. Fetch et cherry-pick (d) — établi
- `git -C "D:\Game\LifePlay-master 5.8" fetch "D:\Game\LifePlay-master 5.5" main:refs/remotes/c55/main` → code 0, `* [new branch] main -> c55/main` ; `refs/remotes/c55/main` = `d4b3ea33d31c9fa6ee7286b5ffb45cf90f83d99c` ; `d4b3ea3` ancêtre de `c55/main` (`git merge-base --is-ancestor`).
- `git cherry-pick d4b3ea3` → code 0, **aucun conflit** (`Auto-merging` de `AssetHeaders.ps1`, `ReimportCorrectif.ps1`, `RunCommandlet.ps1` ; `create mode 100644 Tools/EtatDir.ps1`) ; 4 fichiers, +65/−11, comme `d4b3ea3`.
- Nouveau commit : **`1d1d28324c32f29821bd81f6b2fe96d491d3fab4`** (`1d1d283`), message conservé à l'identique (titre + `Co-Authored-By`), auteur et date d'auteur d'origine (`2026-10-09 15:18:39 +0200`), date de commit `15:28:06`.
- Fidélité du report : les 84 lignes `+`/`−` de `git show d4b3ea3` et de `git show 1d1d283` sont identiques (`diff` des deux extraits, scratchpad `pm55.txt`/`pm58.txt`) ; blob `Tools/EtatDir.ps1` identique dans les deux commits (`ce504c5b…`). Les `patch-id --stable` diffèrent (`cbd43a2f…` contre `1e664a76…`) : attendu, le patch-id hache aussi les lignes de contexte, qui diffèrent entre branches (en-tête de `ReimportCorrectif.ps1`, bloc `param` de `RunCommandlet.ps1` avec `$Engine`, numéros de ligne +1).
- Placement 5.8 vérifié à la lecture du diff : `RunCommandlet.ps1` paramètre `$EtatDir` entre `$Args` et `$ProjectRoot` (l. 25), dot-source et `$sum` l. 38-39 ; `ReimportCorrectif.ps1` paramètre l. 33, `$etat = Resolve-LPEtatDir` l. 39, 5 appels `-EtatDir $etat`.
## 5. `Tools\Build.ps1` (e) — modifié, NON commité
Appliqué par le contenu (les en-têtes de hunk du § 2.3 sont mal formés, contenu juste) ; la ligne `$argLine = ...` du § 2.3 est le contexte (ligne 48 d'origine, inchangée). `git diff Tools/Build.ps1` :
```diff
@@ -4,7 +4,8 @@
.DESCRIPTION
Journal complet : Saved\Logs\portage\<Lot>_Build_<horodatage>.log
- Resume : Docs\Migration\etat\<Lot>_Build_<horodatage>.txt
+ Resume : Docs\Migration\etat\<projet>\<lot>\<Lot>_Build_<horodatage>.txt (dossier deduit du lot par
+ Tools\EtatDir.ps1 ; -EtatDir l'impose)
code de sortie, duree, chaine MSVC retenue, makefile (recree ou reutilise), nombre d'actions, unites compilees,
@@ -37,7 +38,8 @@ param(
[string]$ExtraArgs = '',
[string]$FromLog = '',
[string]$ProjectRoot = (Split-Path $PSScriptRoot -Parent),
- [string]$Engine = ''
+ [string]$Engine = '',
+ [string]$EtatDir = ''
)
@@ -45,11 +47,13 @@ if (-not $Engine) { $Engine = $LPEngineRoot }
$bat = Join-Path $Engine 'Build\BatchFiles\Build.bat'
$proj = Join-Path $ProjectRoot 'LifePlay.uproject'
$stamp = Get-Date -Format 'yyyyMMdd-HHmmss'
+. "$PSScriptRoot\EtatDir.ps1"
+$etatDir = Resolve-LPEtatDir $ProjectRoot $Lot $EtatDir -NoCreate # lot valide avant toute compilation
$argLine = "$Target $Platform $Config `"-Project=$proj`" -WaitMutex -NoHotReloadFromIDE $ExtraArgs".Trim()
if ($FromLog) {
$log = (Resolve-Path -LiteralPath $FromLog).Path
- $sum = Join-Path $ProjectRoot "Docs\Migration\etat\${Lot}_BuildLog_$stamp.txt"
+ $sum = Join-Path $etatDir "${Lot}_BuildLog_$stamp.txt"
$exit = -1; $dur = 0
@@ -58,7 +62,7 @@ if ($FromLog) {
$log = Join-Path $ProjectRoot "Saved\Logs\portage\${Lot}_Build_$stamp.log"
- $sum = Join-Path $ProjectRoot "Docs\Migration\etat\${Lot}_Build_$stamp.txt"
+ $sum = Join-Path $etatDir "${Lot}_Build_$stamp.txt"
New-Item -ItemType Directory -Force (Split-Path $log -Parent) | Out-Null
```
(extrait du `git diff` réel, lignes de contexte éloignées omises.) `git diff --stat` : `Tools/Build.ps1 | 12 ++++++++----` (+8/−4 = les 5 changements du § 2.3). Fichier toujours LF (CR = 0), ASCII (octets > 127 = 0), sans BOM, LF final, comme avant. MD5 après : `917d64b75ef60e7b77c21f8996c2c9ed`. Création du dossier : inchangée, `New-Item -ItemType Directory -Force (Split-Path $sum -Parent)` (l. 75 après modification, `grep -n`) après le contrôle de l'éditeur. Collision de noms avec `Engine.ps1` (dot-sourcé l. 45) : aucune (`grep -i 'etatdir|LPEtatRules|Resolve-LPEtat' Tools/Engine.ps1` vide).
## 6. Contrôles statiques (f) — établi
Script `val58.ps1` (scratchpad de session) puis `val58_rm.ps1` ; racine fictive `…\scratchpad\fakeroot58` (dossier vide créé par le script ; `Docs` jamais créé).
| # | Contrôle | Résultat | Verdict |
|---|---|---|---|
| C1 | Analyse syntaxique `[System.Management.Automation.Language.Parser]::ParseFile` sur `Build`, `EtatDir`, `RunCommandlet`, `ReimportCorrectif`, `AssetHeaders` | 0 / 0 / 0 / 0 / 0 erreur | PASS |
| C2 | Table d'`EtatDir.ps1` (copie 5.8), `-NoCreate`, comparaison sensible à la casse | **34/34 OK** : les 22 cas du § 2.2 (dont `O2` → `etat\O2` + 1 avertissement, `..\x` refusé, `-EtatDir ETAT2\essai` → `ETAT2\essai`) + `DC3-VAL`→`sandbox\DC3`, `ETAT2-58`→`ETAT2`, `VQ1-T1`→`VQ\VQ1`, `PUB2`→`publication\PUB2`, `U58`→`U58\U58`, `-EtatDir` absolu, refus `A*`, `a/b`, vide, `-x`, `U7 x`, `-EtatDir x[1]` (générique) | PASS (voir écart 2) |
| C3 | Lignes 50-51, 56, 65 de `Build.ps1` rejouées dans une fonction aux mêmes paramètres (sans moteur, sans lancer `Build.ps1`) | `ETAT2` `-FromLog` → `etat\ETAT2\ETAT2_BuildLog_<stamp>.txt` ; `U7-T8b` → `etat\U58\U7\U7-T8b_Build_<stamp>.txt` ; `-EtatDir ETAT2\essai` → `etat\ETAT2\essai\U7_Build_<stamp>.txt` | PASS |
| C4 | Effet disque des essais | 0 élément sous la racine fictive (`Get-ChildItem -Recurse -Force`) ; `R8` : 0 fichier modifié depuis 15:27 (`find Docs/Migration/etat -newermt '2026-10-09 15:27'`), racine `R8` = 333 fichiers | PASS |
| C5 | `git diff -U0 \| Select-String Remove-Item` | **0** (diff de travail = `Build.ps1`) ; `git diff -U0 ETAT2-avant` (cherry-pick + `Build.ps1`) : **0** ; `Remove-Item` dans `Build.ps1` 0, `EtatDir.ps1` 0, `ReimportCorrectif.ps1` 3 (texte inchangé) | PASS |
| C6 | `-EtatDir $etat` dans `ReimportCorrectif.ps1` | 5 sur 5 appels `RunCommandlet.ps1"` | PASS |
| C7 | Écritures `Join-Path $ProjectRoot "Docs\Migration\etat…"` restantes dans `Build`, `RunCommandlet`, `ReimportCorrectif` | 0 | PASS |
| C8 | `Build.ps1 -FromLog` | **non lancé** (prévu en B2) | — |
## 7. État final — établi
`git -C "D:\Game\LifePlay-master 5.8" log -2 --oneline` :
```
1d1d283 ETAT2 : preuves des scripts dans etat/<projet>/<lot>/ (Tools/EtatDir.ps1, table lot -> projet, RunCommandlet, ReimportCorrectif, AssetHeaders) (CHG-261)
cb6697a STM : HyperAIStudio adopte, erreur de demarrage corrigee (prechargement d'AutomationController dans LifePlayEditorTools, ERR-054), 15 toolsets limites a l'editeur, methode de debogage au doc 29 (CHG-260)
```
`git status --short` :
```
M Tools/Build.ps1
```
Index vide (`git diff --cached --stat`). Refs ajoutées : tag `ETAT2-avant` (`cb6697a`), `refs/remotes/c55/main` (`d4b3ea3`). Copie 5.5 : `git status --short` vide. Aucun processus Unreal en fin de tâche.
MD5 finaux (5.8) : `EtatDir.ps1` `702f50ce958a1128328933b52bb3f151` ; `RunCommandlet.ps1` `1b4802ff9249e5ab554ea2cf2e3aa867` ; `ReimportCorrectif.ps1` `01971d3b182ca6f63c252be43fc54d99` ; `AssetHeaders.ps1` `411e8507f36948ebf0b91c375afe386b` ; `Build.ps1` `917d64b75ef60e7b77c21f8996c2c9ed`.
## 8. Écarts à la SPEC et à la fiche
1. **Aucun écart de contenu** : `Build.ps1` = § 2.3 ligne pour ligne ; cherry-pick = `d4b3ea3` ligne pour ligne. La fiche (pas de commit de `Build.ps1`) prime sur la ligne B1 du § 6 de la cartographie (« second commit `Build.ps1` »).
2. Essai C2 : au premier passage, `O2` est sorti **KO** (0 avertissement) à cause de mon script d'essai : `-WarningVariable` passé à `Resolve-LPEtatDir`, fonction simple sans `[CmdletBinding()]`, n'est pas un paramètre commun (absorbé par `$args`). Rejoué en capturant le flux 3 (`3>&1`) : 1 chemin `…\etat\O2` + 1 avertissement `lot 'O2' hors table…`, rien créé → OK. Le livrable n'est pas en cause ; total 34/34.
3. Erreur d'édition corrigée avant les contrôles : mon premier remplacement avait ôté l'espace de `$argLine = "…"` ; rétabli (ligne identique à `HEAD:Tools/Build.ps1:48`, vérifié par `grep -n '^\$argLine'`).
4. Une commande d'essai (écriture et `rm` dans `/tmp`) a été refusée par le système de permissions : sans effet, rejouée dans le scratchpad sans `rm`.
5. Observation (pas un écart, décision à l'orchestrateur) : en PowerShell les noms de variables ne tiennent pas compte de la casse ; `$etatDir` (`Build.ps1:51`) **est** le paramètre `$EtatDir` (`:42`). Le paramètre est lu comme argument avant d'être remplacé par le chemin résolu ; aucun lecteur ultérieur ne veut la valeur brute (`:56`, `:65` veulent le chemin résolu) : sans effet fonctionnel (établi : C3 avec `-EtatDir ETAT2\essai` correct ; démonstration `ReferenceEquals((Get-Variable EtatDir).Value, (Get-Variable etatDir).Value)` = True). Un nom distinct (ex. `$sumDir`) serait plus lisible ; non modifié (SPEC suivie).
6. Observation : un lot invalide fait maintenant échouer `Build.ps1` (exception, `$ErrorActionPreference = 'Stop'`) avant le contrôle de l'éditeur (code 3) : conforme à l'intention du § 2.3 (« lot valide avant toute compilation »), estimé sans risque.
7. Skills `lp-paths` et `sk-change-safety` non préchargés (cités par la fiche) ; règles appliquées depuis la fiche et la mémoire (instantané, tag, aucune suppression).
Fichiers écrits : `D:\Game\LifePlay-master 5.8\Tools\Build.ps1` (modifié) ; commit `1d1d283` (4 fichiers de `Tools`) ; `D:\Game\LifePlay_Backup_5.5\ETAT2-58\` (manifeste + 4 copies) ; ce livrable ; scratchpad de session : `val58.ps1`, `val58_rm.ps1`, `pm55.txt`, `pm58.txt`, dossier vide `fakeroot58`.
## 9. Compte rendu sk-protocol
[sk-protocol] Skills présents : sk-protocol, lp-build, ue-cpp-build, lp-ue-compat (lp-paths, sk-change-safety non préchargés).
1. Résultat : réussi — cherry-pick sans conflit (`1d1d283`), `Build.ps1` modifié selon § 2.3 et non commité, contrôles statiques PASS.
2. Preuves : commandes des § 1-7, rejouées ce jour ; diffs `git diff ETAT2-avant`.
3. Chiffres : instantané 5 entrées (4 + 1 absent) ; cherry-pick 4 fichiers +65/−11, 84 lignes ± identiques à `d4b3ea3` ; `Build.ps1` +8/−4 ; parse 0×5 ; table 34/34 ; `Remove-Item` dans le diff 0 ; `-EtatDir $etat` 5/5 ; racine R8 333.
4. Incertitudes : comportement de bout en bout (`Build.ps1 -FromLog`, `RunCommandlet` réel) non exécuté → B2.
5. Écarts : § 8 (essai O2 de mon script rejoué, espace `$argLine` rétabli, homonymie `$etatDir`/`$EtatDir` signalée).
6. Suite : l'orchestrateur doit faire valider (B2, ETAT2-T7-VAL) puis commiter `Tools/Build.ps1` sur `ue5.8`, état : `1d1d283` commité, `Build.ps1` modifié non commité, tag `ETAT2-avant` = `cb6697a`, rien poussé.