LifePlay-Revival/Docs/Migration/etat/CAM/CAM-B2b-IMPL-F1.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

158 lines
11 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-B2b-F1 — Niveau N3 — Modèle prévu opus | utilisé claude-opus-5-5 (Opus 5.5) — Agent lp-mcp-bp — Skills sk-protocol, sk-change-safety, lp-mcp, lp-lot
# CAM-B2b-F1-IMPL : variables et `ComputeRoomBox`, partie XY (2026-10-13)
Consignes : `CAM-B2b-FICHES.md` § « Rubriques communes » et § « F1 » ; SPEC `CAM-SPEC.md` § « CAM-B2b », lignes B2b-0
(l. 374) et B2b-1 (l. 375). BUILD-GO / UE-GO de Big Boss du 2026-10-13 (cité par l'orchestrateur). Éditeur headless
PID 10708, port 8000, connexion `unreal-mcp` partagée avec la session qui lance (MCPA-T1). Room chargé par
l'orchestrateur (`load_asset /Game/BPs/Room`). Un seul appel `call_tool` par message, 51 appels MCP au total.
## 1. Fichiers modifiés
- `Content/BPs/Room.uasset` : modifié **en mémoire de l'éditeur seulement**, non enregistré (pas de `save_assets`
avant F7). Preuve : MD5 disque après F1 = MD5 de l'instantané (§ 3).
- Graphe `/Game/BPs/Room.Room:EventGraph`, positions x 38000-40000, y 0-600.
### 1.1 Variables (B2b-0) : `add_variable` ×5 sur `{"refPath":"/Game/BPs/Room.Room"}`
| Nom | `type_name` passé | Retour |
|---|---|---|
| `C2BoxMin` | `Vector` | `{"returnValue":null}` |
| `C2BoxMax` | `Vector` | `{"returnValue":null}` |
| `C2Yaw` | `float` | `{"returnValue":null}` |
| `C2Height` | `float` | `{"returnValue":null}` |
| `C2Dist` | `float` | `{"returnValue":null}` |
Défauts non réglés (0), conformément à la fiche (le 175 de `C2Dist` est porté en F3 par les valeurs d'entrée).
### 1.2 Nœuds créés (préfixe `refPath` : `/Game/BPs/Room.Room:EventGraph.`)
| Rôle | `refPath` (suffixe) | `type_id` relu | Position |
|---|---|---|---|
| Événement `ComputeRoomBox` | `K2Node_CustomEvent_49` | `AddEvent\|Custom\|ComputeRoomBox` (OutputDelegate 0, then 1) | 38000, 0 |
| Getter `StaticMeshComponent` | `K2Node_VariableGet_282` | `\|GetStaticMeshComponent` (créé par `Variables\|Acteurdemaillagestatique\|ObtenirStaticMeshComponent`) | 38000, 300 |
| Getter `Wall2` | `K2Node_VariableGet_283` | `\|GetWall2` (créé par `Variables\|Pardéfaut\|ObtenirWall2`) | 38000, 450 |
| Getter `Wall4` | `K2Node_VariableGet_284` | `\|GetWall4` (créé par `Variables\|Pardéfaut\|ObtenirWall4`) | 38000, 600 |
| **sol** = `GetWorldLocation(StaticMeshComponent)` | `K2Node_CallFunction_240` | `Transformation\|GetWorldLocation` | 38300, 300 |
| **W2** = `GetWorldLocation(Wall2)` | `K2Node_CallFunction_476` | `Transformation\|GetWorldLocation` | 38300, 450 |
| **W4** = `GetWorldLocation(Wall4)` | `K2Node_CallFunction_477` | `Transformation\|GetWorldLocation` | 38300, 600 |
| **R** = `GetActorLocation(self vide = Room)` | `K2Node_CallFunction_478` | `Transformation\|GetActorLocation` | 38300, 150 |
| `W2 − sol` | `K2Node_PromotableOperator_9` | `Math\|Vecteur\|vector-vector` | 38600, 450 |
| `W4 − sol` | `K2Node_PromotableOperator_10` | `Math\|Vecteur\|vector-vector` | 38600, 600 |
| `BreakVector(W2 − sol)` → X | `K2Node_CallFunction_479` | `Math\|Vecteur\|BreakVector` | 38900, 450 |
| `BreakVector(W4 − sol)` → Y | `K2Node_CallFunction_480` | `Math\|Vecteur\|BreakVector` | 38900, 600 |
| `MakeVector(X, Y, 0)` | `K2Node_CallFunction_481` | `Math\|Vecteur\|MakeVector` | 39200, 500 |
| `Abs` | `K2Node_CallFunction_482` | `Math\|Vecteur\|Vector_GetAbs` (créé par `Math\|Vecteur\|VectorGetAbs`) | 39450, 500 |
| `Abs − (30,30,0)` | `K2Node_PromotableOperator_11` | `Math\|Vecteur\|vector-vector` | 39650, 500 |
| **E** = `ComponentMax(Abs − 30, (0,0,0))` (écart E1, § 2) | `K2Node_CallFunction_483` | `Math\|Vecteur\|Vector_ComponentMax` | 39800, 500 |
| **Min0** = `R − E` | `K2Node_PromotableOperator_12` | `Math\|Vecteur\|vector-vector` | 40000, 200 |
| **Max0** = `R + E` | `K2Node_PromotableOperator_13` | `Math\|Vecteur\|vector+vector` | 40000, 400 |
Les opérateurs ont été créés par `Utilitaires|Opérateurs|Soustraire` / `Ajouter`, typés « vecteur » par la première
liaison (A), comme prévu par la fiche.
### 1.3 Liens faits (`connect_pins`, 18, tous `{"returnValue":null}`) et valeurs
| # | Sortie (nœud.index) | Entrée (nœud.broche index) |
|---|---|---|
| L1 | VariableGet_282.0 | CallFunction_240.self 0 |
| L2 | VariableGet_283.0 | CallFunction_476.self 0 |
| L3 | VariableGet_284.0 | CallFunction_477.self 0 |
| L4 | CallFunction_476.0 | PromotableOperator_9.A 0 |
| L5 | CallFunction_240.0 | PromotableOperator_9.B 1 |
| L6 | CallFunction_477.0 | PromotableOperator_10.A 0 |
| L7 | CallFunction_240.0 | PromotableOperator_10.B 1 |
| L8 | PromotableOperator_9.0 | CallFunction_479.InVec 0 |
| L9 | PromotableOperator_10.0 | CallFunction_480.InVec 0 |
| L10 | CallFunction_479.X 0 | CallFunction_481.X 0 |
| L11 | CallFunction_480.Y 1 | CallFunction_481.Y 1 |
| L12 | CallFunction_481.0 | CallFunction_482.A 0 |
| L13 | CallFunction_482.0 | PromotableOperator_11.A 0 |
| L14 | PromotableOperator_11.0 | CallFunction_483.A 0 |
| L15 | CallFunction_478.0 | PromotableOperator_12.A 0 |
| L16 | CallFunction_483.0 | PromotableOperator_12.B 1 |
| L17 | CallFunction_478.0 | PromotableOperator_13.A 0 |
| L18 | CallFunction_483.0 | PromotableOperator_13.B 1 |
Valeurs : `set_pin_value` PromotableOperator_11.B (index 1) = `30,30,0` (relu : `"value":"30,30,0"`) ;
CallFunction_481.Z = `0.0` (défaut, relu) ; CallFunction_483.B = `0, 0, 0` (défaut, relu) ; CallFunction_478.self vide
(= Room, relu `connected_pins:[]`). Non reliés, comme prévu : `CustomEvent_49.then` (F2 câble l'exécution),
sorties de `PromotableOperator_12` (Min0) et `_13` (Max0) (consommées en F2), sorties inutilisées des `BreakVector`.
### 1.4 Relecture
`get_node_infos` final groupé sur 13 nœuds (CustomEvent_49, CallFunction_240, 476, 477, 478, 480, 481, 483,
PromotableOperator_9 à 13) : les 18 liens apparaissent des deux côtés (les 3 getters, 479 et 482 sont vus par les
`connected_pins` de leurs voisins) ; types de broches tous `Vector` sauf X / Y / Z des `BreakVector` / `MakeVector`
(`Float (double-précision)`) ; aucune divergence avec la fiche. Index de broches relus avant câblage (3 lectures
intermédiaires) : conformes à la fiche (`BreakVector` X 0 / Y 1 / Z 2 ; opérateurs A 0, B 1, sortie 0 ;
`GetWorldLocation` self 0, sortie 0).
### 1.5 Compilation
`compile_blueprint {blueprint:{refPath:"/Game/BPs/Room.Room"}, warnings_as_errors:true}` → `{"returnValue":null}`,
aucune exception (critère de la fiche, rubrique « Fin de chaque fiche »). `hyper_blueprint_debug_inspect` non appelé
(absent du serveur le 2026-10-10, mémoire `unreal-mcp-reconnect` ; non revérifié) ; journal de l'éditeur non lu
(chemin `-abslog` non fourni). Pas de `save_assets` (F7).
## 2. Écarts à la SPEC
- **E1 (écart à la fiche, pour suivre la SPEC)** : la SPEC B2b-1 (`CAM-SPEC.md:375`) exige
`Ex = Max(Abs(Wall2.X − sol.X) − 30, 0)`, `Ey = Max(Abs(Wall4.Y − sol.Y) − 30, 0)` ; la fiche F1 § 3 s'arrête à
`Soustraire B = (30,30,0) → E` (le `Max(…, 0)` n'y figure pas). J'ai ajouté **un nœud**,
`K2Node_CallFunction_483` `Vector_ComponentMax(A = Abs − (30,30,0), B = (0,0,0))`, dont la sortie est `E`. Effet :
identique à la fiche tant que `|W2.X − sol.X| ≥ 30` et `|W4.Y − sol.Y| ≥ 30` ; sinon la boîte se réduit à `R` sur
l'axe au lieu d'avoir `Min0 > Max0` (bornes croisées dans `VectorBoundedToBox`). Z : `MakeVector.Z = 0` → `E.Z = 0`,
Z remplacé en F2. Retrait sur décision de l'orchestrateur : `delete_node` CallFunction_483, puis `connect_pins`
PromotableOperator_11.0 → PromotableOperator_12.B 1 et → PromotableOperator_13.B 1 (3 appels, relecture).
- Aucun autre écart : 5 variables, événement, sol, W2, W4, R, X, Y, `MakeVector(X, Y, 0)`, `Abs`, marge 30, `Min0`,
`Max0` conformes ; aucun nœud existant touché ; aucun `break_pins` ni `delete_node` ; aucune garde `IsValid` ajoutée
(aucune n'est demandée ; « vide » n'est pas un état normal établi pour ces composants, voir § 5).
## 3. Instantané
Fait par l'orchestrateur avant F1 (non refait ici) : `D:\Game\LifePlay_Backup_5.5\CAM-B2b\manifest.csv`, ligne 2 relue :
`"Content\BPs\Room.uasset","True","6060745","A5FA970E821DC2D0D9BF220FD43B9DE6","2026-10-13T15:25:45"`.
Disque après F1 : `md5sum "/d/Game/LifePlay-master 5.8/Content/BPs/Room.uasset"` →
`a5fa970e821dc2d0d9bf220fd43b9de6` (= instantané : rien d'enregistré). Retour arrière avant F7 : fermer l'éditeur sans
enregistrer suffit ; après F7 : `Tools\Restore.ps1 -Lot CAM-B2b -Only Content\BPs\Room.uasset`, éditeur fermé, sur
décision de l'orchestrateur (jamais lancé ici).
## 4. Ce qui n'a pas été fait
- F2 et suivantes (partie Z, extérieur, `Définir C2BoxMin/Max`, exécution `then`) : hors périmètre.
- Type effectif des 5 variables non relu (`add_variable` rend `null`, aucun outil de lecture des variables appelé).
- `hyper_blueprint_debug_inspect`, journal de l'éditeur : non consultés (§ 1.5).
- `save_assets` : interdit avant F7. Les modifications vivent en mémoire de l'éditeur PID 10708 : une fermeture ou un
plantage avant F7 les perd (l'instantané reste intact).
- Preuve en jeu (build empaqueté + `LogStats`) : hors rôle.
## 5. Points à confirmer en VAL
1. E1 : `Vector_ComponentMax` (CallFunction_483) gardé (SPEC) ou retiré (fiche) — décision de l'orchestrateur.
2. Types des variables : `C2BoxMin`, `C2BoxMax` = Vector ; `C2Yaw`, `C2Height`, `C2Dist` = float (sous-type `real`
float ou double) — à relire en F2 / F3 (premier getter ou setter) ou par dump.
3. `PromotableOperator_11.B` stocké `30,30,0` : valeur sérialisée à confirmer après `save_assets` (F7) par dump.
4. `Wall2` / `Wall4` (catégorie `Pardéfaut`, `Static Mesh Component Référence d'objet`) : composants toujours présents
ou variables affectées à l'exécution ? Lecture sans `IsValid`, comme `isPointInsideRoom` (formule reprise par la
SPEC) ; si elles peuvent être vides, `GetWorldLocation` donnerait un `Accessed None` (à vérifier par `LogStats`).
5. Getter `StaticMeshComponent` = composant natif hérité d'`AStaticMeshActor` (`Acteurdemaillagestatique`) : à
confirmer comme celui que cite la SPEC (ROOM:4050-4052).
6. Compilation stricte jugée sur l'absence d'exception seulement (pas de liste de diagnostics) ; recontrôle en F7 et
par `CompileAllBlueprints` éditeur fermé.
## 6. Fichiers à commiter
- `A Docs/Migration/etat/CAM/CAM-B2b-IMPL-F1.md` (dépôt du jeu, branche `ue5.8`).
- `Content/BPs/Room.uasset` : rien à commiter pour F1 (non enregistré) ; il le sera après F7 et la VAL.
Tours : 56 / 60
## Constats
- `create_node` ne rend que le `refPath` (pas les broches) : une lecture `get_node_infos` groupée après plusieurs
créations économise des tours.
- `ObtenirStaticMeshComponent` n'existe pas sous `Variables|Pardéfaut` : le getter natif est
`Variables|Acteurdemaillagestatique|ObtenirStaticMeshComponent` (premier `create_node` en erreur : « The node could
not be created / Variables|Pardéfaut|ObtenirStaticMeshComponent does not exist »).
- `find_node_types` filtre « ComponentMax » → `Math|Vecteur|VectorComponentMax` (relu `Math|Vecteur|Vector_ComponentMax`).
- `add_variable` accepte `type_name` `Vector` et `float` ; `add_event` rend le `refPath` du `CustomEvent`.