LifePlay-Revival/Docs/Migration/etat/ST/STG/STG-FACADE-IMPL.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

33 KiB

Fiche STG-FACADE — 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-FACADE-IMPL : façades de la street en collision complexe — ARRÊT à l'étape c (2026-10-14)

Verdict : ARRÊT (fiche § 5 c : « Autre valeur = ARRÊT »). Aucune écriture : ni set_properties, ni save_assets. CollisionTraceFlag lu sur le BodySetup = CTF_UseDefault, et non CTF_UseSimpleAndComplex comme attendu. L'asset est inchangé : MD5 B2C6696FDD9D373E910938AE4810ABC9 avant et après. Room, PC, GI et Person sont inchangés, aucune autosave nouvelle, UeState = 0 en fin de passage.

1. Fichiers modifiés

Aucun fichier du jeu n'a été modifié. Seul fichier écrit : ce livrable.

  • fnt_ext001.uasset : même MD5 et même date (2026-09-07 20:24:41) avant et après (§ Mesuré).
  • Saved\Logs\LifePlay.log : réécrit par l'éditeur au lancement (2 295 lignes). C'est une trace, pas un fichier du lot.

2. Écarts à la SPEC

E1 (bloquant) : la valeur de départ n'est pas celle de la fiche.

  • La fiche (§ 3 et § 5 c) attend CollisionTraceFlag = CTF_UseSimpleAndComplex sur le BodySetup.
  • Valeur lue : CTF_UseDefault (« Project Default »).
  • Règle appliquée : ARRÊT avant toute écriture.

Explication, établie par les sources suivantes :

  • La propriété n'est pas sérialisée dans l'asset. Le nom CollisionTraceFlag est absent du fichier. Les seuls noms de cette famille présents sont BodySetup (octet 4982) et CTF_UseSimpleAndComplex (octet 97703), d'après grep -a -b -o (§ Mesuré). La propriété garde donc sa valeur par défaut, CTF_UseDefault.
  • La chaîne CTF_UseSimpleAndComplex du fichier n'est pas la propriété. C'est la valeur de l'étiquette de registre d'assets CollisionComplexity, dans le bloc des étiquettes, entre AssetImportData et CollisionPrims / DefaultCollision / DistanceField (xxd autour de 0x17DA7, § Mesuré). AssetTools.get_asset_tags rend la même chose : "CollisionComplexity":"CTF_UseSimpleAndComplex".
  • L'étiquette donne la valeur effective, pas la valeur stockée.
    • UE_5.8\Engine\Source\Runtime\Engine\Private\StaticMesh.cpp:6290 : ComplexityString = LexToString((ECollisionTraceFlag)GetBodySetup()->GetCollisionTraceFlag());
    • UE_5.8\Engine\Source\Runtime\PhysicsCore\Private\BodySetupCore.cpp:48-49 : la valeur CTF_UseDefault est remplacée par UPhysicsSettingsCore::Get()->DefaultShapeComplexity.
    • Config\DefaultEngine.ini:96 : DefaultShapeComplexity=CTF_UseSimpleAndComplex.
  • Conclusion (estimé, à partir des points établis ci-dessus). Le comportement actuel est bien « Simple And Complex » par le réglage du projet. La SPEC a pris l'étiquette de registre pour la propriété.
  • Ordre de l'énumération, pour mémoire : UE_5.8\Engine\Source\Runtime\PhysicsCore\Public\BodySetupEnums.h:10-20 (CTF_UseDefault, CTF_UseSimpleAndComplex, CTF_UseSimpleAsComplex, CTF_UseComplexAsSimple, CTF_MAX).

E2 (non bloquant) : lecture refusée. J'ai demandé en trop bGenerateMirroredCollision et bGenerateNonMirroredCollision. Réponse de l'outil, recopiée telle quelle : GetObjectProperties on '/Game/Heavy/New2/Furniture/fnt_ext001.fnt_ext001:BodySetup_0' (BodySetup): the following properties could not be read: bGenerateMirroredCollision, bGenerateNonMirroredCollision. L'appel a été rejoué sans ces deux noms. Le journal de l'éditeur porte l'avertissement correspondant (LifePlay.log:2287).

E3 (forme) : describe_toolset limité. Il n'a été appelé que sur ObjectTools et AssetTools. StaticMeshTools n'a pas été décrit : l'arrêt est survenu avant l'étape f, et les triangles ont été lus par get_asset_tags.

3. Instantané

  • Lot STG-FACADE, pris par l'orchestrateur : D:\Game\LifePlay_Backup_5.5\STG-FACADE\manifest.csv (une ligne).
    • Contenu : "Content\Heavy\New2\Furniture\fnt_ext001.uasset","True","508415","B2C6696FDD9D373E910938AE4810ABC9","2026-10-14T01:35:46"
    • La copie sauvegardée a été recalculée : md5sum D:/Game/LifePlay_Backup_5.5/STG-FACADE/Content/Heavy/New2/Furniture/fnt_ext001.uasset → b2c6696fdd9d373e910938ae4810abc9.
  • Retour arrière : sans objet, l'asset n'a pas changé. Restore.ps1 n'est pas nécessaire.
  • La copie de sécurité STG-FACADE-copie (fiche § 6) n'est pas à prendre, faute de changement.

4. Ce qui n'a pas été fait

  • Étapes d (set_properties), e (relecture après écriture) et g (save_assets) : non faites, à cause de l'ARRÊT de l'étape c.
  • Étape f : faite en partie, en lecture seule.
    • LODForCollision = 0 et bAllowCPUAccess = false, par get_properties sur le maillage.
    • Triangles = 13173, CollisionPrims = 1, SectionsWithCollision = 12, PhysicsSize = 662264, par get_asset_tags.
    • Le nombre de triangles du LOD de collision n'a pas été lu en propre. Comme LODs = 1 et LODForCollision = 0, il s'agit du LOD 0 (estimé).
  • Contrôles disque de la fiche § 6 sur l'asset converti : sans objet, pas de conversion.

5. Points à confirmer en VAL

  • fnt_ext001.uasset toujours à B2C6696FDD9D373E910938AE4810ABC9, 508 415 o, daté du 2026-09-07 20:24:41.
  • Room 3A451FDD…, PC F45BE57A…, GI E64B5B37… et Person 8668A47C… inchangés ; git status --short Content = les 4 mêmes M.
  • Saved\Autosaves : les 8 mêmes fichiers. PackageRestoreData.json est vide ("Packages": [], 01:14).
  • Avant toute reprise, l'orchestrateur décide de la valeur de départ admise (voir Constats).

6. Fichiers à commiter

Dépôt du jeu (D:\Game\LifePlay-master 5.8, branche ue5.8) :

  • A Docs/Migration/etat/ST/STG/STG-FACADE-IMPL.md

Content/Heavy/New2/Furniture/fnt_ext001.uasset n'est pas à commiter : il est inchangé et hors git (.gitignore l. 17).

Appels dans l'ordre (un appel MCP à la fois)

  1. Lancement en arrière-plan : UnrealEditor.exe "D:/Game/LifePlay-master 5.8/LifePlay.uproject" -RenderOffScreen -unattended -nosplash -NoSound -ModelContextProtocolStartServer -ModelContextProtocolPort=8000.
    • PID 5788, démarré à 01:36:28.
    • Aucune demande de recompilation au journal : la recherche de recompil|rebuild|missing or built|out of date dans LifePlay.log ne trouve rien.
  2. pwsh -NoProfile -File .hyperai/scripts/Wait-HyperAIStudioMCP.ps1 -Port 8000 -TimeoutSeconds 540 → wait exit=0.
    • Journal : LifePlay.log:1905, Starting MCP server on port 8000.
  3. list_toolsets : 79 toolsets, dont editor_toolset.toolsets.object.ObjectTools, …asset.AssetTools et …static_mesh.StaticMeshTools.
  4. describe_toolset ObjectTools : reset_properties, set_properties, get_properties, list_properties, get_class, search_subclasses.
  5. describe_toolset AssetTools : dont load_asset, save_assets, is_dirty et get_asset_tags.
  6. AssetTools.load_asset {asset_path:"/Game/Heavy/New2/Furniture/fnt_ext001"} → {"refPath":"/Game/Heavy/New2/Furniture/fnt_ext001.fnt_ext001"}.
  7. ObjectTools.get_properties sur l'asset, ["BodySetup","LODForCollision","bAllowCPUAccess"] → {"BodySetup":{"refPath":"/Game/Heavy/New2/Furniture/fnt_ext001.fnt_ext001:BodySetup_0"},"LODForCollision":0,"bAllowCPUAccess":false}.
  8. ObjectTools.get_properties sur …:BodySetup_0, avec deux noms en trop → erreur recopiée en E2.
  9. ObjectTools.get_properties sur …:BodySetup_0, ["CollisionTraceFlag","bDoubleSidedGeometry","CollisionReponse"] → {"CollisionTraceFlag":"CTF_UseDefault","bDoubleSidedGeometry":false,"CollisionReponse":"BodyCollision_Enabled"}. ARRÊT (§ 5 c).
  10. Lecture de diagnostic : AssetTools.get_asset_tags {asset_path:"/Game/Heavy/New2/Furniture/fnt_ext001"}. Extrait : "Vertices":"10558","Triangles":"13173","CollisionComplexity":"CTF_UseSimpleAndComplex","CollisionPrims":"1","DefaultCollision":"BlockAll","LODs":"1","MinLOD":"0","NaniteEnabled":"False","SectionsWithCollision":"12","PhysicsSize":"662264".
  11. AssetTools.is_dirty {asset_path:"/Game/Heavy/New2/Furniture/fnt_ext001"} → {"returnValue":false}.
  12. Fermeture : Stop-Process -Id 5788, puis Wait-Process. Aucun save_assets n'a été appelé.

Valeurs relues

Valeur Avant (lue) Après
BodySetup_0.CollisionTraceFlag (stockée) CTF_UseDefault sans objet, pas d'écriture
Valeur effective (étiquette CollisionComplexity) CTF_UseSimpleAndComplex sans objet
LODForCollision 0 sans objet
bAllowCPUAccess false sans objet
Triangles (étiquette Triangles) 13173 (attendu 13 173 : conforme) sans objet
CollisionReponse BodyCollision_Enabled sans objet
is_dirty false —
MD5 fnt_ext001.uasset B2C6696FDD9D373E910938AE4810ABC9 B2C6696FDD9D373E910938AE4810ABC9
Chaîne CTF_UseSimpleAndComplex / CTF_UseComplexAsSimple (lignes, grep -c -a) 1 / 0 1 / 0

Mesuré

Départ (avant le lancement), md5sum + ls -l. Les noms de compte sont masqués.

B2C6696FDD9D373E910938AE4810ABC9 508415 2026-09-07 20:24:41.120607100 Content/Heavy/New2/Furniture/fnt_ext001.uasset
3A451FDDF991AC01A699AF7BD1FBDC12 6408870 2026-10-14 01:14:30.109579800 Content/BPs/Room.uasset
F45BE57A39D13D3EB19D0B543153AB0B 3404786 2026-10-14 01:05:26.870457900 Content/BPs/PC.uasset
E64B5B37C9EF0DB7735DE0D6E3BD7C1C 52636801 2026-10-13 19:26:08.639049400 Content/BPs/GI.uasset
8668A47C627F7A5254910CF0AC33B12A 20821244 2026-10-13 17:42:36.059256500 Content/BPs/Person.uasset
--- CTF strings
1
0
--- UeState
processus=0 editeur=0 compilation=0 shaders=0 jeu=0
exit=0

Cuit, avant et après : fnt_ext001.uasset 2496 o et .uexp 1082677 o, datés du 2026-10-13 13:39:19/20 (conforme à la fiche § 3).

Fin (après Stop-Process) : même commande, sortie identique pour les cinq fichiers.

B2C6696FDD9D373E910938AE4810ABC9 508415 2026-09-07 20:24:41.120607100 Content/Heavy/New2/Furniture/fnt_ext001.uasset
3A451FDDF991AC01A699AF7BD1FBDC12 6408870 2026-10-14 01:14:30.109579800 Content/BPs/Room.uasset
F45BE57A39D13D3EB19D0B543153AB0B 3404786 2026-10-14 01:05:26.870457900 Content/BPs/PC.uasset
E64B5B37C9EF0DB7735DE0D6E3BD7C1C 52636801 2026-10-13 19:26:08.639049400 Content/BPs/GI.uasset
8668A47C627F7A5254910CF0AC33B12A 20821244 2026-10-13 17:42:36.059256500 Content/BPs/Person.uasset
--- CTF strings
1
0
--- git status Content
 M Content/BPs/GI.uasset
 M Content/BPs/PC.uasset
 M Content/BPs/Person.uasset
 M Content/BPs/Room.uasset

pwsh -NoProfile -File Tools/UeState.ps1, relancé après la fin du processus :

processus=0 editeur=0 compilation=0 shaders=0 jeu=0
exit=0

Le premier appel, lancé juste après Stop-Process, voyait encore PID 5788 en cours d'arrêt (processus=1 editeur=1, exit=1). L'appel suivant a rendu 0.

Autosaves (find Saved/Autosaves -type f), identiques avant et après :

2026-10-13 14:22 20788360 Saved/Autosaves/Game/BPs/Person_Auto1.uasset
2026-10-14 01:10 6396222 Saved/Autosaves/Game/BPs/Room_Auto1.uasset
2026-10-13 15:48 6186193 Saved/Autosaves/Game/BPs/Room_Auto2.uasset
2026-10-13 15:58 6253333 Saved/Autosaves/Game/BPs/Room_Auto3.uasset
2026-10-13 16:08 6304030 Saved/Autosaves/Game/BPs/Room_Auto4.uasset
2026-10-09 15:18 26029 Saved/Autosaves/Game/BPs/TestStatic_Auto1.uasset
2026-10-09 21:08 2142848 Saved/Autosaves/Game/UI/MainMenu_Auto1.uasset
2026-10-14 01:14 94 Saved/Autosaves/PackageRestoreData.json

Position des noms dans l'asset : grep -a -b -o -E "CTF_[A-Za-z]+|CollisionTraceFlag|ECollisionTraceFlag|BodySetup[A-Za-z_0-9]*|DefaultShapeComplexity".

4982:BodySetup
97703:CTF_UseSimpleAndComplex

Contexte binaire (xxd, extrait) :

00017d87: 207d 5d00 1400 0000 436f 6c6c 6973 696f   }].....Collisio
00017d97: 6e43 6f6d 706c 6578 6974 7900 1800 0000  nComplexity.....
00017da7: 4354 465f 5573 6553 696d 706c 6541 6e64  CTF_UseSimpleAnd
00017db7: 436f 6d70 6c65 7800 0f00 0000 436f 6c6c  Complex.....Coll
00017dc7: 6973 696f 6e50 7269 6d73 0002 0000 0031  isionPrims.....1

Tours : 18 / 40

Constats

  • Pistes pour l'orchestrateur (décision hors de mon rôle ; estimé, non mesuré) :
    • A. Amender la SPEC, puis relancer le même geste.
      • Départ admis : propriété CTF_UseDefault, valeur effective CTF_UseSimpleAndComplex par DefaultEngine.ini:96.
      • Effet attendu : set_properties écrit CTF_UseComplexAsSimple, la propriété est alors sérialisée (le nom CollisionTraceFlag entre dans le fichier), et l'étiquette CollisionComplexity passe à CTF_UseComplexAsSimple à la sauvegarde. Les contrôles § 6 (chaîne nouvelle présente, ancienne absente) restent donc valables.
      • Risque faible : le seul asset change, l'instantané est en place.
    • B. Ne rien changer. S-F4b garde son comportement actuel (fiche § 9).
    • L'option A suppose que la fiche corrige aussi son § 3 (« chaîne présente une fois » = étiquette de registre, pas la propriété). Elle demande un nouvel UE-GO.
  • Processus : crashhelper.exe (PID 27704) tournait encore après l'arrêt. UeState ne le compte pas. CrashReportClientEditor (PID 15668) s'est fermé. Aucun nouveau dossier dans Saved\Crashes (le plus récent date du 2026-10-11). On ne sait pas si crashhelper date d'avant mon lancement (incertain). À vérifier par tasklist, éditeur fermé.
  • Journal de l'éditeur (Saved\Logs\LifePlay.log, heures UTC) : erreurs de session MCP, lignes 2240-2272 (23:37:22-36) : socket_send_failure, Unknown session id … client should reinitialize, Call to unknown method "server/discover".
    • Elles se situent pendant la reconnexion du client, avant la première lecture d'asset.
    • Tous les appels suivants ont abouti.
  • Code de sortie : la tâche de fond du lancement rend editor exit=127 après Stop-Process. C'est un arrêt forcé voulu, pas un plantage : aucun dossier Saved\Crashes nouveau.
  • À verser : lp-mcp § 3 — deux règles.
    • Une valeur d'énumération égale au défaut n'est pas sérialisée. La chaîne trouvée dans un .uasset peut être une étiquette du registre d'assets, qui donne la valeur effective : CollisionComplexity = GetCollisionTraceFlag(), où CTF_UseDefault est remplacé par DefaultShapeComplexity. On lit donc la propriété par ObjectTools.get_properties sur <asset>:BodySetup_0, et la valeur effective par AssetTools.get_asset_tags, avant d'écrire une valeur de départ dans une SPEC.
    • Le crochet ecriture-gardien prend un > placé dans un motif grep pour une redirection. On cherche dans les sources avec Grep.

Passe 2 — amendement A, nouvel UE-GO de Big Boss (2026-10-14) : FAIT

Fiche STG-FACADE (amendée, amendement A) — 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

Verdict : FAIT. Les 217 lignes de la passe 1 ci-dessus sont conservées telles quelles.

  • Départ conforme à l'amendement A : CollisionTraceFlag stocké CTF_UseDefault, étiquette CollisionComplexity (valeur effective) CTF_UseSimpleAndComplex.
  • ObjectTools.set_properties sur …:BodySetup_0 a écrit CTF_UseComplexAsSimple (returnValue true), relu avant et après save_assets ; après la sauvegarde, l'étiquette CollisionComplexity vaut CTF_UseComplexAsSimple.
  • Un seul paquet sauvegardé (fnt_ext001) ; MD5 B2C6696FDD9D373E910938AE4810ABC9 → DF2DB514E0E2345C6CCAC66A0787621F.
  • Room, PC, GI et Person aux MD5 de départ ; aucune autosave .uasset nouvelle ; éditeur fermé, UeState = 0.

P2-1. Fichiers modifiés

  • Content/Heavy/New2/Furniture/fnt_ext001.uasset (hors git, .gitignore l. 17) : 508 415 o → 506 918 o, daté du 2026-10-14 01:44:37, MD5 DF2DB514E0E2345C6CCAC66A0787621F. Seul paquet écrit : LifePlay.log:2302 Saving Package: /Game/Heavy/New2/Furniture/fnt_ext001, seule ligne Saving Package de la session.
  • Ce livrable : section « Passe 2 » ajoutée à la suite de la passe 1.
  • Traces écrites par l'éditeur, hors lot (Saved, ignoré par git) : Saved/Logs/LifePlay.log (2 338 lignes), Saved/Config/WindowsEditor/EditorPerProjectUserSettings.ini (01:43), Saved/SourceControl/UncontrolledChangelists.json (01:44, écrit par la sauvegarde, LifePlay.log:2309), Saved/Autosaves/PackageRestoreData.json (01:44, 94 o, "Packages": []).

P2-2. Écarts à la SPEC

  • Aucun écart bloquant. Valeur de départ = amendement A. set_properties a été accepté du premier coup sur le BodySetup ; le repli de l'étape d (propriété imbriquée sur l'asset) n'a pas servi. Ni Python ni console.
  • E4 (forme) : lectures ajoutées, toutes sans écriture. is_dirty avant l'écriture (false), après l'écriture (true) et après la sauvegarde (false) ; get_asset_tags après la sauvegarde (demandé par l'orchestrateur).
  • E5 (forme) : StaticMeshTools non décrit, comme en passe 1. L'étape f est lue par get_properties sur le maillage et par get_asset_tags.
  • E6 (constat, non bloquant) : la sauvegarde a réécrit le paquet au format du moteur courant.
    • En-tête (xxd -l 32, § P2 Mesuré) : octets 4-7 f8ffffff → f7ffffff (-8 → -9) ; octets 16-19 f5030000 → fa030000 (1013 → 1018) ; octets 8-15 inchangés (864, 522). Établi.
    • Lecture : -8 / -9 = LegacyFileVersion, 1013 / 1018 = FileVersionUE5 (estimé, champs non relus dans les sources du moteur). Le fichier a donc été enregistré la dernière fois par un moteur plus ancien (le 2026-09-07).
    • Conséquences estimées : la taille baisse de 1 497 o malgré la propriété ajoutée (incertain : l'essai qui trancherait est un LPDump ou un export des deux versions) ; l'asset n'est plus lisible par un moteur antérieur à 5.8 (estimé ; sans effet sur la copie 5.5, qui a son propre fichier).
  • Rôle A-MCP-BP, étapes Blueprint (compile_blueprint, hyper_blueprint_debug_inspect, garde Accessed None) : sans objet, l'asset est un StaticMesh. Aucun outil hyper_* appelé.

P2-3. Instantané

  • Manifeste vérifié avant l'écriture : D:\Game\LifePlay_Backup_5.5\STG-FACADE\manifest.csv, une ligne, "Content\Heavy\New2\Furniture\fnt_ext001.uasset","True","508415","B2C6696FDD9D373E910938AE4810ABC9","2026-10-14T01:35:46".
  • Copie recalculée avant l'écriture et en fin de passe : b2c6696fdd9d373e910938ae4810abc9 (inchangée).
  • Copie de sécurité STG-FACADE-copie (fiche § 6) : à prendre par l'orchestrateur, MD5 attendu DF2DB514E0E2345C6CCAC66A0787621F.
  • Retour arrière (proposé, non lancé) : fiche § 9, pwsh -NoProfile -Command "Set-Location 'D:\Game\LifePlay-master 5.8'; .\Tools\Snapshot.ps1 -Lot STG-FACADE-retour -Path 'Content\Heavy\New2\Furniture\fnt_ext001.uasset'; .\Tools\Restore.ps1 -Lot STG-FACADE -WhatIf", puis sans -WhatIf sur accord, éditeur fermé ; l'asset revient à B2C6696F….

P2-4. Ce qui n'a pas été fait

  • Cuisson, build, jeu (fiche § 7, BUILD de COMMUN-6) : hors fiche. Le cuit est inchangé : .uasset 2 496 o et .uexp 1 082 677 o, datés du 2026-10-13 13:39.
  • Relecture depuis le disque dans une session d'éditeur neuve : non faite. Les relectures après sauvegarde portent sur l'objet en mémoire. Preuve disque : CollisionTraceFlag (octet 2097, table des noms), CTF_UseComplexAsSimple (octet 2144, table des noms ; octet 97747, valeur de l'étiquette CollisionComplexity, xxd § P2 Mesuré).
  • PhysicsSize reste 662264 : la sauvegarde ne recalcule pas les données physiques (estimé ; à juger à la cuisson, § 7).
  • Nombre de triangles du LOD de collision : non lu en propre. Triangles = 13173 ; LOD 0, puisque LODs = 1 et LODForCollision = 0 (estimé).
  • Copie de sécurité, BUILD-FIN : orchestrateur.

P2-5. Points à confirmer en VAL

  • fnt_ext001.uasset : MD5 DF2DB514E0E2345C6CCAC66A0787621F, 506 918 o, daté du 2026-10-14 01:44:37.
  • grep -c -a sur l'asset : CTF_UseComplexAsSimple 2, CTF_UseSimpleAndComplex 0, CollisionTraceFlag 1.
  • Room 3A451FDD…, PC F45BE57A…, GI E64B5B37…, Person 8668A47C… inchangés ; git status --short Content = les 4 mêmes M.
  • Saved/Autosaves : aucun .uasset nouveau ; Room_Auto1 inchangé (01:10, 6 396 222 o).
  • Copie STG-FACADE-copie prise, MD5 DF2DB514….
  • Passe 1 conservée : head -n 217 STG-FACADE-IMPL.md | md5sum = 52a2197862d61ee043a6182708a5f4fe (empreinte du fichier de la passe 1 avant ce Write : 217 lignes, 14 750 o, LF).
  • BUILD de COMMUN-6 : les quatre points de la fiche § 7.
  • Facultatif : relecture disque en session neuve, get_properties sur …:BodySetup_0 → CTF_UseComplexAsSimple.

P2-6. Fichiers à commiter

Dépôt du jeu (D:\Game\LifePlay-master 5.8, branche ue5.8) :

  • A Docs/Migration/etat/ST/STG/STG-FACADE-IMPL.md (le dossier n'est pas encore suivi : git status --short → ?? Docs/Migration/etat/ST/STG/).

Content/Heavy/New2/Furniture/fnt_ext001.uasset ne se commite pas (hors git, .gitignore l. 17) : son filet est l'instantané STG-FACADE et la copie STG-FACADE-copie.

P2 Appels dans l'ordre (un appel MCP à la fois)

  1. Départ relevé (§ P2 Mesuré) : cinq MD5 conformes à l'UE-GO, manifeste et copie vérifiés, UeState 0, crashhelper.exe PID 27704 présent avant le lancement (laissé).
  2. Lancement en arrière-plan, commande de la consigne : PID 13724, 01:42:38.
  3. pwsh -NoProfile -File .hyperai/scripts/Wait-HyperAIStudioMCP.ps1 -Port 8000 -TimeoutSeconds 540 → wait exit=0, 01:43:34.
    • LifePlay.log:1903 : Starting MCP server on port 8000.
    • Aucune demande de recompilation : la recherche recompil|rebuild|missing or built|out of date (sans casse) ne trouve que LifePlay.log:2049-2050, LogNavigationDataBuild … RebuildAll (navigation).
  4. list_toolsets (LifePlay.log:2271) : ObjectTools, AssetTools, StaticMeshTools présents.
  5. describe_toolset ObjectTools : reset_properties, set_properties (instance, values en chaîne JSON), get_properties, list_properties, get_class, search_subclasses.
  6. describe_toolset AssetTools : dont load_asset, save_assets, is_dirty, get_asset_tags.
  7. AssetTools.load_asset {asset_path:"/Game/Heavy/New2/Furniture/fnt_ext001"} → {"returnValue":{"refPath":"/Game/Heavy/New2/Furniture/fnt_ext001.fnt_ext001"}}.
  8. ObjectTools.get_properties sur l'asset, ["BodySetup","LODForCollision","bAllowCPUAccess"] → {"BodySetup":{"refPath":"/Game/Heavy/New2/Furniture/fnt_ext001.fnt_ext001:BodySetup_0"},"LODForCollision":0,"bAllowCPUAccess":false}.
  9. ObjectTools.get_properties sur …:BodySetup_0, ["CollisionTraceFlag","bDoubleSidedGeometry","CollisionReponse"] → {"CollisionTraceFlag":"CTF_UseDefault","bDoubleSidedGeometry":false,"CollisionReponse":"BodyCollision_Enabled"}. Conforme.
  10. AssetTools.get_asset_tags → extrait "Triangles":"13173","CollisionComplexity":"CTF_UseSimpleAndComplex","CollisionPrims":"1","LODs":"1","SectionsWithCollision":"12","PhysicsSize":"662264","BuildRequiredMemoryEstimate":"19621490". Conforme.
  11. AssetTools.is_dirty → {"returnValue":false}.
  12. Écriture : ObjectTools.set_properties {instance:{refPath:"/Game/Heavy/New2/Furniture/fnt_ext001.fnt_ext001:BodySetup_0"}, values:"{\"CollisionTraceFlag\":\"CTF_UseComplexAsSimple\"}"} → {"returnValue":true}.
  13. ObjectTools.get_properties sur …:BodySetup_0 (mêmes noms) → {"CollisionTraceFlag":"CTF_UseComplexAsSimple","bDoubleSidedGeometry":false,"CollisionReponse":"BodyCollision_Enabled"}.
  14. AssetTools.is_dirty → {"returnValue":true}.
  15. Étape f : ObjectTools.get_properties sur l'asset (mêmes noms qu'en 8) → "LODForCollision":0,"bAllowCPUAccess":false, inchangés.
  16. Journal lu avant la sauvegarde (2 298 lignes) : aucun avertissement ni erreur après LifePlay.log:2272. Les dernières erreurs (2143-2272 : socket_send_failure, Unknown session id, server/discover) viennent des reconnexions du client, comme en passe 1 : toutes avant la première lecture d'asset (load_asset, 23:43:54 UTC) ; list_toolsets (2271) tourne entre la ligne 2264 et la dernière (2272).
  17. Sauvegarde : AssetTools.save_assets {asset_paths:["/Game/Heavy/New2/Furniture/fnt_ext001"]} → {"returnValue":true}. Journal 2299-2338 : un seul Saving Package (2302), AssetCheck sur ce seul asset, aucun Warning ni Error.
  18. ObjectTools.get_properties sur …:BodySetup_0 → {"CollisionTraceFlag":"CTF_UseComplexAsSimple",…}.
  19. AssetTools.get_asset_tags → extrait "Triangles":"13173","CollisionComplexity":"CTF_UseComplexAsSimple","CollisionPrims":"1","LODs":"1","SectionsWithCollision":"12","PhysicsSize":"662264","BuildRequiredMemoryEstimate":"19621518".
  20. AssetTools.is_dirty → {"returnValue":false}.
  21. Fermeture : Stop-Process -Id 13724 + Wait-Process. UeState lancé aussitôt voit encore le PID 13724 (exit=1), puis rend 0 une fois la tâche de fond finie (editor exit=127, arrêt forcé voulu). Aucun dossier Saved/Crashes nouveau (le plus récent : 2026-10-11 15:06).

P2 Valeurs relues

Valeur Avant l'écriture Après set_properties Après save_assets
BodySetup_0.CollisionTraceFlag (stockée) CTF_UseDefault CTF_UseComplexAsSimple CTF_UseComplexAsSimple
Étiquette CollisionComplexity (effective) CTF_UseSimpleAndComplex non lue CTF_UseComplexAsSimple
LODForCollision 0 0 non relue
bAllowCPUAccess false false non relue
bDoubleSidedGeometry false false false
CollisionReponse BodyCollision_Enabled BodyCollision_Enabled BodyCollision_Enabled
Étiquettes Triangles / CollisionPrims / SectionsWithCollision / PhysicsSize 13173 / 1 / 12 / 662264 non lues 13173 / 1 / 12 / 662264
Étiquette BuildRequiredMemoryEstimate 19621490 non lue 19621518
is_dirty false true false
MD5 fnt_ext001.uasset B2C6696FDD9D373E910938AE4810ABC9 — DF2DB514E0E2345C6CCAC66A0787621F
Taille 508 415 o — 506 918 o
grep -c -a CTF_UseComplexAsSimple / CTF_UseSimpleAndComplex / CollisionTraceFlag 0 / 1 / 0 — 2 / 0 / 1

P2 Mesuré

Départ (01:42, avant le lancement) : md5sum + stat -c '%s %y', grep -c -a (ComplexAsSimple, SimpleAndComplex, CollisionTraceFlag), manifeste, copie, autosaves, git status --short Content, UeState, cuit.

B2C6696FDD9D373E910938AE4810ABC9 508415 2026-09-07 20:24:41.120607100 +0200 Content/Heavy/New2/Furniture/fnt_ext001.uasset
3A451FDDF991AC01A699AF7BD1FBDC12 6408870 2026-10-14 01:14:30.109579800 +0200 Content/BPs/Room.uasset
F45BE57A39D13D3EB19D0B543153AB0B 3404786 2026-10-14 01:05:26.870457900 +0200 Content/BPs/PC.uasset
E64B5B37C9EF0DB7735DE0D6E3BD7C1C 52636801 2026-10-13 19:26:08.639049400 +0200 Content/BPs/GI.uasset
8668A47C627F7A5254910CF0AC33B12A 20821244 2026-10-13 17:42:36.059256500 +0200 Content/BPs/Person.uasset
--- CTF strings (grep -c -a)
0
1
0
--- manifest
"Rel","Existed","Size","MD5","Date"
"Content\Heavy\New2\Furniture\fnt_ext001.uasset","True","508415","B2C6696FDD9D373E910938AE4810ABC9","2026-10-14T01:35:46"
--- backup md5
b2c6696fdd9d373e910938ae4810abc9 */d/Game/LifePlay_Backup_5.5/STG-FACADE/Content/Heavy/New2/Furniture/fnt_ext001.uasset
--- autosaves
2026-10-13 14:22 20788360 Saved/Autosaves/Game/BPs/Person_Auto1.uasset
2026-10-14 01:10 6396222 Saved/Autosaves/Game/BPs/Room_Auto1.uasset
2026-10-13 15:48 6186193 Saved/Autosaves/Game/BPs/Room_Auto2.uasset
2026-10-13 15:58 6253333 Saved/Autosaves/Game/BPs/Room_Auto3.uasset
2026-10-13 16:08 6304030 Saved/Autosaves/Game/BPs/Room_Auto4.uasset
2026-10-09 15:18 26029 Saved/Autosaves/Game/BPs/TestStatic_Auto1.uasset
2026-10-09 21:08 2142848 Saved/Autosaves/Game/UI/MainMenu_Auto1.uasset
2026-10-14 01:14 94 Saved/Autosaves/PackageRestoreData.json
--- git status Content
 M Content/BPs/GI.uasset
 M Content/BPs/PC.uasset
 M Content/BPs/Person.uasset
 M Content/BPs/Room.uasset
--- UeState
processus=0 editeur=0 compilation=0 shaders=0 jeu=0
exit=0
--- cooked
2496 2026-10-13 13:39:19.978151300 Saved/Cooked/Windows/LifePlay/Content/Heavy/New2/Furniture/fnt_ext001.uasset
1082677 2026-10-13 13:39:20.003404300 Saved/Cooked/Windows/LifePlay/Content/Heavy/New2/Furniture/fnt_ext001.uexp
--- crashhelper
"crashhelper.exe","27704","Console","2",…

Tâche de fond du lancement (sortie complète) :

2026-10-14 01:42:38
editor exit=127
2026-10-14 01:44:59

Fin (01:45, éditeur fermé) : mêmes commandes, plus grep -a -o … | wc -l et grep -a -b -o.

--- UeState
processus=0 editeur=0 compilation=0 shaders=0 jeu=0
exit=0
--- MD5
DF2DB514E0E2345C6CCAC66A0787621F 506918 2026-10-14 01:44:37.809544700 +0200 Content/Heavy/New2/Furniture/fnt_ext001.uasset
3A451FDDF991AC01A699AF7BD1FBDC12 6408870 2026-10-14 01:14:30.109579800 +0200 Content/BPs/Room.uasset
F45BE57A39D13D3EB19D0B543153AB0B 3404786 2026-10-14 01:05:26.870457900 +0200 Content/BPs/PC.uasset
E64B5B37C9EF0DB7735DE0D6E3BD7C1C 52636801 2026-10-13 19:26:08.639049400 +0200 Content/BPs/GI.uasset
8668A47C627F7A5254910CF0AC33B12A 20821244 2026-10-13 17:42:36.059256500 +0200 Content/BPs/Person.uasset
--- CTF strings (grep -c -a) ComplexAsSimple / SimpleAndComplex / CollisionTraceFlag
2
0
1
--- occurrences (grep -a -o | wc -l)
2
0
--- positions
2097:CollisionTraceFlag
2144:CTF_UseComplexAsSimple
2456:ECollisionTraceFlag
5161:BodySetup
97747:CTF_UseComplexAsSimple
--- autosaves
2026-10-13 14:22 20788360 Saved/Autosaves/Game/BPs/Person_Auto1.uasset
2026-10-14 01:10 6396222 Saved/Autosaves/Game/BPs/Room_Auto1.uasset
2026-10-13 15:48 6186193 Saved/Autosaves/Game/BPs/Room_Auto2.uasset
2026-10-13 15:58 6253333 Saved/Autosaves/Game/BPs/Room_Auto3.uasset
2026-10-13 16:08 6304030 Saved/Autosaves/Game/BPs/Room_Auto4.uasset
2026-10-09 15:18 26029 Saved/Autosaves/Game/BPs/TestStatic_Auto1.uasset
2026-10-09 21:08 2142848 Saved/Autosaves/Game/UI/MainMenu_Auto1.uasset
2026-10-14 01:44 94 Saved/Autosaves/PackageRestoreData.json
--- autosaves plus récents que le lancement
Saved/Autosaves/PackageRestoreData.json
--- git status Content
 M Content/BPs/GI.uasset
 M Content/BPs/PC.uasset
 M Content/BPs/Person.uasset
 M Content/BPs/Room.uasset
--- cooked
2496 2026-10-13 13:39:19.978151300 Saved/Cooked/Windows/LifePlay/Content/Heavy/New2/Furniture/fnt_ext001.uasset
1082677 2026-10-13 13:39:20.003404300 Saved/Cooked/Windows/LifePlay/Content/Heavy/New2/Furniture/fnt_ext001.uexp
--- fichiers Saved modifiés depuis 01:42 (hors Logs)
2026-10-14 01:44 94 Saved/Autosaves/PackageRestoreData.json
2026-10-14 01:43 151782 Saved/Config/WindowsEditor/EditorPerProjectUserSettings.ini
2026-10-14 01:44 11366 Saved/SourceControl/UncontrolledChangelists.json

PackageRestoreData.json en fin (UTF-16, espacé à la lecture) : "RestoreEnabled" : true, "Packages" : [ ]. Copie de l'instantané en fin : b2c6696fdd9d373e910938ae4810abc9. Saved/Crashes, trois plus récents : 2026-10-11 13:36, 13:49, 15:06.

Contexte binaire de l'étiquette après sauvegarde (xxd -s 97700 -l 96, extrait) et de la table des noms (xxd -s 2090 -l 80) :

00017db4: 3930 0014 0000 0043 6f6c 6c69 7369 6f6e  90.....Collision
00017dc4: 436f 6d70 6c65 7869 7479 0017 0000 0043  Complexity.....C
00017dd4: 5446 5f55 7365 436f 6d70 6c65 7841 7353  TF_UseComplexAsS
00017de4: 696d 706c 6500 0f00 0000 436f 6c6c 6973  imple.....Collis
0000082a: 083d 9e13 0000 0043 6f6c 6c69 7369 6f6e  .=.....Collision
0000083a: 5472 6163 6546 6c61 6700 654a 2165 0c00  TraceFlag.eJ!e..
0000085a: 215a 1700 0000 4354 465f 5573 6543 6f6d  !Z....CTF_UseCom
0000086a: 706c 6578 4173 5369 6d70 6c65 003b 430e  plexAsSimple.;C.

En-tête du paquet, avant (copie de l'instantané) puis après (xxd -l 32) :

00000000: c183 2a9e f8ff ffff 6003 0000 0a02 0000  ..*.....`.......
00000010: f503 0000 0000 0000 0b00 0000 9f8b f812  ................
00000000: c183 2a9e f7ff ffff 6003 0000 0a02 0000  ..*.....`.......
00000010: fa03 0000 0000 0000 debf 13ef f0cf 5f95  .............._.

Tours : 36 / 40

P2 Constats

  • Processus : crashhelper.exe PID 27704 était présent avant le lancement de la passe 2 (relevé de départ) et tourne encore ; laissé, selon la consigne. UnrealEditor.exe et CrashReportClientEditor.exe : aucun en fin de passe.
  • Crochet ecriture-gardien : il a refusé mkdir -p "$S" (copie du livrable vers le dossier temporaire, chemin dans une variable) ; message : Ecriture: mkdir -p $S … Chemins libres : etat/, Saved/Logs/portage/, Saved/<lot>/, le dossier temporaire. Je n'ai pas contourné : la conservation de la passe 1 se vérifie par l'empreinte des 217 premières lignes (§ P2-5).
  • Correction du livrable : un premier Write situait list_toolsets à la ligne 2274 du journal ; relu, c'est 2271. Ce Write complet le remplace (sk-protocol § 7).
  • À verser :
    • lp-mcp § 3 — ObjectTools.set_properties {instance:{refPath:"<asset>.<asset>:BodySetup_0"}, values:"{\"CollisionTraceFlag\":\"CTF_UseComplexAsSimple\"}"} écrit une propriété d'un sous-objet par le nom de la valeur d'énumération ; l'étiquette de registre (CollisionComplexity) suit à la sauvegarde ; is_dirty encadre l'écriture (false → true → false).
    • lp-mcp § 3 — save_assets d'un asset enregistré par un moteur plus ancien le réécrit au format du moteur courant (en-tête -8 → -9, 1013 → 1018) : taille et octets changent au-delà de la propriété ; une fiche ne doit pas attendre « seule la propriété change » au niveau binaire.
    • sk-protocol § 7 — le crochet ecriture-gardien ne résout pas une variable de chemin (mkdir -p "$S") : écrire le chemin en clair ou vérifier par empreinte, sans copie.