Fiche AMEL1-W3 — Niveau N1 — Modèle prévu sonnet | utilisé claude-sonnet-5-5 — Agent lp-writer — Skills sk-protocol, lp-doc, lp-lot # AMEL1-W3-TEXTES : corrections des résidus de la VAL V1a et règle A5 (textes proposés, 2026-10-14) Hors gabarit : ce livrable propose des textes (avant / après exacts), il n'en applique aucun ; rien n'est écrit dans un skill. Sources : `AMEL1-V1a-VAL.md` § V4 (résidus a à c) ; règle A5 (décision de l'utilisateur : « Arrêt et compte rendu »). Racine `SK` = `D:\Game\LifePlay-Sandbox-5.8\Tools\claude\skills`. Les « Avant » sont recopiés des fichiers lus ce jour (numéros de ligne de la lecture du 2026-10-14, après les écritures de W2) ; chaque ancre est à re-citer au moment d'écrire. ## 1. Fichiers écrits - `D:\Game\LifePlay-master 5.8\Docs\Migration\etat\EVAL2\AMEL1\AMEL1-TEXTES-W3.md` (ce fichier, créé). Aucun autre. ## 2. Numéros utilisés (CHG, ERR, doc) sans objet : aucune entrée de journal ni de registre. ## 3. Index, plages et registre des reports mis à jour sans objet : aucun doc numéroté créé ni modifié. ## 4. Écarts à la fiche - La consigne dit « `FileCheck.ps1` = un fichier par appel ». Rejoué ce jour : `FileCheck.ps1 -Path @('a','b')` accepte un tableau (comme `PubCheck.ps1 -Fichiers @('a','b')`), voir § « Syntaxe rejouée ». Le texte T5 donne donc le tableau pour les deux scripts ; « un fichier par appel » reste permis. À confirmer si l'orchestrateur préfère l'imposer. - Aucun autre écart. ## 5. Fichiers à commiter A `Docs/Migration/etat/EVAL2/AMEL1/AMEL1-TEXTES-W3.md` (dépôt du jeu 5.8). Aucun skill modifié. ## 6. À verser À verser : aucun. Tours : 11 / 30 ## Constats ### Syntaxe rejouée (avant d'écrire T5) En-tête de `D:\Game\LifePlay-master 5.8\Tools\FileCheck.ps1` (l. 20-22, 37-41) : `-Path` est un `string[]` positionnel, exemple `.\Tools\FileCheck.ps1 Source\...\LPCoupleSimCore.cpp, Config\DefaultEngine.ini` (virgule PowerShell, pas d'espace). Commande rejouée : ```` pwsh -NoProfile -Command '& "D:\Game\LifePlay-master 5.8\Tools\FileCheck.ps1" -Path @("D:\Game\LifePlay-master 5.8\Tools\PubCheck.ps1","D:\Game\LifePlay-master 5.8\Tools\FileCheck.ps1"); "code=$LASTEXITCODE"; & "D:\Game\LifePlay-master 5.8\Tools\PubCheck.ps1" -Fichiers @("D:\Game\LifePlay-master 5.8\Tools\PubCheck.ps1","D:\Game\LifePlay-master 5.8\Tools\FileCheck.ps1"); "pub=$LASTEXITCODE"' ```` Sortie : `fichiers=2 LF=2 alertes=0 introuvables=0`, `code=0`, puis `PubCheck : 0 constat(s)`, `pub=0`. Les chemins séparés par des espaces échouent (`Nous ne pouvons pas trouver un paramètre positionnel…`, exit 1, constaté en V1a et en W2). --- ### T1. `sk-windows-shell` : redirections (résidu b ; indicateurs I7a, I7b) Fichier : `SK\sk-windows-shell\SKILL.md`, section « Sortie et codes », bullet « Redirections » (l. 31-33). Avant : ```` - Redirections : `> f 2>&1`. En PowerShell 5.1, `>` écrit en UTF-16 : utiliser `Out-File -Encoding utf8`. `Tee-Object` pour voir et garder. Un agent `lp-*` sous crochet n'écrit pas par redirection (`>`, `tee`) : il lance les scripts du projet, qui écrivent eux-mêmes leur journal et leur résumé (`Build.ps1`, `LogStats.ps1`), et cite ce chemin. ```` Après : ```` - Redirections : garder la sortie d'un programme natif par `Start-Process -Wait -PassThru -RedirectStandardOutput -RedirectStandardError ` (deux fichiers distincts), ou par la sortie que le script du projet écrit lui-même (`Build.ps1`, `LogStats.ps1` : journal et résumé), dont on cite le chemin. Un agent `lp-*` sous crochet ne redirige jamais (`>` et `tee` sont refusés) : il lance le script du projet et cite ce chemin. Hors crochet (session principale), `>` et `Tee-Object` restent possibles ; en PowerShell 5.1 `>` écrit en UTF-16 : utiliser `Out-File -Encoding utf8`. ```` Contrôle de cohérence : le bullet « Pas de code en ligne » (S1) et `lp-paths` ne citent pas `> f 2>&1`. ### T2. `lp-build` : commande brute de la copie 5.5 (résidu b ; indicateurs I7a) Fichier : `SK\lp-build\SKILL.md`, § 3 « Compiler (copie 5.5, branche main) : commande brute » (l. 51-56), bloc de code, l. 52-54. Avant : ```` $UE='D:\Game\Launcher\Engine\UE_5.5\Engine'; $Proj='D:\Game\LifePlay-master 5.5\LifePlay.uproject' $env:VSLANG='1033'; $log="D:\Game\LifePlay-master 5.5\Saved\Logs\portage\_Build_$(Get-Date -f yyyyMMdd-HHmmss).log" cmd /c "`"$UE\Build\BatchFiles\Build.bat`" LifePlayEditor Win64 Development `"-Project=$Proj`" -WaitMutex -NoHotReloadFromIDE > `"$log`" 2>&1" ```` Après : ```` $UE='D:\Game\Launcher\Engine\UE_5.5\Engine'; $Proj='D:\Game\LifePlay-master 5.5\LifePlay.uproject' $env:VSLANG='1033'; $log="D:\Game\LifePlay-master 5.5\Saved\Logs\portage\_Build_$(Get-Date -f yyyyMMdd-HHmmss).log" Start-Process -FilePath "$UE\Build\BatchFiles\Build.bat" -ArgumentList 'LifePlayEditor','Win64','Development',"`"-Project=$Proj`"",'-WaitMutex','-NoHotReloadFromIDE' -Wait -PassThru -RedirectStandardOutput $log -RedirectStandardError "$log.err" ```` Le reste du bloc (ligne `Build.ps1 -FromLog $log`) est inchangé. **Incertain, non rejoué** : cette commande lance un build UE 5.5 (copie UE, `BUILD-GO` requis) ; avant adoption, un essai sur la copie 5.5 par `lp-builder` doit confirmer (a) que `Start-Process` lance bien le `.bat`, (b) que le journal `$log` contient les mêmes lignes qu'avant (UBT écrit sur la sortie standard ; `$log.err` doit rester vide ou sans erreur), (c) le code de sortie (`-PassThru`, `.ExitCode`). Repli : garder le texte actuel avec la mention « session principale hors crochet seulement ». ### T3. `lp-doc/gabarits.md` : un seul texte pour FicheStats (résidu C4 ; indicateur I11b) Fichier : `SK\lp-doc\gabarits.md`, gabarit TACHES, deux endroits (l. 94-95 et l. 100-104). Principe : le registre est tenu au fil du lot (statuts à chaque envoi et réception, mesures reportées après chaque VAL PASS) ; la clôture contrôle. Avant (l. 94-95) : ```` retrouve par `git log --grep ` (R-REPO1). Les quatre colonnes de mesure sont remplies par `python -I Tools/FicheStats.py --lot ` (copie 5.8) à la clôture ; une fiche au-delà du budget de son niveau ```` Après : ```` retrouve par `git log --grep ` (R-REPO1). Les quatre colonnes de mesure sont remplies par `python -I Tools/FicheStats.py --lot ` (copie 5.8), au fil du lot (après chaque VAL PASS) et contrôlées à la clôture ; une fiche au-delà du budget de son niveau ```` Avant (l. 100-104) : ```` Tout registre `*-TACHES.md` suit ce gabarit avec **toutes** ses colonnes dès l'ouverture, Tours et Statut compris (STG, CAM et STE ne l'ont pas fait : mesurable sur 16 fiches sur 52). Le statut est écrit à chaque envoi et à chaque réception (`acceptée`, `reprise ()`, …), jamais en bloc à la clôture ; `python -I Tools/FicheStats.py --lot ` est lancé après chaque VAL PASS pour renseigner Tours, Pic, Jetons et Durée, pas seulement à la clôture. Un registre sans ces colonnes est refusé à la réception. ```` Après : ```` Tout registre `*-TACHES.md` suit ce gabarit avec **toutes** ses colonnes dès l'ouverture, Tours et Statut compris (STG, CAM et STE ne l'ont pas fait : mesurable sur 16 fiches sur 52). Le registre est tenu au fil du lot : le statut est écrit à chaque envoi et à chaque réception (`acceptée`, `reprise ()`, …), et les mesures de `FicheStats` (Tours, Pic, Jetons, Durée) sont reportées après chaque VAL PASS. À la clôture, `FicheStats` est relancé une dernière fois pour contrôler le registre. Un registre sans ces colonnes est refusé à la réception. ```` ### T4. `lp-validate` : lecture d'une roue Python (résidu a ; indicateur I7a) Fichier : `SK\lp-validate\SKILL.md`, § 1, bullet « roue Python » (l. 40-41). Avant : ```` - Une roue Python (`.whl`) se lit sans l'installer : extraction par `python -I` + `zipfile` depuis le scratchpad (`tar -xf` de Git Bash refuse un zip), sha256 de `RECORD` vérifié, rien exécuté (P7-T7). ```` Après : ```` - Une roue Python (`.whl`) se lit sans l'installer, sans code en ligne : soit par un script fourni par la fiche (rubrique 4, chemin dans `Saved//` ou `Tools/`) lancé par `python -I -X utf8