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

6.4 KiB
Raw Blame History

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.