13 sources retirees de LifePlayEditorTools (LPAnimEval/Twist/Catalog/Identify, LPAnimChecks, LPAnimMethodSelect, LPHairFromStaticMesh) ; LifePlayEditorTools.Build.cs ne depend plus de LPAnimMeasure. Pin addon 97c0d13. Validation : DC2-BUILD avec et sans addon code 0, DC2-VAL PASS (resultats identiques a SB2-REF, jeu -game sans addon). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
74 lines
12 KiB
Markdown
74 lines
12 KiB
Markdown
# DC2-VAL — Validation automatique du lot DC2 (DC2-T3)
|
||
|
||
**Fiche DC2-T3 — Modèle prévu sonnet | utilisé sonnet**
|
||
|
||
- Date : 2026-10-07. Build testé : celui de `DC2-BUILD.md` (code 0, non recompilé). Lot DC2 : commandlets de mods (LPAnimEval, LPAnimTwist, LPAnimCatalog, LPAnimIdentify, LPHairFromStaticMesh) déplacés dans le module éditeur `LPModTools` de l'addon.
|
||
- Journaux copiés dans `D:\Game\LifePlay_Backup_5.5\DC2-VAL\` : `E1_*_console.txt`, `E2_*_console.txt`, `E2_*_result.txt`, `E2_*_sandbox.log`, `E3_console.txt` + `E3_out\`, `DC2_LPAnimTwist_*.log/.txt`, `E4_*_console.txt`, `DC2_LPAnimCatalog_*.log`, `DC2_LPHairFromStaticMesh_*.log`, `E5a_console.txt`, `DC2_LPAnimEval_20261007-190750.log`, `E5b_game_noaddon.log`, `AP7_LPAnim*.log` (le dossier contient aussi d'anciens `AP7_*` copiés par un joker trop large ; seuls les `AP7_LPAnimIdentify_20261007-183742/183801` et `AP7_LPAnimEval_20261007-183828/185814` sont de cette validation).
|
||
- Méthode : celle de `DC1-VAL.md` / `SB4-VAL.md`, tournées par `AnimPipeline.ps1` (pwsh 7), aucun éditeur avant chaque lancement. Aucune commande git hors `status`, aucun source/script/ini modifié, aucune recompilation.
|
||
|
||
## Tableau des essais
|
||
|
||
| Essai | Attendu | Constaté (lignes recopiées) | Verdict |
|
||
|---|---|---|---|
|
||
| E1 quaternius `-From 2 -To 2` | code 0, verdict ok, fichiers = réf | code 0, 14 s. `[ok] identification.json valide : profil ue4_mannequin, methode ue4`, `verdict : ok (14 s)`. Journal : `LogLPAnimMeasure: PATHS racine addon D:/Game/LifePlay-Sandbox`. `identification.json` SHA-256 identique à SB2-REF (310CCE61A3B7). `etapes\2_identification.json` : SHA différent (0AF3F335AAB3 réf / BF81B7520808 nouveau), JSON égal une fois `debut`/`fin`/`duree_s` ignorés. | PASS |
|
||
| E1 freeanims | idem | code 0, 13 s. `profil ue5_mannequin, methode ue5`, `verdict : ok`. `identification.json` identique à la réf (557013ADCB21). `etapes\2_identification.json` : SHA différent (E282521BBA35 / 345D5EBB5A56), JSON égal hors dates. | PASS |
|
||
| E2 quaternius `-From 5 -To 5` | code 0, `avertissement`, 8 avertissements, 44 fichiers | code 0, 1136 s, `verdict : avertissement (1136 s)`. Journal éditeur : `LogLPAnimMeasure: PATHS racine addon D:/Game/LifePlay-Sandbox` ; `TOURNEE debut 43 clips, 129 etapes` ; `Ouvert : lps_asset_integration (declencheur, non memorise)` ; `TOURNEE debut 43 clips, 2080 etapes` ; `TOURNEE fermeture demandee`. `Open=lps_couple` avant et après. Comparaison : voir ci-dessous. | PASS |
|
||
| E2 freeanims | code 0, `ok`, 0 avertissement, 73 fichiers | code 0, 435 s, `verdict : ok (435 s)`. Journal : `PATHS racine addon D:/Game/LifePlay-Sandbox` ; `TOURNEE debut 10 clips, 30 etapes` ; `Ouvert : lps_asset_integration (declencheur, non memorise)` ; `TOURNEE debut 10 clips, 697 etapes` ; `TOURNEE fermeture demandee`. `Open=lps_couple` après. | PASS |
|
||
| E3 LPAnimTwist à blanc | code 0, rapport valide | Arguments reconstitués avec certitude depuis les commandes journalisées par le pilote (`etapes\5_evaluation.json`, ligne LPAnimTwist) : `-Methode=ue4 -ClipDir=/Game/Quaternius/UAL -RefClip=A_TPose -BodyClipDir=/Game/Quaternius/UAL -Templates=Bridget:/Game/Heavy/Daz/Anims/Idle_F_Daz,Michael:/Game/Heavy/Daz/Anims/idle_Daz -Bodies=Bridget:B_,Michael:M_ -Out=...` + `-DryRun`. **Écart volontaire** : `-Out` pointé vers `D:/Game/LifePlay_Backup_5.5/DC2-VAL/E3_out` (le commandlet écrit `rapport_torsion.json` même à blanc ; cela aurait écrasé un fichier de résultat comparé à la réf). Code 0, 23 s. `LogLPAnimTwist: Display: TORSION Bridget profil genesis8 : 6 paires Bend / Twist` ; lignes `TORSION B_Walk_Loop 41 cles, torsion deplacee 0.0 deg, conservation 0.00000 deg 0.00000 cm (essai)` ; `TORSION resultat VALIDE : 0 echec(s)` ; `rapport_torsion.json` : `essai_a_blanc=true`, `valide=true`. Journal : `PATHS racine addon D:/Game/LifePlay-Sandbox`. `Saved\AnimPipeline\quaternius\rapport_torsion.json` inchangé (SHA D7A3BF92E174 = réf). | PASS |
|
||
| E4 LPAnimCatalog (`-DryRun` seul) | trouvé (pas « introuvable ») | `LogInit: Executing Class /Script/LPModTools.LPAnimCatalogCommandlet`. Code 0 : **pas d'erreur d'argument** — le commandlet a des valeurs par défaut (pack quaternius) et a écrit `LogLPAnimCatalog: Warning: CATALOGUE fiches 42 echecs 0 -> .../Saved/AnimPipeline/quaternius/fiches_calculees.json` (voir anomalie 1). Aucun asset UE écrit. | PASS (trouvé) — écriture signalée |
|
||
| E4 LPHairFromStaticMesh (`-DryRun` seul) | trouvé, erreur d'argument | `LogInit: Executing Class /Script/LPModTools.LPHairFromStaticMeshCommandlet` puis `LogLPHairFromStatic: Error: Usage : -Static=<StaticMesh> -FitHead=<StaticMesh> -Out=</Game/...> [-Body=] [-RefHair=] [-Bone=head] [-Scale=] [-OffsetZ=] [-OffsetY=] [-DryRun]`, `result 1`. Aucune écriture. | PASS |
|
||
| E5a jeu sans addon, `LPAnimEval` | commandlet introuvable | Code 1 : `LogInit: Error: LPAnimEvalCommandlet looked like a commandlet, but we could not find the class.` | PASS |
|
||
| E5b jeu `-game` sans addon (120 s) | LPAnimCore monté, LPSandbox absent, carte chargée | `LogPluginManager: Mounting Project plugin McpAutomationBridge` / `LPAnimCore` / `ModdingExtra` / `StreetMap` (aucune ligne LPSandbox ; aucune ligne `AdditionalPluginDirectory` ni refus d'aucune sorte dans ce journal ; le projet reste lancé sans message d'erreur, `LifePlay.uproject` référence toujours le plugin LPSandbox et le répertoire `../LifePlay-Sandbox/Plugins`). `LogLoad: LoadMap: /Game/Scenes/CentralLondon?Name=Player` puis `Took 0.790986 seconds to LoadMap(/Game/Scenes/CentralLondon)`. Seul `Error` : `LogPlayerController: Error: InputMode:UIOnly - Attempting to focus Non-Focusable widget SObjectWidget [Widget.cpp(968)]!` (UI du menu, voir anomalie 3). Aucun Fatal/Ensure. Pas de ligne `Coiffures : ... introuvable` (l'Error Coiffures connu est propre à la sandbox ; ici : `Coiffures : base 126 entree(s) ... table de 126 entree(s), 89 morph(s)`). Processus arrêté (`Stop-Process`). | PASS |
|
||
| E6 état final | ini standard, 0 éditeur, addon en place | `Saved\sandbox_mods.ini` : `Open=lps_couple` (3 modules activés, ordre standard) ; 0 `UnrealEditor` ; `Test-Path D:\Game\LifePlay-Sandbox\Plugins\LPSandbox\LPSandbox.uplugin` = True ; `LifePlay-Sandbox.__DC2_absent` n'existe plus. | PASS |
|
||
|
||
## Détail E2 : comparaison complète contre `SB2-REF\<pack>\`
|
||
|
||
Règle DC1-VAL/SB4-VAL : SHA-256 de chaque fichier commun ; exclus : `etapes\5_evaluation.json` (JSON sur verdict + avertissements), `etat.json`, ligne « Généré le » de `rapport.html`, images freeanims (les 20 connues). Le dossier `precedent_*` est inclus dans le décompte (comme aux lots précédents).
|
||
|
||
### quaternius : 44 fichiers comparés (liste 44 / 44 identique)
|
||
- 40 fichiers au SHA-256 identique. Seuls différents : `etat.json` (`fin`/`maj` uniquement), `rapport.html` (seule ligne : « Généré le » 07/10/2026 12:10:18 → 18:38:49), `etapes\5_evaluation.json` (verdict `avertissement` des deux côtés ; 8 avertissements, listes égales en JSON ; durée 1136 s = 1136 s) et `etapes\2_identification.json` (réécrit par E1, dates seules).
|
||
- Tous les `.json`/`.csv`/`.txt` de données (`rapport.json`, `eval_*.csv`, `controles_*.csv`, `retarget_pose_*.txt`, `rapport_torsion.json`, `fiches_calculees.json`...) identiques.
|
||
|
||
### freeanims : 73 fichiers comparés (liste 73 / 73 identique)
|
||
- 49 fichiers identiques. 24 différents : les 4 fichiers exclus ci-dessus (`etat.json`, `rapport.html` « Généré le » 12:31:18 → 18:58:36, `etapes\5_evaluation.json` : verdict `ok`, 0 avertissement des deux côtés, durée 435 s = 435 s, `etapes\2_identification.json` dates) et **20 images**, exactement les 20 connues (10 planches `.jpg` + 10 vignettes `.png` : AirKiss, AttackInLevitation2, ChillDriving, ComboHands, EatingOnParty, FlyingUp, GoForward, Rest, RightLegKick2, Talk), écarts de taille inférieurs à 0,3 % (ex. AS_AirKiss.png 261470 → 261276 ; AS_Talk.png 260083 → 259267).
|
||
- 73 − 4 − 20 = 49 fichiers de données identiques.
|
||
|
||
## Anomalies
|
||
|
||
1. **E4 LPAnimCatalog sans argument n'échoue pas** : le commandlet a des valeurs par défaut (pack quaternius) et, même avec `-DryRun` (qui ne concerne pas ce commandlet), il a réécrit `Saved\AnimPipeline\quaternius\fiches_calculees.json` (fichier de résultat, pas un asset UE). Seule différence avec la réf : chemin `livraison` en absolu au lieu de relatif (`D:/Game/...` vs `../../../../../../LifePlay-master 5.5/...`). J'ai restauré le fichier par copie depuis `SB2-REF\quaternius\fiches_calculees.json` (il était identique à la réf juste avant E4, cf. E2) ; SHA vérifié après copie (5DBBA632FAF3). Comportement hérité du commandlet d'origine, non lié au déplacement (le code est identique octet pour octet).
|
||
2. E3 : `-Out` redirigé hors de `Saved\AnimPipeline` (voir tableau) ; les 204 avertissements du résumé RunCommandlet sont les lignes `TORSION` journalisées en Warning/Display, pas des erreurs.
|
||
3. E5b : `LogPlayerController: Error: InputMode:UIOnly...` : non rencontré dans les journaux de la sandbox (autre scène), vraisemblablement propre au menu du jeu ; non analysé plus avant (hors périmètre DC2). Pas de ligne `AdditionalPluginDirectory ... not found` dans le journal `-game` (contrairement au journal de build DC2-BUILD) : l'absence de l'addon est silencieuse au runtime.
|
||
4. E5a et E5b ont été lancés dans deux séquences de renommage distinctes (l'addon avait été remis en place entre les deux par le `finally`, puis renommé de nouveau pour E5b) ; vérification `Test-Path ...LPSandbox.uplugin` = True après chacune.
|
||
5. Les chemins `Tools/anim` : l'addon n'a pas de `Tools\anim` (Test-Path = False) ; les commandlets (Identify lit `profiles`, Eval/Twist lisent `methodes`) ont fonctionné en repli sur le jeu. Le journal ne trace que `PATHS racine addon D:/Game/LifePlay-Sandbox`, pas le dossier `Tools/anim` retenu ; le repli est prouvé indirectement par le succès de E1/E2/E3 et l'identité des résultats.
|
||
6. Éditeur plantant à la fermeture : non observé.
|
||
|
||
## État final (E6)
|
||
|
||
- `Saved\sandbox_mods.ini` : `[Mods] Order=lps_couple,lps_interaction,lps_asset_integration`, `Open=lps_couple`, `[Enabled]` les trois à `true`.
|
||
- `UnrealEditor` : 0 processus.
|
||
- `git -C D:\Game\LifePlay-Sandbox status --short` (changements DC2 non commités, attendu) :
|
||
```
|
||
M Plugins/LPSandbox/LPSandbox.uplugin
|
||
M Plugins/LPSandbox/Source/LPAnimMeasure/LPAnimMeasure.Build.cs
|
||
M Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp
|
||
M Plugins/LPSandbox/Source/LPAnimMeasure/LPSkeletonProfile.cpp
|
||
M Plugins/LPSandbox/Source/LPSandbox/LPSandboxConfig.cpp
|
||
?? Plugins/LPSandbox/Source/LPAnimMeasure/LPAnimMeasurePaths.cpp
|
||
?? Plugins/LPSandbox/Source/LPAnimMeasure/LPAnimMeasurePaths.h
|
||
?? Plugins/LPSandbox/Source/LPModTools/
|
||
```
|
||
- Addon en place : `LifePlay-Sandbox.__DC2_absent` absent, `LPSandbox.uplugin` présent.
|
||
|
||
## Verdict
|
||
|
||
**PASS** (partie automatique) : E1 (identification identique à la réf), E2 (quaternius `avertissement` 8 avertissements, 44 fichiers ; freeanims `ok`, 73 fichiers ; données identiques, seules différences dates, « Généré le » et les 20 images non déterministes ; `Open=lps_couple` préservé), E3 (LPAnimTwist valide à blanc), E4 (les deux commandlets sont trouvés dans `/Script/LPModTools`), E5 ((a) introuvable sans addon ; (b) LPAnimCore monté, LPSandbox absent, carte CentralLondon chargée), E6 (addon en place). Le nouveau code tourne (`PATHS racine addon` dans tous les journaux d'éditeur testés).
|
||
|
||
Point à noter pour l'utilisateur : anomalie 1 (LPAnimCatalog écrit `fiches_calculees.json` sans argument, fichier restauré).
|
||
|
||
## Modèles par fiche
|
||
|
||
| Fiche | Modèle prévu | Modèle utilisé |
|
||
|---|---|---|
|
||
| DC2-T1 | opus | opus |
|
||
| DC2-T2 | haiku | haiku |
|
||
| DC2-T3 | sonnet | sonnet |
|