84 lines
7.6 KiB
Markdown
84 lines
7.6 KiB
Markdown
Fiche STF-T3 — Niveau N2 — Modèle prévu orchestrateur STF (Opus 5.5) | utilisé claude-opus-5-5 — Agent orchestrateur — Skills lp-mcp, lp-lot, sk-change-safety, sk-protocol
|
|
# STF-T3 : MainMenu, 12 SpinBox protégées par MCP (2026-10-10)
|
|
|
|
Copie `D:\Game\LifePlay-master 5.8` (branche `ue5.8`, HEAD `b63196a` = tag `STF-avant`, ticket STF-R1). BUILD-GO STF-T3 de
|
|
« Big Boss » (après STE-D). Accord utilisateur : « STF approuvé » (2026-10-10). Instantané :
|
|
`D:\Game\LifePlay_Backup_5.5\STF\manifest.csv` (11:04). Éditeur 5.8 sans rendu, journal
|
|
`Saved\Logs\portage\STF-T3_Editor_20261010-111552.log`. Outils Epic (`UMGToolSet`, `BlueprintTools`, `ObjectTools`,
|
|
`AssetTools`, appelés via `ProgrammaticToolset`) ; contrôle `hyper_diagnose`.
|
|
|
|
| Fichier | Avant | Après |
|
|
|---|---|---|
|
|
| `Content/UI/MainMenu.uasset` | 59d1ee7190afb88bf51b90eda26fcc32 (2 171 521 o) | **39135bcd5a13167a507e6b5059efbeb0** (2 245 641 o) |
|
|
| `Content/BPs/GI.uasset` | d93785fca90e3342575fc0b601cc2e93 | d93785fca90e3342575fc0b601cc2e93 (inchangé) |
|
|
|
|
`git status -- Content Config Source` après : ` M Content/UI/MainMenu.uasset` seul.
|
|
|
|
## 1. Méthode (A, STF-T1 § 5) et un écart assumé à la SPEC
|
|
Par couple : lecture des 34 propriétés du widget et des 4 de son slot → suppression de l'événement `OnValueChanged`
|
|
(et de `ComponentBoundEvent_15` pour MarkerSize) → `RemoveWidget` → `AddWidget` (SpinBox, même parent, indice 1) →
|
|
`set_properties` (mêmes valeurs, sauf `Value` = défaut GI) et slot → `ToggleWidgetAsVariable` → `BindToEventProperty`
|
|
`OnValueCommitted` → événement placé à la position de l'ancien → branchements → relecture des propriétés (0 écart) et des
|
|
liens → `compile_blueprint` (avertissements = erreurs).
|
|
**Écart à SPEC § 1.2 (A)** : la chaîne `IsValid → Set` existante de chaque couple est **gardée et rebranchée** sur le
|
|
nouvel événement (exécution → entrée de la macro `IsValid`, `InValue` → valeur du `Set`) au lieu d'être recréée. Même
|
|
graphe d'exécution que la SPEC (c'est le geste de la méthode B appliqué aux nœuds), moins de nœuds créés ; nœuds `GI`
|
|
partagés intacts.
|
|
|
|
## 2. Résultat par couple (établi, `get_node_infos` après branchement)
|
|
| # | Ancien → neuf | Événement neuf | Chaîne | Value / Min / Max |
|
|
|---|---|---|---|---|
|
|
| 1 | ChildGrowthMult → SpinBoxChildGrowth | `ComponentBoundEvent_32` | → `MacroInstance_2` → `VariableSet_1` | 1 / 0.01 / 10000 |
|
|
| 2 | ShadeDepth → SpinBoxShadeDepth | `_33` | → `MacroInstance_40` → `VariableSet_106` → Cast MID → `SetScalarParameterValue` (inchangé) | 0.5 / 0 / 1 |
|
|
| 3 | SpinBoxBGA → SpinBoxVolBGA | `_34` | → `MacroInstance_10` → `VariableSet_16` | 0.5 / 0 / 5 |
|
|
| 4 | SpinBoxMarkerSize → SpinBoxMapMarkerSize | `_35` | → `MacroInstance_5` → `VariableSet_6` → **`CallFunction_44` RetriggerableDelay 2 s → `CallFunction_31` SpawnMapMarkers(false)** (ancien `_15` supprimé) | 28 / 1 / 100 |
|
|
| 5 | SpinBoxMoan → SpinBoxVolMoan | `_36` | → `MacroInstance_8` → `VariableSet_19` | 1 / 0 / 5 |
|
|
| 6 | SpinBoxPhysicsMult → SpinBoxPhysics | `_37` | → `MacroInstance_7` → `VariableSet_11` | 1 / 0 / 100 |
|
|
| 7 | SpinBoxSceneFrequency → SpinBoxSceneFreq | `_39` | → `MacroInstance_42` → `VariableSet_116` | 10 / 0.2 / 100 |
|
|
| 8 | SpinBoxSexDescription → SpinBoxSexLineDuration | `_40` | → `MacroInstance_90` → `VariableSet_48` | 15 / 1 / 100 |
|
|
| 9 | SpinBoxSex → SpinBoxVolSex | `_43` | → `MacroInstance_12` → `VariableSet_18` | 1 / 0 / 5 |
|
|
| 10 | SpinBoxSquirtMult → SpinBoxSquirt | `_46` | → **`IfThenElse_9` (Branche) ← `CallFunction_78` IsValid(`VariableGet_40`)** → `VariableSet_25` | 2 / 0 / 100 |
|
|
| 11 | SpinBoxUI → SpinBoxVolUI | `_44` | → `MacroInstance_11` → `VariableSet_17` | 1 / 0 / 5 |
|
|
| 12 | SpinBoxPregnancyTerm → SpinBoxPregnancyMult | `_45` | → `MacroInstance_57` → `VariableSet_70` | 1 / 0.01 / 3 |
|
|
|
|
- Propriétés : recopie des 34 propriétés du widget (style, police Roboto Bold 20, couleur, `Delta`, chiffres, bornes,
|
|
`bOverride_*`, visibilité…) et du slot (Automatic, marge 0, Fill / Fill), relues après écriture : **0 écart** sur les 12
|
|
(seule `Value` change, au défaut GI) ; propriétés identiques à `SpinBoxSexDuration` (STC) hors valeur et bornes.
|
|
- SquirtMult : garde ajoutée sur le modèle STC (`IsValid` fonction + `Branche`), car le type `Utilities|IsValid` (macro)
|
|
est ambigu dans `find_node_types` (2 entrées). GI vide impossible après `Construct` : garde d'uniformité (règle 4
|
|
`lp-mcp`, à écrire au CHG).
|
|
- Numéros d'événements 38 et 41 : déjà pris (délégués `OnClicked` de boutons, avant et après STF ; correction après
|
|
STF-VAL statique) ; 42 libéré (ancien PregnancyTerm).
|
|
|
|
## 3. `Construct` (établi, parcours de la chaîne)
|
|
`Event_1` → Cast To GI → Set GI → `CallFunction_72` (slider caméra) → `_74` (texte caméra) → `_73` (SexDuration) →
|
|
**`_79` ChildGrowth → `_80` ShadeDepth → `_81` VolBGA → `_83` MapMarkerSize → `_84` VolMoan → `_85` Physics → `_87`
|
|
SceneFreq → `_88` SexLineDuration → `_89` VolSex → `_90` Squirt → `_91` VolUI → `_92` PregnancyMult** → `_1278`
|
|
UpdateDonors (inchangé ensuite). Chaque `SetValue` (SpinBox, broche `NewValue`) : `self` ← `Get<widget neuf>`,
|
|
`NewValue` ← `GI.<variable>` (cible `VariableGet_50`, le `GI` déjà utilisé par STC).
|
|
Incident : un premier essai s'est arrêté sur `Classe|GI|ObtenirVol_BGA` inexistant (le type s'écrit `ObtenirVolBGA`) ;
|
|
7 nœuds déjà créés, sans aucun lien, ont été réutilisés au second essai (vérifié : 0 lien avant branchement) ; le lien
|
|
`_73 → _1278` n'a été coupé qu'après validation des 36 nœuds.
|
|
|
|
## 4. Contrôles de l'asset (SPEC § 3)
|
|
| Contrôle | Résultat |
|
|
|---|---|
|
|
| `compile_blueprint` (warnings_as_errors) après chaque couple et après `Construct` | sans erreur |
|
|
| `hyper_diagnose` (`loaded_blueprint_health`) | MainMenu `up_to_date` ; seul signalement : paquet modifié (avant `save_assets`) |
|
|
| Journal éditeur | aucun avertissement MainMenu ; 1 `LogScript: Warning` = l'essai `ObtenirVol_BGA` ; avertissements MCP connus (`LogJson` schéma, `WriteBytes`, multicast) |
|
|
| Événements liés (tous) | 14 `OnValueCommitted` (SpinBox_0, SexDuration STC, 12 neufs) + 1 `OnValueChanged` (SliderCameraSpeed) ; **aucun `OnValueChanged` de SpinBox** |
|
|
| Anciens widgets | 0 dans l'arbre ; 0 nœud à leur nom |
|
|
| Relecture binaire après sauvegarde | 11 anciens noms : 0 occurrence (`ShadeDepth` : 2 = variable GI et paramètre matériau) ; 12 neufs : 5 chacun = profil des widgets sans liaison de STC (`SpinBoxSexDuration`, `SliderCameraSpeed` : 5) ; `SpinBox_0` : 6 (inchangé) → **0 liaison vers GI sur les 12** (estimé : décompte de chaînes, cohérent avec STF-T1 § 4) |
|
|
| `save_assets ["/Game/UI/MainMenu"]` | `true` |
|
|
| `CompileAllBlueprints` éditeur fermé | **reporté en STF-T4** (VAL V1, commandlet) |
|
|
|
|
## 5. Suite
|
|
- STF-T4 (lp-validator) : V1 `CompileAllBlueprints` (418 / 418, 0 / 0), V2-V3 relecture, V4-V7 PIE avec l'utilisateur,
|
|
V8 MD5 des `.sav` contre l'instantané.
|
|
- CHG : réservation à faire dans `etat\REPO\NUMEROS.md` (une entrée par SpinBox + `Construct`, ou une entrée de lot si le
|
|
gardien les regroupe) ; à y écrire : écart § 1, garde SquirtMult, `Value` de conception ramenées aux défauts GI,
|
|
ShadeDepth appliqué en fin de geste (plus d'aperçu pendant le glisser), valeur GI hors bornes affichée bornée sans être
|
|
réécrite (SPEC § 6).
|
|
- Commit : ticket STF-R2 (MainMenu, journal, traces STF-R1), après VAL et preuve en jeu.
|
|
|
|
Fichiers écrits : `Content/UI/MainMenu.uasset` ; ce livrable. Éditeur fermé (`UeState.ps1` : 0 processus).
|