LifePlay-Revival/Docs/Migration/etat/CAM/CAM-B2g-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

247 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Fiche CAM-B2g-VAL — Niveau N1 — Modèle prévu non précisé par la fiche | utilisé claude-sonnet-5-5 — Agent lp-validator (A-VAL) — Skills sk-protocol, sk-recount, debug-verification, lp-validate
# CAM-B2g-VAL : validation de B2g et B2h (Room) et du témoin C2 complété (C, C++) (2026-10-13)
Copie `D:\Game\LifePlay-master 5.8`, branche `ue5.8` (`git branch --show-current`). Validateur distinct de l'auteur
(IMPL : `lp-mcp-bp`). Aucun asset, code ni doc validée modifié. Éditeur fermé avant, entre et après les commandlets.
**Verdict global : PASS pour Room (V5, V6, MD5) ; PASS-STATIC pour le C++ (C), non compilé par cette VAL.**
## 1. Fiches amont relues
- `Docs\Migration\etat\CAM\CAM-B2g-IMPL.md` (rapport de l'auteur, lu en entier : 20 appels MCP, tableaux A et B, écart E1).
- `Docs\Migration\etat\CAM\CAM-COMMUN3-DIAG.md` : § 7 (l. 119-187, partie 1 de C1), § 8 (l. 189-236, géométrie de
`Wall`), § 10 (l. 272-340, A, B, C et D ; amendement E1 à la l. 299 : `IfThenElse_100` reste sur PO_8).
- Références : `CAM-B2f-VAL_LPDumpFunction_20261013-195332.txt` et `CAM-B2f-VAL_CompileAllBlueprints_20261013-195519.txt`
(journal `Saved\Logs\portage\CAM-B2f-VAL_CompileAllBlueprints_20261013-195519.log`).
- Sauvegarde : `D:\Game\LifePlay_Backup_5.5\CAM-B2g\` (`manifest.csv`, `Content\BPs\Room.uasset`,
`Source\LifePlay\LPCameraModeSubsystem.{cpp,h}`, `editeur\`).
- Partie D (`Walk`, STG) : hors périmètre de cette VAL (non relue).
## 2. Points à confirmer des IMPL (§ 5 de `CAM-B2g-IMPL.md`)
| # | Point | Résultat | Preuve |
|---|---|---|---|
| P1 | Room = `0c8eb59f…` ; GI = `e64b5b37…` et Person = `8668a47c…` inchangés | PASS | § 3 R1 et R9 |
| P2 | V5 : diff limité à `MakeArray_5` [2] ← 260.Wall | PASS | § 3 R3, `…-211708.txt:10083` |
| P3 | V5 : 1 nœud `CommutativeAssociativeBinaryOperator_60` (`BooleanOR`), A ← PO_8, B ← 269 | PASS | `:10888-10892` |
| P4 | V5 : conditions de 96 et 97 ← OR_60 | PASS | `:10627`, `:10636` |
| P5 | V5 : Room = 1261 nœuds | PASS | `:4833` |
| P6 | PO_8 → 91, 98, 99, 100 et OR_60 [0], plus 96 ni 97 | PASS | `:10186` |
| P7 | 269 → 77, 82, 84 et OR_60 [1] | PASS | `:9700` |
| P8 | then / else de 96 et 97 inchangés | PASS | `:10628-10629`, `:10637-10638` = lignes de la référence (absentes du diff) |
| P9 | `CompileAllBlueprints` éditeur fermé : 0 erreur ou avertissement nouveau sur Room | PASS | § 3 R4 à R6 |
| P10 | En jeu : C1 souris et flèches, C2 inchangé, D8 (caméra à 26 cm) | reporté (COMMUN-4, build empaqueté avec la partie D de STG) | non rejouable ici |
| P11 | (IMPL « Constats ») dossier d'instantané `CAM-B2g` : sous-dossier `Source` absent du manifeste | PASS, levé | § 3 R10 : il contient la sauvegarde des 2 fichiers C++ (cpp `1DE73AA9…`, h `84F9BA30…`) |
## 3. Critères rejoués (commande → résultat)
Toutes les commandes sont lancées depuis `D:\Game\LifePlay-master 5.8`. `UeState` relevé avant : `processus=0 editeur=0
compilation=0 shaders=0 jeu=0`, code 0.
### Room
**R1. MD5 de Room.**
`md5sum Content/BPs/Room.uasset` → `0c8eb59f55cb02ad2c4fa1413840b84b`. Sauvegarde `CAM-B2g\Content\BPs\Room.uasset` →
`f2b082d2911d9f7c7be60c2cf30ee6d5` (= manifeste, 6 378 021 octets). **PASS**.
**R2. V5, dump.**
```
powershell -NoProfile -Command "Set-Location 'D:\Game\LifePlay-master 5.8'; .\Tools\RunCommandlet.ps1 -Lot CAM-B2g-VAL -Commandlet LPDumpFunction -Args '-BP=Room -Fn=* -Pins -Exec' -EtatDir 'D:\Game\LifePlay-master 5.8\Docs\Migration\etat\CAM'"
code=0 duree=62s erreurs=0 avertissements=10822
resume : Docs\Migration\etat\CAM\CAM-B2g-VAL_LPDumpFunction_20261013-211708.txt (10943 lignes)
journal : Saved\Logs\portage\CAM-B2g-VAL_LPDumpFunction_20261013-211708.log
```
Référence : `CAM-B2f-VAL_LPDumpFunction_20261013-195332.txt` (10937 lignes, 10816 avertissements). Écart : +6 lignes dans les
deux comptes, cohérent avec le corps ci-dessous (voir R3).
**R3. V5, diff du corps.**
`cd Docs/Migration/etat/CAM; diff <(grep -v '^LogInit:' A) <(grep -v '^LogInit:' B)` (A = référence B2f, B = ce dump).
Sorties du diff, hors en-tête et sommaire (l. 1-110 : tableau des 100 signatures les plus fréquentes, dont l'ordre des
ex aequo change et dont le total passe de 10816 à 10822 ; c'est l'en-tête du fichier, pas le corps) :
| Ligne B | Différence | Attendu |
|---|---|---|
| 4833 | `=== Room :: EventGraph (1260 noeuds) ===` → `(1261 noeuds)` | 1261 (1260 + 1) : conforme |
| 9644 | `Wall -> 88.self, 438.self` → `…, K2Node_MakeArray_5.[2]` | 260.Wall → 88, 438, MakeArray_5 : conforme |
| 9700 | `CamC1On -> 77, 82, 84` → `…, K2Node_CommutativeAssociativeBinaryOperator_60.B` | 269 → 77, 82, 84, OR_60.B : conforme |
| 10083 (ajout) | `[2] -> K2Node_VariableGet_260.Wall` sous `MakeArray_5` | `[2]` ← 260.Wall : conforme |
| 10186 | PO_8 `ReturnValue -> 91, 98, 99, 100, OR_60.A` (avant : 91, 96, 97, 98, 99, 100) | 91, 98, 99, 100, OR_60 : conforme (E1) |
| 10627 | `IfThenElse_96` `Condition -> OR_60.ReturnValue` (avant PO_8) | conforme |
| 10636 | `IfThenElse_97` `Condition -> OR_60.ReturnValue` (avant PO_8) | conforme |
| 10888-10892 (ajout, 5 lignes) | `OR_60 appel KismetMathLibrary::BooleanOR()`, `self (vide)`, `A -> PO_8.ReturnValue`, `B -> VariableGet_269.CamC1On`, `ReturnValue -> IfThenElse_96.Condition, IfThenElse_97.Condition` | conforme |
Aucune autre ligne de corps ne diffère : 8 groupes de différences, aucune autre ligne `=== Room :: … ===` dans le diff
(les autres graphes de Room sont inchangés). Le dump ne contient pas de positions. Recompte des lignes : 6 modifiées
(4833, 9644, 9700, 10186, 10627, 10636) et 6 ajoutées (1 + 5), soit +6 au total, égal à 10943 − 10937. Lecture directe de
`…-211708.txt:10079-10083` (MakeArray_5 : `Array -> 459, 499, 505` inchangé, `[0]` 261, `[1]` 268, `[2]` 260) et
`:10625-10638` (96 et 97). **PASS**.
**R4. V6, CompileAllBlueprints.**
```
powershell -NoProfile -Command "Set-Location 'D:\Game\LifePlay-master 5.8'; .\Tools\RunCommandlet.ps1 -Lot CAM-B2g-VAL -Commandlet CompileAllBlueprints -EtatDir 'D:\Game\LifePlay-master 5.8\Docs\Migration\etat\CAM'"
code=3 duree=214s erreurs=25 avertissements=55
resume : Docs\Migration\etat\CAM\CAM-B2g-VAL_CompileAllBlueprints_20261013-211848.txt (954 lignes)
journal : Saved\Logs\portage\CAM-B2g-VAL_CompileAllBlueprints_20261013-211848.log
```
Code 3 et 25 lignes d'erreur, comme la référence (`…-195519.txt` : code 3, 207 s, 25 erreurs, 55 avertissements).
**R5. V6, comptes.**
- `grep -n "errors and" <journal>` → `3303:Compiling Completed with 3 errors and 0 warnings and 0 blueprints that failed to load.`
Référence (`…-195519.log:3302`) : même phrase.
- `grep -c "La compilation de .* a réussi" <journal>` → 420 ; référence : 420.
- `grep -n "La compilation de Room" <journal>` → `2021:… [0065,73] La compilation de Room a réussi ! [en 1 342 ms] (/Game/BPs/Room.Room)`.
- Erreurs : `grep "Error:" <journal> | grep -v "CR_FaceExpRig\|RLExpStruct\|graph function data for node @@" | wc -l` → 0
(25 lignes `Error:` au total, toutes `CR_FaceExpRig` / `RLExpStruct` ou le message sans nom d'actif `Could not find graph
function data for node @@`, présent à l'identique dans la référence).
**PASS**.
**R6. V6, diff contre la référence.**
`diff` des deux `.txt` (hors `LogInit:`, après retrait des durées `[en N ms]`, des horodatages `[nnnn,nn]` et du nom du
journal) : seules les lignes de durée changent, 7 lignes (GI 4 577 → 5 417 ms, PC, Person, StreetMap_Static, Room
1 327 → 1 342 ms, StandardMacros, ActorMacros), plus les 3 lignes d'en-tête (lot, date, journal). Les sections Erreurs (16
signatures) et Avertissements (42 signatures) sont identiques ligne à ligne. **PASS**.
### Fichiers de référence inchangés
**R9. MD5 finaux (après les deux commandlets).** Voir la section « Mesuré ». GI `e64b5b37c9ef0db7735de0d6e3bd7c1c`,
Person `8668a47c627f7a5254910cf0ac33b12a`, Room `0c8eb59f55cb02ad2c4fa1413840b84b` : inchangés par les commandlets. **PASS**.
**R10. Instantané.** `D:\Game\LifePlay_Backup_5.5\CAM-B2g\manifest.csv` : une seule ligne (Room, 6 378 021 octets,
`F2B082D2…`). Le dossier `Source\LifePlay\` de l'instantané contient `LPCameraModeSubsystem.cpp` (`1DE73AA9…`) et `.h`
(`84F9BA30…`) : c'est la sauvegarde de C, prise hors manifeste. **PASS**.
### C++ (C) : `Source/LifePlay/LPCameraModeSubsystem.cpp`
Fichier non suivi par git (`?? Source/LifePlay/LPCameraModeSubsystem.cpp` et `.h`, créés au lot CAM-B2c) : pas de
`git diff` possible, la comparaison se fait contre la sauvegarde.
**C1. MD5 et fins de ligne.**
`.\Tools\FileCheck.ps1 -Path Source\LifePlay\LPCameraModeSubsystem.cpp,….h,<sauvegarde cpp>,Content\BPs\Room.uasset`
```
Fins CRLF LF CR BOM MD5 Fichier
LF 0 386 0 - 61FB558202E9BB3F567BCEAA4BF241D3 Source\LifePlay\LPCameraModeSubsystem.cpp
LF 0 52 0 - 84F9BA303E1ABD171C506DFBB4ED9F63 Source\LifePlay\LPCameraModeSubsystem.h
LF 0 370 0 - 1DE73AA932AF2A056E1B8528CED4DCAB (sauvegarde du .cpp)
binaire … 0C8EB59F55CB02AD2C4FA1413840B84B Content\BPs\Room.uasset
fichiers=4 binaire=1 LF=3 alertes=0 introuvables=0 (code 0)
```
.cpp = `61FB5582…` attendu ; sauvegarde = `1DE73AA9…` attendu ; .h = `84F9BA30…` inchangé (= sauvegarde du .h).
LF partout, 0 CRLF, 0 CR seul, sans BOM, comme la sauvegarde. **PASS**.
**C2. Diff contre la sauvegarde** (`diff sauvegarde actuel`, 386 − 370 = +16 lignes) :
5 hunks de code (plus les lignes de commentaire), rien hors du code du DIAG § 10 C :
1. l. 46-48 : `const FName RoomC2Target(TEXT("C2Target"));` et `const FName GIWall(TEXT("Wall"));` (+ 1 commentaire), dans
l'espace de noms nommé `LPCameraModeLocal`.
2. l. 228-232 : `if (AActor* Wall = Cast<AActor>(LPCameraModeLocal::ReadObject(GI, LPCameraModeLocal::GIWall))) { Query.AddIgnoredActor(Wall); }`
juste après `Query.AddIgnoredActor(Cam)`.
3. l. 234 et 237 : `Probe` devient `[&](ECollisionChannel Channel, const FVector& Direction) -> FString` et le balayage
utilise `Head + Direction * WitnessProbeLength` (plus `Dir` capturé).
4. l. 246-255 : `Probe(ECC_Camera, Dir)`, `Probe(ECC_Visibility, Dir)`, puis `PC`, `Back`, `BackText = Probe(ECC_Visibility, Back)`,
`Target`, `TargetText`, `Offset`.
5. l. 265-266 : `UE_LOG` étendu.
Comparé au bloc du DIAG § 10 C (l. 309-330) : identique, hormis la ternaire de `TargetText` coupée en deux lignes et
quelques lignes de commentaire ajoutées. **PASS-STATIC**.
**C3. Conformité aux points demandés.**
| Point | Lecture | Verdict |
|---|---|---|
| `GIWall`, `RoomC2Target` ajoutés | l. 46, 48 | PASS-STATIC |
| `Wall` ignoré dans la requête | l. 229-232, après `AddIgnoredActor(Cam)` (l. 227) ; même liste que `MakeArray_5` + `GI.Wall` | PASS-STATIC |
| `Probe` prend la direction | l. 234 ; les 3 appels (l. 246, 247, 251) passent un 2e argument | PASS-STATIC |
| sonde arrière suit la rotation de contrôle du PC | l. 249-251 : `FRotator(0, ControlRotation.Yaw, 0)`, axe X, négatif ; repli `-Player->GetActorForwardVector()` si pas de PC | PASS-STATIC (que cet axe soit celui de la sonde 459 de Room est l'affirmation du DIAG § 8, non re-dérivée ici) |
| distance à `C2Target`, tête, décalage capsule | l. 252-255 (`FVector::Dist(Head, Target)`, `Head.X/Y`, `(Head − Player->GetActorLocation()).Size2D()`) ; `ReadVector` existe l. 77 et rend faux sinon → `illisible` | PASS-STATIC |
| `UE_LOG` : arguments et types | 10 spécificateurs dans le format (`%.0f`, `%+.0f`, `%s`, `%.0f`, `%.0f`, `%.0f`, `%s`, `%s`, `%s`, `%s`, compté par `grep -o '%[+.0-9]*[fsdi]' \| wc -l` = 10) pour 10 arguments (l. 266) : `Distance` (float), `CamLoc.Z - Head.Z` (double), `*TargetText`, `Head.X`, `Head.Y`, `Offset.Size2D()` (double), `*CameraText`, `*VisibilityText`, `*BackText`, `*BoxText`. Types alignés : réels pour `%f`, `*FString` pour `%s`. `FString::Printf("%.0f cm", FVector::Dist(...))` : double pour `%f` | PASS-STATIC |
| pas de nouvel include requis | `FRotationMatrix` : `Core/Public/Math/UnrealMath.h:41` inclut `Math/RotationMatrix.h`, lui-même inclus par `CoreMinimal.h:154` (déjà dans le .h, l. 12) ; `GetUnitAxis(EAxis::Type)` à `Math/Matrix.h:274` ; `Size2D` à `Math/Vector.h:585` ; `APlayerController` : `GameFramework/PlayerController.h` déjà inclus (.cpp l. 13), `GetControlRotation` vient d'`AController` ; `UWorld::GetFirstPlayerController` : `Engine/World.h` (l. 8). Précédent de `FRotationMatrix(...).GetUnitAxis(EAxis::X)` dans ce module : `LPDirectControlSubsystem.cpp:1025` | PASS-STATIC |
| pas de collision de noms | `PC` : local à `WitnessC2` (l. 249), autre `PC` local dans `ComputeLabel` (l. 273), fonctions distinctes ; `GIPC` est le nom de la constante de l'espace de noms (l. 34) ; `Back`, `Target`, `Offset`, `Wall`, `BackText`, `TargetText` : aucun autre emploi dans le .cpp (Grep) ; aucun membre homonyme dans le .h (relu en entier, 52 lignes) ; `GIWall`, `RoomC2Target` dans l'espace nommé `LPCameraModeLocal` (pas anonyme, risque C2374 de l'en-tête évité) | PASS-STATIC |
| fins de ligne LF, sans BOM | C1 | PASS |
**C4. Risques de compilation relevés** (aucun bloquant) :
- `FRotator(0.f, PC->GetControlRotation().Yaw, 0.f)` mélange `float` et `double` (UE 5.x : `FRotator` est en double) : conversion
implicite sans perte vers le constructeur `(T, T, T)`, aucune ambiguïté connue ; pas de précédent identique relevé dans le
module (le DIAG § 7 utilise la même forme pour `Walk`). Estimé sans risque.
- `FVector Target;` n'est lu que si `ReadVector` rend vrai : pas d'usage non initialisé.
- `[[nodiscard]]` sur `GetUnitAxis` : le résultat est utilisé.
- Ternaire `PC ? -FRotationMatrix(...).GetUnitAxis(...) : -Player->GetActorForwardVector()` : les deux branches sont des
`FVector` (le `-` unaire s'applique au résultat de `GetUnitAxis`, priorité postfixe) ; `Player` est non nul à ce point
(`GetMesh` a déjà exigé `IsValid(Player)`, l. 203-207).
- Non compilé par cette VAL (consigne : statique). La compilation reste à faire au build de COMMUN-4 (C et D ensemble).
## 4. Diff lu en entier
| Fichier | Lecture | Compte |
|---|---|---|
| `Content/BPs/Room.uasset` | dump complet comparé à la référence (R3), lignes lues dans le dump | 8 groupes de différences de corps, 1 nœud de plus (1260 → 1261), 0 autre ligne |
| `Source/LifePlay/LPCameraModeSubsystem.cpp` | diff contre la sauvegarde, plus lecture des l. 1-130 et 150-290 | 5 hunks de code, +16 lignes (370 → 386), 0 ligne hors DIAG § 10 C |
| `Source/LifePlay/LPCameraModeSubsystem.h` | MD5 = sauvegarde, relu en entier | 0 différence |
| `Content/BPs/GI.uasset`, `Content/BPs/Person.uasset` | MD5 seul | 0 différence avec l'attendu |
`git status --short` (hors `Docs/`) : `M` GI, Person, Room ; `M` `LPDebugSubsystem.{cpp,h}`, `LPDirectControlSubsystem.{cpp,h}`,
`LPOutdoorRoomSubsystem.{cpp,h}` (modifications d'autres lots/STG, hors périmètre, non relues) ; `D`
`Tools/claude/hooks/ecriture-gardien.py` ; `??` `LPCameraModeSubsystem.{cpp,h}`. Aucun fichier `Content/` ni `Source/`
inattendu. Les commandlets n'ont pas modifié d'asset (MD5 inchangés, § Mesuré).
## 5. Verdict
- **Room (B2g + B2h) : PASS.** V5 conforme à la liste attendue, 1261 nœuds, rien d'autre ; V6 identique à la référence
(3 erreurs, 0 avertissement, `CR_FaceExpRig` seulement, Room compilé avec succès) ; MD5 attendus.
- **C++ (C) : PASS-STATIC.** Conforme au DIAG § 10 C, LF sans BOM, formats et types cohérents, pas d'include manquant, pas de
collision de noms. Non compilé.
- Écarts à la fiche de VAL : aucun. Aucune réserve sur les livrables amont, sauf que l'IMPL ne comptait pas les nœuds (P5,
maintenant compté ici) ; l'incertitude de l'IMPL sur le sous-dossier `Source` de l'instantané est levée (P11).
## 6. Points à confirmer par l'utilisateur
- [ ] Compilation du C++ (`LPCameraModeSubsystem.cpp`) au build de COMMUN-4, avec la partie D (`Walk`, STG) dans le même build.
- [ ] P10, en jeu (build empaqueté) : C1, la souris et les flèches gauche/droite tournent la vue ; C2 inchangé ; D8, plus
de ligne `Temoin C2` sous 100 cm hors des rues étroites (la nouvelle ligne donne la cible C2, la tête, le décalage capsule
et la sonde vers l'arrière).
- [ ] Partie D (`Walk`, STG, `LPDirectControlSubsystem.cpp`, MD5 attendu `827F19C0…`) : hors de cette VAL.
## Mesuré
```
$ .\Tools\UeState.ps1 (avant)
processus=0 editeur=0 compilation=0 shaders=0 jeu=0 (code 0)
$ md5sum Content/BPs/Room.uasset Content/BPs/GI.uasset Content/BPs/Person.uasset Source/LifePlay/LPCameraModeSubsystem.cpp Source/LifePlay/LPCameraModeSubsystem.h (après les commandlets)
0c8eb59f55cb02ad2c4fa1413840b84b *Content/BPs/Room.uasset
e64b5b37c9ef0db7735de0d6e3bd7c1c *Content/BPs/GI.uasset
8668a47c627f7a5254910cf0ac33b12a *Content/BPs/Person.uasset
61fb558202e9bb3f567bceaa4bf241d3 *Source/LifePlay/LPCameraModeSubsystem.cpp
84f9ba303e1abd171c506dfbb4ed9f63 *Source/LifePlay/LPCameraModeSubsystem.h
$ md5sum <sauvegarde>/LPCameraModeSubsystem.cpp <sauvegarde>/LPCameraModeSubsystem.h <sauvegarde>/Content/BPs/Room.uasset
1de73aa932af2a056e1b8528ced4dcab *…/CAM-B2g/Source/LifePlay/LPCameraModeSubsystem.cpp
84f9ba303e1abd171c506dfbb4ed9f63 *…/CAM-B2g/Source/LifePlay/LPCameraModeSubsystem.h
f2b082d2911d9f7c7be60c2cf30ee6d5 *…/CAM-B2g/Content/BPs/Room.uasset
$ .\Tools\UeState.ps1 (après)
processus=0 editeur=0 compilation=0 shaders=0 jeu=0 (code 0)
```
Les 5 valeurs MD5 (Room, GI, Person, .cpp, .h) sont celles attendues par la fiche. `UeState` = 0 à la fin.
## Trace (TRACE)
```
Trace : Docs\Migration\etat\CAM\CAM-B2g-VAL_LPDumpFunction_20261013-211708.txt — Fiche CAM-B2g-VAL — 2026-10-13 21:17
Commande : RunCommandlet.ps1 -Lot CAM-B2g-VAL -Commandlet LPDumpFunction -Args '-BP=Room -Fn=* -Pins -Exec' (copie 5.8, éditeur 5.8 headless)
Environnement: copie D:\Game\LifePlay-master 5.8, branche ue5.8, Room 0c8eb59f…, éditeur fermé (UeState 0), machine calme
Attendu : 1261 noeuds EventGraph ; 8 groupes de différences listés au § 3 R3 ; rien d'autre
Obtenu : code 0, 62 s, 10943 lignes ; différences conformes
Lecture : les en-têtes de sommaire (l. 1-110) changent d'ordre pour les ex aequo : ne comparer que le corps
Trace : Docs\Migration\etat\CAM\CAM-B2g-VAL_CompileAllBlueprints_20261013-211848.txt — Fiche CAM-B2g-VAL — 2026-10-13 21:18
Commande : RunCommandlet.ps1 -Lot CAM-B2g-VAL -Commandlet CompileAllBlueprints
Environnement: idem ; éditeur fermé
Attendu : 3 errors and 0 warnings, CR_FaceExpRig seulement, Room compilé avec succès (référence B2f)
Obtenu : code 3 (attendu, comme la référence), 25 lignes d'erreur, 55 d'avertissement, "3 errors and 0 warnings", 420 compilations réussies
Lecture : le code de sortie 3 est celui de la référence (les erreurs CR_FaceExpRig d'un actif du moteur), pas un échec de Room
```
## Fichiers à commiter
- A `Docs/Migration/etat/CAM/CAM-B2g-VAL.md` (dépôt du jeu, branche ue5.8)
- A `Docs/Migration/etat/CAM/CAM-B2g-VAL_LPDumpFunction_20261013-211708.txt`
- A `Docs/Migration/etat/CAM/CAM-B2g-VAL_CompileAllBlueprints_20261013-211848.txt`
- (journaux `Saved/Logs/portage/CAM-B2g-VAL_*.log` : ignorés par git)
- Aucune modification d'asset ni de code par cette VAL.
Tours : 14 / 40
## Constats
- Piège de lancement : `powershell -NoProfile -File ./Tools/RunCommandlet.ps1 …` depuis Git Bash échoue (`Split-Path :
Impossible de lier l'argument au paramètre « Path », car il s'agit d'une chaîne vide`, `RunCommandlet.ps1:26`, `$PSScriptRoot`
vide). Lancement qui marche : `powershell -NoProfile -Command "Set-Location '<copie>'; .\Tools\RunCommandlet.ps1 …"`.
À verser : `lp-commandlets` (ou `lp-build` § 8).
- `FileCheck.ps1` n'accepte pas de chemins positionnels multiples ; utiliser `-Path 'a','b'`.
- Le dump `LPDumpFunction -Pins -Exec` reste comparable d'un lot à l'autre si l'on ne lit que le corps ; le sommaire (100
premières signatures) réordonne les ex aequo.