# OUTC-T6-IMPL : EtatDir.ps1, -EtatDir relatif sans dossier parasite (2026-10-11) Fiche OUTC-T6 — Niveau N2 — Modèle prévu opus | utilisé claude-opus-5-5 — Agent orchestrateur (session OUTC) — Skills lp-lot, sk-change-safety, sk-windows-shell Origine : demande de Big Boss du 2026-10-11 (« Corrige aussi `Tools\EtatDir.ps1:30` (`-EtatDir` relatif → dossier parasite), si c'est dans ton périmètre »). Dans le périmètre du lot : contrôle des dossiers parasites (M1). Correctif de moins de 20 lignes, fait par l'orchestrateur (code moyen, `sk-orchestrate` § 1) ; VAL indépendante en OUTC-T4. ## 1. Fichiers modifiés `M Tools\EtatDir.ps1` (copie 5.8, dépôt jeu) : 18 lignes ajoutées, 3 retirées (`git diff --stat`). - l. 7-11 (aide) : règle du préfixe, refus des parasites et de la racine, règle `OUT[A-Z]?\d*`. - l. 26 : règle `^(PROP|SK|ETAT\d*|OUT[A-Z]?\d*)(?:-|$)` (avant `OUT\d*`) : `OUTC` et `OUTC-Tn` → `etat\OUTC\`. - l. 33-39 : `-EtatDir` relatif : `/` → `\`, `.\` retiré, préfixe `Docs\Migration\etat\` ou `etat\` retiré (insensible à la casse) ; vide après retrait → exception (racine d'`etat\`). - l. 52-56 : après calcul, exception si le chemin est la racine d'`etat\` ou contient, sous `etat\`, un segment `etat` ou `Migration` (vaut aussi pour un `-EtatDir` absolu et pour les règles de lot). Écriture : version préparée et testée dans le scratchpad (`…\scratchpad\OUTC-T6\EtatDir.ps1`), puis **une seule** écriture `Copy-Item -Force` vers `Tools\` (consigne de Big Boss : `Build.ps1` et `RunCommandlet.ps1` le dot-sourcent pendant que STE travaille). MD5 avant `28274CB7428E4A5D25F3BAE46486C012`, après `5E18EC5BDBFE9B80D55C985B15F864E4`. LF, sans BOM, 0 octet non ASCII (`FileCheck.ps1` : `LF=62`, alertes 0). `Build.ps1` analysé sans erreur (`Parser::ParseFile`, 0 erreur). ## 2. Écarts à la SPEC La SPEC (`OUTC-SPEC.md` § 2) ne prévoyait pas `EtatDir.ps1` : ajout demandé par Big Boss après la SPEC. Changement de comportement voulu, en plus du correctif : `OUTC-T1` allait dans `etat\OUTC-T1\` (lot hors table), il va maintenant dans `etat\OUTC\` ; un `-EtatDir` relatif qui désignait la racine ou un parasite lève désormais une exception au lieu de créer le dossier. Écart de procédure : Big Boss a ensuite demandé de remplacer le fichier « entre deux commandlets ». Le remplacement a eu lieu à 06:32:38 (`LastWriteTime`), alors que `UnrealEditor-Cmd` PID 37900 (`-run=CompileAllBlueprints`, copie 5.8, lot STE) tournait depuis 06:31:44. Je l'estime sans effet : `RunCommandlet.ps1` dot-source `EtatDir.ps1` et résout le dossier aux l. 38-39, avant de lancer le commandlet, et l'écriture s'est faite en une seule copie. Big Boss en est informé. Pour les écritures suivantes de `Tools\`, je vérifie d'abord que `UnrealEditor-Cmd` est absent. ## 3. Instantané `Tools\Snapshot.ps1 -Lot OUTC -Path Tools\EtatDir.ps1` → `D:\Game\LifePlay_Backup_5.5\OUTC\manifest.csv` (7 entrées), copie `D:\Game\LifePlay_Backup_5.5\OUTC\Tools\EtatDir.ps1`. ## 4. Essais (17 cas, ancienne vs nouvelle version, `Resolve-LPEtatDir … -NoCreate`) Sorties brutes : `OUTC-T6_essais.txt` (même dossier). Résumé : | Entrée (`lot`, `-EtatDir`) | Avant | Après | |---|---|---| | `U8`, `STE`, `OUT1`, `OUTC`, `ZZZ`, `PUB2` (sans `-EtatDir`) | `U58\U8`, `ST\STE`, `OUT1`, `OUTC`, `ZZZ`, `publication\PUB2` | identique | | `OUTC-T1` | `etat\OUTC-T1` | `etat\OUTC` | | `Docs\Migration\etat\OUTC` | `etat\Docs\Migration\etat\OUTC` (parasite) | `etat\OUTC` | | `Docs/Migration/etat/U58/U8` | parasite | `etat\U58\U8` | | `etat\OUTC`, `.\etat\OUTC` | `etat\etat\OUTC`, `etat\.\etat\OUTC` (parasites) | `etat\OUTC` | | `U58\etat\U8` | parasite créé | exception « dossier parasite refusé » | | `Docs\Migration\etat\Docs\Migration\etat\X` | parasite double | exception | | `etat` | `etat\etat` | exception (racine) | | `publication\PUB2\neutral\Docs` | inchangé | inchangé (pas un parasite) | | `D:\Temp\abs` | `D:\Temp\abs` | identique | | absolu `…\Docs\Migration\etat` / `…\etat\U58\etat` | acceptés | exception (racine / parasite) | ## 5. Ce qui n'a pas été fait Aucun appel réel de `Build.ps1` ou `RunCommandlet.ps1` (ils lancent UBT ou l'éditeur : copie UE). Les appelants ne passent `-EtatDir` que sur demande de l'opérateur (paramètre transmis tel quel). ## 6. Points à confirmer en VAL - P1 : rejouer les 17 cas (`…\scratchpad\OUTC-T6\test.ps1 -Script Tools\EtatDir.ps1`) et les 2 cas absolus ; comparer à la copie sauvegardée. - P2 : `Build.ps1`, `RunCommandlet.ps1`, `ReimportCorrectif.ps1` s'analysent sans erreur et dot-sourcent `EtatDir.ps1` sans le modifier. - P3 : diff lu en entier ; LF, sans BOM, ASCII. ## 7. Fichiers à commiter (dépôt jeu, `D:\Game\LifePlay-master 5.8`) ``` M Tools/EtatDir.ps1 A Docs/Migration/etat/OUTC/OUTC-T6-IMPL.md ``` (`OUTC-T6_essais.txt` : `.txt` sous `etat\`, ignoré par git comme les autres journaux de lot.) Tours : sans objet (fiche de l'orchestrateur)