16 KiB
Fiche CAM-B2kmn-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-B2kmn-VAL : validation des fiches CAM-B2k (Room, recalage C1), CAM-B2m (PC, lacet POV) et CAM-B2n (Room, orbite de scène) (2026-10-14)
Verdict global : PASS (V5 Room, V5 PC, V6, MD5 et UeState rejoués à neuf, éditeur fermé). V7 (essai en jeu) n'est pas de cette VAL : reporté (COMMUN-6).
Copie D:\Game\LifePlay-master 5.8, branche ue5.8 (relevée par git branch --show-current). Aucun asset, code ni doc
validée modifié par la VAL. Seuls fichiers écrits : les 3 sorties de commandlets (§ 3) et ce livrable.
1. Fiches amont relues
CAM-B2k-FICHE.md,CAM-B2m-FICHE.md,CAM-B2n-FICHE.md(avec l'amendement B2n-a : GetActorArrayAverageLocation dans le fil, opérateurs génériquesSoustraireetAjouter).CAM-B2k-IMPL.md(25 / 60 tours),CAM-B2m-IMPL.md(23 / 60),CAM-B2n-IMPL.md(63 / 60).- Références de diff :
CAM-B2i-VAL_LPDumpFunction_20261013-225125.txt(Room),CAM-B1-VAL_LPDumpFunction_20261013-085611.txt(PC),CAM-B2i-VAL_CompileAllBlueprints_20261013-225336.txtet son journal (V6). - Instantané d'avant :
D:\Game\LifePlay_Backup_5.5\CAM-B2kmn\(manifeste,Content\BPs\Room.uassetetPC.uasset).
Conformité des IMPL au gabarit IMPL de lp-doc : les 6 sections numérotées sont présentes dans les trois. Écarts de forme
relevés (aucun ne touche au contenu validé) :
CAM-B2n-IMPL.md: 63 tours pour un budget de 60 (déclaré par l'auteur, sous le plafond de 75) ; ses « Constats » portent aussi la liste des appels MCP, des PinID et des liens, ce qui est permis.CAM-B2k-IMPL.mdetCAM-B2m-IMPL.md: « Modèle prévu non précisé par la fiche » ; section « Mesuré » hors gabarit mais utile. Pas d'écart bloquant.- Les trois fiches prévoient un instantané
-Lot CAM-B2k/-B2m/-B2n. L'instantané réel estCAM-B2kmn(commun), signalé par chaque IMPL (§ 2). Retour arrière à lire-Lot CAM-B2kmn -Only <fichier>.
2. Points à confirmer des IMPL
| Id | Point (IMPL) | Verdict | Preuve |
|---|---|---|---|
| B2k-1 | Room = 6be71e01… après B2k, PC / GI / Person inchangés |
Reporté pour 6be71e01… (état intermédiaire écrasé par B2n, non rejouable). PC / GI / Person : PASS |
MD5 finaux § 3.4 ; le contenu de B2k est entièrement dans le diff V5 (B2k-3) |
| B2k-2 | V5 : EventGraph à 1265 nœuds | PASS (remplacé) : 1272 attendu après B2n (1264 + 1 + 7) | === Room :: EventGraph (1272 noeuds) === ; réf. 1264 |
| B2k-3 | Diff limité à _512 (SceneComponent::K2_SetWorldLocation(), bSweep / bTeleport faux), 83.then → 512.execute, sorties de 265 et de PO_2 |
PASS | § 3.1 : 512 apparaît, execute ← IfThenElse_83.then, self ← VariableGet_265.FirstPersonSM, NewLocation ← PromotableOperator_2.ReturnValue ; 265 + 512.self ; PO_2 + 512.NewLocation |
| B2k-4 | 83.else, Condition de 83, liens de 81, 82, 91, 440, 441, 446 inchangés |
PASS | aucun hunk sur ces nœuds ; 83.else → 440.execute relu l. 9843 du dump |
| B2k-5 | Nom _512 absent de la référence |
PASS | Grep K2Node_CallFunction_512 sur la référence : 0 occurrence |
| B2k-6 | V6 : Room compilé sans erreur ni avertissement nouveau | PASS | § 3.3 |
| B2k-7 | V7 (C1 à hauteur des yeux ; LogStats sans Accessed None nouveau ; cas limite PlayerCharacter nul + vue nulle) |
Reporté (essai en jeu COMMUN-6) | non rejoué |
| B2m-1 | PC = f45be57a… ; Room, GI, Person inchangés |
PASS | § 3.4 |
| B2m-2 | V5 PC : 312 Yaw au lieu de Roll ; 136 then / else → 204 ; 951.execute vide ; 204.execute ← 136 (deux liens) ; aucun nœud nouveau ni supprimé | PASS | § 3.2 ; 1439 nœuds avant et après |
| B2m-3 | 316, 164 et le reste de l'EventGraph inchangés | PASS | aucun autre hunk de corps |
| B2m-4 | V6 : PC sans erreur ni avertissement nouveau malgré 951 mort | PASS | § 3.3 |
| B2m-5 | V7 : sens du lacet (réserve 108.B = 1), tangage 316 faux face à Y, LogStats |
Reporté (essai en jeu) | non rejoué |
| B2n-1 | 7 nœuds de plus : 101, 535 à 538, PO_46, PO_47 | PASS | § 3.1 ; 1264 → 1272 = 8 = 1 (512) + 7 |
| B2n-2 | 14 liens de plus, 537.Axis = (0, 0, 1) |
PASS (liens) / PASS-STATIC (Axis) | § 3.1 : les 14 liens L1 à L13 (L11a + L11b) relus dans le dump. Axis relu '0,0,1', alors que 497 porte '0.0,0.0,1.0' : même vecteur Z = 1 par lecture ; l'interprétation moteur de la chaîne 0,0,1 n'est pas rejouée en jeu (estimé) |
| B2n-3 | Aucune autre différence ; 512 de B2k présent et inchangé | PASS | § 3.1 : 8 hunks de corps, tous attendus ; 512 identique aux § 1.4 de B2k |
| B2n-4 | Conversion implicite DeltaSeconds (double) → AngleDeg (simple précision) sans diagnostic |
PASS | Room compilé avec succès en V6, avertissements identiques (55 lignes, 42 signatures) |
| B2n-5 | V6 = référence | PASS | § 3.3 |
| B2n-6 | V7 (orbite pendant le sexe, hors sexe inchangé, SexPersons vide → orbite autour de l'origine) |
Reporté (essai en jeu) | non rejoué |
| B2n-7 | Sauvegarde automatique Saved/Autosaves/Game/BPs/Room_Auto1.uasset « à ignorer » |
Non vérifié | hors périmètre (pas dans Content) |
3. Critères rejoués
Environnement : éditeur fermé, Tools\UeState.ps1 -Brief avant et après : processus=0 editeur=0 compilation=0 shaders=0 jeu=0
(UeState = 0). Moteur D:\Game\Launcher\Engine\UE_5.8. Lancement : Tools\RunCommandlet.ps1 -Lot CAM-B2kmn-VAL … -EtatDir …\etat\CAM.
3.0 MD5 de départ (avant tout lancement)
$ md5sum Content/BPs/Room.uasset Content/BPs/PC.uasset Content/BPs/GI.uasset Content/BPs/Person.uasset
3a451fddf991ac01a699af7bd1fbdc12 *Content/BPs/Room.uasset
f45be57a39d13d3eb19d0b543153ab0b *Content/BPs/PC.uasset
e64b5b37c9ef0db7735de0d6e3bd7c1c *Content/BPs/GI.uasset
8668a47c627f7a5254910cf0ac33b12a *Content/BPs/Person.uasset
$ md5sum D:/Game/LifePlay_Backup_5.5/CAM-B2kmn/Content/BPs/*.uasset (instantané d'avant)
a19510e613f31905437bab48f38c6154 *…/PC.uasset
18565365b1195bf2416a1048bf9051b6 *…/Room.uasset
Room et PC diffèrent de l'instantané ; Room = attendu 3A451FDD…, PC = attendu F45BE57A…, GI et Person = attendus.
3.1 V5 Room : PASS
Commande : LPDumpFunction -BP=Room -Fn=* -Pins -Exec ; code 0, 57 s, 0 erreur, 10 881 avertissements (le dump).
Sortie : Docs\Migration\etat\CAM\CAM-B2kmn-VAL_LPDumpFunction_20261014-011706.txt (journal dans Saved\Logs\portage\).
Diff : git diff --no-index --unified=0 CAM-B2i-VAL_LPDumpFunction_20261013-225125.txt CAM-B2kmn-VAL_LPDumpFunction_20261014-011706.txt | grep -v '^[-+]LogInit:' : 212 lignes. Les 138 premières sont l'en-tête
(date, durée, histogramme des signatures d'avertissements, qui bouge avec le nombre de lignes : bruit). Corps (lignes 139 à
212), brut :
-=== Room :: EventGraph (1264 noeuds) ===
+=== Room :: EventGraph (1272 noeuds) ===
CustomEvent_1.DeltaSeconds + K2Node_CallFunction_537.AngleDeg
CallFunction_149.then (vide) -> K2Node_IfThenElse_101.execute
VariableGet_102.SceneCamera + K2Node_CallFunction_536.self, K2Node_CallFunction_538.self
VariableGet_86.SexOn + K2Node_IfThenElse_101.Condition
VariableGet_106.SexPersons + K2Node_CallFunction_535.Actors
VariableGet_265.FirstPersonSM + K2Node_CallFunction_512.self
IfThenElse_83.then (vide) -> K2Node_CallFunction_512.execute
PromotableOperator_2.ReturnValue + K2Node_CallFunction_512.NewLocation
+ 45 lignes : blocs des 8 nœuds neufs (l. 10907 du nouveau dump)
Blocs neufs, relus l. 10907 à 10951 du nouveau dump :
CallFunction_512SceneComponent::K2_SetWorldLocation(): execute ←IfThenElse_83.then, then vide, self ←VariableGet_265.FirstPersonSM, NewLocation ←PromotableOperator_2.ReturnValue, bSweep et bTeleportfalse.IfThenElse_101: execute ←CallFunction_149.then, Condition ←VariableGet_86.SexOn, then →CallFunction_535.execute, else vide.CallFunction_535GameplayStatics::GetActorArrayAverageLocation(): execute ←101.then, then →CallFunction_538.execute, Actors ←VariableGet_106.SexPersons, ReturnValue →PromotableOperator_46.B,PromotableOperator_47.A.CallFunction_536K2_GetActorLocation(): self ←VariableGet_102.SceneCamera, ReturnValue →PromotableOperator_46.A.PromotableOperator_46Subtract_VectorVector(): A ← 536, B ← 535, ReturnValue →CallFunction_537.InVect(536 moins 535).CallFunction_537RotateAngleAxis(): InVect ← 46, AngleDeg ←CustomEvent_1.DeltaSeconds, Axis'0,0,1', ReturnValue →PromotableOperator_47.B.PromotableOperator_47Add_VectorVector(): A ← 535, B ← 537, ReturnValue →CallFunction_538.NewLocation(535 plus 537).CallFunction_538K2_SetActorLocation(): execute ←535.then, then vide, self ←VariableGet_102.SceneCamera, NewLocation ← 47, bSweep et bTeleportfalse.
Contrôles complémentaires :
- Compte : 1264 + 8 = 1272 (512, 101, 535, 536, 537, 538, PO_46, PO_47), recompté par 8 blocs neufs.
- Absence de
_512dans la référence : Grep, 0 occurrence ; 4 dans le nouveau dump (3 liens + le bloc). - Aucun hunk sur 19, 26, 29, 96,
MacroInstance_13, 153 : liens inchangés (149 : execute ←19.elseinchangé, relu l. 5491). - Aucune autre fonction de Room changée (aucun hunk hors EventGraph).
- 149.then est passé de vide à
101.executeseulement, conformément à L1.
3.2 V5 PC : PASS
Commande : LPDumpFunction -BP=PC -Fn=EventGraph -Pins -Exec ; code 0, 58 s, 0 erreur, 6 410 avertissements (identique à B1).
Sortie : …\CAM-B2kmn-VAL_LPDumpFunction_20261014-011816.txt. Référence B1 : une seule section PC :: EventGraph (1439 noeuds) (deux
fois dans le fichier, la seconde en LogInit: retirée par le filtre), aucun autre graphe ; nouveau dump : même section, 1439 nœuds.
Diff grep -v '^[-+]LogInit:', corps brut (après l'en-tête, qui ne porte que des histogrammes de signatures) :
- Roll -> K2Node_CommutativeAssociativeBinaryOperator_108.ReturnValue (312)
+ Roll = '0.0'
- Yaw = '0.0'
+ Yaw -> K2Node_CommutativeAssociativeBinaryOperator_108.ReturnValue
- execute (vide) (204)
+ execute -> K2Node_IfThenElse_136.then, K2Node_IfThenElse_136.else
- then -> K2Node_CallFunction_951.execute (136)
- else -> K2Node_CallFunction_951.execute
+ then -> K2Node_CallFunction_204.execute
+ else -> K2Node_CallFunction_204.execute
- execute -> K2Node_IfThenElse_136.then, K2Node_IfThenElse_136.else (951)
+ execute (vide)
- ReturnValue -> K2Node_CallFunction_312.Roll (108)
+ ReturnValue -> K2Node_CallFunction_312.Yaw
Les nœuds portant chaque hunk ont été relus dans le nouveau dump (l. 1847 à 1852 pour 312, 1889 à 1893 pour 204, 2000 à 2004 pour
136, 2035 à 2039 pour 951, 2043 à 2047 pour 108). 312 : Yaw ← 108, Roll 0.0 non relié, ReturnValue → 204.DeltaRotation et
951.DeltaRotation ; 204 : self ← VariableGet_67.FirstPersonSM, DeltaRotation ← 312, then vide. Rien d'autre : écart au
résultat attendu = 0. Le PC de la référence B1 est supposé A19510E6… (dit par la fiche B2m, non prouvable sur le fichier texte) ;
le diff, limité aux seuls changements de B2m, est cohérent avec cela.
3.3 V6 : PASS
Commande : CompileAllBlueprints ; code 3 (comme la référence : le code reflète les 3 erreurs de CR_FaceExpRig), 228 s,
25 lignes d'erreur, 55 lignes d'avertissement. Sortie : …\CAM-B2kmn-VAL_CompileAllBlueprints_20261014-011924.txt.
$ grep "Compiling Completed" <journal> (référence B2i et nouveau)
Compiling Completed with 3 errors and 0 warnings and 0 blueprints that failed to load. (les deux)
$ grep -c "Loading and Compiling" : 421 (réf.) 421 (nouveau)
$ grep -c "La compilation de .* a réussi" : 420 (réf.) 420 (nouveau)
$ liste triée des 'Loading and Compiling' (sans horodatage) : diff réf. contre nouveau = vide
$ diff <(sed -n 6,40p réf.) <(sed -n 6,40p nouveau) : identiques (Erreurs : 25 lignes, 16 signatures ; Avertissements : 55 lignes,
42 signatures)
GI, Person, PC, Room : « La compilation de … a réussi ! » (l. 1963, 1984, 2018, 2021 du journal)
La 421e entrée est CR_FaceExpRig (moteur, 3 erreurs). Les 16 signatures d'erreur sont toutes CR_FaceExpRig /
RLExpStruct / RLConstraintStruct / « Could not find graph function data » : aucune ligne d'erreur d'un Blueprint du jeu.
Le diff brut des deux résumés ne diffère que par les horodatages, les durées de compilation et la ligne de commande.
3.4 Fin : MD5 et UeState : PASS
$ md5sum Content/BPs/Room.uasset Content/BPs/PC.uasset Content/BPs/GI.uasset Content/BPs/Person.uasset (après les commandlets)
3a451fddf991ac01a699af7bd1fbdc12 *Content/BPs/Room.uasset
f45be57a39d13d3eb19d0b543153ab0b *Content/BPs/PC.uasset
e64b5b37c9ef0db7735de0d6e3bd7c1c *Content/BPs/GI.uasset
8668a47c627f7a5254910cf0ac33b12a *Content/BPs/Person.uasset
$ Tools\UeState.ps1 -Brief (après)
processus=0 editeur=0 compilation=0 shaders=0 jeu=0
Les commandlets n'ont modifié aucun des 4 assets. git status : Room, PC, GI, Person M (déjà modifiés avant la VAL).
4. Diff lu en entier
- Room : diff du corps du dump, 8 hunks de liens existants + 1 bloc de 45 lignes ajoutées + l'en-tête de graphe (§ 3.1).
- PC : 6 hunks de corps (§ 3.2).
- Fichiers de contenu lus :
Content/BPs/Room.uassetetPC.uasset(binaires, lus par dump),GI/Person(MD5 seul). - Aucun fichier de code C++ n'est dans ces fiches. Fichiers non annoncés produits par la VAL : aucun hors § 3.
- Fins de ligne des fichiers écrits : mon livrable en LF ; les trois sorties de commandlets sont celles de
RunCommandlet.ps1(CRLF,FileCheck.ps1: alertes = 0).
5. Verdict
PASS
- V5 Room : PASS. V5 PC : PASS. V6 : PASS. MD5 : PASS. UeState = 0 : PASS.
- PASS-STATIC (limité) : la chaîne d'axe
0,0,1de537.Axis(lecture du dump, pas d'essai en jeu). - Non rejoué : V7 et
LogStats(essais en jeu), état intermédiaire6be71e01…de Room, sens du lacet de B2m, tangage 316.
6. Points à confirmer par l'utilisateur
- V7 (COMMUN-6) pour B2k : C1 à hauteur des yeux (assis, levé, marche, rassis, changement de pièce) ; C2 et sexe inchangés.
- V7 pour B2m : lacet POV à la souris sans pente ; sens non inversé (sinon
set_pin_value 108.B = 1) ; tangage 316 faux face à Y, connu, non traité. - V7 pour B2n : orbite autour du couple pendant le sexe, cadrage conservé ; cas
SexPersonsvide pendantSexOn(orbite autour de l'origine) ; limite C2 → sexe (vue restant surCamRoom, fiche B2o éventuelle). - Ticket au gardien :
Room.uassetcontient B2k et B2n inséparables ; PC.uasset pour B2m ; l'instantané estCAM-B2kmn. - Sauvegarde automatique
Saved/Autosaves/Game/BPs/Room_Auto1.uasset: à ignorer ou nettoyer (non vérifiée).
Fichiers à commiter
- A
Docs/Migration/etat/CAM/CAM-B2kmn-VAL.md - A
Docs/Migration/etat/CAM/CAM-B2kmn-VAL_LPDumpFunction_20261014-011706.txt - A
Docs/Migration/etat/CAM/CAM-B2kmn-VAL_LPDumpFunction_20261014-011816.txt - A
Docs/Migration/etat/CAM/CAM-B2kmn-VAL_CompileAllBlueprints_20261014-011924.txt - (Les journaux bruts restent dans
Saved/Logs/portage/, non suivis.)
Tours : 22 / 40
Constats
- Le dump
LPDumpFunctionde PC ne contient queEventGraphquand-Fn=EventGraph; le même nom de section apparaît deux fois dans le fichier (une fois préfixéLogInit: Display:), d'où le filtregrep -v '^[-+]LogInit:'du diff. - Un hook du poste refuse à
lp-validatortoute redirection de sortie de Bash vers le dossier temporaire de session : les diffs ont été affichés sans fichier intermédiaire. - Intervalle d'un gabarit à l'autre : le nom de nœud
_512réutilisé (numéro libre sous des nœuds existants) a été contrôlé absent de la référence, comme le recommande l'IMPL B2k.