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

90 lines
11 KiB
Markdown

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é.