13 KiB
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
- Aucun écart de contenu avec la cartographie : chaque ligne
-/+du § 2.3 (5.5) a été appliquée telle quelle, etEtatDir.ps1est identique octet pour octet au § 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.ps1utilise des en-têtes abrégés (@@ -44 @@). Ungit applydu 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 uncherry-pickdu commit A3, qui ne dépend pas de ces en-têtes). - Critère de sortie A1 «
git diff --stat= 3 modifiés + 1 nouveau » :git diff --statliste les 3 modifiés ; le nouveau fichier, non suivi, n'apparaît que dansgit status(??). Conforme sur le fond. - Skills :
lp-paths,lp-commandletsetsk-change-safetyn'é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). - Observation, non corrigée (établi par lecture,
ReimportCorrectif.ps1:38puis:58) :Resolve-LPEtatDir(sans-NoCreate) est appelé avant le contrôlegit status --short; un lancement refusé pour arbre non propre laisse donc un dossier de lot vide sousetat\(ignoré par git). Effet conforme au texte de la cartographie ; à trancher par l'orchestrateur s'il le juge utile. - Artefact d'outil :
grep -c $'\r'sous Git Bash comptait toutes les lignes ; recompté partr -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).
- Résultat : réussi — convention appliquée au jeu 5.5 selon § 2.2/2.3, sans écart de contenu ; rien commité.
- Preuves : manifeste
Backup_5.5\ETAT2\manifest.csv; tagETAT2-avant=1825884;git diff§ 3 ;diffsed/EtatDir vide ; script d'essai § 4. - Chiffres : diff 3 fichiers, +18/−11, + 1 nouveau (47 l.) ; parse 0 erreur ×4 ; table 22/22 ;
Remove-Itemmodifiés 0 ;-EtatDir $etat5 ; racine R5 5. - Incertitudes : comportement réel en commandlet non essayé (B2) ;
cherry-pickversue5.8non essayé (B1). - É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.
- 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.