16 KiB
U7-T16-T7 : essai d'acceptation T7 (moddeur, coiffure) : ÉCHEC à HairPipeline Inspect
Fiche U7-T16 — Niveau N1 — Modèle prévu lp-builder | utilisé claude-haiku-5-5 — Agent lp-builder — Skills lp-build, lp-commandlets, sk-windows-shell, sk-protocol
1. Objet
Essai T7 (etat/U58/UA/UA-MODS.md § 4, ligne T7) : un moddeur fabrique un mod de coiffure de bout en bout avec
l'atelier de l'addon 5.8 (D:\Game\LifePlay-Sandbox-5.8\Tools), contre la référence Releases/2026.10.2.0.
Premier passage de HairPipeline.ps1 en 5.8 (report U4).
Résultat : échec à l'étape b (HairPipeline.ps1 -Step Inspect). Arrêt au premier échec, conformément à la fiche (point 9).
Étapes c (BuildMod.ps1) et d (copie d'essai) non exécutées. Pas de copie d'essai prête.
2. Source de la coiffure (établi)
D:\Game\LifePlay-Sandbox-5.8\ModSources\lpr_hair_pocolov\Module\Hairstyles\pocolov15.lphairexiste (utilisée parlpr_hair_pocolov).D:\Game\LifePlay-Sandbox-5.8\Tools\hairs\HAIRS1.json:Pocolov15→"archive": "D:/Game/pocolov-hair-15.zip",CC BY 4.0.D:/Game/pocolov-hair-15.zipprésent, 1 565 386 octets, daté 2026-10-02 18:21 (commande :ls -la D:/Game/pocolov-hair-15.zip).- Doc 13 (
D:\Game\LifePlay-master 5.5\Docs\Migration\13_Protocole_Coiffure.md:195-196) cite la même archive. - Aucun téléchargement effectué.
3. Commandes et codes
| Étape | Commande (interpréteur pwsh 7) | Code | Durée | Sortie clé |
|---|---|---|---|---|
| Préconditions | Get-Process UnrealEditor* ; Test-Path des cibles ; Mods\ 5.8 ; git branch |
— | — | éditeur 0 ; cibles absentes ; Mods\ vide ; branche ue5.8 ; CompilerVersion=14.50.35717 (DefaultEngine.ini) |
| a. NewMod | & "D:\Game\LifePlay-Sandbox-5.8\Tools\NewMod.ps1" -Name lpr_test_u7t7 -Title "LPR test U7-T7" -Author "LifePlay Revival" -Hairs -GameRoot "D:\Game\LifePlay-master 5.8" |
non relevé ($LASTEXITCODE vide après appel & dans -Command) ; aucune exception levée |
< 1 s | Configuration des coiffures : ...\Tools\mods\lpr_test_u7t7.json ; Mod cree : ...\ModSources\lpr_test_u7t7 ; suite indiquée : EditMod puis BuildMod |
| (saisie) | Entrée hairs de Tools\mods\lpr_test_u7t7.json : une coiffure Pocolov15 (name, archive, title, url, thicken 1, sex F, cap_opacity white, license, author) |
— | — | sans les champs "auto" (voir § 5) |
| b. Inspect | pwsh -NoProfile -File "...\Tools\HairPipeline.ps1" -Config "...\Tools\mods\lpr_test_u7t7.json" -Step Inspect -GameRoot "D:\Game\LifePlay-master 5.8" (lancé en arrière-plan) |
non relevé (le code de pwsh n'a pas été capturé ; la notification « exit 0 » concerne le wrapper bash) | import UE : 09:16:28 → 09:16:38 (heure du journal UE) | voir § 4 |
| b. Apply | non lancé | — | — | — |
| c. BuildMod | non lancé | — | — | — |
| d. Copie d'essai | non lancée | — | — | — |
Journal de l'Inspect : %USERPROFILE%\AppData\Local\Temp\claude\D--Game-LifePlay-master-5-5\ab8918a1-261f-45b4-904a-678ecfce98f7\scratchpad\U7T16_b_inspect.log.
Sortie de NewMod (copie) : sortie console reproduite au § 3 (le fichier tee n'a pas été écrit).
4. Erreur exacte (Inspect)
Sortie du journal (texte intégral, dernière ligne) :
[31;1mHairPipeline.ps1: [31;1mNous ne pouvons pas lier l'argument au param<61>tre <20><>Path<74><68>, car il s'agit d'une valeur nulle.[0m
Lignes du journal avant l'erreur : Mod lpr_test_u7t7 monte dans Mods\lpr_test_u7t7 ; == Pocolov15 : inspection ;
import FBX réussi (HAIRIMPORT ... Head.Head : 21262 triangles ; Hair_15.Hair_15 : 6714 triangles, emplacements ['Hair_Base', 'Hair_01'] ;
2 maillage(s) statique(s) importe(s) dans /lpr_test_u7t7/Hairs/_Work_Pocolov15) ; puis Mod lpr_test_u7t7 remis dans ModSources\lpr_test_u7t7 (fermeture du montage, finally).
Localisation : la ligne n'est pas donnée par le message. Le point d'échec est dans le bloc try de l'Inspect, après l'import.
Candidat unique : HairPipeline.ps1:215 (Split-Path $h.diffuse -Leaf et Split-Path $h.strands_opacity -Leaf dans $report += ...), appelé avec $null :
$h.diffuse n'est affecté que si & $auto 'diffuse' est vrai (HairPipeline.ps1:204), et $auto ne contient que les champs valant "auto" (HairPipeline.ps1:191-192). Comme aucun champ n'est marqué "auto", auto_fields reste vide et diffuse reste $null.
Non confirmé par un essai : l'hypothèse n'a pas été testée (arrêt prescrit par la fiche). Essai qui la tranche : même Inspect après ajout des champs "auto".
5. Écarts avec le guide moddeurs (Docs\Modding\FullGuides\Creating_Asset_Mods.md, copie addon ModSources/Docs/Modding/Creating_Asset_Mods.md)
- Champs
"auto"absents : le guide (Creating_Asset_Mods.md:83) et le protocole (13_Protocole_Coiffure.md:198) demandent"mesh": "auto", "head": "auto", "cap_slots": "auto", "diffuse": "auto", "strands_opacity": "auto". Mon entrée JSON ne les contient pas (écart de saisie de ma part, pas un défaut du script démontré). Le JSON de référenceTools\mods\lpr_hair_pocolov.jsonn'en contient aucun non plus, à la différence de sonauto_fieldsmémorisé. - Étape de saisie non décrite : le guide ne dit pas quels champs saisir à la main pour une coiffure neuve (
archive,title,url,license,author,sex,thicken,cap_opacity) ; le message deNewMod.ps1renvoie àlpr_hair_pocolov.json. - Chemins 5.5 restants :
"backup": "D:/Game/LifePlay_Backup_5.5/mods/lpr_test_u7t7"(généré par NewMod) ; lesDocs\Migration\...cités par le protocole pointent surD:\Game\LifePlay_Backup_5.5\<lot>. - Code de sortie :
NewMod.ps1n'expose pas de code de sortie dans-Command; à relever avec-Fileau prochain essai. HairPipeline.ps1etTools\Roots.ps1ne sont pas conçus pour un message d'erreur explicite quand un champ"auto"manque : l'erreur sort sous forme deSplit-Pathnul, sans numéro de ligne.
6. Chaîne créée (pour le rangement ; rien supprimé)
Dans l'addon 5.8 :
D:\Game\LifePlay-Sandbox-5.8\ModSources\lpr_test_u7t7\:lpr_test_u7t7.uplugin,Module\lpr_test_u7t7.lpmod,Module\CREDITS.txt,Content\(contientContent\Hairs\_Work_Pocolov15\Hair_15.uassetetHead.uasset, écrits par l'import et remis en place au démontage).D:\Game\LifePlay-Sandbox-5.8\Tools\mods\lpr_test_u7t7.json(créé par NewMod ; entréehairsajoutée par moi).
Dans la sauvegarde 5.5 (créée par l'Inspect) :
D:\Game\LifePlay_Backup_5.5\mods\lpr_test_u7t7\Pocolov15\:import.json,norm\(hair.fbx et 9 textures),src\(extraction depocolov-hair-15.zip:source\ettextures\, plusPocolov Hair 15.zip.done).
Dans la copie 5.8 : aucun fichier créé ; Mods\ vide (0 entrées) après démontage ; aucun dossier Content\Modules\lpr_test_u7t7 ni Plugins\lpr_test_u7t7.
Non touché : lpr_hair_pocolov, lpr_anim_*, leurs archives, les scripts, les configs existantes, LifePlay_Build_5.8_U7d (non modifié), aucun commit.
7. Copie d'essai
Non prête. D:\Game\LifePlay_Build_5.8_U7d_T7 n'a pas été créé (étape d non atteinte, absent à la vérification).
8. Critère
Critère non atteint (archive lpr_test_u7t7-1.0-for-LifePlay-2026.10.2.0.zip absente, copie d'essai absente). Échec documenté ; reprise à décider par l'orchestrateur (ajout des champs "auto" puis Inspect, selon le guide, est la piste la plus probable).
9. Points à confirmer
- Code de sortie réel de
NewMod.ps1et deHairPipeline.ps1 -Step Inspect(non relevé). - Hypothèse § 4 (Split-Path nul sur
$h.diffuse) : à confirmer par un Inspect avec"auto". - Durée de l'Inspect complet (fin non horodatée dans le journal ; import UE 09:16:28 → 09:16:38).
10. Reprise (ordre de l'orchestrateur)
État : arrêt à l'étape d'application, avant BuildMod (écart « dépendances A VERIFIER »). Pas de BuildMod, pas de copie d'essai.
- Champs ajoutés à l'entrée Pocolov15 de
D:\Game\LifePlay-Sandbox-5.8\Tools\mods\lpr_test_u7t7.json:"mesh","head","cap_slots","diffuse","strands_opacity"="auto". Rien d'autre modifié. Le script a ensuite réécrit ces champs (valeurs ci-dessous) etauto_fields. - Inspect relancé (
-File, code 0 relevé dans%USERPROFILE%\AppData\Local\Temp\claude\D--Game-LifePlay-master-5-5\ab8918a1-261f-45b4-904a-678ecfce98f7\scratchpad\U7T16_reprise_inspect.log, ligneEXIT=0). Comparaison avecTools\hairs\HAIRS1.json(Pocolov15) :
| Champ | Reprise (rapport Inspect) | Référence HAIRS1 | Écart |
|---|---|---|---|
| mesh | /lpr_test_u7t7/Hairs/_Work_Pocolov15/Hair_15 |
.../_Work_Pocolov15/Hair_15 |
aucun |
| head | /lpr_test_u7t7/Hairs/_Work_Pocolov15/Head |
.../Head |
aucun |
| cap_slots | Hair_Base |
Hair_Base |
aucun |
| diffuse | tex01_Hair_01_Gray.png |
tex01_Hair_01_Gray.png |
aucun |
| strands_opacity | tex02_Hair_01A1.jpg |
tex02_Hair_01A1.jpg |
aucun |
- Apply lancé (
-Step Apply, journal...\scratchpad\U7T16_reprise_apply.log, code 0,EXIT=0). Résultat :Pocolov15 : OK, echelle X=1.194 Y=1.276, bornes IsValid=true, ... dependances A VERIFIER(D:\Game\LifePlay_Backup_5.5\mods\lpr_test_u7t7\rapport_Apply.txt). Éléments établis dans le journal :- LPHairFromStatic : coiffure placée, transfert de poids 9 749 / 4 541 sommets, 950 repoussés,
-DryRunpuis conversion ; fichier produitD:\Game\LifePlay-Sandbox-5.8\ModSources\lpr_test_u7t7\Module\Hairstyles\pocolov15.lphair. - HairMaterials.py :
HAIRMAT emplacement Hair_Base -> Pocolov15_Cap,Hair_01 -> Pocolov15_Strands, puisHAIRMAT dependances de Pocolov15 : ['/lpr_test_u7t7/Hairs/Pocolov15_Skeleton'] -> A VERIFIER. - BuildCollections : 13 collections, 14 051 chemins, 0 inconnu (écrites dans
D:\Game\LifePlay-master 5.8\Saved\Collections). - Écart : la référence HAIRS1 affiche
dependances OK. Le squelettePocolov15_Skeletonest un asset du mod lui-même (même dossier/lpr_test_u7t7/), donc la cause probable est un contrôle de chemin, non un manque, mais ce n'est pas établi. Essai qui tranche : lire la règleA VERIFIERdansTools\HairMaterials.pyet vérifier l'existence deContent\Hairs\_Work_Pocolov15/Pocolov15_Skeletondans l'assemblage du mod.
- LPHairFromStatic : coiffure placée, transfert de poids 9 749 / 4 541 sommets, 950 repoussés,
- BuildMod non lancé (arrêt sur écart non expliqué).
- Copie d'essai
D:\Game\LifePlay_Build_5.8_U7d_T7non créée.
11. Écarts à consigner (liste des bugs)
- Robustesse de
HairPipeline.ps1: un champ de coiffure omis (ici"auto"absents) provoqueNous ne pouvons pas lier l'argument au paramètre Path, car il s'agit d'une valeur nulle.àHairPipeline.ps1:215(Split-Path $h.diffuse), sans message expliquant le champ manquant. À corriger en message explicite (non corrigé ici). - Journal sans code de sortie :
NewMod.ps1lancé par&dans-Commandne rend pas$LASTEXITCODE; à lancer par-File. - Rangement à faire (décision orchestrateur) :
D:\Game\LifePlay-Sandbox-5.8\ModSources\lpr_test_u7t7\(y comprisContent\Hairs\_Work_Pocolov15\etModule\Hairstyles\pocolov15.lphair),D:\Game\LifePlay-Sandbox-5.8\Tools\mods\lpr_test_u7t7.json,D:\Game\LifePlay_Backup_5.5\mods\lpr_test_u7t7\,D:\Game\LifePlay-master 5.8\Saved\Collections\(13 fichiers, écrits par BuildCollections). Aucun n'a été supprimé.
12. Reprise 2 (ordre de l'orchestrateur) : BuildMod, contrôles, copie d'essai
Résultat : BuildMod réussi (code 0), archive conforme aux contrôles demandés, copie d'essai prête. Réserve : dépendances A VERIFIER (Apply) reste non tranché (§ 12.4).
12.1 BuildMod (étape c)
- Commande :
pwsh -NoProfile -File "D:\Game\LifePlay-Sandbox-5.8\Tools\BuildMod.ps1" -Name lpr_test_u7t7 -GameRoot "D:\Game\LifePlay-master 5.8"(arrière-plan). Code 0 (EXIT=0, journal...\scratchpad\U7T16_reprise2_buildmod.log). Durée : 11:20:37 → 11:20:57 (20 s). - Cuisson :
-run=Cook -dlcname=lpr_test_u7t7 -basedonreleaseversion=2026.10.2.0, moteur 5.8.3. 6 paquet(s) cuit(s) (Cooked packages 6 Packages Remain 0 Total 6),LogInit: Success - 0 error(s), 0 warning(s), 0 ligne d'erreur dans le journalD:\Game\LifePlay-master 5.8\Saved\Logs\portage\mods\lpr_test_u7t7_20261009_112038.log. - Conteneur : 8 fichiers, tous sous
Mods/lpr_test_u7t7/(contrôle du script). - Archive :
D:\Game\LifePlay_Publication\Mods\lpr_test_u7t7-1.0-for-LifePlay-2026.10.2.0.zip, 302 984 octets, 8 fichiers, SHA-256960735B6BC0A4993050809B80673A71AA64DB7076074C8A124A0962B2831AA30(sortie du script).
12.2 Contrôles de l'archive (extraite dans ...\scratchpad\U7T16_archive_r2, hors projet)
lpr_test_u7t7.lpmod(Content/Modules) :MODULE_PACKAGED: 2026-10-09etMODULE_GAME_VERSION: 2026.10.2.0.lpr_test_u7t7.uplugin(Mods) :"EngineVersion": "5.8.3".- Formats : version du TOC (
lpr_test_u7t7LifePlay-Windows.utoc, octet 16) = 8, identique à la référenceReleases\2026.10.2.0\Windows\LifePlay-Windows.utoc(octet 16 = 8). La consigne « formats 5/24 » n'est pas interprétable de façon sûre ici : incertain, non vérifié. - Contenu du conteneur (noms trouvés dans
.ucaset.utoc) :Pocolov15,Pocolov15_Skeleton,Pocolov15_Cap,Pocolov15_Strands,Pocolov15_Diffuse,Pocolov15_StrandsOpacity: 6 noms, pour 6 paquets cuits (estimé : la liste nominative des 6 paquets n'est pas imprimée par le journal ; seulsPocolov15_Diffuseet_StrandsOpacityy figurent explicitement, lignesLogTexture). - Réponse à la question de l'orchestrateur :
Pocolov15_CapetPocolov15_Strandssont dans le conteneur. Le contrôleA VERIFIERne vient donc pas d'un paquet absent. Cause du flag non établie (§ 12.4).
12.3 Copie d'essai (étape d)
- Vérification préalable :
D:\Game\LifePlay_Build_5.8_U7d_T7absent ;LifePlay.exeest sousD:\Game\LifePlay_Build_5.8_U7d\Windows\(contenu du jeu sousWindows\LifePlay\), donc l'archive s'extrait dansWindows\. - Robocopy :
robocopy D:\Game\LifePlay_Build_5.8_U7d D:\Game\LifePlay_Build_5.8_U7d_T7 /E /XD Saved(journal...\scratchpad\U7T16_reprise2_robocopy.log). Code 1 (fichiers copiés, aucun échec) ; 2 250 fichiers, 2,432 Go, 0 échec, 0:00:23. - Extraction :
7z x -y -o"D:\Game\LifePlay_Build_5.8_U7d_T7\Windows" D:\Game\LifePlay_Publication\Mods\lpr_test_u7t7-1.0-for-LifePlay-2026.10.2.0.zip: code 0, 8 fichiers. - Vérifications :
Windows\LifePlay.exeOK ;Windows\LifePlay\Mods\lpr_test_u7t7OK (dontContent\Paks\Windows\lpr_test_u7t7LifePlay-Windows.utoc) ;Windows\LifePlay\Content\Modules\lpr_test_u7t7\lpr_test_u7t7.lpmodOK. Mods\de la copie 5.8 (D:\Game\LifePlay-master 5.8\Mods) : 0 entrée après l'essai.- Le jeu n'a pas été lancé, l'éditeur n'a pas été ouvert,
EditModnon lancé.
12.4 Point ouvert
HAIRMAT dependances de Pocolov15 : ['/lpr_test_u7t7/Hairs/Pocolov15_Skeleton'] -> A VERIFIERreste inexpliqué : les matériaux sont dans le conteneur, la liste de contrôle ne les cite pas. Essai qui tranche : lire la règle deTools\HairMaterials.py(dépendances) et comparer le journal delpr_hair_pocolov(D:\Game\LifePlay_Backup_5.5\mods\lpr_hair_pocolov\rapport_Apply.txt, OK pour 5 coiffures).
12.5 Liste de rangement (rien supprimé)
D:\Game\LifePlay-Sandbox-5.8\ModSources\lpr_test_u7t7\;D:\Game\LifePlay-Sandbox-5.8\Tools\mods\lpr_test_u7t7.jsonD:\Game\LifePlay_Backup_5.5\mods\lpr_test_u7t7\(import, norm, src, rapports)D:\Game\LifePlay-master 5.8\Saved\Collections\(13 fichiers, BuildCollections),D:\Game\LifePlay-master 5.8\Saved\Logs\portage\mods\lpr_test_u7t7_20261009_112038.logD:\Game\LifePlay_Publication\Mods\lpr_test_u7t7-1.0-for-LifePlay-2026.10.2.0.zipD:\Game\LifePlay_Build_5.8_U7d_T7\(copie d'essai, ~2,4 Go, prête)- Scratchpad (hors projet) :
U7T16_archive_r2\, journauxU7T16_*.