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

13 KiB
Raw Blame History

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 :

@@ -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é.