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

137 lines
15 KiB
Markdown

Fiche FIX1-F8a — Niveau N2 — Modèle prévu sonnet | utilisé claude-sonnet-5-5 — Agent lp-impl — Skills sk-protocol, ue-cpp-build
# FIX1-F8a-IMPL : initialisation de `Aim` dans `TickCoupleMouse`, avertissement C4701 (2026-10-20)
Décision citée par la fiche : l'utilisateur a répondu « approuvé » à la proposition de Big Boss (`local_104ff22d`, qui a donné le jeton UE) : « F8 (Aim) est trivial et sans risque, il tient en build 1 ». La fiche ne donne ni la session ni l'heure de cette réponse (`sk-protocol` § 2) : je la traite comme une consigne de fiche, sans en tirer d'autre décision (aucune publication, aucun arbitrage de risque de mon côté).
Hors gabarit : la compilation de contrôle (demandée par la fiche) est rendue dans `## Constats`, avec sa note TRACE.
Écart de skills : la fiche cite `sk-protocol, ue-cpp-build`. Dans mon contexte sont aussi chargés `lp-build` et `lp-ue-compat` (utilisés pour les commandes de build et la liste des lignes connues).
Niveaux de preuve : **établi** (fichier:ligne ou sortie de commande), **estimé** (raisonnement donné), **incertain** (essai nommé).
## 1. Fichiers modifiés
Un seul fichier de source : `D:\Game\LifePlay-master 5.8\Source\LifePlay\LPCameraModeSubsystem.cpp`.
| Mesure | Valeur | Commande |
|---|---|---|
| MD5 avant (exigé `4fd44bd4`) | `4fd44bd4b636c1f8d14c601bea513d14`, conforme ; identique à l'instantané | `md5sum Source/LifePlay/LPCameraModeSubsystem.cpp` avant la première édition |
| MD5 après | `976bf0a458b87f9aecf974fcec3209f0` (inchangé après les deux builds) | `md5sum` après les 2 éditions et après les 2 builds |
| Taille avant, après | 136 950 o, 136 994 o (+44 = 2 x 22 caractères ` = FVector::ZeroVector`) | manifeste de l'instantané ; `wc -c` |
| Fins de ligne | `i/lf w/lf attr/-text` ; 0 CR | `git ls-files --eol Source/LifePlay/LPCameraModeSubsystem.cpp` ; `tr -cd '\r' < … \| wc -c` -> `0` |
| Bilan du diff | `1 file changed, 2 insertions(+), 2 deletions(-)` | `git diff --stat -- Source/LifePlay/LPCameraModeSubsystem.cpp` |
| Autres fichiers touchés dans `Source` et `Plugins/ModdingExtra` | aucun | `git status --porcelain -- Source Plugins/ModdingExtra` -> une seule ligne ` M Source/LifePlay/LPCameraModeSubsystem.cpp` |
Les deux éditions (outil Edit) ; le nombre de lignes du fichier ne change pas, donc les numéros de ligne sont les mêmes avant et après :
```diff
@@ -2277,3 +2277,3 @@ bool ULPCameraModeSubsystem::TickCoupleMouse(UGameInstance* GI, APlayerControlle
GrabHeight = bGrabHasHeight ? LPCameraModeLocal::CoupleLowestRoot(Couple) - SurfaceZ : 0.0;
- FVector Aim;
+ FVector Aim = FVector::ZeroVector;
GrabOffset = TraceScreen(GrabMouseStart, Aim) ? FVector(Pivot.X - Aim.X, Pivot.Y - Aim.Y, 0.0) : FVector::ZeroVector;
@@ -2368,3 +2368,3 @@ bool ULPCameraModeSubsystem::TickCoupleMouse(UGameInstance* GI, APlayerControlle
bGrabMoved |= FVector2D::Distance(GrabMouseStart, GrabCursor) >= LPCameraModeLocal::CoupleDragThreshold;
- FVector Aim;
+ FVector Aim = FVector::ZeroVector;
const bool bAim = bGrabMoved && TraceScreen(GrabCursor, Aim);
```
Positions : déclaration 1 = `LPCameraModeSubsystem.cpp:2278` (lecture à `:2279`) ; déclaration 2 = `:2369` (lecture gardée par `bAim` à `:2370`, `:2376`, `:2378`, qui est la ligne citée par l'avertissement).
**Logique inchangée (établi).** `TraceScreen` est le lambda `:2149-2161` : il renvoie `false` avant d'écrire `Out` (`:2157`) et n'écrit `Out = Hit.ImpactPoint` (`:2159`) qu'avant de renvoyer `true` (`:2160`). `Aim` n'est donc lu que si `TraceScreen` a réussi : `:2279` (opérateur ternaire) et `:2376-2378` (`if (bAim)`, avec `bAim = bGrabMoved && TraceScreen(...)`, `:2370`). La valeur d'initialisation n'est jamais lue ; elle ne sert qu'à lever l'avertissement.
API moteur employée : `FVector::ZeroVector`, `CORE_API static const TVector<T> ZeroVector;` dans `D:\Game\Launcher\Engine\UE_5.8\Engine\Source\Runtime\Core\Public\Math\Vector.h:79` (établi). Même expression que celle déjà présente à `LPCameraModeSubsystem.cpp:2279`. Aucun code de compatibilité UE4 (`LPStringCompat`, `LPMeshCompat`, `LPNavigationHelpers`) touché.
## 2. Écarts à la SPEC
La fiche tient lieu de SPEC (pas de SPEC séparée). Écarts :
1. **Aucun écart de code** : les deux déclarations ont reçu `= FVector::ZeroVector`, rien d'autre.
2. **Numéros de ligne** : la fiche cite l. 2278 et 2369 pour les déclarations et l. 2378 pour l'avertissement ; relevés conformes dans le fichier de départ (`Grep` : `2278`, `2369`, `2378`).
3. **Approbation** citée sans session ni heure : voir l'en-tête. Sans conséquence sur le périmètre (changement de deux lignes, aucune publication).
4. **Unités recompilées** : le build 1 a recompilé `Module.ModdingExtra.cpp` et lié `UnrealEditor-ModdingExtra.dll` alors que ce lot ne touche pas `ModdingExtra`. Cause relevée dans le journal : `Invalidating makefile for LifePlayEditor (working set of source files changed)` (`FIX1_Build_20261020-195129.log:8`) ; le fichier `ModdingExtraBPLibrary.cpp` (lot F6) était compilé hors du fichier unity au build précédent et rentre maintenant dans `Module.ModdingExtra.cpp`. **Estimé** (le journal ne dit pas pourquoi `ModdingExtra` est rejoué). Sans effet sur la source.
## 3. Instantané
- Dossier : `D:\Game\LifePlay_Backup_5.5\FIX1-F8\` (lot FIX1-F8), pris par l'ordonnateur avant mon intervention ; je ne l'ai pas refait (consigne de la fiche).
- Manifeste `D:\Game\LifePlay_Backup_5.5\FIX1-F8\manifest.csv` : une ligne, `Source/LifePlay/LPCameraModeSubsystem.cpp`, `Existed=True`, `Size=136950`, `MD5=4FD44BD4B636C1F8D14C601BEA513D14`, `Date=2026-10-20T19:50:03`.
- Contrôle (établi) : `md5sum D:/Game/LifePlay_Backup_5.5/FIX1-F8/Source/LifePlay/LPCameraModeSubsystem.cpp` -> `4fd44bd4b636c1f8d14c601bea513d14`, identique au MD5 de départ du fichier du jeu.
- Retour arrière à froid : `Tools\Restore.ps1 -Lot FIX1-F8` (proposé, non lancé), ou `git revert` du commit d'IMPL ; recompilation ensuite.
## 4. Ce qui n'a pas été fait
- Aucun autre fichier ni autre déclaration : seules les deux déclarations `FVector Aim;` de `TickCoupleMouse` ont changé. Je n'ai pas cherché d'autres variables locales non initialisées dans le fichier (le build n'en signale aucune : 0 avertissement).
- Pas de build Shipping, pas d'empaquetage (`BuildDebug.ps1`), aucun jeu lancé : le comportement à l'exécution n'est pas mesuré (il est inchangé par construction, voir § 1).
- Pas de VAL (relecture indépendante), pas de DOC, pas de CHG ni de ligne de journal (hors fiche).
- Pas de `Tools/FicheStats.py` : le nombre de tours ci-dessous est estimé par moi.
- Aucune commande git qui écrit ; aucun commit ; rien publié.
## 5. Points à confirmer en VAL
Un point par ligne.
- V1 : `git diff --stat -- Source/LifePlay/LPCameraModeSubsystem.cpp` rend `1 file changed, 2 insertions(+), 2 deletions(-)` ; `git diff -U1` ne montre que les deux lignes `FVector Aim = FVector::ZeroVector;` (aux l. 2278 et 2369).
- V2 : `md5sum` du fichier = `976bf0a458b87f9aecf974fcec3209f0` ; `git ls-files --eol` = `i/lf w/lf` ; 0 CR.
- V3 : journal `Saved\Logs\portage\FIX1_Build_20261020-195129.log` (éditeur) et `…-195230.log` (jeu) : 0 ligne `C4701|warning C[0-9]+|error C[0-9]+|error LNK` (témoin positif : le journal `FIX1_Build_20261020-190716.log`, avant correction, donne 1 ligne, `LPCameraModeSubsystem.cpp(2378) : warning C4701`).
- V4 : les deux journaux montrent `Compile [x64] LPCameraModeSubsystem.cpp` (l. 41 et l. 20) : le fichier modifié a bien été recompilé (hors fichier unity, `[Adaptive Build]`), pas seulement relié.
- V5 : résumés `Build.ps1` : build 1 `erreurs=0 avertissements=0 autres=20` (les 20 lignes `HyperAIStudio` attendues pour LifePlayEditor, `lp-build` § 7) ; build 2 `erreurs=0 avertissements=0 autres=0`.
- V6 : les binaires du jeu ne contiennent aucune autre modification de source que les deux lignes (`git status --porcelain -- Source Plugins` ne montre que ce fichier) : l'exe `b178a8be…` et la DLL `a1d61a56…` correspondent à « HEAD `ad3c9c6` + F8a ». Contrairement à F6, `LPKeyboardSubsystem.cpp` n'est plus modifié (KEY2 commité).
- C1 : **incertain**, essai non fait : aucune exécution en jeu du glissé de couple (`TickCoupleMouse`) ; la logique est inchangée par construction (§ 1) mais rien n'a été lancé.
## 6. Fichiers à commiter
Dépôt du jeu (`D:\Game\LifePlay-master 5.8`, branche `ue5.8`) :
- `M Source/LifePlay/LPCameraModeSubsystem.cpp`
- `A Docs/Migration/etat/REL/FIX1/FIX1-F8a-IMPL.md`
Les deux résumés `FIX1_Build_20261020-195129.txt` et `FIX1_Build_20261020-195230.txt` sont écrits par `Build.ps1` dans `Docs/Migration/etat/REL/FIX1/` mais **ignorés par git** (`git check-ignore -v` : `.gitignore:75 /Docs/Migration/etat/**` pour les deux `.txt` ; le livrable `.md` est rétabli par `.gitignore:77 !/Docs/Migration/etat/**/*.md`) : rien à commiter pour les résumés.
À **ne pas** inclure dans ce ticket (modifiés par d'autres lots, présents dans le `git status`) : `LifePlay.uproject`, `Docs/Migration/etat/BOSS/BOSS-ETAT.md`, `BOSS-JOURNAL.md`, `Docs/Migration/etat/REPO/FILE.md`, `Docs/LP-PROJET.ini`, `Docs/Migration/etat/AG/ORGA2/`. Le gardien commite par chemins explicites (`sk-repo`).
Les journaux complets restent dans `Saved\Logs\portage\` (hors dépôt).
Tours : 21 / 40 (estimé ; `Tools/FicheStats.py --lot FIX1` fait foi)
## Constats
### Compilation de contrôle (demandée par la fiche)
Trace : `D:\Game\LifePlay-master 5.8\Docs\Migration\etat\REL\FIX1\FIX1_Build_20261020-195129.txt` et `…\FIX1_Build_20261020-195230.txt` — Fiche FIX1-F8a — 2026-10-20 19:51 à 19:54
Commande : `CopieEtat.ps1 -Lot FIX1 -Assets Source/LifePlay/LPCameraModeSubsystem.cpp` avant ; puis `pwsh -NoProfile -File Tools/Build.ps1 -Lot FIX1 -EtatDir "D:\Game\LifePlay-master 5.8\Docs\Migration\etat\REL\FIX1"` (éditeur), puis `… -Lot FIX1 -Target LifePlay -Config Development -ExtraArgs '-NoUBA' -EtatDir …` (jeu), dans `D:\Game\LifePlay-master 5.8`, stdin sur `/dev/null`
Environnement: copie 5.8, branche `ue5.8`, HEAD `ad3c9c6`, moteur UE 5.8 (`EngineAssociation 5.8`), machine calme (`UeState` : `processus=0 editeur=0 compilation=0 shaders=0 jeu=0` avant, entre les deux builds et après ; `CopieEtat` : `COPIE OK … proc=0 … alertes=aucune`, code 0, avant et après)
Attendu : code 0 ; 0 erreur ; 0 avertissement C4701 (et aucun autre) ; unité `LPCameraModeSubsystem.cpp` recompilée
Obtenu : tableau ci-dessous
Lecture : le champ `Makefile` des deux résumés est vide ; les journaux disent `Invalidating makefile for LifePlayEditor (working set of source files changed)` (l. 8 du journal 1) et `… for LifePlay …` (l. 8 du journal 2) : makefiles recréés. Le résumé du build jeu écrit « Unreal Build Accelerator local executor » alors que `-NoUBA` est passé : les unités sont marquées `[NoUba]`, le texte du résumé n'est pas le signe fiable. Piège de comptage : `pwsh -NoProfile -File Tools/LogStats.ps1 -Log <journal> -Pattern 'a','b','c'` passe la liste en une seule chaîne et rend **0 ligne** à tort, même sur le journal d'avant la correction (faux zéro, relevé ici : `0 lignes sur 57`, puis écarté) ; le comptage retenu est une seule expression à alternatives `C4701|warning C[0-9]+|error C[0-9]+|error LNK`, validée par un témoin positif sur le journal d'avant (1 ligne).
| Mesure | Build 1 : LifePlayEditor Win64 Development | Build 2 : LifePlay Win64 Development `-NoUBA` |
|---|---|---|
| Résumé | `…\REL\FIX1\FIX1_Build_20261020-195129.txt` | `…\REL\FIX1\FIX1_Build_20261020-195230.txt` |
| Journal | `D:\Game\LifePlay-master 5.8\Saved\Logs\portage\FIX1_Build_20261020-195129.log` | `D:\Game\LifePlay-master 5.8\Saved\Logs\portage\FIX1_Build_20261020-195230.log` |
| Code de sortie, durée | 0 ; 50 s (`Total execution time: 49.70 seconds`, journal l. 56) | 0 ; 65 s (`Total execution time: 64.22 seconds`, journal l. 31) |
| `Result:` | `Succeeded` (journal l. 55) | `Succeeded` (journal l. 30) |
| Ligne `Using Visual Studio` | `14.50.35739 toolchain (…\MSVC\14.50.35717) and Windows 10.0.22621.0 SDK` = MSVC épinglé de la copie 5.8 (journal l. 34) | identique (journal l. 13) |
| Actions | 8 | 5 |
| Erreurs du compilateur | 0 | 0 |
| Avertissements du compilateur | **0** (0 C4701) | **0** (0 C4701) |
| Autres lignes (UBT, UHT, liens) | 20 : toutes `Plugin 'HyperAIStudio' does not list plugin '…'` (nombre attendu pour LifePlayEditor, `lp-build` § 7) | 0 (attendu pour la cible jeu) |
| Unités compilées | 3 : `LPCameraModeSubsystem.cpp` (l. 41), `Module.LifePlay.cpp` (l. 42), `Module.ModdingExtra.cpp` (l. 46) | 3 : les mêmes, `[NoUba]` (l. 20, 21, 22) |
| DLL liées / exécutable | 2 DLL : `UnrealEditor-LifePlay.dll` (l. 45), `UnrealEditor-ModdingExtra.dll` (l. 47) | 0 DLL (cible monolithique) ; `[4/5] Link [x64] LifePlay.exe [NoUba]` (l. 23) |
Avant la correction (journal du lot F6, `FIX1_Build_20261020-190716.log:43`) : `LPCameraModeSubsystem.cpp(2378) : warning C4701: variable locale 'Aim' potentiellement non initialisée utilisée`, `while compiling ULPCameraModeSubsystem::TickCoupleMouse`. Après : plus aucune ligne d'avertissement dans les deux journaux. Le module modifié figure dans les unités compilées et dans les DLL liées (`lp-build` § 9, points 4 et 6). Avertissement nouveau : aucun.
MD5 des produits (`md5sum` / `ls -l`, après les deux builds) :
| Fichier | MD5 | Taille, heure |
|---|---|---|
| `Binaries\Win64\LifePlay.exe` | `b178a8be373c2d0ac527e4ec0ff4c31e` | 335 847 424 o, 19:53:32 |
| `Binaries\Win64\UnrealEditor-LifePlay.dll` | `a1d61a56b3c8e5cbbf9c13907031811d` | 1 990 656 o, 19:52:11 |
| `Plugins\ModdingExtra\Binaries\Win64\UnrealEditor-ModdingExtra.dll` | `78a0129d1dd94d2c427c3bae60e0d4df` | 416 768 o, 19:52:18 |
| `Binaries\Win64\UnrealEditor-LifePlayEditorTools.dll` | non relié ce coup-ci (19:08:04, build du lot F6) | 659 968 o |
| `Source\LifePlay\LPCameraModeSubsystem.cpp` | `976bf0a458b87f9aecf974fcec3209f0` | (source) |
Rappel des produits du lot F6 (avant) : `LifePlay.exe` `811f72f2…` (335 846 400 o), `UnrealEditor-LifePlay.dll` `e5d2c9c9…` (1 992 704 o), `UnrealEditor-ModdingExtra.dll` `7e8eeec5…` (416 768 o), d'après `FIX1-F6-IMPL.md`. Ces binaires ont donc changé ; l'essai en jeu éventuel de F6 doit se refaire sur le nouvel exe (`b178a8be…`).
### Autres contrôles
- `pwsh -NoProfile -File Tools/PubCheck.ps1 -Fichiers Source/LifePlay/LPCameraModeSubsystem.cpp -Depot "D:/Game/LifePlay-master 5.8"` (stdin `/dev/null`) -> `PubCheck : 0 constat(s)`, code 0.
- Fin de mission : `Tools\UeState.ps1` -> `processus=0 editeur=0 compilation=0 shaders=0 jeu=0`, code 0 ; jeton UE rendu.
- Scripts : aucun script écrit. Les sorties des deux builds ont été redirigées vers le dossier temporaire de la session (hors dépôt).