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

13 KiB
Raw Blame History

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.

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