74 lines
6.4 KiB
Markdown
74 lines
6.4 KiB
Markdown
Fiche STF-T5-SPEC — 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-T5-SPEC : supprimer les « Accessed None » des deux `SpinBox_0` (MainMenu, CharGen) (2026-10-10)
|
||
|
||
Copie `D:\Game\LifePlay-master 5.8` (branche `ue5.8`). Entrées : décision utilisateur « Un seul lot, confié à STF »
|
||
(relayée par Big Boss), `STF-T5-CART.md`, méthode et VAL de STF (`STF-SPEC.md`, `STF-VAL.md`), `lp-mcp` § 1 règle 4 et § 4.
|
||
Deux parties **indépendantes**, à accepter séparément :
|
||
- **(a) MainMenu** : exécutable dès l'accord ;
|
||
- **(b) CharGen** : **bloquée** tant que STE-TXT (modification non commitée de `CharGen.uasset`, plantage éditeur en J2) n'est
|
||
pas tranchée et commitée par STE.
|
||
|
||
## 0. Cadre
|
||
| # | Règle | Source |
|
||
|---|---|---|
|
||
| C1 | Aucune affectation de `GI` avancée (`OnInitialized`, `PreConstruct`) | `lp-mcp` § 4, ERR-057, CHG-294 |
|
||
| C2 | Bornes, style, emplacement des widgets inchangés | STF C2 |
|
||
| C3 | Effet du réglage inchangé quand le joueur l'utilise (valeur écrite, cible, facteur × 0.5 / × -1) | STF C4 |
|
||
| C4 | Gardes `IsValid` seulement là où « vide » est un état normal, en cascade de branches, chemin « non valide » = chemin que l'exécution suivait déjà | `lp-mcp` règle 4, § 4 |
|
||
| C5 | Hors périmètre : les 12 SpinBox de STF (commitées), caméra / durée (STC) | — |
|
||
|
||
## 1. Partie (a) : MainMenu, `SpinBox_0` « Depth of Field Strength »
|
||
Méthode A de STF (le retrait d'une liaison de propriété passe par le remplacement du widget).
|
||
1. **Widget** : supprimer `SpinBox_0` (`RemoveWidget`), ajouter **`SpinBoxDOF`** (SpinBox) dans `HorizontalBox_34`, indice 1,
|
||
toutes propriétés et slot recopiés depuis l'ancien (relu : Min 0 / Max 20, glisser 0-20, `Delta` 0, décimales 1 / 6,
|
||
police Roboto Bold 20), `Value` 0, variable. Supprimer la fonction de liaison devenue orpheline `Get_SpinBox_0_Value_0`
|
||
(`remove_function_graph`).
|
||
2. **Écriture** : supprimer `ComponentBoundEvent_19` ; nouvel `OnValueCommitted(SpinBoxDOF)` → `Branche(IsValid(GI))` →
|
||
`Branche(IsValidIndex(GI.ChargenCameras, 0))` → `Branche(IsValid(ChargenCameras[0].CameraComponent))` → chaîne existante
|
||
`SetFieldsInStruct_0` → `VariableSet_13` (`InValue` → `CommutativeAssociativeBinaryOperator_9.A`, facteur 0.5 inchangé).
|
||
Sorties « faux » : non branchées (rien n'était écrit sans cible ; aujourd'hui l'exécution échouait en Accessed None).
|
||
3. **Initialisation** : dans `Construct`, entre `CallFunction_92` (dernier `SetValue` de STF) et `UpdateDonors`
|
||
(`CallFunction_1278`) : `Branche(IsValid(GI))` → `Branche(IsValidIndex(GI.ChargenCameras, 0))` →
|
||
`Branche(IsValid(ChargenCameras[0].CameraComponent))` → `SpinBoxDOF.SetValue(PostProcessSettings.DepthOfFieldFarBlurSize × 2)`
|
||
→ `UpdateDonors` ; **chaque sortie « faux » rejoint `UpdateDonors`** (la suite de `Construct` reste toujours exécutée).
|
||
4. Contrôles : relecture `get_node_infos` à chaque étape ; `compile_blueprint` (avertissements = erreurs) ; `hyper_diagnose` ;
|
||
`save_assets ["/Game/UI/MainMenu"]` seul ; `uasset58.py locate` : `SpinBox_0` absent des tableaux de liaisons,
|
||
`SpinBoxDOF` au profil « sans liaison » ; `uasset58.py events`.
|
||
|
||
**Changement de comportement à accepter** : aujourd'hui la liaison réaffiche le flou **à chaque image** ; après (a), le champ
|
||
affiche la valeur lue **à l'ouverture du menu** (`Construct`) et celle que le joueur valide. Si le flou de la caméra de
|
||
création changeait ailleurs pendant que le menu reste ouvert, le champ ne le suivrait qu'à la réouverture (cas non relevé
|
||
dans le code lu ; estimé rare).
|
||
|
||
## 2. Partie (b) : CharGen, `SpinBox_0` « Counteract Vagina Deform » (bloquée)
|
||
Pas de liaison de propriété : **pas de remplacement de widget**. L'effet en direct pendant le glisser est voulu (infobulle),
|
||
`OnValueChanged` est donc **gardé**.
|
||
1. Insérer entre `ComponentBoundEvent_85.then` et `CallFunction_303` (`SetMorphTarget`) : `Branche(IsValid(GI))` →
|
||
`Branche(IsValid(GI.CharacterBeingEdited))` → `CallFunction_303` ; sorties « faux » non branchées (à la construction rien
|
||
n'est à déformer : `GI` vide est l'état normal, règle 4).
|
||
2. Contrôles : idem (a) sur `/Game/UI/CharGen` ; `save_assets ["/Game/UI/CharGen"]` seul.
|
||
3. Prérequis : STE-TXT commité (CHG-306), MD5 de `CharGen.uasset` = celui de HEAD, accord Big Boss.
|
||
|
||
## 3. Ordre, sécurité, traces
|
||
1. Instantané `Tools/Snapshot.ps1 -Lot STF-T5 -Path Content\UI\MainMenu.uasset` (puis `Content\UI\CharGen.uasset` pour (b)) ;
|
||
ticket `TAG` `STF-T5-avant` au gardien.
|
||
2. BUILD-DEMANDE à Big Boss par partie ; un PIE de contrôle avec l'utilisateur par partie (ou commun si (b) est débloquée à temps).
|
||
3. CHG réservé dans `etat/REPO/NUMEROS.md` ; entrée écrite juste avant le commit (règle Big Boss) ; un commit par partie
|
||
(STF-R3 pour (a), STF-R4 pour (b)) ou un seul si les deux sont prêtes ensemble.
|
||
|
||
## 4. Critères de VAL
|
||
| # | Contrôle | Attendu |
|
||
|---|---|---|
|
||
| W1 | `CompileAllBlueprints` éditeur fermé | 418 / 418, 0 erreur, 0 avertissement |
|
||
| W2 | (a) liaisons (`uasset58.py`, décodage des tableaux) | aucune liaison sur `SpinBoxDOF` ; `Get_SpinBox_0_Value_0` absent ; 18 entrées restantes (19 − 1) |
|
||
| W3 | (a) PIE : Settings ouvert à l'écran titre puis en jeu | champ = `ChargenCameras[0]…DepthOfFieldFarBlurSize × 2` (relevé MCP) ; 0 « Accessed None » `MainMenu_C` au journal |
|
||
| W4 | (a) PIE : valeur tapée + Entrée, glisser | `DepthOfFieldFarBlurSize` = valeur × 0.5 ; 0 → flou désactivé (infobulle) ; menu rouvert : champ = valeur |
|
||
| W5 | (b) PIE : création de personnage, glisser « Counteract Vagina Deform » | morph appliqué pendant le glisser (comme avant) ; 0 « property GI in CharGen_C » au journal |
|
||
| W6 | Fichiers | GI inchangé ; `.sav` à MD5 de l'instantané sauf sauvegarde volontaire |
|
||
| J | Preuve en jeu (archive Development) | journal : `Get_SpinBox_0_Value_0` = 0, `property GI in /Game/UI/CharGen.CharGen_C` = 0 ; les deux réglages fonctionnent |
|
||
|
||
## 5. Risques
|
||
- `ChargenCameras` vide à l'écran titre (non relevé) : la garde fait alors afficher 0 et ignore l'écriture ; même effet
|
||
visible qu'aujourd'hui (la liaison rendait 0), sans erreur.
|
||
- Suppression de `Get_SpinBox_0_Value_0` : seule référence relevée = la liaison (T5-T0 § 1) ; à revérifier par `find_nodes`
|
||
avant suppression.
|