LifePlay-Revival/Docs/Migration/etat/CAM/CAM-B2p-R-VAL.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

203 lines
17 KiB
Markdown

Fiche CAM-B2p-R-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-B2p-R-VAL : validation de CAM-B2p-R (Room, vue de scène pendant le sexe S1 / S2 / 303 → 441, flèches = couple sans Maj O1) (2026-10-14)
Verdict global : **PASS** (V5, V6, MD5 et UeState rejoués à neuf, éditeur fermé). V7 (essai en jeu, B2p-C compilé) 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), leurs 2 journaux sous `Saved\Logs\portage\` et ce
livrable. Aucune commande git qui écrit. Le jeton UE était tenu par la session CAM pour ce passage ; les commandlets ont
tourné un à la fois.
## 1. Fiches amont relues
- `CAM-B2p-R-FICHE.md` (étapes 1 à 6, effets attendus, VAL V5 / V6 / V7) : relue en entier.
- `CAM-B2p-R-IMPL.md` (43 / 60 tours déclarés, 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 : 43 / 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 B2s, non bloquant).
- Références de diff : `CAM-B2s-VAL_LPDumpFunction_20261014-084441.txt` (Room d'avant, EventGraph 1276 nœuds) et
`CAM-B2s-VAL_CompileAllBlueprints_20261014-084550.txt` (V6).
- Instantané d'avant : `D:\Game\LifePlay_Backup_5.5\CAM-B2p-R\` (Room `C5AB7241…`, cité par l'IMPL § 3 ; non rejoué : le
diff de dump suffit au périmètre de la fiche).
## 2. Points à confirmer des IMPL
| Id | Point (IMPL § 5) | Verdict | Preuve |
|---|---|---|---|
| R-1 | Room = `931387479e2d15f80bc4f36398907712` ; GI `bd0a2256…`, PC `f45be57a…`, Person `8668a47c…` inchangés | **PASS** | § 3.0 et § 3.4 (md5sum avant et après les commandlets) ; Room 6 428 769 octets, 2026-10-14 10:07:40 = valeur de l'IMPL |
| R-2 | V5 : EventGraph 1276 → 1279 nœuds | **PASS** | dump l. 4833 `=== Room :: EventGraph (1279 noeuds) ===` ; recompte indépendant : 1279 lignes de nœud après l. 4833 (1276 dans la référence) |
| R-3 | Nœuds nouveaux : `IfThenElse_102` (S1), `IfThenElse_103` (S2), `CommutativeAssociativeBinaryOperator_63` (`BooleanOR`) | **PASS** | dump l. 10982-10996 (§ 3.1b) |
| R-4 | 43.then → 102 au lieu de 77 ; 45.then → 103 au lieu de 91 ; 102 et 103 Condition ← 258 ; 102.then et 103.then → 394 ; 102.else → 77 ; 103.else → 91 ; 303.then → 441 | **PASS** | dump l. 9627, 9633, 9638, 9728, 9695, 10179, 9725, 9849, 10982-10991 (§ 3.1a) |
| R-5 | 62 → 63.A et 85 → 63.B ; 63 → 14.Condition et 17.Condition ; 62 ne sort plus que vers 12 et 63 | **PASS** | dump l. 5543, 6165, 5624, 5773, 10992-10996 (§ 3.1a, 3.1b) |
| R-6 | Aucune autre différence (témoins 78, 79, 80, 81, 92, 329, 440, 539 à 542 ; graphes de fonction) | **PASS** | § 3.1c : 50 hunks tous classés ; aucun hunk entre les l. 108 et 4832 (39 graphes de fonction identiques) ; aucun hunk sur 78, 79, 80, 81, 92, 329, 440, 539 à 542 |
| R-7 | V6 : `CompileAllBlueprints` = référence ; Room sans erreur ni avertissement nouveau | **PASS** | § 3.3 (écart de GI : aucun, la liste des compilations est identique) |
| R-8 | V7 : CAM-41 à CAM-49, CAM-54, CAM-55 (en particulier CAM-42 depuis C1, C2, C3 ; flèches sans Maj ; molette avec Maj ; hors sexe inchangé ; `SexOn` faux au crochet B1-11) | **Reporté** | essai en jeu, build suivant avec B2p-C compilé ; hors périmètre VAL (éditeur fermé, pas de jeu) |
| R-9 | V7 : `LogStats` sans `Accessed None` nouveau sur Room | **Reporté** | idem (jeu). Lecture statique : S1 et S2 lisent `258` (`GI.SexOn`) déjà lu sans garde par 78 et 81 ; O1 lit `85` déjà lu en amont : le dump ne montre aucune lecture nouvelle hors ces deux nœuds |
## 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). Le 2e
commandlet 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
931387479e2d15f80bc4f36398907712 *Content/BPs/Room.uasset
bd0a2256b875a3ac875630e4b85d92d7 *Content/BPs/GI.uasset
f45be57a39d13d3eb19d0b543153ab0b *Content/BPs/PC.uasset
8668a47c627f7a5254910cf0ac33b12a *Content/BPs/Person.uasset
```
Attendu : Room `93138747…` (après), GI `BD0A2256…`, PC `F45BE57A…`, Person `8668A47C…` : conforme.
### 3.1 V5 Room (dump) : **PASS**
Commande (après `Set-Location` sur la copie) :
```
.\Tools\RunCommandlet.ps1 -Lot CAM-B2p-R-VAL -Commandlet LPDumpFunction -Args "-BP=Room -Fn=* -Pins -Exec" -EtatDir "D:\Game\LifePlay-master 5.8\Docs\Migration\etat\CAM"
code=0 duree=57s erreurs=0 avertissements=10926
resume : Docs\Migration\etat\CAM\CAM-B2p-R-VAL_LPDumpFunction_20261014-101130.txt
journal : Saved\Logs\portage\CAM-B2p-R-VAL_LPDumpFunction_20261014-101130.log
```
Trace : `CAM-B2p-R-VAL_LPDumpFunction_20261014-101130.txt` — Fiche CAM-B2p-R-VAL — 2026-10-14 10:11-10:12. Attendu (écrit avant
lancement, d'après la fiche) : EventGraph 1279 nœuds, 3 nœuds créés (S1, S2, O1), 13 liens posés dont 4 en remplacement,
lignes ajoutées = 15 (3 nœuds de 5 lignes). Obtenu : ci-dessous. Lecture : les « 10 926 avertissements » sont le dump lui-même
(canal `LogLPDump: Warning`), pas des diagnostics ; code 0, 0 erreur ; 10911 → 10926 = +15.
Diff : `git diff --no-index --unified=0 CAM-B2s-VAL_LPDumpFunction_20261014-084441.txt CAM-B2p-R-VAL_LPDumpFunction_20261014-101130.txt`.
Bilan brut : `81 insertions(+), 66 deletions(-)`, 201 lignes de diff, 50 hunks (`grep -c '^@@'`). Répartition (recompte par
numéro de ligne de début de hunk, `awk` : 35 avant la l. 4833, 15 à partir de la l. 4833) :
- 35 hunks d'en-tête (lignes 2 à 108 : date, durée, journal, histogramme « Avertissements : 10911 → 10926 lignes, 6615 →
6625 signatures (100 premieres) », classement des signatures réordonné) : bruit, l'histogramme bouge avec le nombre de
lignes. Contrôle de cohérence : 52 insertions / 52 deletions dans cette zone.
- 1 hunk final (l. 11032 → 11047) : `LogInit: Display: Success - 0 error(s), 10861 warning(s)` → `10876` : +15 = les 15 lignes
ajoutées (10911 → 10926, même +15). Cohérent.
- 14 hunks de corps (EventGraph, dernier graphe de Room), bruts, avec la lecture au dump :
```
=== Room :: EventGraph (1276 noeuds) === -> (1279 noeuds) (l. 4833)
K2Node_VariableGet_62 / MoveObject (l. 5543) : "IfThenElse_12, 14, 17 .Condition" -> "IfThenElse_12.Condition, CommutativeAssociativeBinaryOperator_63.A"
K2Node_IfThenElse_14 / Condition (l. 5624) : "VariableGet_62.MoveObject" -> "CommutativeAssociativeBinaryOperator_63.ReturnValue"
K2Node_IfThenElse_17 / Condition (l. 5773) : idem
K2Node_VariableGet_85 / SexOn (l. 6165) : + CommutativeAssociativeBinaryOperator_63.B (5 sorties)
K2Node_CustomEvent_43 / then (l. 9627) : IfThenElse_77.execute -> IfThenElse_102.execute
K2Node_CustomEvent_45 / then (l. 9633) : IfThenElse_91.execute -> IfThenElse_103.execute (OutputDelegate -> CallFunction_329 : ligne l. 9632 non touchée)
K2Node_VariableGet_258 / SexOn (l. 9638) : + IfThenElse_102.Condition, IfThenElse_103.Condition
K2Node_IfThenElse_77 / execute (l. 9695) : CustomEvent_43.then -> IfThenElse_102.else
K2Node_CallFunction_303 / then (l. 9725) : (vide) -> CallFunction_441.execute
K2Node_CallFunction_394 / execute (l. 9728) : "IfThenElse_79.then" -> "IfThenElse_79.then, IfThenElse_102.then, IfThenElse_103.then"
K2Node_CallFunction_441 / execute (l. 9849) : "CallFunction_440.then" -> "CallFunction_440.then, CallFunction_303.then"
K2Node_IfThenElse_91 / execute (l. 10179): CustomEvent_45.then -> IfThenElse_103.else
+15 lignes (l. 10982 à 10996) : IfThenElse_102, IfThenElse_103, CommutativeAssociativeBinaryOperator_63
```
(13 hunks de modification d'une ligne + 1 hunk d'ajout = 14 ; 35 + 1 + 14 = 50. Insertions : 52 + 1 + 13 + 15 = 81 ; suppressions : 52 + 1 + 13 = 66 ; recompte égal au `--stat`.)
3.1a Les 13 modifications sont exactement celles de la demande : 43.then (→ S1), 45.then (→ S2), 77.execute et 91.execute
(← S1.else, S2.else), 394.execute (← 79, S1, S2), 258 (+ S1, S2), 303.then (→ 441), 441.execute (← 440, 303), 62 (sorties 12 et
O1 ; plus 14 ni 17), 85 (+ O1.B), 14 et 17 (Condition ← O1). Les Condition des l. 5624 et 5773 ont été attribuées aux nœuds 14
et 17 par lecture du contexte (l. 5622 `K2Node_IfThenElse_14`, l. 5771 `K2Node_IfThenElse_17`). Rien d'autre.
3.1b Nœuds créés (dump l. 10982 à 10996, extrait fidèle) :
```
K2Node_IfThenElse_102 execute<-CustomEvent_43.then Condition<-VariableGet_258.SexOn then->CallFunction_394.execute else->IfThenElse_77.execute
K2Node_IfThenElse_103 execute<-CustomEvent_45.then Condition<-VariableGet_258.SexOn then->CallFunction_394.execute else->IfThenElse_91.execute
K2Node_CommutativeAssociativeBinaryOperator_63 appel KismetMathLibrary::BooleanOR() self(vide) A<-VariableGet_62.MoveObject B<-VariableGet_85.SexOn ReturnValue->IfThenElse_14.Condition, IfThenElse_17.Condition
```
3.1c Recompte des liens (L1 à L13) : L1 `43.then → 102.execute` ; L2 `258 → 102.Condition` ; L3 `102.then → 394.execute` ;
L4 `102.else → 77.execute` ; L5 `45.then → 103.execute` ; L6 `258 → 103.Condition` ; L7 `103.then → 394.execute` ;
L8 `103.else → 91.execute` ; L9 `303.then → 441.execute` ; L10 `62 → 63.A` ; L11 `85 → 63.B` ; L12 `63 → 14.Condition` ;
L13 `63 → 17.Condition` : 13 liens, tous lus dans le dump. Témoins : 78, 79, 80, 81, 92, 329, 440, 539 à 542 sans hunk (liens
identiques ; 79.then → 394 gardé, l. 9728).
3.1d Autres graphes de Room (39 graphes de fonction, de `UserConstructionScript` à `Async`, l. 121 à 4743) : aucun hunk de
corps avant la l. 4833 (le premier hunk après l'en-tête du fichier, dernier hunk d'en-tête l. 104-108, est celui de
l'en-tête de l'EventGraph, l. 4833) : **identiques à la référence**.
### 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-B2p-R-VAL -Commandlet CompileAllBlueprints -EtatDir "D:\Game\LifePlay-master 5.8\Docs\Migration\etat\CAM"
code=3 duree=207s erreurs=25 avertissements=55
resume : Docs\Migration\etat\CAM\CAM-B2p-R-VAL_CompileAllBlueprints_20261014-101259.txt
journal : Saved\Logs\portage\CAM-B2p-R-VAL_CompileAllBlueprints_20261014-101259.log
```
(`exit=1` du shell Bash = code retourné par le script enveloppant, pas le code du commandlet, qui est 3 comme la référence.)
Trace : Fiche CAM-B2p-R-VAL — 2026-10-14 10:13-10:16. Attendu (avant lancement, d'après la référence B2s) : 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 B2s | B2p-R (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) | — | md5 `769e82e8…` des deux blocs (compteurs `[nnnn,nn]` retirés) | `sed` + `md5sum` | identique |
| Bloc « Avertissements » (55 / 42) | 55 / 42 | md5 `466c596b…` des deux blocs de 43 lignes | `sed` + `md5sum` | identique |
| `Compiling Completed with …` | `3 errors and 0 warnings and 0 blueprints that failed to load` | même texte (journal l. 3302) | Grep | identique |
| Compilations réussies | 420 | 420 | `grep -c 'La compilation de .* a réussi'` sur les 2 résumés | identique |
| Lignes `Loading and Compiling` | 421 | 421 | `grep -c` | identique (421 = 420 + `CR_FaceExpRig` en erreur) |
| Liste des BP compilés (nom + chemin, triée, sans horodatage ni durée) | — | md5 `41f45c18…` des deux listes | `sed` + `sort` + `md5sum` | identique |
| `Room` | réussi | `La compilation de Room a réussi ! [en 1 145 ms]` (résumé l. 142 ; journal l. 2021) ; seules 2 lignes du résumé citent Room (Loading, réussi) | Grep | **Room sans erreur ni avertissement** |
Effet de GI (BD0A2256, changé depuis la référence B2s qui était à E64B5B37) : **aucun** sur la liste des compilations ni sur les
erreurs et avertissements (blocs identiques). Les 3 erreurs sont toutes `CR_FaceExpRig` (moteur / CC_Shaders), sans lien avec
Room. Un `diff` brut du résumé donne 425 insertions / 425 deletions : ce sont les compteurs `[nnnn,nn]` et les durées, ligne à
ligne, normalisés ci-dessus ; non traités comme un écart.
### 3.4 MD5 après les commandlets
```
$ md5sum Content/BPs/Room.uasset Content/BPs/GI.uasset Content/BPs/PC.uasset Content/BPs/Person.uasset
931387479e2d15f80bc4f36398907712 *Content/BPs/Room.uasset
bd0a2256b875a3ac875630e4b85d92d7 *Content/BPs/GI.uasset
f45be57a39d13d3eb19d0b543153ab0b *Content/BPs/PC.uasset
8668a47c627f7a5254910cf0ac33b12a *Content/BPs/Person.uasset
$ stat -c "%s %y %n" Content/BPs/Room.uasset
6428769 2026-10-14 10:07:40.131707500 +0200 Content/BPs/Room.uasset
```
Identiques au § 3.0 : les commandlets n'ont rien écrit dans ces 4 assets (taille et date de Room inchangées). `git status
--short -- Content` : GI, PC, Person, Room en `M` (GI, PC, Person depuis des lots antérieurs, IMPL § 6) ; `Content/UI/TopRight.uasset`
en `M` aussi, hors lot.
### 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 (201 lignes ; 50 hunks, tous classés au § 3.1). Recompte indépendant : `git diff --no-index --stat`
= `81 insertions(+), 66 deletions(-)`, `grep -c '^@@'` = 50, répartition 35 + 1 + 14 par numéro de ligne, nombre de nœuds par
comptage des lignes `K2Node_` après la l. 4833 (1279 contre 1276 dans la référence).
- Diff de V6 : normalisé (§ 3.3) : aucune différence de contenu.
- Fichier du dépôt modifié par le lot CAM-B2p-R : `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 (1279 nœuds, 3 nœuds créés dont S1 / S2 / O1 `BooleanOR`, 13 liens, aucune autre différence), V6 (= référence,
Room sans erreur ni avertissement, GI sans effet), MD5 (Room `93138747…` ; 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, avec B2p-C compilé (`CAM-B2p-SPEC.md`) : CAM-41 à CAM-49, CAM-54, CAM-55 ; en particulier CAM-42 depuis C1,
C2 et C3, dès l'entrée en sexe et après POV → Scene (vue `SceneCamera`, minuterie arrêtée) ; ZQSD en mode Scene (exigence
COMMUN-7) ; flèches = couple sans Maj pendant le sexe ; molette avec Maj inchangée ; hors sexe, comportement inchangé.
- [ ] Fin de sexe : `SexOn` est faux au crochet B1-11 (GI 2699 → `ApplyRoomCamera`), qui rend C1, C2 ou C3 et relance la
minuterie ; sinon repli prévu par la fiche (appel différé côté C++, non écrit).
- [ ] `LogStats` en jeu sans `Accessed None` nouveau sur Room.
## 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-B2p-R-VAL.md`
- A `Docs/Migration/etat/CAM/CAM-B2p-R-VAL_LPDumpFunction_20261014-101130.txt`
- A `Docs/Migration/etat/CAM/CAM-B2p-R-VAL_CompileAllBlueprints_20261014-101259.txt`
- (déjà annoncés par l'IMPL : M `Content/BPs/Room.uasset`, A `Docs/Migration/etat/CAM/CAM-B2p-R-IMPL.md`)
Tours : 13 / 40
## Constats
- Le crochet `ecriture-gardien` a refusé une commande Bash dont un `awk` contenait `NR>0` (le `>` est pris pour une redirection) :
contournement par `cut` seul (pas de `>` ni `<` dans les commandes).
- `RunCommandlet.ps1` depuis Git Bash : `powershell -NoProfile -Command '…'` (guillemets simples dehors) ; le code de sortie du
shell (1) n'est pas celui du commandlet (3, lu sur la ligne `code=`).
- Comparaison de deux résumés `CompileAllBlueprints` : le `diff` brut est inutilisable (425 / 425 lignes, compteurs `[nnnn,nn]`
et durées) ; normaliser (nom + chemin triés, blocs Erreurs / Avertissements sans compteurs) puis `md5sum`.
- L'index « Condition » des hunks 5624 et 5773 ne nomme pas le nœud dans le diff `--unified=0` : relire le contexte au dump
(l. 5622, 5771).