LifePlay-Revival/Docs/Migration/etat/OPT/OPT0/OPT0-A2b-INV.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

11 KiB

OPT0-A2b-INV : inventaire Blueprint par lots de scripts (COMPLET : lots 0 à 10 conformes, 110 / 110 lus)

Fiche OPT0-A2b — Niveau N1 — Modèle prévu sonnet | utilisé Sonnet 5.5 — Agent lp-mcp — Skills : sk-protocol, lp-mcp, sk-change-safety Date : 2026-10-15. Lecture seule : aucun appel d'écriture, aucune PIE, aucun asset sauvegardé, aucun git qui écrit. Aucun verdict. Résultat : réussi. Lots 0 à 10 conformes (controle_lots.py). Garde v5 puis v6 (annoncée en cours de reprise) : aucun refus pendant cette reprise.

0. Retour de execute_tool_script (établi)

Appel : execute_tool_script du toolset editor_toolset.toolsets.programmatic.ProgrammaticToolset, argument script (chaîne). Environnement : Saved\OPT0-A2b\environnement.txt (modules admis copy, re, time, datetime, math, json ; execute_tool(nom, json) ; run() rend un dict ; returnValue = chaîne JSON du dict). Syntaxe retenue : import json, import time, petites fonctions d'aide execute_tool("<nom qualifié littéral>", json.dumps({...}))["returnValue"], try/except RuntimeError/except Exception par Blueprint, time.perf_counter(), accès d[k] (pas de .get avec défaut).

  • Taille rendue : lot de 18 Blueprints environ 8 à 10 Ko, GI seul environ 6 Ko ; aucune troncature observée.
  • Erreur d'outil : RuntimeError attrapable. UserRaisedError de get_node_infos : non rencontré sur les lots 1 à 10 (lecture ciblée : find_nodes par titre anglais « Tick », « Delay », « Actors », « UE4 », « Navigable », « Or Empty », puis get_node_infos par paquets de 20 sur les seuls nœuds trouvés et sur les nœuds atteints depuis un Tick).
  • find_nodes {graph, title} : filtre de sous-chaîne sur le titre anglais ; classement par dernier segment de type_id.

1. Périmètre

110 Blueprints de /Game énumérés par script (lot 0, AssetTools.find_assets, asset_type /Script/Engine.Blueprint). Liste : Saved\OPT0-A2b\blueprints.txt (110 lignes /Game). Classes fines : non rendues par find_assets. Répartition par dossier : 27 /Game/BPs, 7 FreeAnimationsPack, 3 Heavy, 73 /Game/UI (27 + 7 + 3 + 73 = 110).

Recompte (mesuré, python -I -X utf8 controle_lots.py puis comm -13 entre les chemins de lots.csv et ceux de blueprints.txt) : bp lus 110, 110 chemins distincts dans lots.csv, 0 Blueprint manquant. Lus 110 + « non lus : garde » 0 = 110.

Non lus : garde (faux positif sur le chemin) : aucun au final. Les deux Blueprints dont le chemin contient « Save » (/Game/BPs/Save, /Game/UI/SaveSlot) ont été sortis des lots 4 et 9, puis lus au mini-lot 10 après « GARDE-V6 ACTIVE » (message de l'orchestratrice).

2. Lots

Lot Contenu n_attendu / n_lu Erreurs duree_s Fichier
0 énumération 110 / 110 0 0.08 lot0.json
1 Person seul 1 / 1 0 8.15 lot1.json
2 GI seul 1 / 1 0 22.77 lot2.json
3 13 /Game/BPs (AI … LightSource) 13 / 13 0 1.47 lot3.json
4 11 /Game/BPs (MapMarkers, MapStreets, PC, Pawn, Room, SecondScreenFloor, SkyBox, StreetMap_Static, TestBall, TestPerson, TestStatic), sans Save 11 / 11 0 4.96 lot4.json
5 7 FreeAnimationsPack + 3 Heavy 10 / 10 0 11.44 lot5.json
6 UI Achievement … CityMenu 18 / 18 0 4.9 lot6.json
7 UI ColorSlot … Loading 18 / 18 0 3.98 lot7.json
8 UI LoadingAsset … ScreenTint 18 / 18 0 2.51 lot8.json
9 UI SearchResult … VisualMorphPair 18 / 18 0 3.92 lot9.json
10 mini-lot Save (/Game/BPs/Save, /Game/UI/SaveSlot) 2 / 2 0 0.1 lot10.json

Contrôle : lots 10 conformes 10 bp lus 110 duree_s cumulee 64.2 (lots 1 à 10), fusion lots.csv. Scripts MCP execute_tool_script : 11 exécutés (lots 0 à 10), 0 échec, 0 refus de la garde pendant la reprise (1 refus avant la reprise, au lot 4 initial : voir § 7). Un script par lot ; script de modèle : Saved\OPT0-A2b\lot_script.py (les LOT et NUM des lots 4 à 10 sont dans le champ lot de chaque JSON et dans les chemins listés ci-dessus).

3. Nœuds dépréciés

« Non mesurable en lecture seule » : get_node_infos (clés output_pins, input_pins, position, node, type_id) n'a aucun champ de dépréciation ; find_nodes ne rend que le refPath. Le titre « (UE4) » relève des appels aux correctifs U9, pas d'un indicateur de dépréciation.

4. Appelants U9 (110 Blueprints)

Comptage par nœud, classement par dernier segment de type_id : (UE4) + « skeletalmesh » → LPMeshCompat ; « navigable » → LPNavigationHelpers ; autre (UE4) ou « StringAtOrEmpty » → LPStringCompat (classement estimé : tout autre (UE4) non mesh/nav tombe dans String). Total (lots.csv) : String 502, Mesh 56, Navigation 6.

Correctif Nœuds Blueprints (nœuds) Détail par graphe
LPMeshCompat 56 Person 28, GI 17, CharGen 3, Inventory 3, Hairstyle 2, CharGenSlider 1, Cursor 1, Inventory_Cloth 1 champ appels_u9 de chaque lot<n>.json
LPNavigationHelpers 6 Person 3 (standIdle 2, jumpOffFnt 1), Room 2 (moveToBedIfPossible, getStandSpots), AI 1 (EventGraph) idem
LPStringCompat (estimé) 502 36 Blueprints, dont GI 316, Person 45, Room 23, StreetMap_Static 17, CharGen 16, ContactMenu 14 idem

Comparaison à OBA-T5-EVAL : 56 Mesh et 6 Navigation annoncés ; relevé ici 56 et 6, soit les mêmes totaux (ici mesurés par find_nodes + type_id, non repris de la claim). Le classement du total String reste estimé.

5. Event Tick par classe

Classe fine non rendue par find_assets. Event Tick (type_id fini par nementTick) dans 24 Blueprints sur 110, 1 nœud chacun, total 24 :

  • /Game/BPs (11) : Person, AI, GM, HISM, LightSource, PC, Pawn, SecondScreenFloor, SkyBox, TestPerson, TestStatic ;
  • /Game/UI (13) : Banner, Cursor, DirtyTalk, FAQ, LineBreak, LoadingAsset, PerkPoint, Player, ScreenTint, SearchResult, Street, Tooltip, Tutorial ;
  • FreeAnimationsPack, Heavy : aucun (un Blueprint d'animation n'a pas d'Event Tick d'EventGraph au sens relevé ; les graphes d'animation ne sont pas classés ici).

6. Delay et Get All Actors Of Class

  • Get All Actors Of Class : 0 nœud sur les 110 Blueprints (gaaoc_total = 0 dans lots.csv). Atteint depuis un tick : sans objet.
  • Delay (type Delay / RetriggerableDelay) : 89 nœuds dans 46 Blueprints (delay_total). Détail (BP : nœuds) : Person 6, GI 6, AI 2, Birdview 2, BridgetBP 1, PC 3, Room 3, StreetMap_Static 4 ; UI : Achievement 1, Action 1, BodyShape 1, BodyShapeMenu 1, Bondage 1, Builder 1, CharGen 4, City 1, CityMenu 2, ColorSlot 2, Contact 1, ContactMenu 5, Cursor 2, FaceTexture 1, Hairstyle 1, Inventory 1, Inventory_Cloth 3, Journal 2, LoadExtImg 2, MainMenu 2, ModManager 1, ModuleTick 1, Objective 1, Perk 1, Quest 1, Recommend 1, ScalarSlider 1, Scene 2, SceneOption 1, SexAction 1, SexInterface 2, SexLight 2, StatAdjust 1, StatMenu 1, StatNumber 1, TopRight 6, Tutorial 1, VisualMorph 2. Graphe : EventGraph pour tous, sauf 1 nœud du graphe Async pour GI et pour Room.
  • Atteint depuis un tick : non pour les 24 Blueprints à Tick (delay_tick = 0, gaaoc_tick = 0 ; tronque faux partout). Nœuds atteints depuis le Tick : 1 pour la plupart, Person 103, TestPerson 13, PC 8, Tutorial 20. Non suivi : appels au-delà du Blueprint, événements personnalisés, macros, délégués ; aucune fonction du même Blueprint appelée depuis un Tick hors Person (IsSlotOccupied).
  • Blueprints à Delay et à Tick à la fois : Person, AI, PC, Cursor, Tutorial (aucun Delay atteint depuis le Tick).

7. Écarts avec la fiche et avec A2

  • Refus de la garde avant la reprise (message exact) : lp-mcp (lecture) : appel refuse - script : mot interdit « Save ». Variante lecture seule : demander la variante ecriture (lp-mcp-bp) a l'orchestrateur. Cause : le chemin /Game/BPs/Save contient « Save ». Levé par « GARDE-V6 ACTIVE » (chemin d'asset littéral admis). Pendant la reprise : aucun refus.
  • Lot 4 : 11 Blueprints (et non 12) car Save est sorti ; lot 10 ajouté (mini-lot Save), comme demandé par l'orchestratrice.
  • Un appel Bash a été refusé par le crochet ecriture-gardien (contrôle avec python -c puis redirection vers /tmp, mon erreur de forme, non lié à Unreal) ; rejoué sans redirection. Aucune écriture hors Saved\OPT0-A2b\ et etat\.
  • Script : évite while ( ; has_exec renommé has_ex, load → ld, round → int(...), pop → pend[-1] / pend[:-1].
  • Limites : le suivi du Tick suit les broches d'exécution et les appels de fonctions du même Blueprint retrouvés par find_nodes sur le nom de la fonction ; tick_n = nœuds Tick distincts.

8. Journal, UeState, git

Clôture par l'orchestratrice (contrôles du BUILD-FIN final) : éditeur pid 6236 arrêté, UeState = 0, port 8000 sans écouteur ; MD5 de référence inchangés (Room 93138747, PC 707220A6, GI 32FC0A97, Person 8668A47C, TopRight CB835360) ; git status hors Docs\ vide, Content inchangé ; PubCheck 0 constat. Aucune commande git lancée par les agents.

9. Fin

Établi : lots 0 à 10 conformes (lot0.json à lot10.json, lots.csv, controle_lots.py), 110 / 110 Blueprints lus, 0 non lu. Clos : BUILD-FIN final accepté par Big Boss (recompte sur lots.csv : 110 lignes, sans doublon). Aucun verdict (grille : fiche A3).

À verser (lp-mcp § 3)

  • UserRaisedError levée par BlueprintTools.get_node_infos sur un gros graphe : non attrapable par except RuntimeError ni except Exception ; elle tue le script. Ne jamais lire tous les nœuds d'un gros Blueprint : classer par find_nodes, confirmer par type_id sur les seuls nœuds trouvés, paquets ≤ 20.
  • find_nodes filtre le titre en anglais (sous-chaîne) ; les appels U9 portent le suffixe « (UE4) » ; classer Tick, Delay et Get All Actors Of Class par le dernier segment de type_id (faux positifs : BreakDelayedChange, SphereOverlapActors).
  • Pas de dict.get(clé, défaut) dans les scripts : d[k] if k in d else défaut.
  • while ( et if ( admis depuis la garde v5 ; while cond: sans parenthèse reste la forme sûre hors garde.
  • Chemins d'assets contenant « Save » admis depuis la garde v6 ; « Save » hors chemin et tout appel d'écriture restent refusés ; erreur interne de la garde = refus (code 2).
  • Syntaxe retenue : execute_tool("<nom qualifié>", json.dumps({...}))["returnValue"] dans def run(): qui rend un dict ; call_tool n'existe pas.
  • Chronométrage : time.perf_counter() ; time.time() refusé.
  • Un Blueprint par try/except ; une erreur d'outil tue tout le script sinon.
  • Règle de l'utilisateur (2026-10-15) : éditeur laissé ouvert entre les passes MCP d'un même lot ; unreal-mcp reste disponible dans la session, reconnexion /mcp seulement à l'ouverture d'une nouvelle session.

Fichiers écrits : ce livrable ; Saved\OPT0-A2b\{lot4.json … lot10.json, lots.csv}. Fichiers à commiter : aucun (etat/ et Saved/ hors git). Tours : 17 / 30. PubCheck : 0 constat(s).