13 KiB
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;d4b3ea3ancêtre dec55/main(git merge-base --is-ancestor).git cherry-pick d4b3ea3→ code 0, aucun conflit (Auto-mergingdeAssetHeaders.ps1,ReimportCorrectif.ps1,RunCommandlet.ps1;create mode 100644 Tools/EtatDir.ps1) ; 4 fichiers, +65/−11, commed4b3ea3.- 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 commit15:28:06. - Fidélité du report : les 84 lignes
+/−degit show d4b3ea3et degit show 1d1d283sont identiques (diffdes deux extraits, scratchpadpm55.txt/pm58.txt) ; blobTools/EtatDir.ps1identique dans les deux commits (ce504c5b…). Lespatch-id --stablediffèrent (cbd43a2f…contre1e664a76…) : attendu, le patch-id hache aussi les lignes de contexte, qui diffèrent entre branches (en-tête deReimportCorrectif.ps1, blocparamdeRunCommandlet.ps1avec$Engine, numéros de ligne +1). - Placement 5.8 vérifié à la lecture du diff :
RunCommandlet.ps1paramètre$EtatDirentre$Argset$ProjectRoot(l. 25), dot-source et$suml. 38-39 ;ReimportCorrectif.ps1paramètre l. 33,$etat = Resolve-LPEtatDirl. 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
- Aucun écart de contenu :
Build.ps1= § 2.3 ligne pour ligne ; cherry-pick =d4b3ea3ligne pour ligne. La fiche (pas de commit deBuild.ps1) prime sur la ligne B1 du § 6 de la cartographie (« second commitBuild.ps1»). - Essai C2 : au premier passage,
O2est sorti KO (0 avertissement) à cause de mon script d'essai :-WarningVariablepassé à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 avertissementlot 'O2' hors table…, rien créé → OK. Le livrable n'est pas en cause ; total 34/34. - 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é pargrep -n '^\$argLine'). - Une commande d'essai (écriture et
rmdans/tmp) a été refusée par le système de permissions : sans effet, rejouée dans le scratchpad sansrm. - 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,:65veulent le chemin résolu) : sans effet fonctionnel (établi : C3 avec-EtatDir ETAT2\essaicorrect ; démonstrationReferenceEquals((Get-Variable EtatDir).Value, (Get-Variable etatDir).Value)= True). Un nom distinct (ex.$sumDir) serait plus lisible ; non modifié (SPEC suivie). - 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. - Skills
lp-pathsetsk-change-safetynon 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).
- Résultat : réussi — cherry-pick sans conflit (
1d1d283),Build.ps1modifié selon § 2.3 et non commité, contrôles statiques PASS. - Preuves : commandes des § 1-7, rejouées ce jour ; diffs
git diff ETAT2-avant. - 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-Itemdans le diff 0 ;-EtatDir $etat5/5 ; racine R8 333. - Incertitudes : comportement de bout en bout (
Build.ps1 -FromLog,RunCommandletréel) non exécuté → B2. - Écarts : § 8 (essai O2 de mon script rejoué, espace
$argLinerétabli, homonymie$etatDir/$EtatDirsignalée). - Suite : l'orchestrateur doit faire valider (B2, ETAT2-T7-VAL) puis commiter
Tools/Build.ps1surue5.8, état :1d1d283commité,Build.ps1modifié non commité, tagETAT2-avant=cb6697a, rien poussé.