195 lines
16 KiB
Markdown
195 lines
16 KiB
Markdown
|
|
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).
|