# CAM-B0-IMPL : sonde MCP des capacités de la phase 2 (2026-10-13) Lot CAM, sous-lot B0 (`CAM-SPEC.md` § (a) CAM-B0, Q16). BUILD-GO de Big Boss le 2026-10-13. Exécuté par la session CAM (`local_cb58847a`), appels MCP un à un depuis la session, sans sous-agent `lp-mcp-bp`. **Aucun fichier suivi écrit.** Mode de permission : auto ; **0 refus** du mode auto sur ≈ 75 appels MCP (création, écriture, compilation, enregistrement). ## 1. Déroulé - Avant : 0 processus UE, port 8000 libre, `Content\Dev` absent ; `git status -- Content Source Config` = GI, Person, TopRight en `M` (STE-H10). - Éditeur headless (`lp-mcp` § 2) : PID 26368, journal `Saved\Logs\CAM-B0_editeur_20261013-074758.log` (hors git) ; `Wait-HyperAIStudioMCP.ps1 -TimeoutSeconds 540` code 0 ; `unreal-mcp` visible dans la session sans reconnexion (`get_current_level` = `/Game/Scenes/CentralLondon`). - Création de `/Game/Dev/CAM_Probe` (Actor) et `/Game/Dev/CAM_Probe2` (Actor) ; essais ; `compile_blueprint` (`warnings_as_errors` vrai) ; `save_assets` des 2 sondes seules ; `Stop-Process` (accepté) ; `UeState.ps1` = 0 ; déplacement vers `D:\Game\LifePlay_Backup_5.5\CAM\B0\` ; `Content\Dev` vide retiré (`rmdir`). - Écart : 2 appels `add_variable` envoyés en parallèle (contre « un appel à la fois ») ; tous deux réussis, sans effet. - Journal brut des appels : `CAM-B0-journal.txt` (début de séance). ## 2. Résultats par capacité (R1 / R2 de la SPEC) | # | Capacité | Résultat | Détail (type_id exact, éditeur en français) | |---|---|---|---| | 1 | `BlueprintTools.create` d'un Actor | fait | `asset_type` = `/Script/Engine.Actor` | | 2 | `add_variable` bool, Vector | fait | `ProbeBool`, `ProbeVec` | | 3 | `add_object_variable` CameraActor | fait | `CamRoom` (`/Script/Engine.CameraActor`) | | 4 | `add_struct_variable` TimerHandle | fait | `ProbeTimer` (`/Script/Engine.TimerHandle`) — nécessaire au point 8 | | 5 | `add_event` personnalisé | fait | `ProbeEvent` → `K2Node_CustomEvent_0` (broches `OutputDelegate` 0, `then` 1) | | 6 | surcharge `ReceiveEndPlay` / `ReceiveBeginPlay` | fait | `add_event` rend un `K2Node_Event` (« Ajouterunévénement\|ÉvénementEndPlay ») ; BeginPlay rend le nœud fantôme existant | | 7 | `SpawnActorFromClass` + `Class` = CameraActor | fait | `Jeu\|Faireapparaîtreunacteuràpartird'uneclasse` ; après `set_pin_value`, `ReturnValue` typé « Acteur De Caméra », broche `Instigator` ajoutée (index 6) | | 8 | minuterie par événement `K2_SetTimerDelegate` | fait | `Utilitaires\|Temps\|SetTimerbyEvent` ; `OutputDelegate` → `Delegate` (1) ; `Time` (2) = 0,016, `bLooping` (3) vrai, `bMaxOncePerFrame` (4) vrai ; sortie `ReturnValue` (1) = TimerHandle | | 9 | **`K2_ClearTimerDelegate`** | **ÉCHEC** | absent de `find_node_types` (« ClearTimer » → seul `ClearTimerbyFunctionName`) ; `create_node` « Utilitaires\|Temps\|ClearTimerbyEvent » → « The node could not be created / Utilitaires\|Temps\|ClearTimerbyEvent does not exist » | | 9b | remplacement : arrêt par handle | fait | `SetTimerbyEvent.ReturnValue` → `Définir ProbeTimer` ; `Obtenir ProbeTimer` → `Utilitaires\|Temps\|ClearandInvalidateTimerbyHandle.Handle` (1) ; EndPlay → Clear | | 10 | `SphereTraceSingle`, canal Camera | fait | `Collision\|SphereTraceByChannel` ; `TraceChannel` (4) = `TraceTypeQuery2` (relu par `get_pin_value`), `Radius` (3) = 12 ; sorties `OutHit` (1), `ReturnValue` (2) | | 11 | `BreakHitResult` | fait | `Collision\|BreakHitResult`, entrée 0 ← `OutHit` | | 12 | `VInterpTo`, `RInterpTo` | fait | `Math\|Interpolation\|VInterpTo` / `RInterpTo` ; entrées Current 0, Target 1, DeltaTime 2 (float), InterpSpeed 3 (= 8) | | 13 | `GetWorldDeltaSeconds` | fait | `Utilitaires\|Temps\|GetWorldDeltaSeconds`, sortie double reliée à DeltaTime float (conversion acceptée) | | 14 | `FindLookAtRotation` | fait | `Math\|Rotateur\|FindLookatRotation` → `RInterpTo.Target` | | 15 | `GetComponentBounds`, `GetActorBounds` | fait | `Collision\|GetComponentBounds`, `Collision\|GetActorBounds` (créés, non câblés) | | 16 | `GetSocketLocation` | fait | `Transformation\|GetSocketLocation` (créé, non câblé) | | 17 | `GetScaledCapsuleHalfHeight` | fait | `Composants\|Capsule\|GetScaledCapsuleHalfHeight` | | 18 | `Less_DoubleDouble` | fait | opérateur générique `Utilitaires\|Opérateurs\|Inférieurà(<)` (`K2Node_PromotableOperator`) ; devient `float|Obtenir` / `Définir` / `` (sans contexte), pas ceux rendus par `find_node_types(context_pins)`. Le nom affiché de la classe est localisé et sans tiret bas (`CAMProbe`, `Acteurdecaméra`) : le relire par `find_node_types` avec le filtre `|` avant chaque sous-lot. 3. Comparateurs et opérations vectorielles : opérateurs génériques `Utilitaires|Opérateurs|…`, typés par la 1re liaison ; relier l'entrée avant `set_pin_value`. 4. Le mode auto n'a refusé aucun appel MCP d'écriture fait **par la session elle-même** (les 4 refus de STE visaient `lp-mcp-bp` en sous-agent ou un relais entre sessions) : même voie recommandée pour B1-B5. ## 4. Contrôles de fin (BUILD-FIN) | Contrôle | Résultat | |---|---| | MD5 GI / Person / TopRight / Room / PC | `71034A04…` / `D1B4C63D…` / `1FCB94A6…` / `E8F58B2A…` / `09F54974…` : inchangés | | Sondes, avant → après déplacement | `CAM_Probe.uasset` `CAAF5D9E48616DBC3281BB703DDA1DB0` → identique ; `CAM_Probe2.uasset` `A5F598B2C3F76DECE8623A5783D9B382` → identique ; sous `D:\Game\LifePlay_Backup_5.5\CAM\B0\` | | `Content\Dev` | absent (2 fichiers déplacés, dossier vide retiré) | | `git status --short -- Content Source Config` | GI, Person, TopRight en `M` (STE-H10) : identique à l'avant | | Processus | `UeState.ps1` : processus=0 éditeur=0 compilation=0 shaders=0 jeu=0 | | Autosaves | `Saved\Autosaves\Game\BPs` = Room_Auto2, TestStatic_Auto1 (anciens), aucun de la sonde | Fichiers écrits : `etat\CAM\CAM-B0-IMPL.md`, `etat\CAM\CAM-B0-journal.txt`, `etat\CAM\CAM-TACHES.md` (ligne B0). Hors git : journal de l'éditeur sous `Saved\Logs\`, sondes sous `Backup_5.5\CAM\B0\`.