Fiche STE-H10v — Niveau N1 — Modèle prévu sonnet | utilisé claude-sonnet-5-5 — Agent lp-validator — Skills lp-validate, sk-recount, sk-protocol # STE-H10-VAL : VAL statique de l'étape (a) de STE-H10 (2026-10-13, reprise après PAUSE) Trace : cette VAL — Fiche STE-H10v — 2026-10-13 07:09-07:26 (local) Environnement : copie `D:\Game\LifePlay-master 5.8`, branche ue5.8, HEAD `bfaaed2`, éditeur fermé, 0 processus Unreal avant et après. BUILD-GO (b) VAL de Big Boss. ## 1. Fiches amont relues `fiches/STE-H10v.md`, `STE-H10-SPEC.md` (en entier, § C.1-C.9), `STE-H10-IMPL.md` (TopRight B4-a, Person A1 + B3-a), `STE-H10-GI1-IMPL.md` (B1-a EventGraph), `STE-H10-GI2-IMPL.md` (B1-a SavePreset, B2-a). Dumps de référence : `dumps\GI__EventGraph_V5.txt`, `GI__SavePreset_D9.txt`, `GI__GetSMBoolForSMC_Cloth_D9.txt`, `Person__EventGraph_D4.txt`, `Person__ClearProxies_D9.txt`, `TopRight__EventGraph_D9.txt`, `Person__IsGenitalExposed_D9.txt`. ## 2. Points à confirmer des IMPL | # | Point | Verdict | Preuve | |---|---|---|---| | 1 | GI:EventGraph : 6 241 (MCP) ; chaîne DestroyPerson (18 liens) | PASS (chaîne) ; compte voir P4 | log `…071525.log` l. 32062-32104 : 216 / 393 / 394 / 217 / 171 / 396 / 218 / 232 / 697 reliés comme GI1 § 1 ; `CallFunction_104.execute ← 216.then, 393.then` ; `.then → 394` ; `937.execute ← 842.then, 394.then` ; `166.then → 217` ; `731.execute ← 217.else, 396.then` | | 2 | `SaveBeforeDestroy`, `RevertSkipped` bool défaut false | BLOCKED (incertain) | le dump n'affiche pas la valeur par défaut d'une variable membre ; les `Set` montrent `Output_Get = 'false'` seulement. Essai qui tranche : lecture du CDO (MCP ou commandlet dédié), hors périmètre. Estimé false (défaut d'un bool neuf) | | 3 | `VariableGet_232` = même variable que `VariableGet_599` | PASS (estimé fort) | les deux sont `variable 'Valid'` ; 599 : `self ← VariableSet_1357.Output_Get` (CharacterBeingEdited = Person), 232 : `self ← CustomEvent_3172.Person` (log l. 27889-27891, 32098-32100) ; la classe propriétaire n'est pas affichée par le dump | | 4 | `CallFunction_697` = même appel que SP:1354 | PASS | 697 : `appel Person_C::RevertStripAll()` ; SavePreset `CallFunction_16039` : `appel Person_C::RevertStripAll()` (log `…071350.log` l. 3303) | | 5 | `CallFunction_937.execute` garde ses 2 entrées | PASS | `execute -> CallFunction_842.then, VariableSet_394.then`, `then → IfThenElse_1766` (l. 29129-29131) | | 6 | SavePreset 506 ; liens | PASS | voir § 3 | | 7 | GetSMBoolForSMC_Cloth 13, `MeshSuffix` locale | PASS | voir § 3 ; « locale » : `list_variables` de GI2 (non rejoué ici) ; le dump nomme `variable 'MeshSuffix'` dans la fonction | | 8 | CompileAllBlueprints, LPTestStringCompat | voir § 3 (compile : écart E1 externe) | | | 9 | Person / TopRight inchangés | PASS | MD5 § 3 | Points amont de la fiche : - (1) `SMC` nul aux sites d'appel de `GetSMBoolForSMC_Cloth` : un seul appelant est dumpé, `Person.IsGenitalExposed` (`CallFunction_4131 : GI_C::GetSMBoolForSMC_Cloth()`, `SMC ← DynamicCast_136.AsSkeletal Mesh Component`, exécuté sur `DynamicCast_136.then`, donc `SMC` valide ; `dumps\Person__IsGenitalExposed_D9.txt:13-24`). Grep `GI_C::GetSMBoolForSMC_Cloth` sur tous les `dumps\*.txt` : 1 fichier. Les ~133 autres graphes de Person et les autres BP ne sont pas dumpés : **estimé accepté, incertain** pour les appelants non dumpés. Complément : `CallFunction_3` est `LPMeshCompat::GetSkeletalMesh()` (appel statique C++, `Component ← FunctionEntry.SMC`), son comportement sur nul n'a pas été lu (C++ non ouvert). - (2) défauts false : BLOCKED/incertain (ligne 2 ci-dessus). - (3) GV / G3 : GV et `VariableGet_599` sont tous deux `variable 'Valid'` ; G3 et l'appel SP sont tous deux `Person_C::RevertStripAll()` : établi pour G3, estimé fort pour GV (classe propriétaire non affichée). - (4) compte de référence : `dumps\GI__EventGraph_V5.txt:1` = 6 234 nœuds ; dump d'après = 6 243 = 6 234 + 9. Le « 6 232 → 6 241 » de GI1 vient de `find_nodes` (MCP) : écart de méthode constant de 2 (6 234 − 6 232), le +9 est identique. Établi. ## 3. Critères rejoués Commande de base : `.\Tools\RunCommandlet.ps1 -Lot STE-H10V -Commandlet LPDumpFunction -Args '' -EtatDir "D:\Game\LifePlay-master 5.8\Docs\Migration\etat\ST\STE"` ; journaux sous `Saved\Logs\portage\STE-H10V_*.log`, résumés `STE-H10V_*.txt` sous `etat\ST\STE\`. Tous : code 0, erreurs 0. | Critère | Args / commande | Sortie brute (entête du dump) | Attendu | Verdict | |---|---|---|---|---| | TopRight EventGraph | `-BP=TopRight -Fn=EventGraph -Pins -Exec` (`…070932`) | `=== TopRight :: EventGraph (907 noeuds) ===` ; `CustomEvent_5.then -> CallFunction_85.execute` ; `CallFunction_85 appel KismetSystemLibrary::DelayUntilNextFrame()`, `then -> SwitchString_1.execute` ; `SwitchString_1.execute -> CallFunction_85.then` (l. 5568, 6113-6115, 5826) | 907 ; Current → T1 → Switch | PASS | | Person EventGraph | `-BP=Person -Fn=EventGraph -Pins -Exec` (`…071138`) | `=== Person :: EventGraph (3702 noeuds) ===` | 3 702 | PASS | | Person : c1-c34 | lecture du log, nœuds 73, 74, 75, 76, 77, 237-240, 150, 151, 536, 44, 157, 202, 96, 12, 1405, 402, 19, 896, GetArrayItem_3/14 | chaque lien de c1 à c34 relu un à un (ex. `73.then -> MacroInstance_402.Exec`, `402.Completed -> VariableSet_238.execute`, `MacroInstance_44.Completed -> CallFunction_1405.execute`, `VariableSet_12.then -> IfThenElse_151.execute`, `151.else -> CallArrayFunction_77.execute`) | c1-c34 présents | PASS | | Person : b1-b8 absents | idem | `MacroInstance_402.Exec` ← `73` seul ; `MacroInstance_19.Is Not Valid -> 74` seul ; `MacroInstance_11.exec (vide)` ; `402.Array Index -> 74.NewItem` seul ; `402.Completed -> 238` seul ; `VariableGet_52.Hairs -> 11, 14` seulement ; `CallFunction_133.Max` ← 14, `ReturnValue = '0'` non relié ; `CallFunction_1405.execute ← MacroInstance_44.Completed` seul | absents | PASS | | `CallFunction_96.execute ← N3` seul | idem | `CallFunction_96 execute -> K2Node_VariableSet_237.then` (l. 11056) ; `MacroInstance_11`, `CallFunction_133`, `CallArrayFunction_14` sans exécution (orphelins, § C.1-3) | N3 seul | PASS | | Person ClearProxies | `-BP=Person -Fn=ClearProxies -Pins -Exec` (`…071303`) | `=== Person :: ClearProxies (39 noeuds) ===` ; `DynamicCast_30.then -> VariableSet_0.execute` ; `VariableSet_0.then -> MacroInstance_301.Exec` ; `Concat.ReturnValue -> VariableSet_0.ProxySuffix` ; `CallFunction_2.InSuffix -> VariableGet_2.ProxySuffix` | 39 ; `InSuffix ← P2` | PASS | | GI SavePreset | `-BP=GI -Fn=SavePreset -Pins -Exec` (`…071350`) | `=== GI :: SavePreset (506 noeuds) ===` ; `IfThenElse_2957.then -> IfThenElse_11.execute`, `else (vide)` ; `IfThenElse_11.Condition ← VariableGet_2.SaveBeforeDestroy`, `.then -> VariableSet_14.execute`, `.else -> CallFunction_16039.execute` ; `VariableSet_14.RevertSkipped = 'true'`, `then (vide)` | 506 ; S1 / S3 | PASS | | GI GetSMBoolForSMC_Cloth | `-BP=GI -Fn=GetSMBoolForSMC_Cloth -Pins -Exec` (`…071438`) | `=== GI :: GetSMBoolForSMC_Cloth (13 noeuds) ===` ; `FunctionEntry_2157.then -> VariableSet_0.execute` ; `VariableSet_0.then -> MacroInstance_1872.Exec` ; `VariableSet_0.MeshSuffix ← Concat_StrStr.ReturnValue` ; `CallFunction_2.InSuffix -> VariableGet_0.MeshSuffix` | 13 ; `InSuffix ← C2` | PASS | | GI EventGraph | `-BP=GI -Fn=EventGraph -Pins -Exec` (`…071525`) | `=== GI :: EventGraph (6243 noeuds) ===` ; chaîne § 2 ligne 1 | réf. V5 6 234 + 9 | PASS (6 243 = 6 234 + 9) | | Autres graphes GI | `-Fn=destroyDummy` / `LoadHairMeshIfNeeded` / `CopyActionsToScroll` (`…071756`, `…071858`, `…071950`) | `(39 noeuds)` / `(17 noeuds)` / `(34 noeuds)` | 39 / 17 / 34 | PASS | | CompileAllBlueprints | `.\Tools\RunCommandlet.ps1 -Lot STE-H10V -Commandlet CompileAllBlueprints -EtatDir "…\ST\STE"` (`STE-H10V_CompileAllBlueprints_20261013-072132`) | `code=3 duree=186s erreurs=25 avertissements=55` ; journal l. 3301 : `Compiling Completed with 3 errors and 0 warnings and 0 blueprints that failed to load.` ; 421 `Loading and Compiling`, 420 `a réussi` (réf. V6 du 11/10 : 418 / 418, code 0, 0 erreur) ; `Person`, `GI`, `TopRight` : `La compilation … a réussi` ; les 110 BP `/Game/` réussissent (110 / 110, comme V6) ; les 25 lignes d'erreur et 55 d'avertissement portent sur `/Engine/CC_Shaders/Utilities/CR_FaceExpRig` (`Could not find graph function data…`, structs `RLExpStruct` / `RLBoneStruct` / `RLConstraintStruct` introuvables sous `/Game/CC_Shaders/…`) | 418 / 418, 0 / 0 | **FAIL (critère littéral), cause externe : voir E1** | | LPTestStringCompat | `.\Tools\RunCommandlet.ps1 -Lot STE-H10V -Commandlet LPTestStringCompat -EtatDir "…\ST\STE"` (`…072515`) | `code=0 duree=16s erreurs=0 avertissements=2` ; `=== 3120 cas : compat != herite(UE4) : 0 ; moteur != herite(UE4) : 60 ===` | 3120 / 0 / 60 | PASS | | MD5 avant | `md5sum Content/BPs/GI.uasset Content/BPs/Person.uasset Content/UI/TopRight.uasset` (avant toute commandlet) | `71034a04c6d64e1a806ca0dadc934fb9` GI ; `d1b4c63d47621b1191ad9352c80c99cd` Person ; `1fcb94a60061b418e9deeb08bc1a990d` TopRight | = fiche | PASS | | MD5 après | même commande, après LPTestStringCompat | `71034a04c6d64e1a806ca0dadc934fb9` ; `d1b4c63d47621b1191ad9352c80c99cd` ; `1fcb94a60061b418e9deeb08bc1a990d` | identiques | PASS | | git status | `git status --short -- Content` | ` M Content/BPs/GI.uasset`, ` M Content/BPs/Person.uasset`, ` M Content/UI/TopRight.uasset` | 3 assets seuls | PASS | | Autosaves | `ls Saved/Autosaves/Game/BPs`, `…/UI` | `Room_Auto2`, `TestStatic_Auto1`, `MainMenu_Auto1` ; aucun `GI_Auto*`, `Person_Auto*`, `TopRight_Auto*` | aucun | PASS | | Processus | `Get-Process` filtre `Unreal*` | 0 ; HEAD `bfaaed2` | 0 | PASS | ## 4. Diff lu en entier Assets binaires `.uasset` : pas de diff texte ; la preuve est la lecture des dumps (§ 3), nœud par nœud pour les nœuds créés. Le dump de Person EventGraph (nœuds créés et touchés) et ceux de GI, TopRight, ClearProxies, SavePreset, GetSMBoolForSMC_Cloth relus par les extraits cités. Non relus : nœuds non touchés des graphes (comptes seuls). ## 5. Verdict **FAIL** au sens littéral du critère « CompileAllBlueprints 418 / 418, 0 erreur, 0 avertissement » (code 3, 3 erreurs, 55 lignes d'avertissement). **Tous les autres critères de § C.7 sont PASS** (6 dumps conformes, comptes des autres graphes, LPTestStringCompat, MD5 inchangés). Écarts : - **E1 (gravité : externe, hors périmètre STE-H10)** : CompileAllBlueprints échoue sur `/Engine/CC_Shaders/Utilities/CR_FaceExpRig` (Control Rig), asset du moteur `D:\Game\Launcher\Engine\UE_5.8\Engine\Content\CC_Shaders\` (dossier créé / modifié le 2026-10-12 19:57, absent du run V6 du 2026-10-11 qui comptait 418 BP et 0 erreur). Ses structs `RLExpStruct`, `RLBoneStruct`, `RLConstraintStruct` sont cherchées sous `/Game/CC_Shaders/…`, dossier absent du projet (`Content\CC_Shaders` inexistant). 421 BP chargés au lieu de 418 (+3, nouveaux assets CC_Shaders, estimé), 110 BP `/Game/` sur 110 compilent (inchangé). GI, Person, TopRight compilent sans diagnostic. Aucun lien avec les 5 options STE-H10 (estimé fort). À décider par l'orchestrateur / l'utilisateur : requalifier le critère (compter les BP du projet) ou traiter CC_Shaders (plugin Reallusion installé hier dans le moteur, à confirmer). - **E2 (mineur)** : défaut false de `SaveBeforeDestroy` et `RevertSkipped` non relu (dump sans valeur par défaut des membres). - **E3 (information)** : `GI:EventGraph` 6 243 au dump contre 6 241 annoncé par GI1 : écart de méthode (MCP `find_nodes` contre dump, 2 nœuds), le +9 est exact. Non rejoué : comportement en jeu, trace Insights (§ C.8), `Accessed None` en exécution, états « exposé », comportement de `LPMeshCompat::GetSkeletalMesh` sur nul, appelants de `GetSMBoolForSMC_Cloth` hors `IsGenitalExposed`. ## 6. Points à confirmer par l'utilisateur - [ ] E1 : accepter le critère CompileAllBlueprints comme PASS « projet seul » (110 / 110 BP `/Game/` et GI, Person, TopRight réussis), ou exiger 0 erreur globale (CC_Shaders à corriger). - [ ] E2 : accepter le défaut false estimé, ou le faire lire. - [ ] Preuve en jeu (§ C.8) : à faire sur build empaqueté. Fichiers écrits par cette VAL : `STE-H10-VAL.md` ; sorties de commandlets `STE-H10V_*.txt` sous `etat\ST\STE\` (9 dumps, 1 CompileAllBlueprints, 1 LPTestStringCompat) ; journaux sous `Saved\Logs\portage\`. Fichiers à commiter : A `Docs/Migration/etat/ST/STE/STE-H10-VAL.md` ; A `Docs/Migration/etat/ST/STE/STE-H10V_*.txt` (au choix du gardien). Tours : 31 / 50