LifePlay-Revival/Docs/Migration/etat/CAM/CAM-B2s-VAL.md

195 lines
16 KiB
Markdown
Raw Normal View History

Fiche CAM-B2s-VAL — Niveau N1 — Modèle prévu non précisé par la demande | utilisé claude-sonnet-5-5 — Agent lp-validator (A-VAL) — Skills sk-protocol, sk-recount, debug-verification, lp-validate
# CAM-B2s-VAL : validation de CAM-B2s (Room, orientation de C1 recalée P5, pose avant le retour de la vue P6) (2026-10-14)
Verdict global : **PASS** (V5, V6, MD5 et UeState rejoués à neuf, éditeur fermé). V7 (essai en jeu) n'est pas de cette VAL :
reporté.
Copie `D:\Game\LifePlay-master 5.8`, branche `ue5.8` (`git branch --show-current`). Aucun asset, code ni doc validée modifié
par la VAL. Seuls fichiers écrits : les 2 sorties de commandlets (§ 3) et ce livrable. Aucune commande git qui écrit.
## 1. Fiches amont relues
- `CAM-B2s-FICHE.md` (parties P5 et P6, étapes 1 à 6, VAL V5 / V6 / V7) : relue en entier.
- `CAM-B2s-IMPL.md` (46 / 60 tours, agent lp-mcp-bp) : relue en entier. Gabarit IMPL de `lp-doc` : les 6 sections numérotées
sont présentes et dans l'ordre (1 Fichiers modifiés, 2 Écarts, 3 Instantané, 4 Pas fait, 5 Points à confirmer, 6 Fichiers
à commiter), plus `Mesuré` et `Constats` (permis), `Tours : 46 / 60` présent. En-tête sur 2 lignes conforme ; « Modèle
prévu non précisé par la fiche » (même écart de forme que B2k / B2m, non bloquant).
- Références de diff : `CAM-B2kmn-VAL_LPDumpFunction_20261014-011706.txt` (Room d'avant, EventGraph 1272 nœuds) et
`CAM-B2kmn-VAL_CompileAllBlueprints_20261014-011924.txt` (V6).
- Instantané d'avant : `D:\Game\LifePlay_Backup_5.5\CAM-B2s\` (Room `3A451FDD…`, cité par l'IMPL § 3 ; non rejoué ici : le
diff de dump suffit au périmètre de la fiche).
## 2. Points à confirmer des IMPL
| Id | Point (IMPL § 5) | Verdict | Preuve |
|---|---|---|---|
| S-1 | Room = `c5ab724101fa898457293d64059d21a9` ; GI `e64b5b37…`, PC `f45be57a…`, Person `8668a47c…` inchangés | **PASS** | § 3.0 et § 3.4 (md5sum avant et après les commandlets) |
| S-2 | V5 : EventGraph 1272 → 1276 nœuds | **PASS** | dump l. 4833 `=== Room :: EventGraph (1276 noeuds) ===` contre `(1272 noeuds)` dans la référence ; 1272 + 4 = 1276 |
| S-3a | `_539` = `KismetMathLibrary::MakeRotator`, Roll et Pitch à 0 | **PASS** | dump l. 10952 : `appel KismetMathLibrary::MakeRotator()`, `Roll = '0.0'`, `Pitch = '0.0'`, `Yaw -> K2Node_CallFunction_514.Yaw` |
| S-3b | `_540` = `SceneComponent::K2_SetWorldRotation`, bSweep et bTeleport faux | **PASS** | l. 10958 : `appel SceneComponent::K2_SetWorldRotation()`, `bSweep = 'false'`, `bTeleport = 'false'` |
| S-3c | `_541` = `SceneComponent::K2_SetWorldLocation`, bSweep et bTeleport faux | **PASS** | l. 10966 : `appel SceneComponent::K2_SetWorldLocation()`, `bSweep = 'false'`, `bTeleport = 'false'` |
| S-3d | `_542` = `SceneComponent::K2_SetWorldRotation`, bSweep et bTeleport faux | **PASS** | l. 10974 : `appel SceneComponent::K2_SetWorldRotation()`, `bSweep = 'false'`, `bTeleport = 'false'` |
| S-4 | Diff des liens limité au § 1.5 de l'IMPL (512.then → 540 ; sorties de 265 +540/541/542, de 514.Yaw +539, de PO_2 +541 ; 449.then → 541 ; 434.execute ← 80, 542 ; liens propres à 539 à 542) | **PASS** | § 3.1 : 7 hunks de corps modifiés + 1 hunk d'ajout (30 lignes), tous attendus, aucun autre |
| S-5 | 80, 81, 82, 83, 329, 440, 441 : liens inchangés | **PASS** | aucun hunk sur ces nœuds (les hunks de corps ne touchent que l'en-tête du graphe, 265, 434, PO_2, 449, 514, 512 et l'ajout de 539 à 542) |
| S-6 | V6 : `CompileAllBlueprints` = référence (3 erreurs `CR_FaceExpRig`, 420 compilations réussies) | **PASS** | § 3.3 |
| S-7 | V7 : CAM-49, bar assis puis levé, après une scène, sortie de CharGen ; `LogStats` sans `Accessed None` nouveau sur `Room` (`UpdateRoomCam`, voie 449 où R1 lit `GetControlRotation`) | **Reporté** (essai en jeu, build suivant) | non rejoué : hors périmètre VAL (éditeur fermé, pas de jeu) |
## 3. Critères rejoués
Environnement : éditeur fermé ; moteur `D:\Game\Launcher\Engine\UE_5.8` ; `Tools\UeState.ps1` avant le 1er commandlet, avant
le 2e et à la fin : `processus=0 editeur=0 compilation=0 shaders=0 jeu=0` (UeState = 0 aux trois relevés). Les commandlets
n'ont pas tourné en même temps (le 2e a démarré après la fin du 1er).
### 3.0 MD5 de départ (avant tout lancement)
```
$ md5sum Content/BPs/Room.uasset Content/BPs/GI.uasset Content/BPs/PC.uasset Content/BPs/Person.uasset
c5ab724101fa898457293d64059d21a9 *Content/BPs/Room.uasset
e64b5b37c9ef0db7735de0d6e3bd7c1c *Content/BPs/GI.uasset
f45be57a39d13d3eb19d0b543153ab0b *Content/BPs/PC.uasset
8668a47c627f7a5254910cf0ac33b12a *Content/BPs/Person.uasset
```
Attendu : Room `C5AB7241…`, GI `E64B5B37…`, PC `F45BE57A…`, Person `8668A47C…` : conforme.
### 3.1 V5 Room (dump) : **PASS**
Commande (après `Set-Location` sur la copie) :
```
.\Tools\RunCommandlet.ps1 -Lot CAM-B2s-VAL -Commandlet LPDumpFunction -Args "-BP=Room -Fn=* -Pins -Exec" -EtatDir "D:\Game\LifePlay-master 5.8\Docs\Migration\etat\CAM"
code=0 duree=56s erreurs=0 avertissements=10911
resume : Docs\Migration\etat\CAM\CAM-B2s-VAL_LPDumpFunction_20261014-084441.txt
journal : Saved\Logs\portage\CAM-B2s-VAL_LPDumpFunction_20261014-084441.log
```
Note de trace : Trace `CAM-B2s-VAL_LPDumpFunction_20261014-084441.txt` — Fiche CAM-B2s-VAL — 2026-10-14 08:44. Attendu (écrit
avant lancement) : EventGraph 1276 nœuds, 4 nœuds créés, 11 liens. Obtenu : ci-dessous. Lecture : les « 10 911
avertissements » sont le dump lui-même (canal `LogLPDump: Warning`), pas des diagnostics ; code 0, 0 erreur.
Diff : `git diff --no-index --unified=0 CAM-B2kmn-VAL_LPDumpFunction_20261014-011706.txt CAM-B2s-VAL_LPDumpFunction_20261014-084441.txt`.
Bilan brut : `88 insertions(+), 58 deletions(-)`, 44 hunks (`grep -c '^@@'`). Répartition (recompte par numéro de ligne de
début de hunk) :
- 35 hunks d'en-tête (lignes 2 à 108 : date, durée, journal, histogramme « Avertissements : 10881 → 10911 lignes, 6602 →
6615 signatures (100 premieres) ») : bruit, l'histogramme bouge avec le nombre de lignes.
- 1 hunk final (l. 11002 → 11032) : `LogInit: Display: Success - 0 error(s), 10831 warning(s)` → `10861` : +30 = les 30
lignes ajoutées de `539` à `542` (10881 → 10911, même +30). Cohérent.
- 8 hunks de corps (EventGraph, dernier graphe de Room : l. 4833 à 11031), bruts :
```
-=== Room :: EventGraph (1272 noeuds) === (l. 4833)
+=== Room :: EventGraph (1276 noeuds) ===
K2Node_VariableGet_265 / FirstPersonSM (l. 9659) : + K2Node_CallFunction_540.self, _541.self, _542.self
K2Node_CallFunction_434 / execute (l. 9773) : "449.then, IfThenElse_80.then" -> "IfThenElse_80.then, CallFunction_542.then"
K2Node_PromotableOperator_2 / ReturnValue (l. 9960) : + K2Node_CallFunction_541.NewLocation
K2Node_CallFunction_449 / then (l. 9963) : "-> CallFunction_434.execute" -> "-> CallFunction_541.execute"
K2Node_CallFunction_514 / Yaw (l. 10740): + K2Node_CallFunction_539.Yaw
K2Node_CallFunction_512 / then (l. 10909): "(vide)" -> "-> CallFunction_540.execute"
+30 lignes (l. 10952 à 10981) : K2Node_CallFunction_539, _540, _541, _542 (corps recopié en 3.1b)
```
(7 hunks de modification + 1 d'ajout = 8 ; 35 + 1 + 8 = 44.)
3.1a Les 7 modifications sont exactement celles de la fiche : en-tête (1272 → 1276), liste de sorties de 265 (+540, 541,
542), `434.execute` (← 80 et 542 ; 449 retiré), sortie de `PO_2` (+541), `449.then` (→ 541), `514.Yaw` (+539), `512.then`
(→ 540). La ligne 265 complète a été relue au dump (l. 9659, Grep) : `430, 431, 433, 446, 512, 540, 541, 542` (8 sorties).
3.1b Nœuds créés (dump l. 10952 à 10981, extrait fidèle) :
```
K2Node_CallFunction_539 appel KismetMathLibrary::MakeRotator() Roll='0.0' Pitch='0.0' Yaw<-514.Yaw ReturnValue->540.NewRotation, 542.NewRotation
K2Node_CallFunction_540 appel SceneComponent::K2_SetWorldRotation() execute<-512.then then(vide) self<-265.FirstPersonSM NewRotation<-539.ReturnValue bSweep=false bTeleport=false
K2Node_CallFunction_541 appel SceneComponent::K2_SetWorldLocation() execute<-449.then then->542.execute self<-265.FirstPersonSM NewLocation<-PO_2.ReturnValue bSweep=false bTeleport=false
K2Node_CallFunction_542 appel SceneComponent::K2_SetWorldRotation() execute<-541.then then->434.execute self<-265.FirstPersonSM NewRotation<-539.ReturnValue bSweep=false bTeleport=false
```
Les UFunction sont bien `SceneComponent::K2_SetWorldRotation` (540, 542), `SceneComponent::K2_SetWorldLocation` (541) et
`KismetMathLibrary::MakeRotator` (539) : l'« estimé » de l'IMPL § 1.3 est confirmé par le dump.
3.1c Recompte des liens (L1 à L11) : L1 `512.then → 540.execute` ; L2 `265 → 540.self` ; L3 `539 → 540.NewRotation` ;
L4 `514.Yaw → 539.Yaw` ; L5 `449.then → 541.execute` (remplace 449 → 434) ; L6 `541.then → 542.execute` ;
L7 `542.then → 434.execute` ; L8 `265 → 541.self` ; L9 `PO_2 → 541.NewLocation` ; L10 `265 → 542.self` ;
L11 `539 → 542.NewRotation` : 11 liens, tous lus dans le dump. 434 garde `80.then` (l. 9773).
3.1d Autres graphes de Room (39 graphes de fonction, de `UserConstructionScript` l. 121 à `Async` l. 4743) : aucun hunk de
corps avant la ligne 4833 (le premier hunk après l'en-tête du fichier est celui de l'en-tête de l'EventGraph, l. 4833) :
**identiques à la référence**. Les noms `_539` à `_542` sont en ajout pur dans le diff (`@@ -10951,0 +10952,30 @@`, 0 ligne
supprimée dans ce hunk) ; le Grep « absent de la référence » de l'IMPL n'est pas rejoué.
### 3.2 V5 PC / GI / Person
Non demandé par la fiche (aucune écriture de PC, GI ou Person). Contrôlé seulement par MD5 (§ 3.4).
### 3.3 V6 CompileAllBlueprints : **PASS**
```
.\Tools\RunCommandlet.ps1 -Lot CAM-B2s-VAL -Commandlet CompileAllBlueprints -EtatDir "D:\Game\LifePlay-master 5.8\Docs\Migration\etat\CAM"
code=3 duree=196s erreurs=25 avertissements=55
resume : Docs\Migration\etat\CAM\CAM-B2s-VAL_CompileAllBlueprints_20261014-084550.txt
journal : Saved\Logs\portage\CAM-B2s-VAL_CompileAllBlueprints_20261014-084550.log
```
Note de trace : Fiche CAM-B2s-VAL — 2026-10-14 08:49. Attendu (avant lancement, d'après la référence) : code 3, 25 lignes
d'erreur / 16 signatures, « 3 errors and 0 warnings », 55 lignes d'avertissement / 42 signatures, 420 réussies, toutes
les erreurs sur `CR_FaceExpRig` / `RLExpStruct` (moteur). Lecture : code 3 est le code de la référence (le moteur compte
les 3 erreurs de `CR_FaceExpRig`), pas un échec nouveau.
| Élément | Référence B2kmn | B2s (rejoué) | Méthode | Verdict |
|---|---|---|---|---|
| Code de sortie | 3 | 3 | RunCommandlet | identique |
| Lignes d'erreur / signatures | 25 / 16 | 25 / 16 | en-tête du résumé | identique |
| Bloc « Erreurs » (l. 6 à 23) | — | identique à la référence | `diff` des deux blocs | identique |
| Bloc « Avertissements » (l. 24 à 67) | 55 / 42 | 55 / 42 | `diff` des deux blocs triés | identique |
| `Compiling Completed with …` | `3 errors and 0 warnings and 0 blueprints that failed to load` (journal l. 3304) | même texte (journal l. 3302) | Grep sur les 2 journaux | identique |
| Compilations réussies | 420 | 420 | `grep -c 'La compilation de .* a réussi'` sur les 2 résumés et sur le journal B2s | identique |
| Lignes `Loading and Compiling` | 421 | 421 | `grep -c` | identique (421 = 420 + `CR_FaceExpRig` en erreur) |
| Lignes de compilation (noms de BP, sans horodatage ni durée), triées | — | identiques | `diff` des deux listes triées | identique |
| `Room` | réussi | `La compilation de Room a réussi ! [en 1 206 ms]` (résumé l. 142) ; aucune ligne d'erreur ou d'avertissement ne cite Room | Grep | **Room sans erreur ni avertissement** |
Seule différence d'ordre : `PC` est compilé plus tôt (résumé l. 118) que dans la référence (l. 139-140) ; le diff trié ne
montre aucune différence de contenu (ordre de chargement, sans conséquence). Les 3 erreurs sont toutes `CR_FaceExpRig`
(`Could not find graph function data for node`, `Source and target pin types are not compatible`, `RLExpStruct` structure
inconnue) : moteur / CC_Shaders, sans lien avec Room.
### 3.4 MD5 après les commandlets
```
$ md5sum Content/BPs/Room.uasset Content/BPs/GI.uasset Content/BPs/PC.uasset Content/BPs/Person.uasset
c5ab724101fa898457293d64059d21a9 *Content/BPs/Room.uasset
e64b5b37c9ef0db7735de0d6e3bd7c1c *Content/BPs/GI.uasset
f45be57a39d13d3eb19d0b543153ab0b *Content/BPs/PC.uasset
8668a47c627f7a5254910cf0ac33b12a *Content/BPs/Person.uasset
```
Identiques au § 3.0 : les commandlets n'ont rien écrit dans ces 4 assets. `git status --short -- Content Source` : GI, PC,
Person, Room en `M` (GI, PC, Person depuis des lots antérieurs, IMPL § 6).
### 3.5 UeState final
`.\Tools\UeState.ps1` : `processus=0 editeur=0 compilation=0 shaders=0 jeu=0` (UeState = 0).
## 4. Diff lu en entier
- Diff de dump : lu en entier (192 lignes une fois les lignes `LogInit:` retirées ; 44 hunks, tous classés au § 3.1).
Recompte indépendant : `git diff --no-index --stat` = `88 insertions(+), 58 deletions(-)` et `grep -c '^@@'` = 44, avec
répartition 35 + 1 + 8 par numéro de ligne.
- Diff de V6 : lu (hunks de durées et d'horodatages, 2 lignes `PC` déplacées, nom du lot) ; recompté en normalisé (§ 3.3) :
aucune différence.
- Fichier du dépôt modifié par le lot CAM-B2s : `Content/BPs/Room.uasset` seul (binaire, non lisible en diff texte ; son
contenu est validé par le dump). Aucun autre fichier de `Content/` ou `Source/` rattaché au lot.
- Fins de ligne : sans objet : aucun fichier texte modifié par le lot en dehors de livrables Markdown neufs ;
`Room.uasset` est binaire.
## 5. Verdict
**PASS** : V5 (1276 nœuds, 4 nœuds créés, 11 liens, appels `SceneComponent::K2_SetWorldRotation` / `K2_SetWorldLocation` et
`KismetMathLibrary::MakeRotator`, aucune autre différence), V6 (= référence, Room sans erreur ni avertissement), MD5
(Room `c5ab7241…` ; GI, PC, Person inchangés), UeState = 0 à la fin. Non rejoué : V7 (jeu), `LogStats` en jeu, comparaison
octet à octet de Room avec l'instantané.
## 6. Points à confirmer par l'utilisateur
- [ ] V7 en jeu au prochain build : CAM-49 (`CAM-B2p-SPEC.md`) ; bar : s'asseoir, C1, se lever, marcher (vue aux yeux,
horizontale, sans épaule visible) ; après une scène lancée depuis C1 : vue horizontale ; sortie de CharGen en C1 sans
à-coup de pose.
- [ ] `LogStats` en jeu sans `Accessed None` nouveau sur `Room` (`UpdateRoomCam`, voie 449 où R1 lit `GetControlRotation`
; point non vérifié par l'IMPL § 1.7).
- [ ] Limite connue de la fiche : pas de tangage à la souris en C1 (vue toujours horizontale) ; demande à part si voulu.
## Fichiers à commiter
Aucun fichier du jeu modifié par la VAL. Livrables à ranger par le gardien (dépôt du jeu, branche `ue5.8`, sous `etat/`) :
- A `Docs/Migration/etat/CAM/CAM-B2s-VAL.md`
- A `Docs/Migration/etat/CAM/CAM-B2s-VAL_LPDumpFunction_20261014-084441.txt`
- A `Docs/Migration/etat/CAM/CAM-B2s-VAL_CompileAllBlueprints_20261014-084550.txt`
- (déjà annoncés par l'IMPL : M `Content/BPs/Room.uasset`, A `Docs/Migration/etat/CAM/CAM-B2s-IMPL.md`)
Tours : 17 / 40
## Constats
- Le crochet `ecriture-gardien` a refusé deux de mes commandes Bash pour « redirection » : un `$TMP/a` inutile (erreur de ma
part, corrigée) et un motif `grep` contenant `->` (le `>` est pris pour une redirection). Contournement : outil Grep de
l'agent. À verser : mémoire `hook-ecriture-gardien` (`->` dans un motif de `grep` Bash est refusé).
- `RunCommandlet.ps1` : le paramètre des arguments s'appelle `-Args` ; depuis Git Bash, appeler
`powershell -NoProfile -Command '…'` (guillemets simples dehors, doubles dedans) ; `-File` casserait `$PSScriptRoot`.
- Dans le dump Room, le hunk `LogInit: Display: Success - 0 error(s), N warning(s)` sert de contrôle croisé du nombre de
lignes ajoutées (+30 ici).