LifePlay-Revival/Docs/Migration/etat/ST/STF/STF-T5-SPEC.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

74 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.