16 KiB
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 delp-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), plusMesuréetConstats(permis),Tours : 46 / 60pré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) etCAM-B2kmn-VAL_CompileAllBlueprints_20261014-011924.txt(V6). - Instantané d'avant :
D:\Game\LifePlay_Backup_5.5\CAM-B2s\(Room3A451FDD…, 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 de539à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(-)etgrep -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
PCdé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.uassetseul (binaire, non lisible en diff texte ; son contenu est validé par le dump). Aucun autre fichier deContent/ouSource/rattaché au lot. - Fins de ligne : sans objet : aucun fichier texte modifié par le lot en dehors de livrables Markdown neufs ;
Room.uassetest 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. LogStatsen jeu sansAccessed Nonenouveau surRoom(UpdateRoomCam, voie 449 où R1 litGetControlRotation; 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, ADocs/Migration/etat/CAM/CAM-B2s-IMPL.md)
Tours : 17 / 40
Constats
- Le crochet
ecriture-gardiena refusé deux de mes commandes Bash pour « redirection » : un$TMP/ainutile (erreur de ma part, corrigée) et un motifgrepcontenant->(le>est pris pour une redirection). Contournement : outil Grep de l'agent. À verser : mémoirehook-ecriture-gardien(->dans un motif degrepBash est refusé). RunCommandlet.ps1: le paramètre des arguments s'appelle-Args; depuis Git Bash, appelerpowershell -NoProfile -Command '…'(guillemets simples dehors, doubles dedans) ;-Filecasserait$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).