LifePlay-Revival/Docs/Migration/etat/ST/STE/STE-H3f-DIAG.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

14 KiB

Fiche STE-H3f — Niveau N2 — Modèle prévu (modèle de l'agent lp-diag) | utilisé Opus 5.5 (claude-opus-5-5) — Agent lp-diag — Skills sk-protocol, ue-cpp-build, lp-commandlets, lp-paths

STE-H3f-DIAG : attribution des 3 familles Accessed None nouvelles en H3e-J (2026-10-13)

Abréviations : HJ = Docs\Migration\etat\ST\STE\STE-H3e-J\LifePlay.log (copie du journal de l'archive D:\Game\LifePlay_Build_5.8_CAM-B2_Development, mêmes numéros de ligne relus dans l'original) ; J6 = D:\Game\LifePlay_Build_5.8_STE-J6_Development\Windows\LifePlay\Saved\Logs\LifePlay.log ; GEV = etat\ST\STE\dumps\GI__EventGraph_V5.txt ; LH = etat\ST\STE\dumps\GI__LoadHairMeshIfNeeded_D9.txt ; B55 = D:\Game\LifePlay_Build_5.5_* ; P55 = D:\Game\LifePlay-master 5.5\Saved\Logs\portage\. Motif de comptage commun (outil Grep) : LogScript: Warning: Accessed None trying to read (\(real\) )?property (K2Node_CustomEvent_Person|PersonCumming|SkeletalMesh_2_\w+). Une fiche par famille (rubrique 1 de la fiche) : un DIAG, trois hypothèses d'origine, une par section F1 à F3.

1. Symptôme et reproduction

  • Grep Accessed None sur HJ : 13 lignes LogScript: Warning (HJ:1160, 1244, 6880, 6903, 6926, 9194, 9243, 9262, 15417, 15627, 15841, 16058, 16086) ; sur J6 : 9 (J6:1230, 1280, 1381, 2643, 5126, 7325, 7666, 8125, 8712). Conforme aux 13 / 9 de la fiche.
  • Familles de HJ absentes de J6 : K2Node_CustomEvent_Person (HJ:6880, 6926, plus l'affectation liée HJ:6903), PersonCumming (HJ:9243, 9262), SkeletalMesh_2_93573D… (HJ:16058, 16086). Les 5 Actor (isCreatureType) de J6 ont disparu en HJ (correctif H3d).
  • Reproduction : non rejouée (lecture seule, pas de jeu, rubrique 6). Les parcours sont décrits par famille ci-dessous.

F1 — K2Node_CustomEvent_Person (Person)

  • Lignes : HJ:6880 et HJ:6926 (13:38:54.909 et .912, image 294), HJ:6903 Accessed None attempting to assign variable (même image, même pile). Acteur Person_C_2147481981, ExecuteUbergraph_Person:64X.
  • Pile complète (HJ:6883-6891) : Room_C:ExecuteUbergraph_Room → Person_C:PlayIdle → PlayWorkDaily → ExecuteUbergraph_Person → PlayDaily → ExecuteUbergraph_Person → moveToPersonStand → ExecuteUbergraph_Person (tête).
  • Contexte de jeu : Room_C_0 test0608 generateperson (HJ:6874) → Person_C_2147481981 index SPAWN (HJ:6875) → idle played (HJ:6879) → erreur ; lieu « restaurant » (HJ:6949).

F2 — PersonCumming (GI)

  • Lignes : HJ:9243 et HJ:9262 (13:40:29.289, image 883), GI_C … ExecuteUbergraph_GI:64X.
  • Pile (HJ:9246-9252) : SexAction_C:BndEvt__ActionButton…OnButtonClicked → ExecuteUbergraph_SexAction → GI_C:cum → ExecuteUbergraph_GI → AfterCumSpeed → ExecuteUbergraph_GI (tête).
  • Contexte : SexAction_C_2147460580 Endsex (Animation String) (HJ:9242), clic sur un bouton d'action de fin d'acte.

F3 — SkeletalMesh_2_93573D9945CD4136090CCBA1F1188DAC (GI)

  • Lignes : HJ:16058 (13:43:43.368, image 350) et HJ:16086 (13:43:48.920, image 681), ExecuteUbergraph_GI:64X.
  • Pile (HJ:16061-16071) : Contact_C:BndEvt__ContactButton…OnButtonClicked → ExecuteUbergraph_Contact → OnClickContactButton → ExecuteUbergraph_Contact → GI_C:LoadPreset → GenerateAndApplyStrings → PlayerChangeRace → ExecuteUbergraph_GI → UpdateDefaultHair → ExecuteUbergraph_GI (tête).
  • Contexte : menu des contacts ; trois AddCreatureButton → GenerateCreature → SavePreset juste avant (HJ:15421, 15631, 15845 ; DestroyDummy was from AddCreature HJ:15433, 15643, 15857), puis clic sur un contact (LOAD ETHNIC test1811 HJ:16085, 16113 ; CLICK ON THE SAME BUTTON HJ:16114). Les LOAD ETHNIC antérieurs de HJ (3317, 10219, 10221, 15414) et ceux de J6 (J6:3718, 3970) ne lèvent pas l'erreur. Grep AddCreature|GenerateCreature sur J6 : 0.

2. Hypothèse testée (une seule)

H : chacune des trois familles est un défaut d'origine révélé par le parcours de HJ, et non un effet de Room B2 (CAM, non commité), de STE-H10 (DestroyPerson, SavePreset, GetSMBoolForSMC_Cloth, ClearProxies, RandomizeHairs, Current) ou de STE-H3d (CallFunctionReturnBool). Réfutée pour une famille si : elle est absente de tout journal antérieur à ces changements alors que son chemin y est exercé, ou si sa pile passe par un graphe modifié.

3. Essai et résultat brut

3.1 Comptes par journal (motif commun, outil Grep)

Journal F1 F2 F3 Source
HJ (CAM-B2, 0745917 + Room B2) 2 (+1 affectation) 2 2 lignes § 1
J6 (STE-J6) 0 0 0 Grep J6
CAM-B2 LifePlay-backup-2026.10.13-13.24.10.log 0 2 (l. 3170, 3181) 0 Grep
CAM-B1 / B1c / B1d (2026-10-13) 0 / 0 / 0 4 (l. 4289-4938) / 0 / 0 0 Grep
STE-J5 backup-2026.10.10-23.30.21 10 4 0 Grep
STE-H5b-C0 backup-2026.10.10-19.34.53 14 (compte des 3 motifs, F1 seule selon STE-H5b-C0.md:52) — 0 Grep count
STF-STE-LISIB (J3) 14 0 0 Grep
STC (2026-10-10) 0 2 (l. 3840, 3851) 0 Grep
STB-JEU2 / STB-JEU backup-2026.10.09-20.30.49 6 / 2 (l. 18574, 18600) 0 0 Grep
STF-STE, STE-H5b-TEMOIN 0 0 0 Grep
Toutes archives LifePlay_Build_5.8_* (Grep SkeletalMesh_2_93573D, glob */Windows/LifePlay/Saved/Logs/*.log) — — 2, CAM-B2 seul Grep count
B55 (DC4, Development, DebugGame) 38 au total 2 (DebugGame l. 68565, 68576) 0 Grep -o
P55 (journaux 5.5) — 56 sur 20 fichiers 270 sur 3 fichiers (L5b 93, L5c 40, L5c2 137) Grep count
P55 REF427_session_20260929_quete.log, ref427_partie_20260930.log (référence 4.27) 0 2 + 2 0 Grep

3.2 Piles antérieures relues

  • F1 : STB-JEU …backup-2026.10.09-20.30.49.log:18574-18585 et B55 DC4 …backup-2026.10.08-15.16.01.log:13674-13685 : même pile Room_C:ExecuteUbergraph_Room > PlayIdle > PlayWorkDaily > PlayDaily > moveToPersonStand, suivie de la même assign variable (DC4:13687). Déjà requalifié « défaut d'origine » (U8-T5cr2-VAL.md:133-140, STE-PASSATION.md:71).
  • F2 : STC LifePlay.log:3840-3849 même pile SexAction > cum > AfterCumSpeed ; 4.27 : REF427_session_20260929_quete.log:13936-13942 même pile SexAction_C:BndEvt__ActionButton > ExecuteUbergraph_SexAction > GI_C:cum ; ref427_partie_20260930.log:69939-69945 autre appelant (Person_C:UpdateOeChange > GI_C:UpdateOeForSexPersons). Signalé dès U3 (U3-T4-EDITEUR.md:20 « Set Rate | Accès None PersonCumming », jugé « chemin de jeu propre à une scène ») et U8 (U8-T5cr2-VAL.md:117).
  • F3 : P55 L5b_partie_utilisateur_20260929.log:11099-11115 : même queue de pile LoadPreset > GenerateAndApplyStrings > PlayerChangeRace > ExecuteUbergraph_GI > UpdateDefaultHair (entrée par Scene_C NextButton > ContinueScene > ReadSceneLine > CallFunction > GeneratePerson). Défaut voisin documenté : U7-SUIVI.md:70-79 (UpdateDefaultHair lit None après une reconstruction de GI.HairstyleTable, corrigé en U7-T12 pour ce cas seulement).

3.3 Graphe à la tête (dumps relus)

  • F2 : GEV:10896-10904 AfterCumSpeed (K2Node_CustomEvent_702) → VariableSet_9760 Rate ← CallFunction_1002 ; GEV:28040-28063 : VariableGet_720 PersonCumming → VariableGet_721 Race (StartsWith 'Dog') et VariableGet_722 IsMale → BooleanAND → bPickA de CallFunction_1002 (A = 0.0, B = 0.25, GEV:28036-28039). Deux lectures de PersonCumming = deux avertissements par clic. Avec PersonCumming = None, les deux lectures rendent la valeur par défaut, bPickA = false, Rate = 0.25 (estimé : sémantique d'une lecture Accessed None en Blueprint).
  • F3 : GEV:3701-3726 UpdateDefaultHair (K2Node_CustomEvent_5) : IsMale → IfThenElse_65 / _66 → LoadHairMeshIfNeeded (CallFunction_259 / _287, index CallFunction_229 / _254, GEV:19804-19830) → SetSkinnedAssetAndUpdate(HairSM, NewMesh = BreakStruct_12/13.SkeletalMesh_2) (CallFunction_662 / _661) → MacroInstance_5 / _4 (ForEach) sur VariableGet_1147 / _64 Materials dont self = BreakStruct_12/13.SkeletalMesh_2 (GEV:4143-4160, 19816-19818, 19835-19837). La lecture de Materials sur un maillage None lève l'avertissement ; HairSM a alors déjà reçu None. LH:11-80 : LoadHairMeshIfNeeded ne charge que si le maillage est invalide et chemin ≠ None et (Daz ou LegacyPercentage > 0), et getSkeletalMeshFromPath peut rendre None (asset introuvable) : trois cas où la table garde None.
  • F1 : pas de dump Person relu à l'offset 64X (rubrique 9 : budget ; la pile suffit à l'attribution).

3.4 Lien avec les changements récents

  • STE-H10 / H3d : Grep moveToPersonStand|PlayIdle|PlayDaily|PlayWorkDaily|AfterCumSpeed|PersonCumming|UpdateDefaultHair|LoadHairMeshIfNeeded|PlayerChangeRace|HairstyleTable|\bcum\b sur STE-H10*.md, STE-H3d*.md : seuls HairstyleTable et LoadHairMeshIfNeeded sont cités, comme lus par A1 (RandomizeHairs de Person appelle GI.LoadHairMeshIfNeeded, GI non modifié : STE-H10-SPEC.md:98-119, STE-H10-IMPL.md:34-40) ; aucun des graphes des trois piles n'est modifié par H10 ou H3d.
  • Room B2 : CAM-B2-DEMANDE.md:6-7 « Room seul … (PC, GI, Person non touchés) » ; CAM-B2-V7-BUILD.md:2, 90 : build HJ = HEAD 0745917 + Room seul modifié. GI de HJ = GI du dépôt : md5sum Content/BPs/GI.uasset → c4817b847ecf246c859647577647d6e9 (= C4817B84 de la fiche). Seule F1 a Room dans sa pile (Room_C:ExecuteUbergraph_Room en bas), mais la même pile existe avant B2 (STB-JEU 2026-10-09, DC4 5.5).
  • État git relu (git diff --stat HEAD -- Content/BPs/Room.uasset Content/BPs/Person.uasset Content/BPs/GI.uasset) : Room et Person modifiés dans l'arbre à cette heure ; Person n'était pas modifié au build HJ (CAM-B2-V7-BUILD.md:90 « Room seul modifié ») : constat hors périmètre, signalé.

4. Verdict : confirmée (par famille)

Famille Origine Niveau Preuve
F1 K2Node_CustomEvent_Person (Person, moveToPersonStand) défaut d'origine (≥ 5.5 DC4), révélé par le parcours ; ni B2, ni H10, ni H3d établi (même pile dans DC4 5.5 et STB-JEU 5.8, antérieurs à H10, H3d et B2) § 3.1, 3.2
F2 PersonCumming (GI, cum > AfterCumSpeed) défaut d'origine 4.27, révélé par le parcours (clic de fin d'acte) établi (même pile dans REF427) § 3.1-3.3
F3 SkeletalMesh_2 (GI, PlayerChangeRace > UpdateDefaultHair) défaut d'origine 5.5 (même queue de pile en L5b, 2026-09-29), révélé par le parcours contacts / créatures, jamais joué dans les archives 5.8 établi pour l'antériorité ; estimé pour la cause exacte du None (§ 3.3 : trois cas possibles) et pour l'absence de rôle de H10-A1 (UpdateDefaultHair appelle lui-même LoadHairMeshIfNeeded avant de lire : le cache rempli ou non par RandomizeHairs ne change pas la condition) § 3.1-3.4

Pourquoi absentes de J6 : chemins non exercés ou exercés autrement (estimé) : F3 suit AddCreature / contact, 0 en J6 ; F2 dépend de l'acte (J6 a un Endsex J6:2849 sans erreur) ; F1 dépend d'un PlayIdle de Room pendant un moveToPersonStand (24 generateperson en J6, 32 en HJ ; la condition de course n'est pas mesurée).

5. Hypothèse suivante proposée, et à quel niveau

Suites proposées (aucune lancée ; décisions à l'utilisateur) :

  • F1 : défaut d'origine accepté (avis déjà rendu à Big Boss, STE-PASSATION.md:71) ; si une garde est voulue : CART N2 sur Person:EventGraph moveToPersonStand (lecture du paramètre Person gardé par IsValid, format G7). Dump à faire lancer : .\Tools\RunCommandlet.ps1 -Lot STE-H3f -Commandlet LPDumpFunction -Args '-BP=Person -Fn=EventGraph -Pins -Exec' (forme reprise de fiches\STE-D.md:16-17). Aucun lien CAM : pas de renvoi.
  • F2 : garde G7 IsValid(PersonCumming) en amont de BooleanAND_101 dans AfterCumSpeed (else → bPickA = false) : même Rate = 0.25 qu'aujourd'hui (estimé § 3.3), donc sans changement de comportement ; ou défaut d'origine accepté (4.27). Dump déjà disponible (GEV) ; à rafraîchir avant SPEC : .\Tools\RunCommandlet.ps1 -Lot STE-H3f -Commandlet LPDumpFunction -Args '-BP=GI -Fn=EventGraph -Pins -Exec'.
  • F3 : garde G8 en deux temps. (a) Sans changement de comportement : IsValid(SkeletalMesh_2) avant les deux boucles MacroInstance_4 / _5 sur Materials (la boucle sur un maillage None ne fait rien aujourd'hui). (b) Avec changement : ne pas appeler SetSkinnedAssetAndUpdate quand le maillage est None (garder la coiffure en place au lieu de la vider) → Q1. Avant toute SPEC, un DIAG N2 pour fixer la cause du None (index CallFunction_229 / _254, chemin, Daz, LegacyPercentage, préréglage de créature) ; même dump GI que F2, plus -Fn=LoadHairMeshIfNeeded et -Fn=getSkeletalMeshFromPath.

Questions pour l'utilisateur :

  • Q1 (F3) : quand le maillage de coiffure par défaut est None, garder la coiffure précédente (b) ou laisser le personnage sans coiffure comme aujourd'hui (a seul) ?
  • Q2 (F1, F2) : défauts d'origine acceptés (aucune fiche) ou gardes G7 sans changement de comportement ?

Tours : 30 / 40

Constats

  • Piège d'outil, établi : Grep sur le dossier etat\ST\STE\dumps avec le motif SkeletalMesh_2_93573D|PersonCumming → 0 fichier ; le même motif sur le fichier GI__EventGraph_V5.txt → lignes 3719, 28040… Les .txt de etat/ sont ignorés par git (lp-paths) et ripgrep les saute même quand le dossier est passé en path ; il faut nommer le fichier.
  • Les comptes « 14 » de STE-H5b-C0 sont ceux du motif commun aux 3 familles ; la part F1 seule est reprise de STE-H5b-C0.md:52 (non recomptée séparément).
  • Non mesuré : condition exacte qui rend K2Node_CustomEvent_Person None (F1) ; préréglage du contact cliqué (F3) ; journaux 4.27 hors des deux fichiers REF427 de P55.
  • Lecture seule respectée ; un seul fichier écrit (ce livrable, non suivi). Aucun nom d'utilisateur ni chemin de profil cité.

Fichiers à commiter : A Docs/Migration/etat/ST/STE/STE-H3f-DIAG.md (dépôt jeu, branche ue5.8), par le gardien sur ticket.

Décisions de l'utilisateur (2026-10-13)

  • Q2 (F1 K2Node_CustomEvent_Person, F2 PersonCumming) : acceptés sans fiche (défauts d'origine, à consigner au registre des erreurs au prochain jeton du journal).
  • Q1 (F3 UpdateDefaultHair) : comportement actuel conservé : garde sans changement de comportement (pas de coiffure, sans le message) à spécifier avec G15 (même passage MCP sur GI) ; cause exacte non instruite.