140 lines
13 KiB
Markdown
140 lines
13 KiB
Markdown
|
|
# 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.
|
|||
|
|
|
|||
|
|
```diff
|
|||
|
|
--- 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.
|