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

15 KiB
Raw Blame History

Fiche STE-H3h — 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-H3h-DIAG : familles F-A (getRelatedPerson, Per) et F-B (isTemporary, CallFunc_Array_Get_Item_58 / _62) du journal COMMUN-2 (2026-10-13)

Abréviations : C2 = D:\Game\LifePlay_Backup_5.5\COMMUN-2\essais\LifePlay_commun2_definitif_BOSS.log ; HJ = etat\ST\STE\STE-H3e-J\LifePlay.log ; J6 = D:\Game\LifePlay_Build_5.8_STE-J6_Development\Windows\LifePlay\Saved\Logs\LifePlay.log ; L6e = D:\Game\LifePlay_Backup_5.5\builds_supprimees\LifePlay_Build_5.5_L6e\Logs\LifePlay.log (5.5) ; AB427 = D:\Game\LifePlay-master 5.5\Saved\Logs\portage\AB427_20261001.log (4.27 : LogInit: Engine Version: 4.27.2-18319896, AB427:133) ; RB = etat\ST\STE\dumps\GI__CallFunctionReturnBool_P1.txt (avant G13) ; GRP = etat\ST\STE\dumps\GI__getRelatedPerson_D3.txt ; CFV5 = etat\ST\STE\dumps\GI__CallFunction_V5.txt ; MOD = D:\Game\LifePlay-master 5.8\Content\Modules. Un DIAG, une hypothèse d'origine par famille (sections F-A, F-B). Outil : Grep / Read seulement, fichiers nommés (piège etat/ ignoré, H3f Constats).

1. Symptôme et reproduction

Comptes C2 (Grep, en-têtes LogScript: Warning seuls ; la synthèse de fin C2:85628-85653 est en LogLifePlay: Display avec [LogScript Warning], donc hors du motif) : motif Warning: (Accessed None.*(property Per in|CallFunc_Array_Get_Item_(58|62)|property Person in)|Script Msg: Attempted to access index) → property Per in 14 ; property Person in 8 ; _62 8 ; _58 8 ; Person_24_… of length 0 9 (7 getRelatedPerson + 2 isSameAs, C2:2371 et 3621, pile Action_C > CheckConditionsWho > … > isSameAs : hors fiche). Synthèse relue pour décompte : C2:85641 (16 _#), 85646 (14 Per), 85650 (9 of length), 85651 (8 isTemporary), 85652 (7 piles getRelatedPerson) : mêmes nombres. HJ et J6 : Grep GI_C:isTemporary|property Per in|getRelatedPerson → 0 et 0. Reproduction : non rejouée (rubrique 6).

F-A — Per dans GI.getRelatedPerson (7 appels, 14 + 7)

  • Lignes C2 (en-tête of length 0, puis 2 × Per) : 10020/10029/10048 (16:41:01.372), 10083/10092/10111 (16:41:01.622), 16667/16676/16695 (16:42:30.845), 23777/23786/23805 (16:47:34.790), 43843/43852/43871 (16:59:25.404), 63135/63144/63163 (17:09:10.110), 70366/70375/70394 (17:11:41.574).
  • Pile (C2:10032-10038) : ExecuteUbergraph_GI > PlayScene > ExecuteUbergraph_GI > ReadSceneLine > CallFunction > getRelatedPerson.
  • Contexte : une routine d'IA est en cours (C2:63114 GI CurrentScene=[/Modules/vin_Base/AI/high_priority/meal.lpai] 1 image avant ; C2:10138 [AI] 3 moves to fast_food juste après le 2e appel). Aucune ligne (RESULT OF GETRELATEDPERSON) dans la même image après les 7 appels (Grep GETRELATEDPERSON : 12115, 18560, 61213… jamais à 10029-10111, 63135-63163, 70366-70394) : branche Quick (GRP:332-336 : Quick → SpawnDummy, sinon PrintString … (RESULT OF GETRELATEDPERSON) GRP:299-314).

F-B — isTemporary (8) + CallFunc_Array_Get_Item_62 (8) + _58 (8) dans CallFunctionReturnBool

  • Quatre rafales de 6 lignes (2 Person + 2 _62 + 2 _58), et non une rafale de 24 : C2:60899-61008 (17:08:48.500), 73059-73168 (17:11:48.922), 76471-76580 (17:12:08.308), 80929-81038 (17:12:27.837).
  • Pile (C2:60903-60910) : ExecuteUbergraph_GI > UpdateCheckForScenes > ExecuteUbergraph_GI > CheckConditionsWho > CheckConditionsOther > CheckEachCondition > CallFunctionReturnBool > isTemporary ; _62 / _58 : même pile terminée à CallFunctionReturnBool (C2:60949-60955).
  • Scène en cours : chaque rafale suit CHECKING: /Modules/vin_Base/Scenes/misc/friend_bachelor_party.lpscene puis un seul Person_C_2147481860 index SPAWN (C2:60897-60898, 73057-73058, 76469-76470, 80927-80928) et finit par DestroyDummy was from CheckScenes, WHO unmatched (C2:61029). Les 3 contrôles antérieurs de la même scène, sans erreur, font deux SPAWN (C2:11616-11618, 17770-17772, 49885-49887 : …1884 puis …1860).
  • Condition WHO (MOD vin_Base\Scenes\misc\friend_bachelor_party.lpscene:4) : Actor = getRelatedPeople(Dating); If !Actor0.isDating() && !Actor1.isDating() && [Actor0.isSameGender(Player) || Actor1.isSameGender(Player)] : aucune commande isTemporary dans la scène ; isTemporary est appelé par la branche isDating de CallFunctionReturnBool (ci-dessous).

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

H : F-A et F-B sont des défauts d'origine (antérieurs à STE, STG-B1 et CAM-B2) révélés par le parcours de C2 ; ni H10, ni H3d (G13), ni H3g, ni Person B1, ni Room B2 n'entrent dans leur pile ou leur cause. Réfutée pour une famille si : sa pile passe par un graphe modifié par ces lots, ou si elle est absente d'un journal antérieur où son chemin est exercé.

3. Essai et résultat brut

3.1 F-A : nœud lecteur et entrée vide

  • GRP (getRelatedPerson, 53 nœuds, dump STE-D3 du 2026-10-10) : OptionalPerson non valide (GRP:315-319 IsValid → Is Not Valid) → GetVariable(Name = paramètre Person) (GRP:131-136) → GetArrayItem_2498 index 0 sur Person_24 (GRP:147-150) → VariableSet_0 Per (GRP:327-331). Tableau vide → message of length 0, Per = None.
  • Lecteurs : VariableGet_16607 Prefix et VariableGet_16608 SaveSlot, tous deux self = VariableGet_0.Per (GRP:151-156) → Concat → VariableSet_6264 Slot (GRP:157-170). Deux lectures = deux avertissements Per par appel (7 × 2 = 14) ; en 4.27, offsets distincts getRelatedPerson:0068 et :00A3 (AB427:55584, 55595).
  • Appelant : CFV5:2312-2321, CallFunction_175951 getRelatedPerson sert getRelatedPerson et getRelatedPersonQuick ; Person ← VariableGet 'VariableGet' (le sujet avant le point), OptionalPerson (vide).
  • Ligne de module : Grep (^|[^.\w])getRelatedPerson(Quick)?\( sur MOD → 2 lignes seulement sans sujet : vin_Base\AI\high_priority\so_follows.lpai:8 SO = getRelatedPersonQuick(Spouses, Dating) et vin_Base\Scenes\uni_tutor\tutee_cms.lpscene:24 (non Quick, jamais joué dans C2 : seulement 5 CHECKING). Grep getRelatedPersonQuick\( sur MOD → so_follows.lpai:8 seul.
  • 4.27, même séquence : AB427:55580 LoadTxt OK | '/Modules/vin_Base/AI/high_priority/so_follows.lpai' puis AB427:55581 of length 0, 55582 et 55593 Accessed None … property Per, pile identique PlayScene > ReadSceneLine > CallFunction > getRelatedPerson (AB427:55585-55602). LoadTxt OK.*so_follows : 11 dans AB427.

3.2 F-B : nœuds lecteurs et entrée vide

  • RB:297-318 : isDating → CallFunction_61514 GetVariable(ActualVariable) → GetArrayItem_775 index 0 sur Person_24 → sortie vers VariableGet_618 SaveSlot (self), EqualEqual_ObjectObject (= PlayerCharacter), IsRelative(Person), CallFunction_51 isTemporary(Person) (RB:2128-2131).
  • RB:338-342 : IfThenElse_946 (Person = PlayerCharacter ?) ; Person None ≠ PlayerCharacter → else → VariableSet_320 BoolToReturn = BooleanAND_1873( OR_4671( SaveSlot == Dating , Datings.Contains(SaveSlot) ), NOT IsRelative, NOT isTemporary ) (RB:269-273, 987-1000, 1220-1232, 2132-2135). SaveSlot est lu deux fois sur l'objet None (EqualEqual_3092 et Array_Contains_8287).
  • isTemporary lit Person deux fois : L6e:123480 isTemporary:001D et L6e:123493 isTemporary:0050 (dump de isTemporary absent : à faire, § 5).
  • isSameGender (RB:569-593) : GetArrayItem_519 → VariableGet_3355 IsMale (self) et VariableGet_33 (self) : deux lectures sur la même sortie.
  • Correspondance _62 / _58 ↔ nœud : estimée (les noms CallFunc_Array_Get_Item_N sont générés à la compilation, ils ne figurent pas dans le dump) : _62 ×2 = SaveSlot de GetArrayItem_775 (branche isDating, juste après isTemporary) ; _58 ×2 = IsMale / VariableGet_33 de GetArrayItem_519 (Actor1.isSameGender(Player), évalué ensuite car !isDating(None) laisse passer). Offsets 5.5 : _62 à 19F0 / 1A23, _58 à 2246 (L6e:123506, 123518, 123530), éloignés.
  • Entrée vide : pas de of length 0 avant C2:60899 → le tableau Person_24 d'un des acteurs contient un élément None (estimé : Actor1). Corrélé au SPAWN unique de C2:60898 contre deux SPAWN dans les contrôles sans erreur (§ 1). Depuis C2:57687 (17:08:16), le personnage du créneau 2 est porté par Person_C_2147481860 (avant : …1884, C2:49888) ; cause exacte du None non instruite (getRelatedPeople non dumpé).

3.3 Antériorité

Journal F-A F-B Source
C2 (COMMUN-2, 5.8) 7 appels (14 + 7) 4 rafales (8 + 8 + 8) § 1
HJ, J6 (5.8) 0 0 Grep § 1
L6e (5.5, 2026-09-30) non compté même pile, mêmes _62 / _58 L6e:123478-123530
L7i B12 (5.5) 7 piles getRelatedPerson selon STE-H3g-VALJEU.md:89 — non relu (Glob en échec : délai de ripgrep sur D:\Game\**)
AB427 (4.27) même pile, précédée de LoadTxt so_follows.lpai 0 AB427:55580-55602 ; Grep `isTemporary
AB427, friend_bachelor_party — 38 CHECKING sans isTemporary Grep AB427 (16239 … 193326)

3.4 Lien avec les changements récents

  • F-A : getRelatedPerson et CallFunction hors des graphes modifiés par H10 / H3d / H3g (STE-H3g-VALJEU.md:88) ; présente en 4.27 → aucun lien possible avec STG-B1 (Person), CAM-B2 (Room) ni STE.
  • F-B : fonction de tête CallFunctionReturnBool (graphe de G13), mais branches isDating (RB:297) et isSameGender (RB:569), distinctes de isCreatureType que G13 garde (STE-H3g-VALJEU.md:94) ; même pile et mêmes noms _62 / _58 en 5.5 L6e (2026-09-30), avant H3d (2026-10-13) : G13 ne joue aucun rôle. Ni Person ni Room dans la pile.

4. Verdict : confirmée (par famille)

Famille Cause Nœud lecteur Origine Niveau
F-A Per getRelatedPersonQuick(Spouses, Dating) sans sujet (so_follows.lpai:8) : le nom passé à GetVariable désigne une variable dont Person_24 est vide → Per = None GetArrayItem_2498 → VariableSet_0 Per ; lus par VariableGet_16607 Prefix et _16608 SaveSlot (GRP:147-156) défaut d'origine 4.27 (ligne de module + graphe) pile et nœud établis ; rattachement des 7 appels de C2 à so_follows.lpai estimé (seul appel Quick sans sujet, aucune trace RESULT, même séquence en 4.27 avec LoadTxt) ; nature exacte de la variable vide incertaine
F-B isTemporary + _62 / _58 WHO de friend_bachelor_party : getRelatedPeople(Dating) laisse un acteur dont l'élément 0 est None ; isDating puis isSameGender le lisent sans garde GetArrayItem_775 (→ isTemporary, SaveSlot) et GetArrayItem_519 (→ IsMale) défaut d'origine ≥ 5.5 (L6e) ; absent des journaux 4.27 relus (parcours) pile établie ; nœuds _62 / _58 estimés ; cause du None incertaine

Effet en jeu (estimé, valeurs par défaut d'une lecture None) : F-A : Slot = "" + "0" → la recherche se fait sur le créneau 0 au lieu de celui de l'IA (SO peut être le mauvais partenaire ou vide). F-B : la scène est rejetée (WHO unmatched, C2:61029) ; le résultat de isDating(None) dépend de GI.Dating (SaveSlot 0 == Dating ?) et n'est pas mesuré.

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

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

  • F-A : (a) défaut d'origine accepté (4.27), comme F1 / F2 de H3f ; (b) correction de module so_follows.lpai:8 → SO = AI.getRelatedPersonQuick(Spouses, Dating) (dépôt local Content/Modules, change le comportement : l'IA suivrait son propre partenaire) → Q1 ; (c) garde G13 dans getRelatedPerson : IsValid(Per) après VariableSet_0 (GRP:327), Is Not Valid → FunctionResult_2 (retour vide) ; change le comportement (aujourd'hui recherche sur le créneau 0) et SO.getUntil() lirait alors None plus loin → Q1. Recommandation : (a), ou (b) si l'utilisateur veut le comportement voulu par le script. Avant (c) : DIAG N2 « que vaut VariableGet pour une ligne sans sujet » (dump CallFunction / ReadSceneLine à jour).
  • F-B : (a) défaut d'origine accepté (≥ 5.5) ; (b) garde au format G13 dans CallFunctionReturnBool, branches isDating (après CallFunction_61514, IsValid(GetArrayItem_775.Output), sinon BoolToReturn = false → IfThenElse_8994) et isSameGender (même forme sur GetArrayItem_519) : change possiblement le résultat (aujourd'hui isDating(None) peut valoir vrai si SaveSlot 0 == Dating) → Q2 ; (c) DIAG N2 à la source : pourquoi getRelatedPeople(Dating) rend un acteur None (SPAWN unique, créneau 2 réaffecté à …1860). Recommandation : (c) puis décider (a) / (b).
  • Dumps à faire lancer (éditeur fermé, lp-commandlets) : .\Tools\RunCommandlet.ps1 -Lot STE-H3h -Commandlet LPDumpFunction -Args '-BP=GI -Fn=isTemporary -Pins -Exec' .\Tools\RunCommandlet.ps1 -Lot STE-H3h -Commandlet LPDumpFunction -Args '-BP=GI -Fn=getRelatedPeople -Pins -Exec' .\Tools\RunCommandlet.ps1 -Lot STE-H3h -Commandlet LPDumpFunction -Args '-BP=GI -Fn=getRelatedPerson -Pins -Exec' (rafraîchit GRP, D3) .\Tools\RunCommandlet.ps1 -Lot STE-H3h -Commandlet LPDumpFunction -Args '-BP=GI -Fn=CallFunctionReturnBool -Pins -Exec' (état après G13, avant toute SPEC)

Questions pour l'utilisateur :

  • Q1 (F-A) : accepter le défaut d'origine, corriger la ligne de module so_follows.lpai:8 (comportement voulu par le script), ou garder dans getRelatedPerson (retour vide) ?
  • Q2 (F-B) : accepter le défaut d'origine, ou instruire d'abord la cause (getRelatedPeople) avant une garde qui peut changer l'issue du WHO ?

Tours : 38 / 40

Constats

  • Écart à STE-H3g-VALJEU.md:93 : F-B n'est pas « une rafale de 24 lignes dans la même milliseconde » mais 4 rafales de 6 (17:08:48, 17:11:48, 17:12:08, 17:12:27) ; le total 24 est juste.
  • Les 2 of length 0 restants de C2 (2371, 3621) appartiennent à isSameAs (pile Action_C) : famille distincte, non instruite ici.
  • En 4.27, les lectures d'élément de tableau s'écrivent property CallFunc_Array_Get_Item sans suffixe (REF427 sans quête : 9635) : un Grep sur _58|_62 ne prouve rien en 4.27 ; l'absence de F-B y repose sur isTemporary = 0.
  • Non mesuré : HJ et J6 au-delà du Grep à 0 ; journal L7i B12 (non retrouvé dans le budget) ; nombre de so_follows joués dans C2 (pas de trace LoadTxt dans ce build) ; scène 5.5 de L6e ; valeur de GI.Dating ; offsets C2 (tous 64X, inutilisables).
  • Lecture seule respectée ; un seul fichier écrit (ce livrable). Aucun nom d'utilisateur ni chemin de profil cité.

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

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

  • Q1 (F-A, getRelatedPerson / so_follows.lpai:8) : défaut d'origine accepté (4.27), sans correctif ; registre ERR au prochain jeton du journal.
  • Q2 (F-B, isTemporary dans CallFunctionReturnBool, scène friend_bachelor_party) : défaut d'origine accepté (au moins 5.5), sans correctif ni DIAG de suite ; registre ERR au prochain jeton du journal.
  • Note de l'orchestrateur : la VALJEU H3g (l. 93) parlait d'une rafale de 24 lignes ; le DIAG en compte 4 de 6 (C2 l. 60899, 73059, 76471, 80929).