143 lines
22 KiB
Markdown
143 lines
22 KiB
Markdown
|
|
Fiche STE-ORG4-Ic2 — Niveau N3 — Modèle prévu opus (xhigh) | utilisé claude-opus-5-5 — Agent lp-mcp-bp — Skills sk-protocol, sk-change-safety, lp-mcp, lp-lot
|
|||
|
|
# STE-ORG4c-IMPL : O4c, seconde moitié : coupure, 26 liens, 7 valeurs, compilation stricte, GI enregistré, éditeur fermé (2026-10-14)
|
|||
|
|
|
|||
|
|
Tentative 1 (fiche STE-ORG4-Ic) : arrêt au budget avant l'opération, rien d'écrit (livrable partiel remplacé par celui-ci). Première moitié : `STE-ORG4c-Ic1.md` (17 nœuds créés, éditeur laissé ouvert).
|
|||
|
|
|
|||
|
|
Résultat : **réussi sur les critères d'acceptation de la fiche (rubrique 8), puis arrêt sur un refus du crochet au tout dernier geste.** J'ai fait 1 coupure, 26 liens et 7 valeurs, et je les ai relus conformes. `GI:EventGraph` compte 6 271 nœuds. La compilation stricte rend `null`, sans `Error` ni `Warning` au journal. `save_assets` de `/Game/BPs/GI` seul : GI vaut maintenant `32fc0a970ab194626e8dc07df3a9633d`. Les 6 assets de contrôle sont inchangés, l'éditeur est fermé et UeState vaut 0. **Reste un point ouvert** : l'autosauvegarde de l'éditeur a écrit `Saved\Autosaves\Game\BPs\GI_Auto1.uasset` (10:32:41). Le crochet `ecriture-gardien` a refusé de la déplacer vers `D:\Game\LifePlay_Backup_5.5\STE-ORG4c\autosave\`. Elle est **toujours en place**, et c'est à l'orchestrateur de la déplacer.
|
|||
|
|
|
|||
|
|
## 1. Fichiers modifiés
|
|||
|
|
- `D:\Game\LifePlay-master 5.8\Content\BPs\GI.uasset` : graphe `EventGraph` (événement `Cum`, branche `ForceEnd`). MD5 `bd0a2256b875a3ac875630e4b85d92d7` → `32fc0a970ab194626e8dc07df3a9633d`. Ce binaire porte aussi O4a, G16 et B7-a, qui étaient déjà dans l'état d'entrée.
|
|||
|
|
- Fichier écrit par l'éditeur hors `Content`, **non déplacé** (refus du crochet) : `D:\Game\LifePlay-master 5.8\Saved\Autosaves\Game\BPs\GI_Auto1.uasset` (52 684 303 octets, 10:32). Son MD5 n'a pas été mesuré, parce que la commande refusée le calculait.
|
|||
|
|
- Ce livrable.
|
|||
|
|
|
|||
|
|
Déroulé (heures locales ; le journal de l'éditeur est en UTC, soit l'heure locale moins 2 h) :
|
|||
|
|
| Étape | Commande / appel | Résultat brut |
|
|||
|
|
|---|---|---|
|
|||
|
|
| Contrôle d'entrée (10:29:03) | `md5sum` (GI, instantané, 6 assets de contrôle) ; `tasklist //FI "PID eq 23296"` ; `ls -la Saved/Autosaves/Game/BPs Saved/Autosaves/Game/UI` ; `git status --short -- Content` | MD5 au § 3, conformes ; `UnrealEditor.exe 23296 Console 1 8 055 272 Ko` ; aucun `GI_Auto*` (BPs : `Person_Auto1`, `Room_Auto1..4`, `TestStatic_Auto1` ; UI : `MainMenu_Auto1`) ; ` M` GI, PC, Person, Room, TopRight |
|
|||
|
|
| Disponibilité | `SceneTools.get_current_level {}` | `{"returnValue":"/Game/Scenes/CentralLondon"}` |
|
|||
|
|
| Compte d'entrée | `BlueprintTools.find_nodes {graph:{refPath:"/Game/BPs/GI.GI:EventGraph"}, title:""}` (412 732 caractères, enregistrés par l'outil dans `%USERPROFILE%\.claude\projects\…\tool-results\mcp-unreal-mcp-call_tool-1791966548416.txt`) ; `grep -o '"refPath"' <fichier> \| wc -l` ; `grep -oE` des 17 noms `\| sort \| uniq -c` | **`6271`** ; chacun des 17 noms présent **1** fois |
|
|||
|
|
| Nœuds d'Ic1 et de départ | `get_node_infos` de `IfThenElse_875`, `CallFunction_11423`, `VariableGet_3498`, `MacroInstance_97`, `PromotableOperator_0`, `CallFunction_992` | liens « avant » identiques à Ic1 (`IfThenElse_875.then` → `CallFunction_11423`:0 seul ; `CallFunction_11423.execute` ← 3 sources ; `VariableGet_3498` → `GetArrayItem_1037`:0 seul) ; les 3 nœuds d'Ic1 sans lien, broches identiques à la table d'Ic1 |
|
|||
|
|
| Coupure | `break_pins` `IfThenElse_875` out 0 / `CallFunction_11423` in 0 | `{"returnValue":null}` |
|
|||
|
|
| Liens 1, 2 | `connect_pins` | `null` ×2 |
|
|||
|
|
| Typage de la macro | `get_node_infos` `MacroInstance_97` | `Array` « Matrice de Person Référence d'objets » ← `VariableGet_3498`:0 ; `Array Element` (out 1) « Person Référence d'objet » ; indices inchangés (0 `LoopBody`, 1 `Array Element`, 2 `Array Index`, 3 `Completed`) |
|
|||
|
|
| Liens 3 à 12, valeur `Penis`, liens 13 à 19 | `connect_pins` ×17, `set_pin_value` ×1 | `null` ×18 |
|
|||
|
|
| Typage des comparateurs | `get_node_infos` `PromotableOperator_0`, `PromotableOperator_1`, `CallFunction_878` | C1, C2 : `A` et `B` « Float (double-précision) », `A` ← `VariableGet_784`:0, `B` vide, type affiché `Math|Flottant|float<float` ; `CallFunction_878` : `A`, `B` « Chaîne », `A` ← `CallFunction_737`:0, `B` = `Penis` |
|
|||
|
|
| Valeurs 90.0 et 100.0, liens 20 à 26, 4 valeurs des marqueurs | `set_pin_value` ×2, `connect_pins` ×7, `set_pin_value` ×4 | `null` ×13 |
|
|||
|
|
| Relecture finale (10:32:22) | `get_node_infos` en 2 lots de 10 (les 17 nœuds et les 3 nœuds existants touchés) ; Bash : `wc -l` du journal | tout conforme, voir les tables ci-dessous ; journal : `2448` lignes ; `grep -c 'Fatal\|LogBlueprint: Error\|SavePackage'` → `0` ; processus 23296 vivant |
|
|||
|
|
| Compte final | `find_nodes` (412 732 caractères, `…\tool-results\mcp-unreal-mcp-call_tool-1791966755910.txt`) ; `grep -o '"refPath"' <fichier> \| wc -l` | **`6271`** |
|
|||
|
|
| Compilation (10:32:46) | `BlueprintTools.compile_blueprint {blueprint:{refPath:"/Game/BPs/GI.GI"}, warnings_as_errors:true}` | `{"returnValue":null}` ; journal l. 2464 `LogBlueprint: Compiling Blueprint '/Game/BPs/GI.GI'` (08:32:46 UTC), puis l. 2465 `LogUObjectHash: Compacting …` et l. 2466 `LogAutomationController: Ignoring very large delta …` ; `tail -n +2449 <journal> \| grep -c 'Error\|Warning'` → **`0`** |
|
|||
|
|
| Autosauvegarde de l'éditeur (10:32:41, avant la compilation) | (non demandée ; journal l. 2454-2460) | `Editor autosave … for '/Game/Scenes/CentralLondon'`, puis `OBJ SAVEPACKAGE PACKAGE="/Game/BPs/GI" FILE="…/Saved/Autosaves/Game/BPs/GI_Auto1.uasset" … AUTOSAVING=true` et `Moving '…/Saved/GI_Auto1…tmp' to '…/Saved/Autosaves/Game/BPs/GI_Auto1.uasset'`. Aucune autosauvegarde de niveau n'apparaît sous `Saved/Autosaves/Game` |
|
|||
|
|
| Enregistrement (10:33:09) | `AssetTools.save_assets {asset_paths:["/Game/BPs/GI"]}` | `{"returnValue":true}` ; journal après la l. 2466 : `OBJ SavePackage … package [/Game/BPs/GI]`, `LogSavePackage: Moving output files for package: /Game/BPs/GI`, `Moving '…/Saved/GIFEEE9E2E4C6454AE3994E2932020BC47.tmp' to '…/Content/BPs/GI.uasset'` ; aucun autre paquet, aucune ligne `Error` / `Warning` |
|
|||
|
|
| Fermeture (10:33:27 à 10:33:38) | `md5sum` GI ; `pwsh -NoProfile -Command "Stop-Process -Id 23296; Wait-Process -Id 23296 -Timeout 120; Start-Sleep -Seconds 10; …"` ; `pwsh -NoProfile -File Tools/UeState.ps1` ; `tasklist //FI "IMAGENAME eq UnrealEditor.exe"` ; `md5sum` ×7 ; `ls` des autosauvegardes ; `find Saved/Autosaves -name 'GI_Auto*'` ; `git status --short -- Content` | GI `32fc0a97…` avant et après la fermeture ; `Wait-Process: Impossible de trouver un processus avec l'identificateur de processus 23296.` (déjà terminé, sans effet) ; `ferme 10:33:38` ; `processus=0 editeur=0 compilation=0 shaders=0 jeu=0` ; aucune tâche `UnrealEditor.exe` ; 6 assets de contrôle inchangés ; `Saved/Autosaves/Game/BPs/GI_Auto1.uasset` (52 684 303 octets, 10-14 10:32) ; ` M` GI, PC, Person, Room, TopRight (comme à l'entrée) |
|
|||
|
|
| Déplacement de l'autosauvegarde | `mkdir -p "D:/Game/LifePlay_Backup_5.5/STE-ORG4c/autosave" && mv -n Saved/Autosaves/Game/BPs/GI_Auto1.uasset …` | **refusé par le crochet**, commande non exécutée : `Refus du crochet ecriture-gardien. Agent : lp-mcp-bp — Ecriture: mkdir -p D:/Game/LifePlay_Backup_5.5/STE-ORG4c/autosave — Cet agent n'a pas de droit d'ecriture (sk-protocol § 7) … Chemins libres : etat/, Saved/Logs/portage/, Saved/<lot>/, le dossier temporaire.` → **arrêt** (fiche, rubrique 5) |
|
|||
|
|
|
|||
|
|
### Coupure, liens et valeurs (relus)
|
|||
|
|
refPath = `/Game/BPs/GI.GI:EventGraph.K2Node_<Nom>`. « out n » = `EGPD_Output` d'indice n ; « in n » = `EGPD_Input` d'indice n.
|
|||
|
|
|
|||
|
|
| # SPEC | Geste | Relu (relecture finale) |
|
|||
|
|
|---|---|---|
|
|||
|
|
| coupure | `IfThenElse_875` out 0 ✕ `CallFunction_11423` in 0 | `IfThenElse_875.then` → `MacroInstance_97`:0 **seul** ; `CallFunction_11423.execute` ne reçoit plus `IfThenElse_875` |
|
|||
|
|
| 1 | `IfThenElse_875` out 0 → `MacroInstance_97` in 0 | oui |
|
|||
|
|
| 2 | `VariableGet_3498` out 0 → `MacroInstance_97` in 1 | `SexPersons` → 2 cibles : `GetArrayItem_1037`:0, `MacroInstance_97`:1 |
|
|||
|
|
| 3 | `MacroInstance_97` out 3 → `CallFunction_11423` in 0 | `CallFunction_11423.execute` ← **3 sources** : `CallFunction_32955`:0, `IfThenElse_189`:0, `MacroInstance_97`:3 |
|
|||
|
|
| 4 | `MacroInstance_97` out 0 → `IfThenElse_222` in 0 | oui |
|
|||
|
|
| 5 | `MacroInstance_97` out 1 → `CallFunction_729` in 0 | oui (`Object` « Référence d'objet ») |
|
|||
|
|
| 6 | `CallFunction_729` out 0 → `IfThenElse_222` in 1 | oui |
|
|||
|
|
| 7 | `IfThenElse_222` out 0 → `IfThenElse_223` in 0 | oui |
|
|||
|
|
| 8 | `MacroInstance_97` out 1 → `VariableGet_782` in 0 | oui |
|
|||
|
|
| 9 | `VariableGet_782` out 0 → `CommutativeAssociativeBinaryOperator_111` in 0 | oui (`IsMale` → `A`) |
|
|||
|
|
| 10 | `MacroInstance_97` out 1 → `VariableGet_783` in 0 | oui |
|
|||
|
|
| 11 | `VariableGet_783` out 0 → `CallFunction_737` in 0 | oui (`Genital` Texte → `InText` « Texte (par référence) ») |
|
|||
|
|
| 12 | `CallFunction_737` out 0 → `CallFunction_878` in 0 | oui (`ReturnValue` Chaîne → `A` Chaîne) |
|
|||
|
|
| 13 | `CallFunction_878` out 0 → `CommutativeAssociativeBinaryOperator_111` in 1 | oui |
|
|||
|
|
| 14 | `CommutativeAssociativeBinaryOperator_111` out 0 → `IfThenElse_223` in 1 | oui |
|
|||
|
|
| 15 | `IfThenElse_223` out 0 → `IfThenElse_224` in 0 | oui |
|
|||
|
|
| 16 | `IfThenElse_223` out 1 → `IfThenElse_225` in 0 | oui |
|
|||
|
|
| 17 | `MacroInstance_97` out 1 → `VariableGet_784` in 0 | oui |
|
|||
|
|
| 18 | `VariableGet_784` out 0 → `PromotableOperator_0` in 0 | oui |
|
|||
|
|
| 19 | `VariableGet_784` out 0 → `PromotableOperator_1` in 0 | `Sex_Orgasm` → 2 cibles |
|
|||
|
|
| 20 | `PromotableOperator_0` out 0 → `IfThenElse_224` in 1 | oui |
|
|||
|
|
| 21 | `PromotableOperator_1` out 0 → `IfThenElse_225` in 1 | oui |
|
|||
|
|
| 22 | `IfThenElse_224` out 1 → `CallFunction_918` in 0 | oui |
|
|||
|
|
| 23 | `IfThenElse_225` out 1 → `CallFunction_988` in 0 | oui |
|
|||
|
|
| 24 | `CallFunction_918` out 0 → `CallFunction_992` in 0 | oui |
|
|||
|
|
| 25 | `CallFunction_988` out 0 → `CallFunction_992` in 0 | `CallFunction_992.execute` ← 2 sources (`CallFunction_918`:0, `CallFunction_988`:0) |
|
|||
|
|
| 26 | `MacroInstance_97` out 1 → `CallFunction_992` in 1 | `Array Element` → **5 cibles** : `CallFunction_729`:0, `VariableGet_782`:0, `VariableGet_783`:0, `VariableGet_784`:0, `CallFunction_992`:1 |
|
|||
|
|
|
|||
|
|
| Valeur | Broche | Avant | Après (relu) |
|
|||
|
|
|---|---|---|---|
|
|||
|
|
| V1 | `CallFunction_878` in 1 (`B`, Chaîne) | vide (Ic1) | `Penis` |
|
|||
|
|
| V2 | `PromotableOperator_0` in 1 (`B`, double) | vide (relu après le lien 19) | `90.0` |
|
|||
|
|
| V3 | `PromotableOperator_1` in 1 (`B`, double) | vide (relu après le lien 19) | `100.0` |
|
|||
|
|
| V4 | `CallFunction_918` in 1 (`InString`) | `Hello` (Ic1) | `ORG4 bonus Endsex homme` |
|
|||
|
|
| V5 | `CallFunction_918` in 2 (`bPrintToScreen`) | `true` (Ic1) | `false` |
|
|||
|
|
| V6 | `CallFunction_988` in 1 (`InString`) | `Hello` (Ic1) | `ORG4 bonus Endsex femme` |
|
|||
|
|
| V7 | `CallFunction_988` in 2 (`bPrintToScreen`) | `true` (Ic1) | `false` |
|
|||
|
|
`bPrintToLog` reste `true` sur les deux marqueurs (`TextColor` `(R=0.000000,G=0.660000,B=1.000000,A=1.000000)`, `Duration` `2.000000`, `Key` `None` : valeurs par défaut).
|
|||
|
|
|
|||
|
|
Contrôles de la SPEC § 2.3, relus en fin :
|
|||
|
|
- `IfThenElse_875.else` → `MacroInstance_18`:0 **inchangé** ; `IfThenElse_875.execute` ← `IfThenElse_98`:0 et `Condition` ← `CustomEvent_4245`:2, inchangés.
|
|||
|
|
- Les 4 Branches ont leur `Condition` reliée : `IfThenElse_222` ← `CallFunction_729`:0 ; `IfThenElse_223` ← `CommutativeAssociativeBinaryOperator_111`:0 (et non `VariableGet_782` directement) ; `IfThenElse_224` ← `PromotableOperator_0`:0 ; `IfThenElse_225` ← `PromotableOperator_1`:0.
|
|||
|
|
- **Impasses vides** : `IfThenElse_222` out 1 (`else`), `IfThenElse_224` out 0 (`then`), `IfThenElse_225` out 0 (`then`), `CallFunction_992` out 0 (`then`) ; `MacroInstance_97` out 2 (`Array Index`) sans lien.
|
|||
|
|
- Typage : `Array Element` « Person Référence d'objet » ; `PromotableOperator_0/1` : `A`, `B` « Float (double-précision) », affichés `Math|Flottant|float<float` après liaison (et non plus `Math|Durée|Timespan<Timespan`) ; `CallFunction_878` : `A`, `B` « Chaîne », type `Utilitaires|Chaîne|Equal,CaseInsensitive(String)` ; `CallFunction_737` : `Utilitaires|Chaîne|ToString(Text)` ; `CommutativeAssociativeBinaryOperator_111` : `Math|Booléen|ORBoolean`, deux broches d'entrée (aucune ajoutée) ; `VariableGet_784` : `|GetSex_Orgasm`, sortie « Float (double-précision) ».
|
|||
|
|
- Seule la sortie `Completed` (out 3) de la boucle rejoint `AfterCumSpeed`.
|
|||
|
|
|
|||
|
|
Garde `Accessed None` (`lp-mcp` § 1 règle 4) : `IsValid` (`CallFunction_729`) et la Branche `IfThenElse_222` forment une garde **prudentielle**, décidée par Q-ORG4c-4 de la SPEC. Un élément nul dans `SexPersons` n'a jamais été relevé comme un état normal. La garde rend aussi sûr le OU pur `CommutativeAssociativeBinaryOperator_111` (R-ORG4c-11) : ses deux opérandes sont lus sur l'élément déjà validé. Les autres conditions sont des cascades de Branches. Le comportement change **volontairement** (bonus à `Endsex`, décisions de l'utilisateur du 2026-10-14) ; le chemin existant reste identique quand `SexPersons` est vide (`Completed` part aussitôt vers `AfterCumSpeed`).
|
|||
|
|
|
|||
|
|
## 2. Écarts à la SPEC
|
|||
|
|
- **Autosauvegarde non déplacée** : la fiche (rubrique 3) demande de déplacer `GI_Auto*` vers `D:\Game\LifePlay_Backup_5.5\STE-ORG4c\autosave\`. Le crochet `ecriture-gardien` refuse à l'agent `lp-mcp-bp` toute écriture hors `etat/`, `Saved/Logs/portage/`, `Saved/<lot>/` et du dossier temporaire. Je me suis arrêté là, sans contournement. Rien n'a été créé ni déplacé. Le fichier `Saved\Autosaves\Game\BPs\GI_Auto1.uasset` (52 684 303 octets, 10:32) reste à déplacer **par l'orchestrateur**. Il ne touche pas `Content\BPs\GI.uasset`. Le risque est qu'à la prochaine ouverture de l'éditeur, une invite de restauration propose cette version, qui précède la compilation.
|
|||
|
|
- **Ordre des valeurs** : `90.0` et `100.0` ont été posés après les liens 18 **et** 19, après une relecture du typage des deux comparateurs. La consigne de la SPEC (« relier `Sex_Orgasm` à `C1.A` et à `C2.A` avant de poser les `B` ») est donc respectée. Les deux valeurs des marqueurs ont été posées après le lien 26, et `Penis` juste après le lien 12. L'ordre des 26 liens est celui de la SPEC.
|
|||
|
|
- **« Relire avant et après » les valeurs** : pour `InString`, `bPrintToScreen` et `E.B`, la valeur « avant » est celle relue par Ic1 (`Hello`, `true`, vide). Pour `C1.B` et `C2.B`, c'est la relecture faite ici après le lien 19 (vides). Pas de relecture dédiée juste avant chaque `set_pin_value`. Le « après » est la relecture finale.
|
|||
|
|
- **`hyper_blueprint_debug_inspect`** : non appelé. Le serveur ne l'a pas (mémoire du projet ; je ne l'ai pas revérifié dans cette session). Le repli de la SPEC § 2.1 s'applique : compilation stricte + journal.
|
|||
|
|
- **Messages mixtes** : quatre messages ont associé une commande Bash (ou un Grep) à **une** lecture MCP : le contrôle d'entrée avec `get_current_level` ; le comptage d'entrée avec `get_node_infos` ; le `wc -l` du journal avec la relecture finale (lot 1) ; le comptage final avec `compile_blueprint`. Un Grep de `STE-ORG4a-IMPL.md` est aussi parti avec la relecture de la macro. Aucun `connect_pins`, `break_pins`, `set_pin_value` ni `save_assets` n'a été accompagné d'une autre commande. Il n'y a jamais eu deux appels MCP dans un même message.
|
|||
|
|
- `Wait-Process` a signalé « Impossible de trouver un processus » : le processus était déjà terminé à la fin de `Stop-Process`. La commande a continué, `Start-Sleep -Seconds 10` compris. Sans effet.
|
|||
|
|
- Pas d'autre écart : aucun nœud créé, aucun `delete_node`, aucun repli de conception, aucune écriture par `execute_tool_script` ni `hyper_*`, aucun autre asset enregistré.
|
|||
|
|
|
|||
|
|
## 3. Instantané
|
|||
|
|
Pris par l'orchestrateur, non relancé (fiche, rubrique 6) : `D:\Game\LifePlay_Backup_5.5\STE-ORG4c\Content\BPs\GI.uasset`. Je n'ai pas relu le manifeste ; le MD5 du fichier sauvegardé a été mesuré à l'entrée.
|
|||
|
|
| Fichier | MD5 entrée (10:29:03) | MD5 sortie (10:33:38, éditeur fermé) |
|
|||
|
|
|---|---|---|
|
|||
|
|
| `Content\BPs\GI.uasset` | `bd0a2256b875a3ac875630e4b85d92d7` | **`32fc0a970ab194626e8dc07df3a9633d`** (déjà mesuré à 10:33:27, avant la fermeture) |
|
|||
|
|
| instantané `STE-ORG4c\Content\BPs\GI.uasset` | `bd0a2256b875a3ac875630e4b85d92d7` | non remesuré (non touché) |
|
|||
|
|
| `Content\BPs\Room.uasset` | `931387479e2d15f80bc4f36398907712` | identique |
|
|||
|
|
| `Content\BPs\PC.uasset` | `f45be57a39d13d3eb19d0b543153ab0b` | identique |
|
|||
|
|
| `Content\BPs\Person.uasset` | `8668a47c627f7a5254910cf0ac33b12a` | identique |
|
|||
|
|
| `Content\UI\SexAction.uasset` | `a8705f7fbe1fde1daba0464bfc9ff9b5` | identique |
|
|||
|
|
| `Content\UI\TopRight.uasset` | `cb8353603cf95849b4f778a33b4bfbd2` | identique |
|
|||
|
|
| `Content\Heavy\New2\Furniture\fnt_ext001.uasset` | `df2db514e0e2345c6ccac66a0787621f` | identique |
|
|||
|
|
Retour arrière (**proposé, non lancé**, éditeur fermé, sur décision de l'orchestrateur) : `.\Tools\Restore.ps1 -Lot STE-ORG4c -Only Content\BPs\GI.uasset -WhatIf`, puis la même commande sans `-WhatIf`. Attendu : GI `bd0a2256…` (état d'après O4a, avec G16 et B7-a). Après un commit du gardien : `git revert` du commit du ticket.
|
|||
|
|
|
|||
|
|
Entrée de journal (`sk-change-safety`) : `2026-10-14 | O4c (coupure, 26 liens, 7 valeurs sur les 17 nœuds d'Ic1), GI:EventGraph | Content\BPs\GI.uasset | retour arrière : Restore.ps1 -Lot STE-ORG4c -Only Content\BPs\GI.uasset | instantané : D:\Game\LifePlay_Backup_5.5\STE-ORG4c\ | vérification : GI bd0a2256… → 32fc0a97…, 6 autres assets identiques, 6 271 nœuds, compilation 0 / 0`.
|
|||
|
|
|
|||
|
|
## 4. Ce qui n'a pas été fait
|
|||
|
|
- L'autosauvegarde `GI_Auto1.uasset` n'a pas été déplacée (refus du crochet, § 2), et son MD5 n'a pas été mesuré.
|
|||
|
|
- Pas de dump `LPDumpFunction` ni de `CompileAllBlueprints` (éditeur fermé) : c'est la VAL V5.
|
|||
|
|
- Pas de preuve en jeu (build empaqueté + `LogStats`, V6) : hors de cette fiche (`lp-mcp` § 1 règle 5).
|
|||
|
|
- Les noms de fonctions des nœuds T, E et O (`Conv_TextToString`, `EqualEqual_StriStri`, `BooleanOR`) ne sont pas affichés par `get_node_infos`. Je n'ai relu que leurs type_id et leurs broches.
|
|||
|
|
- Le chevauchement des positions avec des nœuds existants n'a pas été vérifié (cosmétique, Ic1 § 2).
|
|||
|
|
|
|||
|
|
## 5. Points à confirmer en VAL
|
|||
|
|
- Autosauvegarde : `D:\Game\LifePlay-master 5.8\Saved\Autosaves\Game\BPs\GI_Auto1.uasset` déplacée par l'orchestrateur vers `D:\Game\LifePlay_Backup_5.5\STE-ORG4c\autosave\` ; `find Saved/Autosaves -name 'GI_Auto*'` → aucun résultat.
|
|||
|
|
- `md5sum Content/BPs/GI.uasset` → `32fc0a970ab194626e8dc07df3a9633d` ; Room `93138747…`, PC `f45be57a…`, Person `8668a47c…`, SexAction `a8705f7f…`, TopRight `cb835360…`, `fnt_ext001` `df2db514…` inchangés.
|
|||
|
|
- Dump V5 (`-BP=GI -Fn=EventGraph -Pins -Exec`) : en-tête `(6273 noeuds)`, soit `find_nodes` 6 271 plus l'écart constant de +2 relevé en O4a (Ic1 § 5) ; les liens de la SPEC § 7 V5 ; `CallFunction_737` = `KismetTextLibrary::Conv_TextToString()` ; `CallFunction_878` = `KismetStringLibrary::EqualEqual_StriStri()` avec `B` = `Penis` ; `CommutativeAssociativeBinaryOperator_111` = `KismetMathLibrary::BooleanOR()` ; `PromotableOperator_0/1` = `Less_DoubleDouble` avec `B` 90 / 100.
|
|||
|
|
- Comptes relatifs au dump P1 (SPEC § 7 V5) : `macro 'ForEachLoop'` +1, `GiveOrgasmReward` 0 → 1, `PrintString` +2, `variable 'IsMale'` +1, `variable 'Genital'` +1, `Conv_TextToString` +1, `EqualEqual_StriStri` +1, `BooleanOR` +1, `variable 'Sex_Orgasm'` 0 → 1, `Sex_OrgasmCounts` 0 → 0.
|
|||
|
|
- Diff indépendant (`DiffRemplacementNoeuds.py`) : 7 nœuds communs aux broches modifiées (4 pour O4a, plus `IfThenElse_875`, `CallFunction_11423`, `VariableGet_3498`) ; `GetArrayItem_1037` n'est pas touché.
|
|||
|
|
- `CompileAllBlueprints`, éditeur fermé : 0 erreur ; `LPTestStringCompat` 3120 / 0 / 60.
|
|||
|
|
- V6 en jeu (S1 à S6 de la SPEC § 7), avec le build empaqueté et `LogStats`.
|
|||
|
|
|
|||
|
|
## 6. Fichiers à commiter
|
|||
|
|
Dépôt jeu, branche `ue5.8` (ticket au gardien ; GI est un binaire unique qui porte aussi O4a, G16 et B7-a, R-ORG4c-6) :
|
|||
|
|
- M `Content/BPs/GI.uasset` (MD5 `32fc0a970ab194626e8dc07df3a9633d`)
|
|||
|
|
- A `Docs/Migration/etat/ST/STE/STE-ORG4c-IMPL.md` (ou M si l'orchestrateur a fait commiter le livrable partiel de la tentative 1)
|
|||
|
|
Ne se commitent pas : `Saved\Autosaves\…\GI_Auto1.uasset` (à déplacer), le journal `Saved\Logs\STE-ORG4c-headless-20261014-102142.log` (trace).
|
|||
|
|
|
|||
|
|
Tours : 51 / 50 (plafond 60 ; compte de l'agent, `python -I Tools/FicheStats.py --lot STE` fait foi)
|
|||
|
|
|
|||
|
|
## Constats
|
|||
|
|
- 44 appels MCP en tout, un seul par message : `get_current_level` ×1, `find_nodes` ×2, `get_node_infos` ×5, `break_pins` ×1, `connect_pins` ×26, `set_pin_value` ×7, `compile_blueprint` ×1, `save_assets` ×1. Toutes les écritures ont rendu `{"returnValue":null}` (et `true` pour `save_assets`).
|
|||
|
|
- **Toolsets vérifiés** (journal de l'éditeur) : `editor_toolset.toolsets.blueprint.BlueprintTools` pour `find_nodes`, `get_node_infos`, `compile_blueprint` ; `editor_toolset.toolsets.asset.AssetTools.save_assets` a répondu `true`.
|
|||
|
|
- Les comparateurs promotables (`Inférieurà(<)`) affichent `Math|Durée|Timespan<Timespan` tant qu'ils ne sont pas reliés, puis `Math|Flottant|float<float` dès que `A` reçoit un double. `B` prend le type double tout seul, sans lien.
|
|||
|
|
- **Autosauvegarde de l'éditeur pendant la session** : environ 11 minutes après le lancement (10:21:42 → 10:32:41), l'éditeur a écrit `GI_Auto1.uasset`, le paquet modifié en mémoire, sous `Saved\Autosaves`. Le risque relevé par Ic1 (« Constats ») s'est réalisé. Pour les prochaines sessions MCP longues, l'orchestrateur peut prévoir lui-même le déplacement (le crochet le refuse à `lp-mcp-bp`), ou couper l'autosauvegarde au lancement (piste non vérifiée).
|
|||
|
|
- Aucun `>`, `<` ni `tee` dans les commandes ; aucun fichier intermédiaire désigné par une variable : `F=…` désigne le fichier que l'outil a enregistré, que j'ai seulement lu. Un seul refus du crochet (le déplacement de l'autosauvegarde), et aucun refus de permission.
|
|||
|
|
- Aucun nom de compte cité : les chemins du profil sont écrits `%USERPROFILE%`.
|