9 KiB
Fiche STF-T2 — Niveau N2 — Modèle prévu orchestrateur STF (Opus 5.5) | utilisé claude-opus-5-5 — Agent orchestrateur — Skills lp-lot, lp-mcp, sk-change-safety, sk-protocol
STF-SPEC : protéger les 12 autres SpinBox de MainMenu (liaison retirée, init dans Construct, écriture sur commit) (2026-10-10)
Copie D:\Game\LifePlay-master 5.8 (branche ue5.8). Entrées : décision utilisateur du 2026-10-10 (« 3 dans un lot
séparé », STC-TACHES.md), conception approuvée « 4 approuvé » (STC-reponse-fable.md § 4.3-4.4), STC-SPEC.md § 3.2
(modèle : durée des scènes), STF-T0-CART.md. Exécutable seulement après la clôture de STC (gel levé, MainMenu
modifié et commité par STC) : les numéros de nœuds et la chaîne Construct sont alors relus (STF-T1).
0. Cadre
| # | Règle | Source |
|---|---|---|
| C1 | Même correction mécanique que la durée des scènes, pour les 12 couples de STF-T0-CART.md § 1 |
tâche, conception § 4.4 |
| C2 | Bornes Min / Max inchangées (aucun Max < Min sur les 12) |
STC-T0 |
| C3 | SpinBox_0 (flou de champ CharGen), caméra, durée : hors périmètre |
tâche |
| C4 | Comportement inchangé à la validation d'une valeur ; seul l'instant d'écriture change (fin de geste au lieu de chaque pas) | conception § 4.3 |
1. Pour chacune des 12 SpinBox (ordre du tableau T0 § 1)
- Retirer la liaison
Value ← GI.<variable>:-
méthode A (modèle STC, par défaut) : remplacer le widget par une SpinBox neuve, au même créneau du même parent, toutes propriétés recopiées depuis
UMGToolSet.GetWidgets/ObjectTools.get_properties(style, police, couleur,Delta,MinFractionalDigits/MaxFractionalDigits,MinValue/MaxValue,MinSliderValue/MaxSliderValue,bOverride_*,Value= défaut GI, slot : taille, alignement, remplissage, marge), cochée « variable » ; noms :Ancien Neuf ChildGrowthMult SpinBoxChildGrowth ShadeDepth SpinBoxShadeDepth SpinBoxBGA SpinBoxVolBGA SpinBoxMarkerSize SpinBoxMapMarkerSize SpinBoxMoan SpinBoxVolMoan SpinBoxPhysicsMult SpinBoxPhysics SpinBoxSceneFrequency SpinBoxSceneFreq SpinBoxSexDescription SpinBoxSexLineDuration SpinBoxSex SpinBoxVolSex SpinBoxSquirtMult SpinBoxSquirt SpinBoxUI SpinBoxVolUI SpinBoxPregnancyTerm SpinBoxPregnancyMult -
méthode B (seulement si STF-T1 démontre une écriture du tableau
BindingsduUWidgetBlueprintpar un outil Epic) : retirer les 12 entrées des deux tableaux (éditeur et exécution), noms et événements gardés. Sinon, méthode A.
-
- Écriture GI sur commit :
- A : supprimer l'événement
OnValueChangedde l'ancien widget ; créerOnValueCommitted(<neuf>)→IsValid(GI)→Set GI.<variable> = Value, plus la suite propre au couple (§ 2). Aucun gestionnaireOnValueChanged. - B : créer
OnValueCommitted(<widget>), y déplacer la chaîne existante (exécution etInValue), supprimer l'événementOnValueChanged. - Nœuds
GIpartagés (VariableGet_29, VariableGet_1) : ne couper que les liens du couple traité.
- A : supprimer l'événement
- Initialisation : dans
Construct, après la chaîne STC (SetValuecaméra / durée), avantUpdateDonors:<widget>.SetValue(GI.<variable>), 12 appels chaînés (même ordre que le tableau).SetValueUMG émetOnValueChangedseulement, sans gestionnaire après l'étape 2 (SSpinBox.cpp:722-727, 1053-1058).
2. Cas particuliers
- SpinBoxMarkerSize :
OnValueCommittedexiste déjà (événement 15,RetriggerableDelay 2 s→SpawnMapMarkers). B : y insérerIsValid(GI)→Set GI.MarkerSize = Valueen tête, puis la chaîne existante. A : le nouvelOnValueCommittedporteIsValid→Set→RetriggerableDelay 2 s→GI.SpawnMapMarkers(false)(chaîne recopiée), l'ancien événement 15 supprimé avec l'ancien widget. - ShadeDepth : la chaîne
Cast MIDduPostProcessVolume→SetScalarParameterValue('ShadeDepth')suit leSetsurOnValueCommitted(aperçu pendant le glisser perdu, application en fin de geste ; C4). - SquirtMult : ajout de
IsValid(GI)devant leSet(absent aujourd'hui) ; état vide impossible aprèsConstruct, garde d'uniformité, écrite au CHG (règle 4lp-mcp).
3. Contrôles de l'asset (après chaque SpinBox, puis à la fin)
get_node_infossur chaque nœud créé ;compile_blueprint+hyper_blueprint_debug_inspect: 0 diagnostic.- Fin :
find_nodes« OnValueChanged » sur MainMenu : seuls restent ceux hors périmètre (aucun pour les 12 ni pour caméra / durée) ; 13OnValueCommittedattendus (12 +SpinBox_0) en plus de ceux de STC. - Relecture binaire des tableaux
Bindings(méthode du diagnostic § 1.1) : 0 entrée versGI.<variable>pour les 12 ; seule liaison SpinBox restante :SpinBox_0(Function). save_assets ["/Game/UI/MainMenu"], puisCompileAllBlueprintséditeur fermé (référence 418 / 418, 0 / 0).
4. Ordre, sécurité, traces
- Entrée : STC clos (CHG et commit STC faits, gel levé annoncé) ;
git status --short -- Content/UI/MainMenu.uassetvide. - Gel de la copie 5.8 annoncé à toutes les sessions actives (
ListAgents) ; ticketTAGSTF-avantau gardien. .\Tools\Snapshot.ps1 -Lot STF -Path Content\UI\MainMenu.uasset, Saved\SaveGames\GameSettings.sav, Saved\SaveGames\Default.sav.- STF-T1 (relevés § 4 de T0, choix A / B) ; écart au T0 → arrêt et mise à jour de cette SPEC.
- IMPL par MCP, un couple à la fois (§ 1-2), relecture et compilation à chaque couple ; puis
Construct(§ 1.3). - VAL (lp-validator, agent distinct) § 5 ; preuve en jeu par l'utilisateur (archive Development).
- DOC : une entrée CHG par SpinBox (12) + une pour
Constructsi le gardien la sépare ; ticketCOMMIT(un commit de lot, sans push) ; fin de gel annoncée.
5. Critères de VAL et de preuve
| # | Contrôle | Attendu |
|---|---|---|
| V1 | Compilation MainMenu, CompileAllBlueprints |
0 erreur, 0 avertissement ; 418 / 418 |
| V2 | Liaisons (Bindings, relecture binaire) |
0 liaison Property vers GI sur les 12 |
| V3 | Gestionnaires | aucune écriture GI depuis un OnValueChanged des 12 ; chacune part d'un OnValueCommitted |
| V4 | PIE M0-M6 (STC-reponse-fable.md § 3.2) |
0 écart sur les 14 variables de GI |
| V5 | PIE : une valeur tapée (+ Entrée) dans chacun des 12 champs, dans les bornes et ≠ défaut | GI.<variable> = valeur tapée ; menu fermé puis rouvert : champ = valeur, GI inchangé |
| V6 | PIE : glisser sur un champ (ex. SceneFreq) | GI mis à jour en fin de geste, affichage fluide pendant le glisser |
| V7 | MarkerSize | GI.MarkerSize = valeur, SpawnMapMarkers toujours appelé 2 s après |
| V8 | Fichiers | GameSettings.sav / Default.sav à MD5 de l'instantané sauf sauvegarde de partie volontaire |
| J1 | Preuve en jeu (utilisateur, archive Development) | les 12 réglages se règlent et survivent à fermeture / réouverture du menu ; SceneFrequency et SexLineDuration (seuls des 12 présents dans GameSettings.sav, STB-SET-INV.md § 2-3) survivent aussi à une sauvegarde puis un relancement ; les 10 autres reviennent au défaut de GI à chaque lancement (non persistés, estimé STB-SET § 3 : comportement d'origine, hors périmètre) |
6. Risques
- Méthode A : 12 widgets à recopier fidèlement (risque d'oubli de style ou de créneau) → relecture propriété par propriété contre le relevé STF-T1, capture du panneau avant / après.
- Liaisons orphelines après remplacement : traitées comme en STC (STC-SPEC § 7).
- Valeur de GI hors bornes (sauvegarde ancienne, mod) :
SetValuel'affiche bornée sans écrire GI ; elle n'est réécrite que si le joueur valide le champ (comportement voulu, à noter au CHG).
7. Écarts constatés à l'exécution (ajout du 2026-10-10, après acceptation)
| # | Écart | Décision / source | Effet sur les critères |
|---|---|---|---|
| E1 | § 1.2 (A) : chaînes IsValid → Set existantes gardées et rebranchées sur le nouvel OnValueCommitted au lieu d'être recréées |
orchestrateur, STF-T3-IMPL § 1 | aucun (graphe d'exécution identique ; VAL statique) |
| E2 | § 2 SquirtMult : garde IsValid (fonction) + Branche au lieu de la macro IsValid (type ambigu dans find_node_types) |
orchestrateur, STF-T3-IMPL § 2 | aucun |
| E3 | Arrondi entier (T3b) : SpinBoxSceneFreq, SpinBoxMapMarkerSize, SpinBoxSexLineDuration : Delta 1, bAlwaysUsesDeltaSnap, 0 décimale ; SceneFreq Min / MinSlider 0.2 → 1 (dérogation à C2 et C4 pour ces 3 champs) |
utilisateur pendant le PIE (« il faudrait arrondir à l'entier » ; « Dans STF, après le PIE » ; « Minimum 1 ») ; accord Big Boss | V5 : valeurs tapées non entières arrondies (33.6 → 34), 0 → 1 sur SceneFreq ; STF-T4-PIE § 4 |
| E4 | § 5 J1 : LoadSettings recharge 9 des 12 réglages depuis GameSettings.sav, pas 2 |
constat STF-T4-PIE § 2 (comportement d'origine) | J1 : 9 réglages persistés seulement après SaveSettings, 3 jamais persistés |