LifePlay-Revival/Docs/Migration/etat/REL/FIX1/FIX1-F7-PRE.md
2026-10-21 09:36:04 +02:00

235 lines
35 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Fiche FIX1-F7-PRE — Niveau N2 — Modèle prévu non précisé par la fiche | utilisé claude-sonnet-5-5 — Agent lp-cart — Skills sk-protocol, ue-cpp-build, lp-commandlets, lp-paths
# FIX1-F7-PRE : étude préliminaire de dimensionnement de F7 (ERR-011 : CenterBrow, animation « look », accessoires) et de F8b (meshZ au lever) (2026-10-20)
Hors gabarit : étude préliminaire (pas une CART complète), sur le modèle de `FIX1-F6-PRE.md`. Les rubriques 1 à 6 du gabarit CART sont gardées ; la rubrique 3 suit les quatre questions de la fiche (existant, localisation, dimensionnement et reproductibilité, recommandation), pour chacun des 4 sous-points : **F7a** avertissement CenterBrow, **F7b** animation « look » restée active, **F7c** accessoires détachés, **F8b** meshZ au lever. Lecture seule : ni copie UE, ni MCP, ni éditeur, ni commandlet. Seul ce fichier est écrit.
## Résumé (à lire en premier)
1. **La ligne FIX1 du doc 37 est à reclasser** : `37_Feuille_De_Route_Alpha2.md:171` range F6, F7 et F8 en « petits correctifs Blueprint par MCP » (`lp-mcp-bp`). Sur ces 4 sous-points, aucun n'est à la fois un correctif Blueprint net, avec un effet visible établi, et hors de GI.
2. **F7a CenterBrow** : le lecteur est dans **GI** (`CalculateHeadtrack`, établi sur le dump 5.5) ; la garde utile est donc en **build 2** (GI n'est révisé qu'une fois). Aucun effet visible (`Registre_Erreurs.md:25`). Présent dans 8 journaux sur 11 relevés (141 à 6 138 lignes) : pas déterministe.
3. **F7b « look »** : un seul constat (COMMUN-8, 2026-10-14), **aucune mesure depuis** (les lignes `STATE … currentAnimation=` n'existent que sous `-LPPersonsLog`, absent des 7 journaux COMMUN-15 à 21). Effet visible non établi. Un correctif d'un nœud dans Person est imaginable, mais ses consommateurs (`UpdateDailyPose`) sont à risque.
4. **F7c accessoires** : un seul constat « mineur » (COMMUN-7), sans recette, lieu du défaut non lu (Person `spawnProp` / attaches, ou donnée d'animation : inconnu).
5. **F8b meshZ** : **déjà neutralisé en C++** par M-Z (`LPDirectControlSubsystem.cpp:1200-1223`), validé en jeu (COMMUN-10) ; M-Z se déclenche **18 fois dans 9 journaux** (COMMUN-15 à 21), donc le défaut Blueprint est vivant, mais masqué. **Constat nouveau (estimé)** : les trois valeurs relevées −80,4 / −82,8 / −85,2 sont exactement −90 + 12 × {0,8 ; 0,6 ; 0,4}, la formule de `Person::updateHeelHeight` (talons). Si c'est la cause, forcer −90 (Blueprint ou M-Z) n'est pas un correctif et la ligne F8b est mal posée.
6. **Recommandation** : build 1 = F8a seul (déjà fait) plus, au choix de l'utilisateur, **une séance de mesure** sur le build COM21 existant (sans copie UE) et **l'instrumentation de la ligne M-Z** (C++, quelques lignes, dans la compilation déjà prévue). F7a, F7c, F8b en **build 2** ; F7b en build 1 **seulement** si la mesure montre un effet visible avant la porte du 23 au soir. Détail en § 3.4.
| Sous-point | Où (établi ou estimé) | Effet visible | Reproduction | Agent · niveau | Build |
|---|---|---|---|---|---|
| F7a CenterBrow | GI `CalculateHeadtrack` (établi, dump 5.5) ; appelé par les AnimBP `Daily` et `Daily_F` (estimé) | aucun (journal seul) | 8 journaux sur 11, apparition non déterministe | `lp-mcp-bp` N2 (garde dans GI), dump 5.8 d'abord | **2** |
| F7b « look » | Person : variable `currentAnimation` non vidée au lever (estimé) | non établi | 1 constat (14 octobre), aucune mesure depuis | `lp-diag` N2 (mesure), puis `lp-mcp-bp` N1 si effet | 1 sous condition, sinon après l'alpha |
| F7c accessoires | inconnu (Person `spawnProp` / attaches, ou donnée) | « mineur » | 1 constat, pas de recette | `lp-diag` N2 | pas en 1 |
| F8b meshZ | `Person::updateHeelHeight` (estimé) contre animations de place (hypothèse STG) : non tranché ; M-Z (C++) corrige déjà | corrigé en jeu | M-Z : 18 déclenchements en 9 journaux | `lp-impl` N1 (journal M-Z) ; correctif Blueprint : pas avant la mesure | **2** ou abandon |
## 1. Objet et périmètre
Un domaine : les défauts « animation et placement » de la ligne FIX1 hors F6 et hors F8a, soit F7 (`37_…:60` : « ERR-011 : avertissement CenterBrow ; animation « look » restée active ; accessoires détachés ») et la seconde moitié de F8 (`37_…:61` : « meshZ au lever dans le Blueprint »). Demande de Big Boss : ce qui est établi, ce qui reste et où (Blueprint : lequel ; C++ ; GI), dimensionnement et reproductibilité, recommandation (agent, niveau, durée, risque ; build 1 ou 2). Hors périmètre : F8a (`Aim`), F6, toute correction, tout essai.
## 2. Commandes et lectures (exactes) avec compte brut
| # | Commande ou lecture | Résultat brut |
|---|---|---|
| 1 | Read `gabarits.md` (CART), `FIX1-F6-PRE.md` | gabarit et modèle lus |
| 2 | Grep `ERR-011` dans `Docs/Registre_Erreurs.md` ; Read `:25` | 1 ligne, `Registre_Erreurs.md:25` (citée en § 3.1) |
| 3 | Grep `F7`, `F8b`, `meshZ`, `CenterBrow` dans `37_Feuille_De_Route_Alpha2.md` ; Read `:50-69`, `:160-194` | `:60`, `:61`, `:171` ; calendrier `:177-185` |
| 4 | Grep `CenterBrow`, `meshZ`, `PlayerBusy` dans `BOSS-ETAT.md` ; Read `:222-243`, `:62-73` | `:70`, `:234`, `:235` |
| 5 | Grep (compte) `CenterBrow` dans `etat/BOSS`, glob `*.log` | `Found 11033 total occurrences across 8 files.` (détail en § 3.1) |
| 6 | Glob `*.log` dans `D:\Game\LifePlay_Build_5.8_Development_COM21\Windows\LifePlay\Saved\Logs` | 3 fichiers : `LifePlay.log`, `LifePlay-backup-2026.10.20-17.25.35.log`, `LifePlay-backup-2026.10.20-17.27.13.log` |
| 7 | Grep (compte) `CenterBrow` puis `GetSocketInfoByName` dans ce dossier | `LifePlay.log:148` ; `LifePlay.log:669` et `…17.27.13.log:119` |
| 8 | Grep (compte) `GetSocketInfoByName` dans `etat/BOSS`, glob `COMMUN-2*/*.log` | `COMMUN-21_session_1925_rotation.log:119`, `COMMUN-21_session_1927.log:669`, `COMMUN-20_session_1710.log:790` ; total 1578 |
| 9 | Grep (compte) `GetSocketInfoByName\((Head\|hip\|pelvis\|chestUpper)\)` dans `LifePlay.log` (COM21) | `521` |
| 10 | Grep `GetSocketInfoByName\(CenterBrow\)` dans `LifePlay.log` (COM21), 3 premières lignes puis `offset 145` | `:1645` (17:33:24.838), `:1676`, `:1712` ; `:2872`, `:2873` (17:36:01.238), `:2916` (ligne de bilan « 147 [LogSkinnedMeshComp Warning] … ») |
| 11 | Grep `Person_C_2147481923` dans `LifePlay.log` (COM21), 8 premières | `:1060` (BeginPlay), `:1275-1276` (`index SPAWN`, `DESTROY…`), `:1278-1281` (Head ×2, pelvis, chestUpper à 17:32:08.569) |
| 12 | Grep `M-Z :` dans `etat/BOSS`, glob `COMMUN-{15..21}/*.log`, mode contenu ; puis mode compte (`COMMUN-*/*.log`) | 18 lignes (liste en § 3.1) ; compte : 9 fichiers, `Found 18 total occurrences across 9 files.` |
| 13 | Grep (compte) `currentAnimation=fnt` et `meshZ=` dans les journaux COMMUN-15 à 21 ; `currentAnimation=fnt` dans `LifePlay.log` COM21 | `No matches found` (trois fois) |
| 14 | Read `LPDirectControlSubsystem.cpp:1196-1227` ; Grep `meshZ`, `M-Z` dans `Source` | M-Z `:1200-1223`, `MeshZScans` (`.h:88-89`) ; `LPDebugSubsystem.cpp:414` (ligne `STATE … meshZ= … currentAnimation=`) |
| 15 | Read `LPDebugSubsystem.cpp:385-424`, `:628-647` | `STATE` écrit par `WritePersonsDump` ; déclenché par `-LPPersonsLog[=s]` (`:639-643`) ou la console `LifePlay.PersonsDump` (`:631-634`) |
| 16 | Grep `CenterBrow`, `CalculateHeadtrack`, `HeadtrackTarget` dans `etat/portage55/L6f/L6f_dump_GI.txt` ; Read `:42272-42301` | `:42284`, `:42296`, `:42592`, `:42609` ; en-tête `:42273` ; appels `Person_C::FaceHeadtrackTarget` `:42832`, `:42834` |
| 17 | Grep `^=== Person ::` (par tranches), `NewLocation = '`, `RelativeLocation\|currentAnimation\|…`, `updateHeelHeight`, `HeelHeight` sur `L6f_dump_Person.txt` (fichier nommé) ; Read `:19736-19835`, `:39405-39430` | en-têtes cités en § 3.2 ; `updateHeelHeight` appelée `:2528`, `:3767`, `:3772`, `:3794` ; définie `:19714` |
| 18 | Grep `updateHeelHeight` sur `L6f_dump_GI.txt` (fichier nommé) | `:25258` (`Person_C::updateHeelHeight()`) |
| 19 | Bash, depuis la racine : `for f in $(rg --files -g "Person.uasset" -g "GI.uasset" -g "Daily.uasset" -g "Daily_F.uasset" Content); do echo "== $f"; rg -a -o -e CalculateHeadtrack -e updateHeelHeight -e unOccupyFnt -e HeadtrackTarget -e CenterBrow -e spawnProp -e PlayFntAnim "$f" \| sort \| uniq -c; done` | `Daily` : CalculateHeadtrack 3, HeadtrackTarget 1 ; `Daily_F` : idem ; `GI` : CalculateHeadtrack 12, CenterBrow 5, HeadtrackTarget 2, spawnProp 2, unOccupyFnt 1, updateHeelHeight 1 ; `Person` : CenterBrow 3, HeadtrackTarget 3, PlayFntAnim 2, spawnProp 5, unOccupyFnt 8, updateHeelHeight 4 ; `exit=0` (comptes **bruts de correspondances dans le binaire** : preuve de présence du nom, pas de nœuds) |
| 20 | Read `STE-H4-DIAG.md`, `STE-J6-TRACE.md:187-232`, `STG-COMMUN8-DIAG.md`, `STG-COMMUN9-DIAG.md`, `STG-MZ-IMPL.md`, `KEY2-DIAG-01.md:14-25`, `JOURNAUX1/ERR-brouillons.md` | cités en § 3 |
| 21 | Glob `**/*D8*` sous `etat/ST/STE` ; Glob `*` sous `etat/REL/FIX1` | `No files found` ; 10 fichiers (F6 PRE, SPEC, IMPL, VAL, journaux de build) |
Écart de méthode à signaler, deux Grep de dossier **non concluants** : un Grep de dossier sur `etat/portage55/L6f` (motifs `unOccupyFnt`, `^=== Person :: …`, `updateHeelHeight`) a rendu `No matches found` alors que les mêmes motifs trouvent des lignes quand le fichier `.txt` est nommé (n° 17 et 18 : `updateHeelHeight` `:19714`, `:2528`…). Les `.txt` d'`etat/` sont ignorés par git (`.gitignore:53`) et un Grep de dossier les saute. **Un résultat vide d'un Grep de dossier sur `etat/` (hors `.md`/`.csv`) ne prouve rien** ; nommer le fichier (à verser). Les dumps de Blueprint lus sont ceux de 5.5 (L6f, 2026-09-30) : l'état des Blueprint en 5.8 n'a pas été relu (le `rg -a` du n° 19 ne prouve que la présence des noms).
## 3. Constats `fichier:ligne`
### 3.1 État de l'existant (question 1)
**F7a, avertissement CenterBrow**
| Constat | Source | Niveau |
|---|---|---|
| ERR-011 : signature `GetSocketInfoByName … No SkeletalMesh for CharacterMesh`, « 80/perso en 4.27, 76 en 5.5 », gravité « bruit (existe en 4.27) » ; part F5 du DESTROY corrigée (CHG-326) ; mise à jour JOURNAUX1 du 2026-10-14 : variante `CenterBrow` « à chaque image sur des Person détruites, sans effet visible (COMMUN-5, COMMUN-6) ; rattachement à confirmer » | `Docs/Registre_Erreurs.md:25` ; `COMMUN-6-BILAN.md:33` | établi |
| Le brouillon JOURNAUX1 classe le rattachement « non établi » (statut « en cours ») | `JOURNAUX1/ERR-brouillons.md:91`, `:104` | établi |
| Classé « Après l'alpha (non ouverts) » avec la « animation look » et les « accessoires détachés » | `BOSS-ETAT.md:235` | établi |
| STE-H4 (J5) : 6 408 lignes `CenterBrow` (31,3 % du journal) ; lecteur **estimé fort** : GI `CalculateHeadtrack`, appelé par l'`EventGraph` des AnimBP `Daily` et `Daily_F` pour un vivant dont le `HeadtrackTarget` est resté sur un mannequin caché ; voie D = garde dans `CalculateHeadtrack` (`IsValid(Target)` et corps présent) ou vider le `HeadtrackTarget` au DESTROY ; **dumps STE-D8 requis** | `STE-H4-DIAG.md:6`, `:53`, `:88-105`, `:205-208`, `:262-273` | établi (texte) ; lecteur estimé |
| Les dumps STE-D8 n'ont pas été produits | Glob `**/*D8*` sous `etat/ST/STE` : `No files found` | établi (cherché dans ce dossier seulement) |
| Effet de C0 sur `CenterBrow` : 6 408 (J5), 6 227 (H9), 528 (J6) ; « la part de C0 dans cette baisse reste incertaine » | `STE-J6-TRACE.md:223`, `:229-231` | établi |
| Aucune garde `CenterBrow` n'a été livrée : la ligne `CenterBrow` revient dans les journaux de COM21 | § 3.1 ci-dessous | établi |
Comptes de `CenterBrow` dans les journaux récents (Grep en mode compte, n° 5 et 7 ; un fichier absent de la sortie compte pour 0) :
| Journal | `CenterBrow` | `GetSocketInfoByName` (tous sockets) |
|---|---|---|
| `COMMUN-14\COMMUN-14.4-17_LifePlay_20261020-0757.log` | 141 | non mesuré |
| `COMMUN-15\…_encours.log` | 0 | non mesuré |
| `COMMUN-16\COMMUN-16_session_1131.log` | 0 | non mesuré |
| `COMMUN-16\COMMUN-16_session_1136.log` | 649 | non mesuré |
| `COMMUN-16\COMMUN-16_session_1207.log` | 151 | non mesuré |
| `COMMUN-17\COMMUN-17_session_1253.log` | 302 | non mesuré |
| `COMMUN-18\COMMUN-18_session_1358.log` | 6 138 | non mesuré |
| `COMMUN-19\COMMUN-19_session_1457.log` | 3 355 | non mesuré |
| `COMMUN-20\COMMUN-20_session_1710.log` | 149 | 790 |
| `COMMUN-21\COMMUN-21_session_1925_rotation.log` | 0 | 119 |
| `COMMUN-21\COMMUN-21_session_1927.log` | 148 | 669 |
| COM21 `Saved\Logs\LifePlay.log` | 148 | 669 |
| COM21 `…backup-2026.10.20-17.27.13.log` | 0 | 119 |
Somme des 8 journaux non nuls : 11 033 (concorde avec la sortie de l'outil). Le journal `COMMUN-21_session_1927.log` a les mêmes comptes que `LifePlay.log` de COM21 (148 et 669) : copie probable (MD5 non comparés). **Précision** : sur COM21, le compte 148 inclut **la ligne de bilan du journal** (`LifePlay.log:2916`, « 147 [LogSkinnedMeshComp Warning] GetSocketInfoByName(CenterBrow) … ») : il y a **147 avertissements**, et de même 669 = 148 + 521 (n° 9) ; la présence d'une ligne de bilan dans les autres journaux n'a pas été vérifiée.
Détail COM21 : les premières et dernières lignes `CenterBrow` (`:1645`, `:1676`, `:1712`, `:2872`, `:2873`) visent toutes `Person_C_2147481923`, acteur qui passe par `index SPAWN` puis `DESTROY…` (`:1275-1276`) ; les avertissements `CenterBrow` commencent à 17:33:24.838 (`:1645`), 76 s après le SPAWN, et finissent à 17:36:01.238 (`:2873`), soit 2 min 36 s. La cadence (une ligne par image ou non) n'a pas été établie. Les 521 autres lignes sont les sockets Head, hip, pelvis, chestUpper (part « bruit accepté » d'ERR-011).
**F7b, animation « look » restée active**
| Constat | Source | Niveau |
|---|---|---|
| COMMUN-8 (2026-10-14, 09:13:44-09:14:04) : le joueur garde `currentAnimation = fnt_new038-f-0-look` dans la rue puis au café, avec `meshZ -80,4` ; « animation de meuble restée active après le changement de pièce (Blueprint d'origine, estimé) » ; « Elle peut ajouter une posture penchée, mais ce n'est pas elle qui enfonce » ; versé à STE, « après l'alpha sauf effet visible » | `STG-COMMUN8-DIAG.md:22`, `:61-63`, `:73-74`, `:84-85` | établi (observation) ; cause estimée |
| `currentAnimation` reste aussi renseigné après un lever ordinaire (`fnt_new048-f-0-sit`, journal COMMUN-9) : M-Z ne l'utilise donc pas comme garde | `STG-MZ-IMPL.md:45-46` | établi |
| Registre des brouillons : N45, gravité faible (« mineur »), « ouvert, non instruit », 1 constat | `JOURNAUX1/ERR-brouillons.md:76` ; `JOURNAUX1/SUIVI-propositions.md:53` | établi |
| Effet visible : non établi ; **aucune mesure depuis le 14 octobre** : les journaux COMMUN-15 à 21 ne contiennent ni `currentAnimation=fnt` ni `meshZ=` (n° 13), parce que la ligne `STATE` n'est écrite que sous `-LPPersonsLog` ou `LifePlay.PersonsDump` | `LPDebugSubsystem.cpp:414`, `:631-643` | établi |
**F7c, accessoires détachés**
| Constat | Source | Niveau |
|---|---|---|
| Seul constat : « Accessoire de place mal attaché (assiette et sandwich près de l'épaule) : mineur » (COMMUN-7) ; « hors B2q » | `BOSS/COMMUN-7-BILAN.md:28` ; `STG-B2q-IMPL.md:70` ; `JOURNAUX1/ERR-brouillons.md:76` | établi |
| À ne pas confondre : « les accessoires restent visibles » pendant que le personnage assis disparaît (N36) est un autre défaut, **corrigé et validé en jeu** (B2q, COMMUN-9 P1, COMMUN-10 Q6) | `COMMUN-7-BILAN.md:20` ; `JOURNAUX1/ERR-brouillons.md:70` | établi (le bilan COMMUN-10 lui-même n'a pas été relu) |
| La formule « accessoires détachés » de `BOSS-ETAT.md:235` et du doc 37 résume ce seul constat (estimé) | `BOSS-ETAT.md:235` ; `37_…:60` | estimé |
**F8b, meshZ au lever**
| Constat | Source | Niveau |
|---|---|---|
| Symptôme (COMMUN-9) : les pieds sont à 9,8 cm au-dessus du sol (`delta -9.8`) alors que la capsule est au sol ; `meshZ` relatif −80,4 (ou −82,8) au lieu de −90 ; « rien ne remet −90 au lever » ; PNJ féminines debout concernées (12 relevés, `currentAnimation=-`) ; lecture : `unOccupyFnt` et `PlayIdle` ne rétablissent pas la position du maillage (Blueprint d'origine, **estimé**) | `STG-COMMUN9-DIAG.md:16-31` | établi (mesure) ; cause estimée |
| **Contournement C++ livré** : M-Z dans `FitPersonBounds` (balayage de 0,5 s) remet le Z relatif du maillage à celui du gabarit de la classe (−90 pour `Person_C`) si : aucun meuble, pas de scène, capsule en collision, écart > 1 cm, **2 balayages de suite** | `LPDirectControlSubsystem.cpp:1200-1223` ; `STG-MZ-IMPL.md:26-46` | établi |
| Validé en jeu : « plus de flottement après le lever, M-Z confirmé » (COMMUN-10 Q4) | `JOURNAUX1/ERR-brouillons.md:75` (qui cite `C10-BILAN:14`) | établi (bilan non relu) |
| **M-Z se déclenche encore** : 18 lignes `M-Z :` dans 9 journaux (COMMUN-15 : 1 ; 16/1131 : 1 ; 16/1136 : 3 ; 16/1207 : 1 ; 17 : 4 ; 18 : 4 ; 19 : 1 ; 20 : 2 ; 21 : 1). 16 sur `PlayerCharacter`, 2 sur des PNJ. Valeurs d'origine : −80,4 ×5 ; −85,2 ×6 ; −88,0 ×7 | n° 12 (ex. `COMMUN-20_session_1710.log:1666`, `COMMUN-17_session_1253.log:1484`, `COMMUN-18_session_1358.log:3367`) | établi |
| Dans le dump 5.5 de Person, la seule fonction qui écrit un Z de maillage autre que −90 est **`updateHeelHeight`** : si le tableau de chaînes contient `Heels`, `HeelHeight` = dernière chaîne convertie en nombre, puis `Mesh.K2_SetRelativeLocation(0, 0, −90 + 12 × HeelHeight)` ; sinon `HeelHeight = 0` et Z = −90. Les autres écritures de Z sont le −90 littéral (`:19832`, `:39421`) | `L6f_dump_Person.txt:19714`, `:19754`, `:19778-19790`, `:19804-19832` ; grep `NewLocation` : `:8315-8370` (X/Y des composants de pénis), `:19832`, `:39421` | établi (dump 5.5) |
| `updateHeelHeight` est appelée par `Strip` (`:2528`) et `Dress` (`:3767`, `:3772`, `:3794`) dans Person, et une fois dans GI (`:25258`) ; **pas** par `PlayIdle`, `unOccupyFnt`, `standIdle` ni `jumpOffFnt` (leurs en-têtes : `:12042`, `:12836`, `:13117`, `:13536` ; aucune occurrence entre ces lignes dans le Grep du fichier) | `L6f_dump_Person.txt` ; `L6f_dump_GI.txt:25258` | établi (dump 5.5) |
| Les valeurs relevées sont exactement −90 + 12 × H pour H = 0,8 (−80,4), 0,6 (−82,8), 0,4 (−85,2) ; −88,0 (7 occurrences sur 18) n'est pas sur cette grille (2,0 / 12 = 0,1667) | calcul sur § 3.1 et `STG-COMMUN9-DIAG.md:22` | **estimé** (coïncidence arithmétique, non mesurée) |
| `meshZ = −88` figure aussi dans l'étude des caméras de scène | `CAM-COMMUN9-DIAG.md:14` | établi (ligne seule lue) |
| À ne pas confondre avec « personnage enfoncé » : l'enfoncement dans la rue (ancien ERR-128) vu à COMMUN-15 venait de `PlayerBusy` resté vrai après une visite de l'onglet Clavier (`LiftSunkPersons` ne relevait pas le joueur) ; corrigé en C++ (fermeture des réglages pendant une capture, `5ff9f26d`), COMMUN-16.22 PASS. Le `meshZ` relevé, lui, **fait flotter**, il ne fait pas enfoncer | `KEY2-DIAG-01.md:20-24` ; `BOSS-JOURNAL.md:815`, `:840` | établi |
### 3.2 Où est le reste (question 2)
| Sous-point | Où | Preuve | Niveau |
|---|---|---|---|
| F7a | **GI** : fonction `CalculateHeadtrack` (44 nœuds) lit `GetSocketLocation('CenterBrow')` sur le `Mesh` de `From` (`K2Node_CallFunction_3`) et de `To` (`K2Node_CallFunction_1`) ; elle appelle `Person_C::FaceHeadtrackTarget` ; deux autres lectures de `CenterBrow` dans GI, fonction non identifiée | `L6f_dump_GI.txt:42273-42296`, `:42592`, `:42609`, `:42832`, `:42834` | établi (dump 5.5) |
| F7a | **AnimBP `Daily` et `Daily_F`** portent le nom `CalculateHeadtrack` (3 correspondances chacun) : appelants (estimé, déjà dit par STE-H4) | `rg -a -o` n° 19 ; `STE-H4-DIAG.md:95-97` | estimé |
| F7a | **Person** : `FaceHeadtrackTarget` lit aussi `CenterBrow` ; `Person.uasset` : 3 correspondances | `STE-H4-DIAG.md:91-94` ; n° 19 | établi (texte STE-H4) |
| F7a | Aucun C++ ne lit `CenterBrow` : **non cherché ici** (STE-H4 : 0 pour `chestUpper` dans `Source` et `Plugins`) | `STE-H4-DIAG.md:302-304` | incertain |
| F7b | **Person** : la variable `currentAnimation` est lue par `UpdateDailyPose` (`SetAnimationMode` puis deux affectations `Animation` ← `currentAnimation`), `SetAnimationAsset`, `unOccupyFnt` (lectures seules) ; elle est écrite dans le graphe d'événements (affectée `:33526`, vidée `:33341` et `:38779`) | `L6f_dump_Person.txt:12615-12682` (en-tête `UpdateDailyPose` `:12615`), `:12780-12815`, `:12836-12844`, `:13042`, `:33341`, `:33526`, `:38779` | établi (dump 5.5) |
| F7b | `unOccupyFnt` ne contient **pas** d'affectation de `currentAnimation` (les trois affectations sont au-delà de la ligne 33000) ; si l'une des deux remises à vide tourne au lever ou au changement de pièce : inconnu | grep `currentAnimation` sur le dump | établi (absence dans la fonction) ; reste inconnu |
| F7c | **Person** : `spawnProp` (`:14529`), `clearProps` (`:14582`) ; 7 nœuds `K2_AttachToComponent` dans le graphe d'événements (`:37915-38461`) ; `spawnProp` 5 correspondances dans Person et 2 dans GI | dump Person ; n° 19 | établi (existence) ; lieu du défaut inconnu |
| F8b | **Person** `updateHeelHeight` (Blueprint, appelée par `Strip`, `Dress`, GI) ; **C++** M-Z dans `LPDirectControlSubsystem` | § 3.1 | établi |
| F8b | `PlayIdle` / `unOccupyFnt` ne rétablissent pas le Z (STG) : consistant avec l'absence d'appel à `updateHeelHeight` ; `PlayFntAnim` (2 correspondances dans `Person.uasset`) : sa définition n'est pas dans les en-têtes lus, le dump la montre appelée au graphe d'événements (`:33740`) | `L6f_dump_Person.txt:33740` ; n° 19 | établi (appel) ; effet sur le Z inconnu |
GI touché ? **F7a : oui** (la garde naturelle est dans `GI::CalculateHeadtrack`, voie A de § 3.3), donc build 2 selon la révision unique de GI (`BOSS-JOURNAL.md:693`, `:870` : « révision unique en build 2 »). F7b, F8b : **non** (Person, C++). F7c : inconnu. Les AnimBP `Daily` et `Daily_F` ne seraient pas à modifier pour la voie A.
### 3.3 Dimensionnement et reproductibilité (question 3)
**F7a**
| Voie | Contenu | Taille (estimée) | GI ? |
|---|---|---|---|
| A, garde dans `CalculateHeadtrack` | avant `K2Node_CallFunction_1` et `_3` : `IsValid(From)`, `IsValid(To)` et maillage présent (`GetSkinnedAsset` valide), sinon retour sans calcul | 4 à 8 nœuds sur 44, 2 coupures (comparable aux 2 à 3 nœuds de la voie C de STE-H4, `STE-H4-DIAG.md:199`) | **oui** |
| B, à la cause | vider le `HeadtrackTarget` des vivants qui visent un mannequin au DESTROY, ou exclure les mannequins cachés de `getNearestDummy` | non dimensionnable : « la chaîne exacte (qui pose le `HeadtrackTarget`, pourquoi il reste) » est inconnue (`STE-H4-DIAG.md:252`) | probablement (GI et Person) |
| C, réglage de journal | abaisser la verbosité de `LogSkinnedMeshComp` par configuration | 1 ligne de configuration ; **masque** aussi les 521 lignes des autres sockets et les vrais cas ; effet en Shipping non lu | non |
| D, ne rien faire | l'avertissement existe depuis la 4.27 (`Registre_Erreurs.md:25`) | 0 | non |
Reproduction : non déterministe. 8 journaux sur 11 contiennent `CenterBrow` (de 141 à 6 138 lignes), 3 n'en ont aucune ; sur COM21 la série commence 76 s après le SPAWN d'un mannequin et dure 2 min 36 s. La condition d'apparition (un vivant dont le `HeadtrackTarget` pointe un mannequin sans corps) est **estimée**, pas démontrée. **Preuve en jeu** : build Development (journal avec avertissements), jouer jusqu'à au moins un `index SPAWN` suivi de `DESTROY`, attendre 3 minutes, compter `GetSocketInfoByName(CenterBrow)` (Grep en mode compte, moins la ligne de bilan). Critère : 0 ligne `CenterBrow` avec au moins un SPAWN, les 521 autres lignes inchangées. Une session à 0 sans SPAWN ne prouve rien (3 journaux de référence sont à 0). Le Shipping n'a pas été examiné (`bUseLoggingInShipping` non lu, `STE-H4-DIAG.md:253-254`).
**F7b**
| Critère | Établi | Estimé | Inconnu |
|---|---|---|---|
| Correctif | — | un nœud « affecter `currentAnimation` = vide » en fin de `unOccupyFnt` ou à l'entrée d'une pièce (Person seul, 1 nœud, 2 liens) | si un autre chemin relit `currentAnimation` après le lever : `UpdateDailyPose` le réaffecte à `Animation` (`:12635-12682`), donc vider peut changer ce que ce chemin joue ; risque moyen |
| Effet visible | aucun établi | posture penchée possible (`STG-COMMUN8-DIAG.md:62-63`) | tout |
| Reproduction | 1 constat (COMMUN-8) : `look` d'un meuble (vitrine), puis changement de pièce | — | si le clip joue encore (`anim=single:…`) ou si seule la variable est périmée |
Preuve en jeu : sans copie UE, avec le build COM21 lancé avec `-LPPersonsLog=2` (`LPDebugSubsystem.cpp:639-643`), utiliser l'action « regarder » sur un meuble de boutique, sortir, relever pendant 30 s la ligne `STATE PlayerCharacter … anim=… currentAnimation=…`. Attendu avant correctif : `currentAnimation=fnt_…-look` (COMMUN-8). Après : `currentAnimation=-`, et `anim=` sans `single:…look`. Un essai sans effet visible clôt F7b (« ne pas corriger »).
**F7c**
Taille : non dimensionnable. Une attache de prop mal placée peut venir du Blueprint (`spawnProp`, 7 attaches), d'un décalage de donnée d'animation, ou de la pose de la place (lien avec le Z du maillage : non démontré). Reproduction : aucune recette (1 constat, « mineur », assiette et sandwich ; meuble et animation non notés dans le bilan). **Preuve en jeu** à définir après une première reproduction avec capture d'écran (même place, mêmes accessoires, avant et après).
**F8b**
| Critère | Établi | Estimé | Inconnu |
|---|---|---|---|
| Cause | le Z relatif du maillage n'est pas −90 après le lever et rien dans `PlayIdle` / `unOccupyFnt` ne le remet | −90 + 12 × HeelHeight (talons, `updateHeelHeight`) pour −80,4 / −82,8 / −85,2 | le chemin qui écrit −88,0 (7 cas sur 18) ; si le joueur et les PNJ concernés portent des talons ; le lien avec le premier meuble utilisé (`STG-COMMUN9-DIAG.md:24`) |
| Contournement | M-Z, 18 déclenchements en 9 journaux | M-Z corrige 1 s au plus tard après le lever | M-Z force −90 **sans lire `HeelHeight`** : si les talons sont la cause, il retire un décalage voulu par le Blueprint ; sa validation (« plus de flottement ») ne dit rien sur les talons |
| Correctif Blueprint | — | « appeler `updateHeelHeight` en fin de `unOccupyFnt` » (Person seul, 1 nœud d'appel) rétablirait −90 + 12 H plutôt que −90 : **hypothèse**, `updateHeelHeight` lit le tableau de vêtements | effet sur la pose assise ; GI appelle `unOccupyFnt` (1 correspondance dans `GI.uasset`) |
Reproduction : **fiable avec les journaux** (M-Z écrit une ligne à chaque correction). Preuve en jeu : (1) compter les lignes `M-Z :` sur une séance avec au moins un meuble utilisé puis quitté : valeur de référence 1 à 4 par séance (COMMUN-15 à 21) ; (2) après un correctif Blueprint, M-Z doit rester **silencieux** (0 ligne) sur la même séance ; (3) départage talons / place : habiller le joueur sans talons, s'asseoir, se lever, relever `meshZ=` (nécessite `-LPPersonsLog`) ; ou ajouter `HeelHeight` à la ligne M-Z (voir § 3.4).
### 3.4 Recommandation (question 4)
**Agent, niveau, durée (estimés), risque, build**
| Sous-point | Étape | Agent · niveau | Durée (estimée, non mesurée) | Risque | Build |
|---|---|---|---|---|---|
| F7a | dump 5.8 de `CalculateHeadtrack` (`LPDumpFunction -BP=GI -Fn=CalculateHeadtrack -Pins -Exec`, éditeur fermé : copie UE) ; IMPL de la garde ; VAL | `lp-mcp-bp` N2 pour l'IMPL (GI par MCP, instantané avant) ; `lp-validator` N2 | dump 5 tours ; IMPL 15 à 25 tours ; VAL 10 à 15 tours ; essai 15 à 20 min de jeu | faible pour le jeu (garde sur un nœud lu) ; risque de calendrier : GI n'est révisé qu'une fois, la garde doit partir avec les autres retouches de GI | **build 2** |
| F7b | mesure sans copie UE (build COM21, `-LPPersonsLog=2`), puis éventuellement 1 nœud dans Person | `lp-diag` N2 pour la mesure ; `lp-mcp-bp` N1 pour l'IMPL | mesure : 20 min de jeu par l'utilisateur ou Big Boss + 10 à 15 tours d'analyse ; IMPL 10 à 15 tours ; VAL 10 tours | moyen : consommateurs de `currentAnimation` (`UpdateDailyPose`) | build 1 **seulement si** la mesure montre un effet visible avant le **23 au soir** (créneau FIX1 sur la copie UE au J3, VAL au J4, `37_…:183-184`) ; sinon après l'alpha |
| F7c | reproduction avec capture, lecture MCP de `spawnProp` et des attaches | `lp-diag` N2 | 15 à 20 tours après une reproduction | non évaluable | pas en build 1 |
| F8b | instrumenter la ligne M-Z (C++, dans `LPDirectControlSubsystem.cpp:1216`) : y ajouter `HeelHeight` et `currentAnimation` du Person (lecture par réflexion, comme les autres lectures de variables Blueprint du même module) | `lp-impl` N1 | 5 à 10 tours, **dans la compilation déjà prévue pour F8a** (pas de jeton UE supplémentaire, hors essai) | très faible (journal) | build 1 (option) |
| F8b | correctif Blueprint | aucun avant la mesure | — | forcer −90 peut retirer un décalage de talons | **build 2** ou abandon (M-Z couvre) |
**Ordre conseillé (estimé)** : (1) une séance de jeu de 20 à 30 minutes sur le build COM21 existant, **sans copie UE**, avec `-LPPersonsLog=2`, qui sert F7b et F8b : le joueur avec talons puis sans talons s'assied et se lève ; « regarder » un meuble de boutique puis changer de pièce ; (2) lecture des lignes `STATE`, `M-Z :` et `CenterBrow` (Grep, 10 tours) ; (3) décision par sous-point. Si l'instrumentation de M-Z est acceptée, la réponse « talons ou place » arrive aussi **gratuitement** dans les essais suivants.
**Ce qu'il ne faut pas faire (estimé)** : confier F7 et F8b à `lp-mcp-bp` en bloc comme le dit le doc 37 (`:171`) ; toucher GI en build 1 pour un avertissement sans effet visible ; corriger le Z du maillage au lever avant d'avoir départagé talons et place ; ajouter une garde sur `currentAnimation` dans M-Z (M-Z l'écarte exprès, `STG-MZ-IMPL.md:45-46`).
**Build 1 ou build 2 (décision de l'utilisateur)** : build 1 = F8a (fait) et, au plus, F7b et l'instrumentation de M-Z. Aucun de ces sous-points ne justifie de risquer le gel du 24 octobre ; F7a est de toute façon bloqué par la règle GI. F7a, F7c, F8b : build 2 (le journal du dépôt garde ERR-011 ouvert ; aucun texte public à corriger n'a été trouvé, README et annonces non relus ici).
## 4. Établi / estimé / incertain (synthèse)
**Établi (relu à la source)** : ERR-011 et sa mise à jour JOURNAUX1 (`Registre_Erreurs.md:25`) ; classement « après l'alpha » (`BOSS-ETAT.md:235`) ; comptes de `CenterBrow` des 13 journaux de § 3.1 ; sur COM21, 147 avertissements (+ 1 ligne de bilan), un seul acteur sur les 5 lignes vues, 76 s après le SPAWN ; `GI::CalculateHeadtrack` lit `CenterBrow` sur `From.Mesh` et `To.Mesh` (dump 5.5) ; les dumps STE-D8 n'existent pas ; constat « look » du 14 octobre (`STG-COMMUN8-DIAG.md`) ; `currentAnimation` jamais affectée dans `unOccupyFnt` (dump 5.5) ; STATE seulement sous `-LPPersonsLog` ; un seul constat d'accessoire (`COMMUN-7-BILAN.md:28`) ; M-Z (code, journal, 18 déclenchements) ; `updateHeelHeight` (formule et appelants dans le dump 5.5) ; l'enfoncement KEY2 est une autre cause (`PlayerBusy`).
**Estimé (déduit)** : le lecteur de `CenterBrow` est `CalculateHeadtrack` appelé par `Daily` et `Daily_F` ; la cible est un mannequin sans corps ; la garde de la voie A suffit (4 à 8 nœuds) ; une variable `currentAnimation` périmée peut être réappliquée par `UpdateDailyPose` ; −80,4 / −82,8 / −85,2 sont des décalages de talons (arithmétique exacte, non mesurée) ; M-Z force −90 sans égard aux talons ; durées et niveaux de § 3.4.
**Incertain, essai qui trancherait** :
- F7a : appelants réels de `CalculateHeadtrack` et origine du `HeadtrackTarget` : `LPDumpFunction -BP=Daily -Fn=EventGraph -Pins -Exec` (AnimBP accepté par la commande : incertain, `STE-H4-DIAG.md:271`) ; état en 5.8 de la fonction : dump 5.8 (copie UE).
- F7a : effet visible éventuel (regard tourné vers l'origine jusqu'à 57 s, `STE-H4-DIAG.md:285-286`) : jamais observé.
- F7b : le clip joue-t-il encore ou seule la variable est-elle périmée ? Séance `-LPPersonsLog=2` (§ 3.3).
- F7c : tout (lieu, cause, recette).
- F8b : talons ou place ; chemin du −88,0 ; talons portés par les PNJ concernés : séance avec et sans talons, ou `HeelHeight` dans la ligne M-Z.
- Dumps 5.5 contre Blueprint 5.8 : Person et GI ont été retouchés depuis le 30 septembre (par exemple `IsValid(Person)` dans `moveToPersonStand`, `JOURNAUX1/ERR-brouillons.md:23`) : les fonctions citées sont à relire en 5.8 avant toute SPEC.
## 5. Points à confirmer (repris par la fiche suivante)
1. Rafraîchir en 5.8, par commandlet (copie UE, éditeur fermé), les dumps `GI :: CalculateHeadtrack`, `Person :: updateHeelHeight`, `Person :: unOccupyFnt`, `Person :: UpdateDailyPose` et l'`EventGraph` de Person (affectations de `currentAnimation`), avec `lp-commandlets` (forme : `.\Tools\RunCommandlet.ps1 -Lot FIX1-F7 -Commandlet LPDumpFunction -Args '-BP=<nom> -Fn=<fonction> -Pins -Exec'`).
2. Chercher `CenterBrow` dans `Source` et `Plugins` (non fait ici).
3. Identifier la fonction de GI qui appelle `updateHeelHeight` (`L6f_dump_GI.txt:25258`) et les deux autres lectures de `CenterBrow` dans GI (`:42592`, `:42609`).
4. Lire `C10-BILAN` (Q4, Q6) et `COMMUN-7-BILAN` en entier pour F7c (meuble, animation, circonstances).
5. Vérifier si les autres journaux portent une ligne de bilan comptée dans les 141 à 6 138.
6. Vérifier que le Shipping écrit ou non l'avertissement (`bUseLoggingInShipping`, non lu).
## 6. Questions pour la SPEC ou l'utilisateur
1. F7a : laisser l'avertissement en build 1 (bruit depuis la 4.27, sans effet visible) et le traiter dans la révision unique de GI en build 2 ?
2. Autoriser une séance de jeu de 20 à 30 minutes sur le build COM21 avec `-LPPersonsLog=2` (sans copie UE) pour F7b et F8b ?
3. Autoriser l'ajout de `HeelHeight` et `currentAnimation` à la ligne M-Z dans la compilation de F8a (une ligne C++, journal seul) ?
4. F8b : si les talons sont la cause, M-Z doit-il cesser de forcer −90 pour un personnage à talons ? (le « flottement » constaté à COMMUN-9 était-il réel à l'écran ?)
5. F7c : l'utilisateur se souvient-il de la place et du repas concernés (capture) ?
6. Reclasser la ligne FIX1 du doc 37 : F7a et F8b hors des « petits correctifs Blueprint par MCP » de la build 1, F7b conditionnel ?
## Fichiers à commiter
A `Docs/Migration/etat/REL/FIX1/FIX1-F7-PRE.md` (dépôt jeu, branche `ue5.8`), par le gardien sur ticket. Aucun autre fichier écrit.
Tours : 26 / 25 (budget « environ 25 » dépassé de 1 : recherche des appelants de `updateHeelHeight` et vérification que les Grep de dossier sur `etat/` sautent les `.txt` ; `Tools/FicheStats.py` fait foi)
## Constats
- Quatre Grep de dossier sur `etat/portage55/L6f` ont rendu un résultat vide à tort (fichiers `.txt` ignorés par git) ; les mêmes motifs, sur le fichier nommé, trouvent les lignes. Rejouer toute recherche négative sur un fichier nommé avant de conclure à une absence.
- Les comptes d'un Grep en mode compte sur des journaux qui portent une ligne de bilan `LogStats` incluent cette ligne (+ 1 sur COM21).