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

27 KiB
Raw Blame History

Fiche U7b-T5 — Niveau N3 — Modèle prévu lp-impl | utilisé claude-opus-5-5 — Agent lp-impl — Skills lp-commandlets, lp-build, sk-protocol (chargés aussi : ue-cpp-build, lp-ue-compat)

U7b-T5 — « Update Source » des poses du pack de démo : script et essai sur Manny_calf_l_pose

Reprises du 2026-10-09 : l'utilisateur a décidé de garder HyperAIStudio et les Toolsets. Essai sur une pose réussi (§ 10 : 27 / 0 / 0 erreur de Blueprint), puis --all réussi (§ 11 : 0 avertissement de pose, 0 erreur de Blueprint, 28 _anim intactes). Les § 1 à 9 décrivent le premier passage (arrêt).

1. Résultat (premier passage) : partiel, arrêt au premier écart

  • Étape a (script) : faite. Le script n'a pas été exécuté.
  • Étapes b (DryRun), c (essai réel) et d (relevé) : non lancées. Aucun processus UE lancé, aucun asset modifié, aucun commit.
  • Motif de l'arrêt : au départ de la fiche, l'éditeur 5.8 était ouvert sur la copie 5.8. De plus, l'environnement de cette copie a été modifié par un outil tiers (HyperAIStudio) après le tag U7b-avant, et diffère de celui de la référence U5. Détail au § 2. La décision revient à l'orchestrateur (§ 7).

2. Écart constaté (établi)

Constat Preuve
UnrealEditor.exe 5.8 ouvert sur la copie 5.8 au départ de la fiche (PID 24612, lancé à 13:31:29). Get-CimInstance Win32_Process -Filter 'ProcessId=24612' à 13:33:53 → "D:\Game\Launcher\Engine\UE_5.8\Engine\Binaries\Win64\UnrealEditor.exe" "../../../../../../LifePlay-master 5.8/LifePlay.uproject"
L'éditeur s'est fermé à 13:35:08. Aucun processus Unreal* ne tourne à 13:38:43. Saved\Logs\LifePlay.log:2417 (Log file closed, 10/09/26 13:35:08) ; tasklist, puis Get-CimInstance (sortie vide)
Le tag U7b-avant et l'instantané Backup_5.5\U7b (13:32:43-45) ont été faits pendant cette session de l'éditeur. .git/refs/tags/U7b-avant daté 13:32:45 ; colonne Date de manifest.csv
L'instantané reste valable : les 56 fichiers n'ont pas changé depuis le resave U5 (2026-10-08 20:28). Le MD5 est identique entre le projet, le manifeste et la copie (56/56). script Python hashlib sur manifest.csv → lignes 56 identiques 56 differents 0 ; ls --time-style=full-iso
Copie de travail 5.8 différente du tag : LifePlay.uproject est modifié (non commis) à 13:31:19. Il active 15 plugins « Toolset » (AIModuleToolset … UMGToolSet), retire "Optional": true de McpAutomationBridge et ajoute SupportedTargetPlatforms à un plugin. .gitignore est aussi modifié (bloc HYPERAISTUDIO). git -C "D:\Game\LifePlay-master 5.8" status --short → M .gitignore, M LifePlay.uproject ; git diff
Nouveau plugin projet Plugins\Marketplace\HyperAIStudio (DLL éditeur), installé à 13:25:48. Ajouts à la même période : .hyperai/, .mcp.json (serveur MCP http://127.0.0.1:8000/mcp), AGENTS.md, CLAUDE.md (modifié à 13:36:47). Tous sont exclus par .git/info/exclude (modifié à 13:33:24, commentaire « STM : fichiers generes par Hyper AI Studio »). ls --time-style=full-iso ; tail .git/info/exclude
L'éditeur a chargé ce plugin et ces Toolsets : Mounting Project plugin HyperAIStudio (l. 385), DLL UnrealEditor-HyperAIStudio*.dll chargées (l. 1684-1690), 19 lignes Mounting Engine plugin …Toolset. La référence U5 n'en a que 3, et 0 mention de HyperAIStudio. Plugins montés : 276 dans LifePlay.log, 255 dans la référence. grep -c sur Saved\Logs\LifePlay.log et Saved\Logs\portage\U5_CompileAllBlueprints_20261008-203108.log
CLAUDE.md de la copie 5.8 (bloc géré par HyperAIStudio) demande de démarrer l'éditeur par .hyperai/scripts/Start-HyperAIStudioEditor.ps1 à la demande. Un agent dont le dossier courant est la copie 5.8 peut donc lancer un UE en parallèle. D:\Game\LifePlay-master 5.8\CLAUDE.md (lu comme donnée)

Conséquences (estimé) :

  1. Un commandlet lancé maintenant chargerait les modules éditeur de HyperAIStudio et les 15 Toolsets. Le plugin déclare des modules "Type": "Editor" (HyperAIStudio.uplugin:22-23), chargés aussi en commandlet. C'est du code tiers non audité, et il écrit dans le projet (.hyperai/runtime, .uproject).
  2. Le critère « 27 avertissements » de CompileAllBlueprints ne serait plus comparable à la référence U5 (28 avertissements, tous des poses), parce que d'autres plugins peuvent ajouter des avertissements. Le décompte propre aux poses resterait lisible (§ 6), mais la ligne Success - 0 error(s), N warning(s) ne le serait plus.
  3. La fiche impose « éditeur fermé, un seul processus UE ». Cette condition n'était pas remplie au départ, et elle n'est pas garantie pendant le passage tant que HyperAIStudio peut relancer l'éditeur.

3. Script (étape a)

  • Chemin : D:\Game\LifePlay-master 5.8\Saved\U7b\update_pose_sources.py. Hors Content ; hors git (git check-ignore -v → .gitignore:4:Saved). 148 lignes, MD5 bef4beb39ee2878d3f0dfc08f89ca2bf, syntaxe vérifiée par ast.parse (Python local, -I).
  • Paramètres :
    • --dry-run : relevé seul.
    • --only <nom> : une pose.
    • --all : toutes les poses. Ajout de garde-fou : sans --only ni --all, le mode réel refuse de tourner.
  • Déroulé :
    1. Journalise dir(unreal.PoseAsset), filtré sur pose / source / retarget / modify, et la présence de update_pose_from_animation. Si la méthode est absente : arrêt sans modification.
    2. Registre d'assets : scan_paths_synchronous([ROOT], True), puis get_assets_by_path(ROOT, True), filtre sur la classe PoseAsset. Compte attendu : 28. En mode réel, un autre compte arrête tout avant la moindre modification ; en DryRun, il produit un avertissement « ECART ».
    3. Pour chaque pose : unreal.load_asset, source_animation, squelette de la pose et de la source (même chemin ?), nombre de poses, GUID stocké (lecture tentée, voir § 4). Une ligne U7B-POSE nn/28 … par pose.
    4. Mode réel, pose ciblée seulement :
      • vérifie que la source existe et que le squelette est le même ;
      • appelle pose.modify() puis pose.update_pose_from_animation(source), ce qui reproduit le bouton « Update Source » ;
      • journalise les paquets sales ;
      • appelle unreal.EditorAssetLibrary.save_loaded_asset(pose, False), qui n'enregistre que le paquet de la pose ;
      • si l'enregistrement est refusé, ou si le nombre de poses traitées diffère du nombre de cibles : RuntimeError, donc commandlet en code ≠ 0.
    5. Ligne U7B-POSE BILAN mode=… trouvees=… avec_source=… cibles=… traitees=… et rapport Saved\U7b\update_pose_sources_<mode>_<horodatage>.txt.
  • Fichier préparé pour le dump : D:\Game\LifePlay-master 5.8\Saved\U7b\liste_manny_calf_l_pose.txt, une ligne : /Game/FreeAnimationsPack/Demo/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_l_pose.

4. API utilisée : lue dans les sources 5.8 (méthode Python non encore confirmée à l'exécution)

Élément Source Statut
UpdatePoseFromAnimation(UAnimSequence*) est UFUNCTION(BlueprintCallable), en éditeur seulement. Nom Python attendu : update_pose_from_animation. Runtime/Engine/Classes/Animation/PoseAsset.h:446-448 (bloc #if WITH_EDITOR 421-468) C++ établi ; nom Python estimé, que le dir() du DryRun confirmera
Effet : garde les noms de poses, appelle CreatePoseFromAnimation, réécrit SourceAnimationRawDataGUID (1676) et marque la pose comme régénérée (1674). Ne marque pas le paquet comme sale, d'où l'appel préalable à modify(). Runtime/Engine/Private/Animation/PoseAsset.cpp:1582-1710 établi
SourceAnimation : UPROPERTY(Category=Source, EditAnywhere), en éditeur seulement, donc lisible par get_editor_property("source_animation") quand GIsEditor est vrai. PoseAsset.h:349-350 ; règle d'export PythonScriptPlugin/Private/PyGenUtil.cpp:1811-1815 établi
« Out of date » non exposé à Python : SourceAnimationRawDataGUID est un UPROPERTY() sans Edit ni BlueprintVisible, et GetSourceAnimationGuid() n'est pas une UFUNCTION. Le script tente la lecture et journalise l'exception attendue. L'état se lit donc (a) dans l'avertissement moteur émis au chargement par PostLoad, présent dans le journal du DryRun, et (b) dans le dump LPDumpAssets, qui exporte toutes les propriétés non transitoires différentes de l'objet par défaut de la classe (CDO). PoseAsset.h:353-354, :519 ; PyGenUtil.cpp:1609-1613, :1811-1815 ; PoseAsset.cpp:1065-1087 ; Source/LifePlayEditorTools/LPDumpAssetsCommandlet.cpp:17-37 établi pour l'API ; lecture du GUID dans le dump estimée
GIsEditor est vrai dans -run=pythonscript : UCommandlet met IsEditor = true par défaut, et le moteur recopie cette valeur. Runtime/Engine/Private/Commandlets/Commandlet.cpp:33 ; Runtime/Launch/Private/LaunchEngineLoop.cpp:3995 établi
Le skeleton est lisible : Skeleton est VisibleAnywhere. Runtime/Engine/Classes/Animation/AnimationAsset.h:993-994 établi
modify(always_mark_dirty=True) PythonScriptPlugin/Private/PyWrapperObject.cpp:1130 établi
EditorAssetLibrary.save_loaded_asset (EditorScriptingUtilities, désactivé par défaut mais requis par le plugin Bridge, actif dans le projet) ; EditorLoadingAndSavingUtils.get_dirty_content_packages Plugins/Editor/EditorScriptingUtilities/.../EditorAssetLibrary.h:261-262 ; EditorScriptingUtilities.uplugin:13 ; Editor/UnrealEd/Public/FileHelpers.h:143-144 établi (chargement par Bridge : estimé)
get_assets_by_path renvoie la liste, ou None, parce que le retour bool est replié sur le paramètre de sortie. Runtime/AssetRegistry/Public/AssetRegistry/IAssetRegistry.h:310-311 ; PyGenUtil.cpp:1161-1171 établi
Passage des arguments : -script="<chemin avec espace>.py --dry-run". Le jeton garde ses guillemets internes ; le commandlet lit la chaîne entre guillemets ; le plugin sépare le chemin du .py et les arguments (sys.argv). La forme "-script=<chemin avec espace> …" couperait le chemin à l'espace. LaunchEngineLoop.cpp:1605-1632 ; Core/Private/Misc/Parse.cpp:935-1017 ; PythonScriptPlugin/Private/PythonScriptCommandlet.cpp:17-33 ; PythonScriptPlugin.cpp:814-895, :196-215 établi par lecture ; non exécuté

5. Sorties DryRun, résultat de l'essai, MD5 après, dump

Rien n'a été produit (étapes b à d non lancées). Le compte de 28 poses trouvées n'est donc pas mesuré par le script. Constat disque seulement : find …\Rigs\Poses -name "*_pose.uasset" | wc -l = 28, *.uasset = 56.

MD5 « avant » (établi, md5sum, identique au manifeste Backup_5.5\U7b) :

  • Manny_calf_l_pose.uasset : 9C1E12CE72C826FD6F1DDDF9ADB24ABB (204 017 octets, 2026-10-08 20:28:01) ;
  • Manny_calf_l_anim.uasset : 21AF225AF6AF3E7986ABB27247EF3611.

6. Commandes prêtes (pwsh, depuis D:\Game\LifePlay-master 5.8, éditeur fermé, un seul UE)

# d0 — dump avant
.\Tools\RunCommandlet.ps1 -Lot U7b -Commandlet LPDumpAssets -Args '-List="D:/Game/LifePlay-master 5.8/Saved/U7b/liste_manny_calf_l_pose.txt" -Out="D:/Game/LifePlay-master 5.8/Saved/U7b/dump_Manny_calf_l_pose_avant.txt"'
# b — DryRun (attendu : 28 lignes U7B-POSE nn/28, BILAN trouvees=28 avec_source=28, 28 avertissements moteur de pose)
.\Tools\RunCommandlet.ps1 -Lot U7b -Commandlet pythonscript -Args '-script="D:/Game/LifePlay-master 5.8/Saved/U7b/update_pose_sources.py --dry-run"'
# c — essai réel, une pose
.\Tools\RunCommandlet.ps1 -Lot U7b -Commandlet pythonscript -Args '-script="D:/Game/LifePlay-master 5.8/Saved/U7b/update_pose_sources.py --only Manny_calf_l_pose"'
# d — relevé
.\Tools\RunCommandlet.ps1 -Lot U7b -Commandlet CompileAllBlueprints
.\Tools\RunCommandlet.ps1 -Lot U7b -Commandlet LPDumpAssets -Args '-List="D:/Game/LifePlay-master 5.8/Saved/U7b/liste_manny_calf_l_pose.txt" -Out="D:/Game/LifePlay-master 5.8/Saved/U7b/dump_Manny_calf_l_pose_apres.txt"'

Décomptes sur le journal Saved\Logs\portage\U7b_CompileAllBlueprints_<horodatage>.log. La forme stricte est celle de T3, car grep -c "Ressource de la pose" simple compte aussi le récapitulatif LogInit (56 sur la référence) :

  • grep -c "^\[[^]]*\]\[[^]]*\]LogAnimation: Warning: Ressource de la pose" <log> → attendu 27 (référence U5 : 28) ;
  • grep -c "Manny_calf_l_pose" <log> → attendu 0 (référence : 2) ;
  • ligne Success - 0 error(s), N warning(s) (référence : …203108.log:3058, 28).

7. Décision demandée à l'orchestrateur

  1. Confirmer que l'environnement HyperAIStudio (uproject modifié, plugin Plugins\Marketplace\HyperAIStudio, 15 Toolsets) est voulu par l'utilisateur et accepté pour U7b. Si oui, ajouter avant l'étape c un CompileAllBlueprints « avant », dans le même environnement, comme base de comparaison (critère : seules les lignes de pose passent de 28 à 27). Sinon, l'utilisateur décide de neutraliser l'outil le temps du passage (je n'ai rien touché : .uproject, .gitignore, .hyperai, Plugins\Marketplace sont dans l'état laissé par l'outil).
  2. Garantir qu'aucun éditeur ni démarrage HyperAIStudio n'aura lieu pendant les étapes b à d (lanceur .hyperai/scripts/Start-HyperAIStudioEditor.ps1).
  3. Ensuite, relancer cette fiche, ou une fiche de reprise, à partir de l'étape b avec les commandes du § 6.

8. Écarts à la fiche

  • Étapes b, c et d non faites (arrêt, § 2). Critère de la fiche non évalué.
  • Ajouts au script : paramètre --all ; refus du mode réel sans --only/--all ; contrôle bloquant « 28 poses » en mode réel ; journal des paquets sales ; rapport texte dans Saved\U7b.
  • Ajout : fichier liste liste_manny_calf_l_pose.txt pour LPDumpAssets.
  • « État out of date » : non lisible par l'API Python (§ 4). Remplacé par l'avertissement PostLoad dans le journal et par le dump.

9. Fichiers écrits

  • D:\Game\LifePlay-master 5.8\Saved\U7b\update_pose_sources.py (dossier Saved\U7b créé)
  • D:\Game\LifePlay-master 5.8\Saved\U7b\liste_manny_calf_l_pose.txt
  • D:\Game\LifePlay-master 5.5\Docs\Migration\etat\U58\U7b\U7b-T5-IMPL.md (ce livrable)

Aucun asset, aucun fichier suivi par git, aucun fichier de l'addon modifié. Pas de commit, pas de suppression.

10. Reprise (orchestrateur, décision utilisateur : HyperAIStudio et Toolsets gardés)

Lancement : pwsh -File <scratchpad>\u7b_run.ps1 -Step <cab|dumpav|dry|reel|dumpap>. Ce lanceur s'arrête (code 90) si un processus UnrealEditor ou UnrealEditor-Cmd tourne, puis appelle Tools\RunCommandlet.ps1 -Lot U7b avec les arguments du § 6. Aucun UE n'était en cours avant chaque étape (tasklist). Six passages ont été faits, l'un après l'autre.

10.1 Résultat : réussi

Étape Journal (D:\Game\LifePlay-master 5.8\Saved\Logs\portage\) Résultat (établi)
b0 CompileAllBlueprints avant U7b_CompileAllBlueprints_20261009-135244.log (201 s) 418 BP, Compiling Completed with 0 errors and 0 warnings and 0 blueprints that failed to load. 28 lignes de pose. Les 28 lignes sont identiques, GUID compris, à la référence U5 …20261008-203108.log (diff des sort -u vide). Bilan Failure - 1 error(s), 28 warning(s).
d0 dump avant U7b_LPDumpAssets_20261009-135645.log Saved\U7b\dump_Manny_calf_l_pose_avant.txt (12 lignes) : SourceAnimationRawDataGUID = 8E2B50DD07CBD0EC07FCDD7DE6C03CCF, bAdditivePose = True, BasePoseIndex = 0
b DryRun U7b_pythonscript_20261009-135709.log 28 trouvées, 28 avec source, même squelette SK_Mannequin pour les 28 ; BILAN mode=dryrun trouvees=28 avec_source=28 cibles=0 traitees=0. 28 lignes de pose au chargement. Aucun fichier du dossier Poses modifié (find -newermt = 0). Rapport : Saved\U7b\update_pose_sources_dryrun_20261009-135720.txt
c réel --only Manny_calf_l_pose U7b_pythonscript_20261009-135737.log modify() puis update_pose_from_animation. Après : 5 poses, mêmes noms. 1 seul paquet sale (la pose), enregistré (-> True). BILAN mode=reel trouvees=28 avec_source=28 cibles=1 traitees=1. Rapport : Saved\U7b\update_pose_sources_reel_20261009-135748.txt
d CompileAllBlueprints après U7b_CompileAllBlueprints_20261009-135821.log (191 s) 418 BP, 0 erreur et 0 avertissement de compilation. 27 lignes de pose ; 0 ligne Manny_calf_l_pose (2 en b0). Bilan Failure - 1 error(s), 27 warning(s).
d dump après U7b_LPDumpAssets_20261009-140147.log Saved\U7b\dump_Manny_calf_l_pose_apres.txt. Plus d'avertissement de pose au rechargement (seule reste la ligne propre à LPDumpAssets).

Comparaison b0 → d (script cmpwarn.py : lignes Warning et Error, horodatage et GUID neutralisés) : la seule différence est la disparition des 2 lignes Manny_calf_l_pose (l'avertissement et son rappel LogInit). Il n'y a aucune ligne nouvelle. Les 27 autres lignes de pose sont identiques, GUID compris.

10.2 Nouveautés de l'environnement (établi, présentes dans b0, inchangées en d)

  • 1 erreur à chaque lancement d'UE, venant de HyperAIStudio : LogHyperAIStudioAutomation: Error: Automation probe publication failed: AutomationController is not loaded; the probe never loads it from a tool call. Elle apparaît dans les 6 journaux (1 chacun, grep -c). Le bilan affiche donc Failure - 1 error(s), et le code de sortie de chaque passage est 1, alors que chaque commandlet finit en result 0 et qu'aucune autre ligne Error n'apparaît (0 dans les 6 journaux).
  • +8 BP compilés (418 contre 410 en U5) : /PCGToolset/Skills/Skill_* (8 assets), tous compilés sans erreur.
  • Aucun avertissement nouveau dû aux Toolsets ni à HyperAIStudio dans CompileAllBlueprints (b0 contre U5 : seules les 2 lignes HyperAIStudio s'ajoutent).
  • Le critère « 0 erreur » est donc atteint pour la compilation des Blueprints (0 erreur, 0 échec de chargement). Il n'est pas atteint au sens strict du bilan moteur : il reste 1 erreur HyperAIStudio, la même qu'en b0. À trancher par l'orchestrateur, en particulier pour les lots qui lisent le code de sortie de RunCommandlet.ps1.

10.3 MD5 et données de la pose

  • Manny_calf_l_pose.uasset : 9C1E12CE72C826FD6F1DDDF9ADB24ABB → BF33442362466150D387A0D4D0EFE4ED. Taille inchangée (204 017 octets), date 2026-10-09 13:57:48.
  • Les 55 autres fichiers sont identiques au manifeste Backup_5.5\U7b (contrôle hashlib). Seul ce fichier a changé sous Content depuis 13:50 (find Content -newermt).
  • Dump avant → après (diff des 12 lignes, puis analyse de PoseContainer par cmppose.py) :
    • SourceAnimationRawDataGUID : 8E2B50DD… → 1D634D8727C63225C22E9D7F4FA6C1E2, c'est-à-dire le « GUID trouvé après resave » de la ligne 1 du tableau T3 (U7b-T3-CART.md:44) ;
    • PoseFNames identiques ; TrackPoseInfluenceIndices identiques (48 valeurs) ; SourceAnimation, Skeleton, bAdditivePose, BasePoseIndex, RetargetSourceAsset inchangés ;
    • Tracks : 150 pistes, identiques à la casse près. 20 noms ont changé de casse (ex. lowerarm_correctiveRoot_l → lowerarm_correctiveroot_l, calf_kneeBack_l → calf_kneeback_l). Les noms viennent maintenant des pistes de l'animation source (PoseAsset.cpp:1609-1615). Les FName se comparent sans tenir compte de la casse : sans effet sur le fonctionnement (estimé) ;
    • transformées (SourceLocalSpacePose 5 × 150, LocalSpacePose 7/7/6/4) : même nombre, écart maximal 3e-06 en translation et 1e-06 en rotation, échelle 0. Cela correspond à la précision d'export (6 décimales) : les données de pose sont inchangées à cette précision.
  • Avertissement pendant c : LogUObjectGlobals: Warning: Objet 'Object /Game/Characters/Heroes/Mannequin/Meshes/SKM_Manny.SKM_Manny' introuvable, émis à l'enregistrement. Il vient de PreSave → UpdateRetargetSourceAssetData (PoseAsset.cpp:1135-1143), parce que RetargetSourceAsset pointe vers un maillage absent du projet. Ce n'est pas nouveau : la même ligne figure au resave U5 de cette même pose (U5_LPResavePackages_20261008-202628.log:2025).

10.4 Commandes, fichiers et écarts de la reprise

  • Fichiers écrits :
    • D:\Game\LifePlay-master 5.8\Saved\U7b\dump_Manny_calf_l_pose_{avant,apres}.txt
    • …\Saved\U7b\update_pose_sources_{dryrun_20261009-135720,reel_20261009-135748}.txt
    • résumés D:\Game\LifePlay-master 5.8\Docs\Migration\etat\U7b_*_20261009-*.txt (6, écrits par RunCommandlet.ps1)
    • scripts d'analyse dans le scratchpad de session (u7b_run.ps1, cmpwarn.py, cmppose.py), hors projet.
  • Asset modifié : Content\FreeAnimationsPack\Demo\Characters\Mannequins\Rigs\Poses\Manny\Manny_calf_l_pose.uasset seulement. Retour arrière possible par l'instantané Backup_5.5\U7b.
  • Ordre réel : b0, dump avant, b, c, d, dump après. Le dump avant a été placé avant b, ce qui ne change rien (lecture seule).
  • Pas de commit, pas de suppression ; addon non touché. git status de la copie 5.8 : seuls .gitignore, LifePlay.uproject (HyperAIStudio) et Docs/Migration/29_Projet_Stabilisation_V2.md (session voisine) sont modifiés, aucun par cette fiche.

11. Reprise 2 (orchestrateur : essai validé, --all)

Avant chaque lancement : aucun UnrealEditor ni UnrealEditor-Cmd (tasklist, puis le garde-fou de u7b_run.ps1). L'éditeur n'a pas planté (chaque commandlet finit en result 0).

11.1 Résultat : réussi

Étape Journal (D:\Game\LifePlay-master 5.8\Saved\Logs\portage\) Résultat (établi)
réel --all U7b_pythonscript_20261009-140444.log BILAN mode=reel trouvees=28 avec_source=28 cibles=28 traitees=28. 28 × enregistrement du paquet … -> True, 28 × Saving Package. Chaque enregistrement n'avait qu'1 paquet sale (28 × « paquets sales (1) »). Nombre de poses par asset identique au DryRun (28/28). 27 lignes de pose au chargement, puisque Manny_calf_l_pose était déjà corrigée. Rapport : Saved\U7b\update_pose_sources_reel_20261009-140457.txt
CompileAllBlueprints après U7b_CompileAllBlueprints_20261009-140525.log (191 s) 418 BP, même liste qu'en b0 (diff vide). Compiling Completed with 0 errors and 0 warnings and 0 blueprints that failed to load. 0 ligne « Ressource de la pose », 0 mention du dossier Rigs/Poses. Bilan Failure - 1 error(s), 0 warning(s).
  • Comparaison b0 → après (cmpwarn.py) : il ne reste aucune ligne nouvelle. Seules ont disparu les 56 lignes de pose : 28 avertissements et 28 rappels LogInit. Il reste 3 lignes Warning/Error : l'erreur LogHyperAIStudioAutomation (connue, § 10.2), son rappel LogInit, et l'en-tête Warning/Error Summary. Code de sortie 1 à cause de cette erreur, relevé sans arrêt comme demandé.
  • Manny_calf_l_pose a été repassée par --all (le script traite les 28) : paquet réenregistré, contenu identique (MD5 BF334423… inchangé).
  • Avertissements pendant --all : SKM_Manny.SKM_Manny' introuvable et SKM_Quinn.SKM_Quinn' introuvable (1 chacun). Même cause que § 10.3 (PreSave → UpdateRetargetSourceAssetData). Tous deux figurent déjà au resave U5 (U5_LPResavePackages_20261008-202628.log, 1 chacun) : pas nouveaux.

11.2 MD5 (projet contre instantané Backup_5.5\U7b, script hashlib / md5sum)

  • 28 _anim : 28/28 identiques à l'instantané.
  • 28 _pose : 28/28 différentes de l'instantané. Pour 27 d'entre elles, le changement vient de --all ; Manny_calf_l_pose était déjà changée en § 10. Aucun autre fichier de Content modifié depuis 14:04 en dehors des 28 poses (find Content -newermt = 28 fichiers, tous _pose.uasset).
# Pose MD5 instantané (avant) MD5 après
1 Manny_calf_l_pose 9C1E12CE72C826FD6F1DDDF9ADB24ABB BF33442362466150D387A0D4D0EFE4ED
2 Manny_calf_r_pose C5AC8F8AD252FD2286F8CEBB85DE7964 80440A445DA5605440C940C2AA116F3A
3 Manny_clavicle_l_pose FBE6588EFF1C3C24DB47E03B121F4995 364498931173892E8A7E5CBCB8A0E32E
4 Manny_clavicle_r_pose 83992B82FF3AFF337B260F02C09EE3C9 19590B1AA20F6D38A750CDF3D0455A7C
5 Manny_foot_l_pose CEB404696D9A634F8BDD1BB4C4E97D9B 7E3C76798094AEC74A6D5A68E5BDFEC1
6 Manny_foot_r_pose D36A6BAD11960A8EBE37F66615B5DA6E 4761F8381F99739053A1CBF423E21E1D
7 Manny_hand_l_pose 6423B44465D78B8699D2CC09355A05D2 BF7697ACCE0F1F99D4F28F2511A2A208
8 Manny_hand_r_pose 79E5E4CBD126D1D90AE4DAF8D7AF2814 C0E8674910602886C3F1DA4117FDC01B
9 Manny_lowerarm_l_pose 27F1C2064C9BB63BD470FFEFE87D8CBE E1A655F61F4797CEE2CB112A52F6FABE
10 Manny_lowerarm_r_pose 75B45B3E3407FF416CF3BFA21D8AD4AB 40851ABEBFF6371AAFEF91435AC0701D
11 Manny_thigh_l_pose D941A96A008000215B9083A0C45F7C39 49622581DFF154DF7D831F2269707708
12 Manny_thigh_r_pose A9D32E045AC4530D274191F08EAD05DF EF4837F0151AA2771EAA74C2AF22594E
13 Manny_upperarm_l_pose 6B6E49BC94AFD43BAA636D01A5278FCF 10627AEA91544747176360DFCF7179CE
14 Manny_upperarm_r_pose 64557ACB3C7931E4CA53423879AF6BA0 83BB0CF9FEDAAABFA366DC7C6069BD1B
15 Quinn_calf_l_pose 2D449021CAB6DDC2C13D5659CF41107E 17BC525DF148591BE5B8C53A5CE81445
16 Quinn_calf_r_pose 429B6977970E1C5AE15FEC43D1143BCD 8CE3C79A02AE72579EAD7D45A6E5B4C2
17 Quinn_clavicle_l_pose 3C2B2CFE01474FDB93330089DE1303A2 98AFFF211966E346A460013C12841CC7
18 Quinn_clavicle_r_pose 4F1D631A68AA52FC0E339EC2BC7CEE9B 3F913D9E1D417BF6603FECDD6282CACA
19 Quinn_foot_l_pose 6E4CB8776794E99F27982951835CBD37 39E3DB80EEF1C08C7F850D175C71FE13
20 Quinn_foot_r_pose E8FBA4176BDF2E55698F87B76A57A61E 5AF029696214813579A51676A1E56237
21 Quinn_hand_l_pose 1182CF966A2C19F1217900498EA25B02 00B63CD047BD8490A8647FCE1B49E785
22 Quinn_hand_r_pose E0BBF6092FD28C3AF8175E1DF09475E8 C8C2AADF209C01DF363CD2804E35F04A
23 Quinn_lowerarm_l_pose 30A19BAED9C4CF85E773D52EE9980A1F 7F0D7EB3F36A4F5BBB7DE6E54912D86B
24 Quinn_lowerarm_r_pose EBD5B6E355D75B8C82D9E264C393CF4C 7374C94AA406A9DB5056A6E0545BD857
25 Quinn_thigh_l_pose 2CA1EF7515B0027C3A44EDCF120C3725 B334150EEFA55C9933E0FEC4116BE4E9
26 Quinn_thigh_r_pose 30CE357A08D908FE9862BEE7CBF008B4 DF001FB043887FADC50AC05BC5A98953
27 Quinn_upperarm_l_pose EF6EEA9863F60AC8714E813654D208BD 306F99A8B454AB852F274FEB9F957E5C
28 Quinn_upperarm_r_pose 40F827880C81BCBF9C3AB5AB0DC6E31B B971C7656E9AEB8792F93A34739EF0A0

11.3 Fichiers et écarts de la reprise 2

  • Assets modifiés : les 28 *_pose.uasset de Content\FreeAnimationsPack\Demo\Characters\Mannequins\Rigs\Poses\{Manny,Quinn}, seulement. Retour arrière par l'instantané Backup_5.5\U7b (56 fichiers).
  • Écrits : Saved\U7b\update_pose_sources_reel_20261009-140457.txt ; résumés D:\Game\LifePlay-master 5.8\Docs\Migration\etat\U7b_pythonscript_20261009-140444.txt et U7b_CompileAllBlueprints_20261009-140525.txt. Relevés MD5 dans le scratchpad (md5_avant_all.txt, md5_apres_all.txt).
  • Pas de dump « après » des 27 autres poses (non demandé). L'écart de données n'est mesuré que sur Manny_calf_l_pose (§ 10.3).
  • Pas de commit, pas de suppression, addon non touché.