LifePlay-Revival/Docs/Migration/etat/U58/U7/U7-T16-T7.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

16 KiB
Raw Blame History

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.lphair existe (utilisée par lpr_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.zip pré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)

  1. 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érence Tools\mods\lpr_hair_pocolov.json n'en contient aucun non plus, à la différence de son auto_fields mémorisé.
  2. É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 de NewMod.ps1 renvoie à lpr_hair_pocolov.json.
  3. Chemins 5.5 restants : "backup": "D:/Game/LifePlay_Backup_5.5/mods/lpr_test_u7t7" (généré par NewMod) ; les Docs\Migration\... cités par le protocole pointent sur D:\Game\LifePlay_Backup_5.5\<lot>.
  4. Code de sortie : NewMod.ps1 n'expose pas de code de sortie dans -Command ; à relever avec -File au prochain essai.
  5. HairPipeline.ps1 et Tools\Roots.ps1 ne sont pas conçus pour un message d'erreur explicite quand un champ "auto" manque : l'erreur sort sous forme de Split-Path nul, 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\ (contient Content\Hairs\_Work_Pocolov15\Hair_15.uasset et Head.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ée hairs ajouté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 de pocolov-hair-15.zip : source\ et textures\, plus Pocolov 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.ps1 et de HairPipeline.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.

  1. 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) et auto_fields.
  2. 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, ligne EXIT=0). Comparaison avec Tools\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
  1. 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, -DryRun puis conversion ; fichier produit D:\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, puis HAIRMAT 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 squelette Pocolov15_Skeleton est 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ègle A VERIFIER dans Tools\HairMaterials.py et vérifier l'existence de Content\Hairs\_Work_Pocolov15 / Pocolov15_Skeleton dans l'assemblage du mod.
  2. BuildMod non lancé (arrêt sur écart non expliqué).
  3. Copie d'essai D:\Game\LifePlay_Build_5.8_U7d_T7 non créée.

11. Écarts à consigner (liste des bugs)

  • Robustesse de HairPipeline.ps1 : un champ de coiffure omis (ici "auto" absents) provoque Nous 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.ps1 lancé par & dans -Command ne rend pas $LASTEXITCODE ; à lancer par -File.
  • Rangement à faire (décision orchestrateur) : D:\Game\LifePlay-Sandbox-5.8\ModSources\lpr_test_u7t7\ (y compris Content\Hairs\_Work_Pocolov15\ et Module\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 journal D:\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-256 960735B6BC0A4993050809B80673A71AA64DB7076074C8A124A0962B2831AA30 (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-09 et MODULE_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érence Releases\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 .ucas et .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 ; seuls Pocolov15_Diffuse et _StrandsOpacity y figurent explicitement, lignes LogTexture).
  • Réponse à la question de l'orchestrateur : Pocolov15_Cap et Pocolov15_Strands sont dans le conteneur. Le contrôle A VERIFIER ne 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_T7 absent ; LifePlay.exe est sous D:\Game\LifePlay_Build_5.8_U7d\Windows\ (contenu du jeu sous Windows\LifePlay\), donc l'archive s'extrait dans Windows\.
  • 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.exe OK ; Windows\LifePlay\Mods\lpr_test_u7t7 OK (dont Content\Paks\Windows\lpr_test_u7t7LifePlay-Windows.utoc) ; Windows\LifePlay\Content\Modules\lpr_test_u7t7\lpr_test_u7t7.lpmod OK.
  • 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, EditMod non lancé.

12.4 Point ouvert

  • HAIRMAT dependances de Pocolov15 : ['/lpr_test_u7t7/Hairs/Pocolov15_Skeleton'] -> A VERIFIER reste inexpliqué : les matériaux sont dans le conteneur, la liste de contrôle ne les cite pas. Essai qui tranche : lire la règle de Tools\HairMaterials.py (dépendances) et comparer le journal de lpr_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.json
  • D:\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.log
  • D:\Game\LifePlay_Publication\Mods\lpr_test_u7t7-1.0-for-LifePlay-2026.10.2.0.zip
  • D:\Game\LifePlay_Build_5.8_U7d_T7\ (copie d'essai, ~2,4 Go, prête)
  • Scratchpad (hors projet) : U7T16_archive_r2\, journaux U7T16_*.