22 KiB
Fiche STG-B1 — Niveau N3 — Modèle prévu (agent lp-mcp-bp) | utilisé claude-opus-5-5 — Agent lp-mcp-bp — Skills lp-mcp, sk-protocol, sk-change-safety, lp-lot
STG-B1-IMPL : C-O4b et C-O7 sur Person par MCP (2026-10-13)
Verdict : ARRÊT avant toute écriture. Le geste C-O4b c exige de lire NOT(elem.bHidden) sur un autre acteur. Les
outils MCP ne savent pas créer ce nœud (§ 2). La fiche (rubrique 8) et le rôle imposent l'arrêt sur écart à la SPEC.
Aucun nœud ni aucune variable créés, aucune compilation, aucun save_assets. Content/BPs/Person.uasset est inchangé
(MD5 identique à l'instantané). C-O7 n'est pas posé non plus : l'arrêt vaut pour toute la fiche, mais l'outil a été examiné en lecture (§ 4).
1. Fichiers modifiés
Aucun fichier du projet modifié. Contrôles au 2026-10-13 vers 14 h 24 (heure locale), éditeur fermé :
| Fichier | MD5 avant (14 h 10) | MD5 après (14 h 24) | Attendu |
|---|---|---|---|
Content/BPs/Person.uasset |
d1b4c63d47621b1191ad9352c80c99cd |
d1b4c63d47621b1191ad9352c80c99cd |
inchangé, puisqu'il y a eu arrêt |
Content/BPs/Room.uasset (CAM) |
a5fa970e821dc2d0d9bf220fd43b9de6 |
a5fa970e821dc2d0d9bf220fd43b9de6 |
A5FA970E… |
Content/BPs/GI.uasset |
c4817b847ecf246c859647577647d6e9 |
c4817b847ecf246c859647577647d6e9 |
C4817B84… |
git status --short -- Content Source Config donne les mêmes lignes avant et après : M Content/BPs/Room.uasset,
M Source/LifePlay/LPDebugSubsystem.cpp, M Source/LifePlay/LPDebugSubsystem.h (autres lots, non touchés).
Fichiers écrits hors git par l'éditeur :
- journal de l'éditeur :
D:\Game\LifePlay-master 5.8\Saved\Logs\portage\STG_B1_mcp_editor.log; - sauvegarde automatique de l'éditeur :
D:\Game\LifePlay-master 5.8\Saved\Autosaves\Game\BPs\Person_Auto1.uasset, 20 788 360 octets, MD5a50b77c9bbe85ce5fb575138b3d16a32, écrite à 14 h 22 min 31 s. Dans le journal, l. 2266-2268 :Cmd: OBJ SAVEPACKAGE PACKAGE="/Game/BPs/Person" FILE=".../Saved/Autosaves/Game/BPs/Person_Auto1.uasset" ... AUTOSAVING=true(12 h 22 min 29 s UTC). Elle suitfind_node_types(12 h 22 min 09 s UTC). Aprèsload_asset, je n'ai fait que des lectures : le paquet Person a donc été marqué « modifié » par un outil de lecture (estimé :BlueprintGraphEditor.get_graph_editor, appelé parfind_node_types). Le fichier est laissé en place : il est hors git et je ne le supprime pas.
Séquence MCP, dans l'ordre (un appel à la fois, tous en lecture) :
| # | Outil | Arguments | Réponse (résumé fidèle) |
|---|---|---|---|
| 1 | list_toolsets |
— | 37 toolsets ; editor_toolset.toolsets.blueprint.BlueprintTools et editor_toolset.toolsets.object.ObjectTools présents |
| 2 | AssetTools.load_asset |
{asset_path:"/Game/BPs/Person"} |
{"refPath":"/Game/BPs/Person.Person"} |
| 3 | BlueprintTools.find_node_types |
{graph:"/Game/BPs/Person.Person:EventGraph", type_id_filter:"HiddenInGame", context_pins:[]} |
["Rendu|SetActorHiddenInGame","Développement|SetHiddeninGame","Variables|Rendu|ObtenirActorHiddenInGame","Classe|SceneComponent|ObtenirHiddeninGame", …GLTFExportOptions, PaperTileLayer, CameraComponent…] |
| 4 | BlueprintTools.get_node_infos |
CustomEvent_72, CallFunction_635, IfThenElse_90, CallFunction_664, CallFunction_658, CallFunction_531 |
état de la fiche § 4 reconfirmé (voir plus bas) |
| 5 | BlueprintTools.get_node_infos |
VariableGet_240, VariableGet_261 (lectures de bHidden existantes) |
type_id |GetbHidden, input_pins: [] pour les deux |
| 6 | BlueprintTools.find_node_types |
type_id_filter:"Hidden", context_pins:[{EGPD_Output, 2, CustomEvent_72}] (broche Person, de type Person) |
["Rendu|SetActorHiddenInGame","Variables|Rendu|ObtenirActorHiddenInGame","Appelerunefonction|EnsureInvalidStaysHidden"] |
| 7 | ObjectTools.get_properties |
{instance:"/Game/BPs/Person.Default__Person_C:CharMoveComp", properties:["bUseRVOAvoidance","AvoidanceWeight","AvoidanceConsiderationRadius"]} |
{"bUseRVOAvoidance":false,"AvoidanceWeight":0,"AvoidanceConsiderationRadius":500} |
État de départ relu par MCP (appel 4), conforme au dump dumps\Person__EventGraph.txt l. 15147-15442 :
K2Node_CustomEvent_72(AddEvent|Custom|moveToPersonStand, position 11664, -2288) : sortiesthen1,Person2 (5 lecteurs),Distance3 ;K2Node_CallFunction_635(|unOccupyFnt) :then(sortie 0) →IfThenElse_90.execute(entrée 0) ;K2Node_IfThenElse_90(12608, -2432) :Condition(entrée 1) ←CallFunction_664.ReturnValue(sortie 0) ;then0 →636;else1 →531;K2Node_CallFunction_664(Math|Flottant|Equal(Float)) :A←Distance,B= 250 ;K2Node_CallFunction_658(Math|Vecteur|SelectVector, 13232, -1712) :ReturnValue→ seul lecteur531.Loc;bPickA←659;K2Node_CallFunction_531(|moveTo) :execute←IfThenElse_90.else,self1 visible,Loc2 ←658,Precise3 = false.
Nœuds créés : 0. Liens coupés ou créés : 0. Variables créées : 0. EventGraph : 3702 nœuds selon le dump, compte non relu par
find_nodes, mais aucune écriture n'a eu lieu (n = 0). Compilation : non lancée, faute de modification.
2. Écarts à la SPEC
E1 (bloquant) : NOT(elem.bHidden) (fiche, rubrique 5 c) ne peut pas être construit par les outils MCP.
- Le moteur n'expose pas d'accesseur appelable :
AActor::IsHidden()n'est pas uneUFUNCTION(D:\Game\Launcher\Engine\UE_5.8\Engine\Source\Runtime\Engine\Classes\GameFramework\Actor.h:4520-4525). Seule la propriétébHiddense lit, par un nœudVariableGet. find_node_typesne propose, pour cette propriété, queVariables|Rendu|ObtenirActorHiddenInGame(appels 3 et 6), avec ou sanscontext_pinssur une broche de type Person. Il n'existe niClasse|Acteur|…niClasse|Person|…ActorHidden….- Ce type de nœud est un accesseur sur
selfdont la brocheselfest cachée. Les deux accesseursbHiddendéjà présents dans Person (VariableGet_240,VariableGet_261) rendentinput_pins: [](appel 5).BlueprintTools._resolve_pinne voit que les broches delist_all_pins(...\Toolsets\EditorToolset\Content\Python\editor_toolset\toolsets\blueprint.py:556-565), donc aucune brocheselfne peut être reliée àelem. - Ce résultat a déjà été obtenu à l'essai de création dans Room, sur le même moteur, avec le même
type_id: il produit l'accesseur de l'acteur lui-même, sans brocheself, avec « PinID index_id 0 out of range », y compris avecdeclaring_classActor (etat\CAM\CAM-B1-IMPL.md:41-44).write_graph_dslest exclu, car il réécrit le graphe entier. Aucune autre voie n'a été essayée : chercher un contournement est hors rôle. - Conséquence : le geste C-O4b ne peut pas être posé tel que la fiche le décrit. La règle de la rubrique 8 (« En cas … d'écart : ARRÊT, ne pas sauvegarder ») s'applique. Aucune écriture n'a été faite, la décision revient à l'orchestrateur.
Options pour la décision (à trancher par l'orchestrateur ou l'utilisateur, aucune n'est appliquée) :
| Option | Geste | Effet | Risque |
|---|---|---|---|
| A | retirer le terme NOT(elem.bHidden) (AND à 3 entrées, 17 nœuds) |
tout Person compte comme tiers, caché ou non | un figurant caché garé près du point déclenche standIdle à tort ; standIdle peut alors tomber sur le repli « centre de Room + 50 » (C-O2 reporté). Incertain : l'endroit où restent les figurants cachés |
| B | remplacer le terme par « tiers visible » au sens de C-O2 (SPEC § 2, l. 45) : Array_Contains(GI.DummyPersonsInUse, elem) ou elem == GI.PlayerCharacter |
même définition de « visible » que C-O2 | lecture de GI : garde IsValid(GI) en cascade exigée (lp-mcp § 1 règle 4) ; type_id `Classe |
| C | fonction C++ BlueprintPure (lecture de IsHidden()) |
test identique à la SPEC | demande un build ; la SPEC § 2 l. 52 dit « pas de build après B1 » : à placer dans un autre sous-lot |
Estimé : B est la plus cohérente avec la SPEC, puisque C-O2 utilise déjà cette définition. Il faut d'abord vérifier par une
lecture (CART) que GI.DummyPersonsInUse couvre tous les tiers visibles.
3. Instantané
Je n'ai pas relancé d'instantané : la fiche (rubrique 3) le donne comme déjà pris. Contrôle effectué :
D:\Game\LifePlay_Backup_5.5\STG\manifest.csv:"Content\BPs\Person.uasset","True","20788360","D1B4C63D47621B1191AD9352C80C99CD","2026-10-13T14:10:12";md5sum D:/Game/LifePlay_Backup_5.5/STG/Content/BPs/Person.uassetdonned1b4c63d47621b1191ad9352c80c99cd, égal à Person sur disque au départ et à l'arrivée.- Aucun retour arrière n'est nécessaire, puisque Person est inchangé. S'il fallait un jour restaurer, il se proposerait sans être
lancé, éditeur fermé :
.\Tools\Snapshot.ps1 -Lot STG-retour -Path Content\BPs\Person.uasset, puis.\Tools\Restore.ps1 -Lot STG -Only Content\BPs\Person.uasset -WhatIf.
4. Ce qui n'a pas été fait
- C-O4b (rubrique 5, gestes a à f) : rien n'est posé, ni variable
STG_StandTarget/STG_StandCrowded, ni nœud, ni lien. Cause : E1. - C-O7 (rubrique 6) : non posé, arrêt sur écart C-O4b. Il n'est pas absent faute d'outil. Outils examinés : je n'ai pas lancé
describe_toolset, conformément àlp-mcp§ 1 règle 6 sur le volume ; j'ai lu le code source du toolset à la place.ObjectTools.set_properties(instance, values)existe (...\editor_toolset\toolsets\object.py:81-94, avecrequire_editable) ;BlueprintTools.get_default_objectaussi (blueprint.py:214-229). Le sous-objet du CDO se lit parrefPath/Game/BPs/Person.Default__Person_C:CharMoveComp(appel 7 :bUseRVOAvoidancefalse,AvoidanceWeight0,AvoidanceConsiderationRadius500). L'écriture n'a pas été essayée. Incertain :require_editableaccepte-t-il ce sous-objet, et la valeur survit-elle àcompile_blueprintet àsave_assets? L'essai qui tranche :set_properties, puiscompile_blueprint, puisget_properties, dans la prochaine fiche. - Compte des nœuds de l'EventGraph par
find_nodes: non relevé (aucune écriture, n = 0). compile_blueprint,save_assets: non lancés (rien à compiler ni à enregistrer).- Build, commandlet, jeu : hors fiche.
5. Points à confirmer en VAL
md5sum Content/BPs/Person.uasset=d1b4c63d47621b1191ad9352c80c99cd(inchangé par STG-B1).md5sum Content/BPs/Room.uasset=a5fa970e…etContent/BPs/GI.uasset=c4817b84…(inchangés).Tools\UeState.ps1:processus=0 editeur=0 compilation=0 shaders=0 jeu=0(relevé à 14 h 24).Saved\Autosaves\Game\BPs\Person_Auto1.uasset(MD5a50b77c9…, hors git) : sauvegarde automatique de l'éditeur, sans effet surContent. À laisser ou à déplacer vers une quarantaine, au choix de l'orchestrateur.- Pour la reprise : décision sur E1 (options A, B ou C), puis nouvelle fiche B1 avec le terme de visibilité réécrit, et essai d'écriture de C-O7.
6. Fichiers à commiter
Dépôt du jeu, copie 5.8, branche ue5.8 :
A Docs/Migration/etat/ST/STG/STG-B1-IMPL.md(ce livrable).
Aucun asset à commiter : Person n'a pas été modifié. La ligne STG-B1 de STG-TACHES.md n'a pas été mise à jour, car l'agent n'a pas Edit : c'est à l'orchestrateur de le faire.
Tours : 32 / 60
Constats
- Éditeur headless (
lp-mcp§ 2), lancé à 14 h 11 min 24 s, PID 27416, moteurD:\Game\Launcher\Engine\UE_5.8, journalSaved\Logs\portage\STG_B1_mcp_editor.log. Serveur MCP démarré à 12 h 11 min 43 s UTC (l. 1904-1907 : « Starting MCP server on port 8000 », « Created new HttpListener on 127.0.0.1:8000 »). Arrêté parStop-Process -Id 27416à 14 h 24, puisUeState.ps1= 0 et port 8000 libre. Jeton UE tenu environ 13 minutes. Wait-HyperAIStudioMCP.ps1 -Port 8000 -UrlPath /mcp -TimeoutSeconds 540a rendu le code 1 à 14 h 20 min 31 s, alors que le port 8000 était en écoute (netstat: LISTENING, PID 27416). Le journal ne montre aucune « Initializing new session » avant 12 h 20 min 40 s UTC, c'est-à-dire avant la reconnexion du client de la session (« Unknown session id … client should reinitialize », l. 2240). Incertain : la cause de l'échec du script, puisque ses requêtesinitializene figurent pas au journal. Les outilsunreal-mcpont répondu dès le premier appel (list_toolsets).- Un outil de lecture (
find_node_types) peut marquer un Blueprint comme modifié. La sauvegarde automatique de l'éditeur écrit alors le paquet dansSaved\Autosaves(20 s plus tard ici) : à prévoir dans le décompte des fichiers écrits d'une fiche MCP. get_node_infosaffiche la brocheselfd'un appel de fonction sur soi (CallFunction_635,_531: entrée 1 « Self Référence d'objet »), mais pas celle d'un accesseur de variable sur soi (|GetbHidden:input_pins: []).
Passe 2 (2026-10-13, 14 h 27)
Consigne de l'orchestrateur : E1 est tranché en faveur de l'option A ; la fiche est amendée (rubrique 5 c : plus de test bHidden,
rubrique 6 : essai de C-O7 par set_properties). Le jeton UE reste à la session STG pour environ 40 minutes. On garde un appel MCP à
la fois, une compilation stricte et save_assets de Person seul.
Verdict passe 2 : arrêté au budget, avant toute écriture. L'éditeur n'est pas relancé. Aucun appel MCP. Person est inchangé.
P2-1. Contrôles de départ
fiches\STG-B1.mdrelue : l. 15 (amendement A) et l. 20 (C-O7 parset_properties,compile_blueprint,get_properties) ; rubrique 9 inchangée : budget 60 tours pour la fiche.md5sumà 14 h 27 min 49 s : Persond1b4c63d47621b1191ad9352c80c99cd(égal àD1B4C63D…), Rooma5fa970e821dc2d0d9bf220fd43b9de6, GIc4817b847ecf246c859647577647d6e9;UeState.ps1:processus=0 editeur=0 compilation=0 shaders=0 jeu=0.
P2-2. Pourquoi rien n'est commencé
Règle sk-protocol § 8 (décision de l'utilisateur du 2026-10-12, D-P7.10) : une écriture MCP ne commence que si le budget de tours
restant la couvre en entier. Chaque écriture est un appel call_tool unitaire, un tour par appel, puisque les appels MCP ne se
chevauchent pas. ProgrammaticToolset est interdit pour écrire.
| Bloc (option A, AND à 3 entrées) | Tours |
|---|---|
démarrage de l'éditeur, attente, load_asset |
3 |
lecture des type_id des nœuds nouveaux (find_node_types, lectures groupées permises) |
1 à 6 |
add_variable ×2, set_variable_category ×2 |
4 |
create_node ×17 : Set Target, Set Crowded faux, GetAllActorsOfClass, ForEachLoopWithBreak, Branch, AND, Self, != ×2, GetActorLocation, Get Target ×2, Distance2D, <, Set Crowded vrai, OR, Get Crowded ; plus add_node_pin sur AND |
18 |
set_pin_value ×3 (ActorClass = Person_C, Crowded = vrai, <.B = 70) |
3 |
break_pins ×3 (635 → 90.execute, 664 → 90.Condition, 658 → 531.Loc) |
3 |
connect_pins ×26 (8 d'exécution, 18 de données) |
26 |
relecture get_node_infos (groupée) |
1 à 2 |
C-O7 : set_properties, compile_blueprint (strict), get_properties, save_assets, get_properties |
5 |
arrêt de l'éditeur, MD5, UeState, livrable, remise |
4 |
| Total | ≈ 68 à 75 |
Restant à l'ouverture de la passe 2 : 60 − 33 = 27 tours de budget, et 42 tours sous le plafond maxTurns 75. Le total ne tient
ni dans l'un ni dans l'autre. Commencer exposerait à une coupure au milieu du câblage, avec l'éditeur ouvert, Person modifié en
mémoire et une sauvegarde automatique dans Saved.
C-O7 seul (≈ 10 tours) tiendrait dans le budget. Je ne l'ai pas fait seul : la fiche prévoit un seul save_assets de Person, après
C-O4b. Enregistrer C-O7 seul changerait le MD5 de départ de la passe suivante (contrôle D1B4C63D… = ARRÊT) sans fiche pour le
couvrir. C'est à l'orchestrateur de décider.
P2-3. Écarts
- Écart de la fiche amendée à la SPEC :
STG-SPEC.md§ 2, l. 46 et fiche l. 19 (« effet attendu ») parlent encore de « tiers visible ». Avec l'amendement A, tout Person compte comme tiers. À reporter dans la SPEC (DOC). - Aucun écart d'exécution : rien n'a été fait.
P2-4. État de reprise
- Établi : l'état de départ de la fiche § 4 et les indices de broches relus en passe 1, à savoir
CustomEvent_72.Personsortie 2,635.thensortie 0,IfThenElse_90.executeentrée 0 etConditionentrée 1,664.ReturnValuesortie 0,658.ReturnValuesortie 0,531.Locentrée 2. Les valeurs de C-O7 avant geste sontfalse/0/500. Person vautD1B4C63D…. - Établi ailleurs (
CAM-B0-IMPL.md§ 2) :Utilitaires|Opérateurs|Inférieurà(<)se type par la 1re liaison (relier avantset_pin_value) ;add_variableprendtype_nameet rend{"returnValue":null}(STE-H10-GI1-IMPL.md:166). - Incertain (à lire par
find_node_typesau début de la reprise) :type_idde Get et Set des nouvelles variables (catégorieSTG), GetAllActorsOfClass, ForEachLoopWithBreak (macro), Self,!=, Distance2D, GetActorLocation, AND, OR ; indices des broches de ForEachLoopWithBreak (LoopBody,Array Element,Completed,Break). - Reste à faire : C-O4b gestes a à f (≈ 54 écritures), C-O7, compilation stricte, relectures,
save_assetsde Person, compte des nœuds avant et après (attendu 3702 + 17), MD5. - Prochaine commande : relancer l'éditeur selon
lp-mcp§ 2, puisload_asset {asset_path:"/Game/BPs/Person"}, puis la lecture groupée destype_id. - Voies proposées (au choix de l'orchestrateur) :
- la session STG fait elle-même les appels MCP, un par un, sans plafond de tours. Précédent :
CAM-B0-IMPL.md:3-5, environ 75 appels MCP, 0 refus du mode auto ; - une nouvelle fiche avec un budget couvrant environ 75 tours. Cela dépasse le plafond
maxTurns75 delp-mcp-bp: il faut soit un autre agent, soit une exception décidée par l'utilisateur ; - scinder sans enregistrement intermédiaire. Déconseillé : l'éditeur resterait ouvert entre deux agents avec Person modifié en mémoire et des sauvegardes automatiques.
- la session STG fait elle-même les appels MCP, un par un, sans plafond de tours. Précédent :
Fichiers à commiter (inchangé) : A Docs/Migration/etat/ST/STG/STG-B1-IMPL.md (dépôt du jeu, ue5.8). Aucun asset.
Tours : 36 / 60 (cumul des passes 1 et 2 : 32 + 4, ce Write, le contrôle des fins de ligne et la remise compris)
Passe 3 — écriture par l'orchestrateur (session STG, claude-opus-5-5), 2026-10-13 14:30-14:35
Fiche STG-B1, passe 3 — Niveau N3 — Modèle prévu (agent lp-mcp-bp) | utilisé claude-opus-5-5 (orchestrateur, appels MCP directs, un à la fois ; voie retenue après l'arrêt au budget de la passe 2, précédent CAM-B0/B1).
Écart à la fiche (décision de l'orchestrateur) : C-O4b réalisé par SphereOverlapActors au lieu de la boucle
GetAllActorsOfClass + ForEachLoopWithBreak (7 nœuds au lieu d'≈ 19, même effet) : sphère de rayon 50 cm centrée sur
le point choisi, types d'objets [ObjectTypeQuery3] (Pawn), filtre de classe Person_C, acteurs ignorés [self, Person]
→ un tiers est trouvé si le centre de sa capsule (rayon 20) est à moins de ≈ 70 cm du point. Les capsules en
NoCollision (scènes de contact, GI.toggleGravity) ne sont pas trouvées : conforme à Q-STG-5. Option A (pas de test
bHidden) conservée.
Éditeur : UnrealEditor.exe … -RenderOffScreen -unattended -nosplash -NoSound -ModelContextProtocolStartServer -ModelContextProtocolPort=8000, PID 6516, journal Saved\Logs\portage\STG_B1_mcp_editor_p3.log ; arrêté par
Stop-Process après save_assets.
Appels d'écriture (dans l'ordre) :
load_asset /Game/BPs/Person;add_struct_variable(Person, STG_StandTarget, /Script/CoreUObject.Vector).create_node:Collision|SphereOverlapActors→K2Node_CallFunction_573;DéfinirSTGStandTarget→K2Node_VariableSet_241;ObtenirSTGStandTarget→K2Node_VariableGet_257;Utilitaires|Array|Faireuntableau×2 →K2Node_MakeArray_33(types),K2Node_MakeArray_34(ignorés, +add_node_pin) ;Utilitaires|Tableau|IsValidIndex→K2Node_CallArrayFunction_78(index 0 = « au moins un ») ;Math|Booléen|ORBoolean→K2Node_CommutativeAssociativeBinaryOperator_122.- Valeurs :
MakeArray_33[0] = ObjectTypeQuery3;573.SphereRadius = 50.0;573.ActorClassFilter = /Game/BPs/Person.Person_C. - Liens créés :
33 → 573.ObjectTypes;34 → 573.ActorsToIgnore;Self_10 → 34[0];CustomEvent_72.Person → 34[1];658 → 241.STG_StandTarget;257 → 573.SpherePos;573.OutActors → 78.TargetArray;78 → 122.A;664 → 122.B;122 → IfThenElse_90.Condition; exécution635.then → 241 → 573 → IfThenElse_90;257 → 531.Loc. - Liens coupés :
664 → IfThenElse_90.Condition;635.then → IfThenElse_90.execute;658 → 531.Loc. - Relecture
get_node_infos(573, 241, 90, 531, 658, 33, 34, 122) : conforme ; 658 n'a plus qu'un lecteur (241). compile_blueprint(Person): aucun message au journal de l'éditeur (ni avertissement ni erreur).- C-O7 :
ObjectTools.set_properties(instance = /Game/BPs/Person.Default__Person_C:CharMoveComp, values = {"bUseRVOAvoidance": true, "AvoidanceWeight": 0.5})→true; recompilation ;get_properties→true,0.5(avant :false,0) ;save_assets(["/Game/BPs/Person"])→true;get_propertiesaprès enregistrement →true,0.5.
Mesuré :
- MD5 Person : avant
D1B4C63D47621B1191AD9352C80C99CD(= instantanéBackup_5.5\STG), aprèsB239E1035CB028B78FBD4BB9F0C5F70A; RoomA5FA970E…et GIC4817B84…inchangés. - Relecture sur disque, éditeur fermé (
STG-B1d-INV.md, lp-builder) : EventGraph 3709 nœuds (3702 + 7) ;CharMoveCompbUseRVOAvoidance = True,AvoidanceWeight = 0.500000. UeState.ps1: 0 à la fin.- Hors git, laissé en place :
Saved\Autosaves\Game\BPs\Person_Auto1.uasset(14:22, passe 1).
Non fait (conforme au GO) : pas de build ; C-O2 reporté après la session street ; Room non touché.
Fichiers à commiter : Content/BPs/Person.uasset (après VAL et essai, dans le build commun ordonné par Big Boss) ;
Docs/Migration/etat/ST/STG/STG-B1-IMPL.md, STG-B1d-INV.md, fiches/STG-B1.md.
Note (VAL c-5) : la relecture get_node_infos du § 6 rendait pour K2Node_CallFunction_573 : ActorClassFilter value
/Game/BPs/Person.Person_C, SphereRadius 50.0, ObjectTypes ← MakeArray_33 ([0] = ObjectTypeQuery3), ActorsToIgnore ← MakeArray_34
([0] ← Self_10, [1] ← CustomEvent_72.Person) ; le dump LPDumpFunction n'imprime pas les valeurs d'objet par défaut.