LifePlay-Revival/Docs/Migration/etat/U58/U7b/U7b-VAL.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

11 KiB

Fiche U7b-VAL — Niveau N1 — Modèle prévu lp-validator | utilisé claude-sonnet-5-5 — Agent lp-validator — Skills lp-validate, sk-recount, sk-protocol (debug-verification)

U7b-VAL : validation du lot U7b avant commit

Date : 2026-10-09. Rien modifié dans les dépôts, aucun UE lancé, aucun commit. Seuls fichiers créés hors livrable : essais dans le bloc-notes de session (scratchpad\val\ : faux UnrealEditor.exe, stub unreal.py).

Verdict global : PASS (avec 5 écarts de forme, aucun bloquant)

Contrôle Verdict Résumé
V1a Chaîne cmd /c du pilote PASS ligne reçue par un faux exécutable = ligne observée en A2, à l'octet
V1b Usage interactif inchangé PASS ancien et nouveau .bat : lignes identiques à l'octet (sans argument, &, cmd /c)
V1c Garde-fou RetargetPack PASS (essai avec stub, pas en éditeur réel) placé l.436, avant toute suppression (l.265) ; 5.8/5.6/illisible refusés, 5.5 passe
V1d Fins de ligne / encodage PASS .ps1 et .py en LF, .bat en CRLF, sans BOM, comme à U7b-avant
V2 Poses PASS 28 _pose changées, 28 _anim identiques, aucun autre fichier Content touché ; poses NON suivies par git
V3 CompileAllBlueprints PASS avertissements de pose 56 -> 0 ; seule erreur : HyperAIStudio
V4 T6/A2 PASS géométrie 20/20 lignes, JSON 10/10, dimensions 20/20
V5 État des dépôts PASS (descriptif) voir § V5 ; 3 fichiers d'une autre session signalés

V1 Addon D:\Game\LifePlay-Sandbox-5.8 (tag U7b-avant)

git diff --stat U7b-avant : exactement 3 fichiers, 38 insertions, 3 suppressions : Tools/anim/AnimPipeline.ps1 (+9/-2), Tools/anim/RetargetPack.py (+23), Tools/debug/LifePlay_interaction_sandbox.bat (+6/-1). git status --short : les mêmes 3 M, rien d'indexé, rien d'untracked. HEAD d1efdd1. Diff lu en entier.

V1a Chaîne de commande (établi par essai)

  • AnimPipeline.ps1 : $sbArgs = '-RenderOffScreen -ExecCmds="r.SetRes 1600x900w"' ; Start-Process -FilePath 'cmd.exe' -ArgumentList ('/c ""{0}" {1}"' -f $bat, $sbArgs). Même chaîne de format que scratchpad\t6_a2.ps1 (A2) : ('/c ""{0}" {1}"' -f $bat, $Extra).
  • Raisonnement : la chaîne contient 6 guillemets, donc la règle « deux guillemets exactement » de cmd /c ne s'applique pas ; cmd retire le premier et le dernier, il reste "<bat>" -RenderOffScreen -ExecCmds="r.SetRes 1600x900w".
  • Essai sans moteur (scratchpad\val\t.ps1) : le script extrait du vrai AnimPipeline.ps1 les lignes $sbArgs et Start-Process et les exécute, avec le vrai .bat de l'addon et un faux UnrealEditor.exe (via LP_ENGINE_ROOT, LP_GAMEROOT) qui consigne Environment.CommandLine. Reçu : … -game -windowed -ResX=1600 -ResY=900 "-ini:Engine:[/Script/EngineSettings.GameMapsSettings]:GameInstanceClass=/Script/Engine.GameInstance" -RenderOffScreen -ExecCmds="r.SetRes 1600x900w".
  • Identique à la ligne reçue avec la forme A2 (essai en même temps) et à la ligne observée en A2 (T6\A2_pack\LifePlay.log:495, fin : -RenderOffScreen -ExecCmds="r.SetRes 1600x900w" ; guillemets du -ini: retirés par le journal, comme pour Command Line:).
  • Non rejoué : le pilote complet AnimPipeline.ps1 avec le vrai moteur ; l'essai A2 a utilisé t6_a2.ps1, copie du § 9 de U7b-T4. Le pilote lui-même n'a pas fait tourner une tournée réelle (estimé équivalent, preuve ci-dessus).

V1b Usage interactif (établi par essai)

Même essai, ancien .bat (git show U7b-avant:…) et nouveau : sans argument, lancés par & et par cmd /c "<bat>" (double-clic), la ligne reçue se termine par …GameInstance" sans espace finale, identique dans les trois cas. set "EXTRA=%*" puis if defined EXTRA set "EXTRA= %EXTRA%" : rien d'ajouté sans argument.

V1c Garde-fou RetargetPack.py (établi par lecture + essai avec stub)

  • refuse_unported_engine() définie l.71, appelée l.436 de run(), après load_config (aucun unreal. dans l.81-112 : lecture de JSON seulement). Premières suppressions/créations d'asset : l.265 delete_asset, l.270 create_asset, l.287-288, l.333, l.417 duplicate_and_retarget. Le garde précède aussi la bifurcation mode == "rigs".
  • Sortie en échec : Refusal attrapée par main() (l.476-478) : RETARGET echec : RetargetPack : API IK Retargeter 5.8 non portee … aucun asset modifie, puis quit_editor.
  • Essai (scratchpad\val\g.py, stub unreal, python -I -B, vrai RetargetPack.py) : versions 5.8.3-x, 5.6.0-y, garbage : refus, appels de suppression/création/chargement d'asset : liste vide ; version 5.5.4-z : le garde laisse passer (le stub échoue plus loin, attendu). Non fait : essai dans l'éditeur 5.8 réel (le moteur n'est pas lancé).
  • Aucun portage appliqué : le diff n'ajoute que le garde, import re et les commentaires.

V1d Fins de ligne (commande python -c … count(b'\r\n'))

Fichier U7b-avant actuel BOM
AnimPipeline.ps1 CRLF 0, LF 568 CRLF 0, LF 575 non
RetargetPack.py CRLF 0, LF 463 CRLF 0, LF 486 non
LifePlay_interaction_sandbox.bat CRLF 10, LF seul 0 CRLF 15, LF seul 0 non
Le .bat reste 100 % CRLF.

V2 Poses (établi)

Commande : script Python hashlib sur D:\Game\LifePlay_Backup_5.5\U7b\manifest.csv (56 lignes = 28 _anim + 28 _pose, tous Existed=True).

  • 28/28 _anim : MD5 actuel = manifeste. 28/28 _pose : MD5 différent du manifeste. L'instantané Backup_5.5\U7b\Content contient les 28 _pose d'origine conformes au manifeste (28/28).
  • Dossier Poses : 56 fichiers (28 + 28). Dates des _pose : 14:04:55 à 14:04:57 (--all).
  • find Content -type f -newermt "2026-10-09 12:41:15" (heure du tag U7b-avant de la copie 5.8) : 28 fichiers, tous des _pose.uasset de ce dossier. git status --short -- Content : vide.
  • Contrôle ponctuel contre le tableau de U7b-T5 § 11.2 : 3 MD5 relus (Manny_calf_l_pose BF334423…, Quinn_upperarm_r_pose B971C765…, Manny_hand_r_pose C0E86749…) conformes.
  • Suivi git : non. git ls-files Content/FreeAnimationsPack = 0 ; git check-ignore -v : .gitignore:59:/Content/FreeAnimationsPack/ (ligne présente dans HEAD:.gitignore, pas dans la modification en cours). Conséquence : ces 28 poses ne peuvent pas figurer dans un commit ; seul le dossier Backup_5.5\U7b (hors dépôt) permet le retour arrière.

V3 Journaux CompileAllBlueprints (établi, grep -c)

Dossier D:\Game\LifePlay-master 5.8\Saved\Logs\portage\.

avant …135244.log après …140525.log
lignes n'est pas à jour avec son animation source 56 (grep -c) 0
lignes Warning: au total 56 (28 LogAnimation + 28 rappels LogInit) 0
lignes Error: 2 (LogHyperAIStudioAutomation + son rappel LogInit) 2 (idem)
bilan commandlet 0 errors and 0 warnings and 0 blueprints that failed to load idem
erreur/avertissement de Blueprint (LogBlueprint, [Compiler]) 0 0
Les 13 lignes contenant « pose » après sont des Display: Component Pose was visible but ignored (pas des avertissements). Les 2 lignes d'erreur sont une seule erreur (HyperAIStudio, connue) répétée par le rappel LogInit. Un journal intermédiaire …135821.log (27 lignes, après essai d'une seule pose) existe et n'est pas utilisé.

V4 T6/A2 (établi)

  • Géométrie : script Python (regex VIGNETTE|PLANCHE, octets retirés, chemin réduit au nom de fichier) entre D:\Game\LifePlay_Backup_5.5\U4-REF55\E4_freeanims.log et T6\A2_pack\LifePlay.log : 20 lignes contre 20 (10 VIGNETTE + 10 PLANCHE), listes triées égales : identiques. Exemple AS_AirKiss.png (carre 718 px a 649,151) des deux côtés.
  • JSON des planches : 10/10 identiques (sha256) entre U4-REF55\freeanims\sandbox et T6\A2_pack\sandbox_out. Dimensions (PNG, JPG lues dans l'en-tête, python -I) : 20/20 identiques ; vignette AS_RightLegKick2 512x512, planche 3328x256.
  • Journal A2 : LifePlay.log:495 ligne de commande avec -RenderOffScreen -ExecCmds="r.SetRes 1600x900w" ; :2173 r.SetRes = "1600x900w" ; Assertion failed : 0 ; out of bounds : 0.
  • Le résultat FAIL de T6 § 5-7 (essai -RenderOffScreen seul, cadrage 0,555) est remplacé par A2 (même fichier, § A2). C'est la combinaison avec -ExecCmds qui est validée.
  • Non vérifié : pixels (non critère, T1 § 3) ; absence de fenêtre pendant PACK2 (non ré-échantillonnée, aveu de T6).

V5 État des dépôts (établi)

  • Copie 5.8 D:\Game\LifePlay-master 5.8 (branche ue5.8, HEAD 0ee5a76) : M .gitignore, M Docs/Migration/29_Projet_Stabilisation_V2.md, M LifePlay.uproject. Rien d'autre (poses ignorées par git). Ces 3 fichiers sont d'une autre session (HyperAIStudio : bloc .gitignore .hyperai/runtime/, +105 lignes de Toolsets dans .uproject, +52/-3 dans le doc 29) ; non jugés, hors U7b.
  • Addon D:\Game\LifePlay-Sandbox-5.8 (branche ue5.8, HEAD d1efdd1) : les 3 M de V1, rien d'indexé. Tags U7b-avant présents (addon et copie 5.8).
  • Dépôt D:\Game\LifePlay-master 5.5 (branche main) : ?? .txt (voir écart 1).
  • Ordre de commit à respecter (mémoire projet) : addon d'abord, puis pin dans le jeu ; les poses n'entrent dans aucun commit.

Écarts (aucun bloquant)

  1. Fichier parasite D:\Game\LifePlay-master 5.5\.txt (26 octets, 14:17, contenu vignettes planches quitter) : produit par la ligne cassée du script de T6/A2 (incident 1). T6-VAL § incidents dit « non trouvé, incertain » : il existe. Il apparaît en ?? .txt dans git status de la copie 5.5. Non supprimé (règle de retrait) ; à déplacer vers Backup_5.5\U7b ou ne pas commiter, décision orchestrateur.
  2. T6-VAL cite en preuves T6\t6_a2.ps1 et a2_v1_stdout.txt : absents de etat\U58\U7b\T6\ (ls). t6_a2.ps1 existe dans le bloc-notes de session (relu, c'est lui qui a servi de comparaison en V1a) ; a2_v1_stdout.txt introuvable. À copier avant clôture si la trace est voulue (t6_a2.ps1 surtout).
  3. T6-VAL § 1 (l.9) liste Tools/anim/* et le .bat comme modifiés dans « copie 5.8 » : faux, Tools/anim n'existe pas dans cette copie (ces fichiers sont dans l'addon, V5). Erreur de rapport sans effet.
  4. T6-VAL signale lui-même « 20 clips » annoncés contre 10 en référence ; recompté : 10 clips (20 lignes), conforme à ce que dit T6.
  5. DLL addon plus ancienne que LPHairFromStaticMeshCommandlet.cpp (T6 § 1) : non examiné ici (hors U7b), reste incertain.

Non rejoué

Pilote AnimPipeline.ps1 de bout en bout sous moteur ; garde-fou dans l'éditeur 5.8 réel ; aucune compilation (aucun C++ modifié) ; LPTestStringCompat (sans objet, aucun code C++/chaîne modifié).

Suite : orchestrateur doit décider des écarts 1 et 2, puis commiter l'addon (3 fichiers) et épingler le pin dans le jeu, état : validation faite, rien commité.