LifePlay-Revival/Docs/Migration/etat/ST/STE/STE-P1-IMPL.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

12 KiB

Fiche STE-P1 — Niveau N3 — Modèle prévu (modèle de l'agent lp-impl) | utilisé claude-opus-5-5 — Agent lp-impl (A-IMPL-H) — Skills sk-protocol, ue-cpp-build, lp-build, lp-ue-compat, lp-mcp, lp-doc (gabarits)

STE-P1-IMPL : partie C++, bibliothèque ULPWidgetStyleLibrary (2026-10-10)

Ce livrable couvre la partie C++. La partie graphe (4 substitutions par MCP) revient à l'orchestrateur, sous BUILD-GO, après le build ; elle s'ajoutera ici en section « Graphe ». Spécification : STE-P1-SPEC.md, corps (D). Je n'ai lancé ni compilation, ni Build.ps1, ni commandlet, ni éditeur.

1. Fichiers modifiés (chemins, lignes)

Fichier État Lignes Contenu
D:\Game\LifePlay-master 5.8\Source\LifePlay\LPWidgetStyleLibrary.h nouveau, 34 lignes, ASCII, LF, MD5 bd13433c36bf222b2feab3d6c23c0976 :1-14 En-tête en commentaire : le défaut (EditableTextBox.cpp:397, SEditableTextBox.cpp:113-132, plantage FontCacheCompositeFont.cpp:93), le correctif, le renvoi à la SPEC, et le statut « contournement du moteur, à garder ».
:18-21 Includes : CoreMinimal.h, Kismet/BlueprintFunctionLibrary.h, Styling/SlateTypes.h (type complet de FEditableTextBoxStyle, requis par le code généré), .generated.h.
:23 Prédéclaration class UEditableTextBox;.
:25-34 UCLASS() class LIFEPLAY_API ULPWidgetStyleLibrary : public UBlueprintFunctionLibrary. Elle contient `UFUNCTION(BlueprintCallable, Category = "LifePlay
D:\Game\LifePlay-master 5.8\Source\LifePlay\LPWidgetStyleLibrary.cpp nouveau, 30 lignes, ASCII, LF, MD5 af691516002c8f97e341cb0b3b29d002 :3-7 Includes : l'en-tête propre d'abord, puis Components/EditableTextBox.h, Misc/EngineVersionComparison.h, et LifePlay.h pour LogLifePlay (LifePlay.h:9).
:11-16 Cible None : trace Verbose, puis retour. Même convention que LPMeshCompat.cpp:11-16.
:20 TextBox->WidgetStyle = Style; : copie dans le membre. Le membre est public et non déprécié (EditableTextBox.h:50-52).
:22-27 Sous #if !UE_VERSION_OLDER_THAN(5, 8, 0) : TextBox->SetWidgetStyle(TextBox->GetWidgetStyle());. C'est une auto-affectation sûre (SPEC § 6.2), suivie de SetStyle(&WidgetStyle).
:28-29 Commentaire de la branche 5.5 : le membre seul, comme le nœud Set de 5.5.

Raisons : voir SPEC § 2.1. En bref :

  • (D) reproduit le setter 5.8 sans son défaut : le pointeur gardé par Slate vise le membre, jamais le paramètre ;
  • (A) est écarté, car SynchronizeProperties réapplique le texte avec une relecture forcée, les liaisons et l'infobulle.

Style : modèle de LPMeshCompat.h/.cpp (tête de commentaire, UCLASS(), LIFEPLAY_API, trace Verbose). Commentaires en français sans accents, comme les fichiers voisins (file : « ASCII text »). LifePlay.Build.cs ne change pas : Slate, SlateCore et UMG y sont déjà en privé (:38).

2. Écarts à la SPEC (obligatoire)

  • Code : aucun écart. Signature, corps, garde, includes et emplacement sont ceux de la SPEC § 2.3.
  • Correction de la SPEC pendant l'IMPL (STE-P1-SPEC.md, R3) :
    • la première rédaction disait « 0 occurrence d'UEditableTextBox dans Source ». Le Grep d'appui était tronqué à 20 lignes (head_limit) ;
    • recompté sans limite : 5 lignes SetWidgetStyle, toutes sur USlider, UCheckBox ou USpinBox, dont les setters 5.8 sont sûrs (Slider.cpp:215, CheckBox.cpp:244, SpinBox.cpp:154). Aucun UEditableTextBox ;
    • R3 est corrigé dans la SPEC. La conclusion ne change pas.
  • Écart à la fiche, proposé et non appliqué (SPEC Q2 et R8) : prendre aussi un instantané de CharGen sous STE-P1 (.\Tools\Snapshot.ps1 -Lot STE-P1 -Path Content\UI\CharGen.uasset) avant l'écriture MCP.
    • Aujourd'hui, seul l'instantané STE-TXT existe, et c'est l'état HEAD, d'avant STE-TXT.
    • Sans ce nouvel instantané, défaire STE-P1 sur CharGen défait aussi STE-TXT.
    • La décision revient à l'orchestrateur.

3. Instantané (lot, manifeste)

  • Commande, lancée avant toute écriture dans Source : pwsh -NoProfile -Command '& "D:\Game\LifePlay-master 5.8\Tools\Snapshot.ps1" -Lot STE-P1 -Path "Source\LifePlay\LPWidgetStyleLibrary.h","Source\LifePlay\LPWidgetStyleLibrary.cpp"; exit $LASTEXITCODE'. Code 0.
  • Manifeste D:\Game\LifePlay_Backup_5.5\STE-P1\manifest.csv :
    • "Source\LifePlay\LPWidgetStyleLibrary.h","False","0","","2026-10-10T14:03:58" ;
    • "Source\LifePlay\LPWidgetStyleLibrary.cpp","False","0","","2026-10-10T14:03:58".
  • Un premier essai de la commande a échoué dans le shell (« unexpected EOF », guillemets mal fermés dans bash). Le shell a refusé la commande avant de la lancer, donc rien n'a été écrit. Le second essai est celui ci-dessus.
  • Pour l'orchestrateur : Snapshot.ps1 ajoute au manifeste (Tools\Snapshot.ps1:31, :62). L'instantané de StatMenu sous le même lot STE-P1 reste possible.

4. Ce qui n'a pas été fait

  • Compilation (BUILD, lp-builder, sous BUILD-GO). Le code est proposé, non compilé : en 5.8 jusqu'au BUILD, en 5.5 sans essai prévu (SPEC R4).
  • Partie graphe : 4 substitutions dans CharGen et StatMenu (orchestrateur, MCP), procédure en SPEC § 2.4. Aucun asset n'a été touché.
  • Pas de dump LPDumpFunction : le relevé U5 vaut pour l'état courant (SPEC § 2.4).
  • Pas d'entrée ERR-088, de CHG ni de ticket : ces livrables relèvent de la fiche (rubrique 7) et de lp-writer ou de l'orchestrateur.
  • Content\Modules (mods) n'a pas été cherché (SPEC R3, Constats).

5. Points à confirmer en VAL

  • VAL-1 : .\Tools\Build.ps1 -Lot STE-P1 → code 0, ligne Using Visual Studio 14.50.35739 toolchain (…\MSVC\14.50.35717).
  • VAL-2 : unités LPWidgetStyleLibrary.cpp et LPWidgetStyleLibrary.gen.cpp (ou leur unité unity) compilées ; UnrealEditor-LifePlay.dll liée.
  • VAL-3 : 0 error ; 0 warning C4996, en particulier pas de C4996 sur WidgetStyle ni sur Font_DEPRECATED (SPEC § 6.1-6.2) ; « autres lignes » = 20 (HyperAIStudio).
  • VAL-4 : aucune LNK2019 ni LNK2001 sur Z_Construct_UClass_UEditableTextBox_NoRegister, UEditableTextBox::SetWidgetStyle ou GetWidgetStyle (SPEC R9, MinimalAPI).
  • VAL-5 : git status --short -- Source → exactement ?? Source/LifePlay/LPWidgetStyleLibrary.h et .cpp ; file → ASCII, LF ; MD5 identiques au § 1 (aucune retouche après l'IMPL).
  • VAL-6 : en éditeur, find_node_types trouve SetEditableTextBoxStyle (catégorie LifePlay|UI), avec les broches TextBox et Style et une broche self cachée.
  • VAL-7 : graphe, par l'orchestrateur : 4 nœuds Set remplacés, liens conformes à SPEC § 2.4, 0 nœud Set WidgetStyle restant dans les EventGraph de CharGen et StatMenu.
  • VAL-8 : compile_blueprint CharGen et StatMenu → 0 avertissement ; hyper_blueprint_debug_inspect → 0 diagnostic (voir R5 : ErrorType = 1 sur les anciens nœuds de StatMenu).
  • VAL-9 : CompileAllBlueprints → 0 erreur, 0 avertissement.
  • VAL-10 : PIE avec l'utilisateur, CharGen : 10 refus de nom de suite sans plantage.
  • VAL-11 : flash rouge visible, puis retour au blanc après le Delay.
  • VAL-12 : texte noir lisible avant, pendant et après le flash, avec et sans focus (reprend STE-J2).
  • VAL-13 : texte tapé pendant le Delay conservé, curseur non déplacé (non-régression de SPEC § 6.3).
  • VAL-14 : même essai dans StatMenu si un refus y est accessible ; sinon reporté avec motif.
  • VAL-15 : aucun nouveau rapport FCachedTypefaceData dans Saved\Crashes après les essais.
  • VAL-16 : branche 5.5 (UE_VERSION_OLDER_THAN) non compilée dans ce lot → reporté (SPEC R4, Q1).

6. Fichiers à commiter

Dépôt du jeu D:\Game\LifePlay-master 5.8, branche ue5.8, par le gardien, dans le ticket commun STE-TXT + STE-P1 :

  • A Source/LifePlay/LPWidgetStyleLibrary.h
  • A Source/LifePlay/LPWidgetStyleLibrary.cpp
  • A Docs/Migration/etat/ST/STE/STE-P1-SPEC.md
  • A Docs/Migration/etat/ST/STE/STE-P1-IMPL.md

Non écrits par moi, à ajouter par l'orchestrateur après la partie graphe : M Content/UI/CharGen.uasset (déjà modifié par STE-TXT) et M Content/UI/StatMenu.uasset.

Tours : 20 / 60 (SPEC et IMPL C++ ensemble)

Constats

  • Le défaut ne touche que UEditableTextBox parmi les setters relus.
    • UCheckBox::SetWidgetStyle (CheckBox.cpp:238-245) et USlider::SetWidgetStyle (Slider.cpp:210-217) passent &WidgetStyle ; USpinBox::SetWidgetStyle invalide le style (SpinBox.cpp:149-156).
    • Seul UEditableTextBox passe &InStyle (EditableTextBox.cpp:397).
    • Les appels C++ existants du jeu (LPSettingsSubsystem.cpp:371, :390, :415, LPColorGradeSubsystem.cpp:201, LPVideoQualitySubsystem.cpp:395) sont donc sûrs.
    • Ce constat renforce la piste P3 (signalement à Epic).
  • Les autres classes UMG qui ont un setter natif ne sont pas couvertes ici. Je n'ai pas relu UMultiLineEditableTextBox ni UEditableText. Aucune n'est posée par un nœud Set dans le relevé (STE-TXT-DIAG.md:121-123).
  • Les mods (Content\Modules) n'ont pas été cherchés. Un mod qui pose WidgetStyle sur une Text Box par un nœud Set garderait le risque de plantage. Grep sur des .uasset binaires n'est pas fiable : il faudrait un relevé LPDumpFunction des mods.

Partie graphe (orchestrateur LOT STE, MCP, 2026-10-10)

BUILD-GO de Big Boss (un seul passage : compilation puis MCP). Compilation : STE-P1-BUILD.md (code 0, DLL reliée 14:08:07, 0 avertissement compilateur). Éditeur headless de 14:09:18 à 14:12:45 (heures relevées), journal Saved\Logs\portage\STE-P1_editeur_20261010-140918.log. Instantané pris avant, sur décision de l'orchestrateur (Q2 de la SPEC) : D:\Game\LifePlay_Backup_5.5\STE-P1\manifest.csv, CharGen 9669B103… (état STE-TXT) et StatMenu 4FA5D803… (HEAD). Défaire STE-P1 ne défait donc pas STE-TXT.

type_id du nouveau nœud : LifePlay|UI|SetWidgetStyle(TextBox,LP) (find_node_types filtre LifePlay ; les filtres SetEditableTextBoxStyle et Text Box, LP ne rendaient rien). Broches : execute 0, TextBox 1, Style 2, then 0.

Asset Ancien nœud supprimé Nouveau nœud execute ← then → TextBox ← Style ←
CharGen VariableSet_1147 CallFunction_51 (-2400, 13024) IfThenElse_366.else CallFunction_5310 (Delay) VariableGet_2400 MakeStruct_62
CharGen VariableSet_1146 CallFunction_52 (-1808, 13024) CallFunction_5310.then — VariableGet_2400 MakeStruct_64
StatMenu VariableSet_1147 CallFunction_6 (496, 2592) IfThenElse_366.else CallFunction_5310 VariableGet_204 MakeStruct_62
StatMenu VariableSet_1146 CallFunction_10 (1088, 2592) CallFunction_5310.then — VariableGet_204 MakeStruct_64

Les liens des anciens nœuds ont été relus avant écriture : conformes à SPEC § 2.4. Les 4 nouveaux nœuds ont été relus après écriture : 4 liens pour la copie de _1147, 3 pour celle de _1146. find_nodes « Set Widget Style » sur l'EventGraph de CharGen ne rend que les 2 nouveaux nœuds. compile_blueprint warnings_as_errors : OK sur CharGen et sur StatMenu ; journal : « Compiling Blueprint » sans ligne LogBlueprint d'erreur ni d'avertissement. save_assets sur /Game/UI/CharGen et /Game/UI/StatMenu seuls. Les appels MCP ont été faits un par un. hyper_blueprint_debug_inspect est absent du serveur (écart déjà noté dans STE-GI).

Sortie : CharGen 9669B103… → A0DE37AC… (5 046 138 o) ; StatMenu 4FA5D803… → 9030531C… (561 213 o) ; GI 606EB437… et MainMenu 7292C6BE… inchangés ; git status --short -- Content Config Source = M CharGen, M StatMenu, ?? les 2 fichiers Source ; UeState à 0.

Fichiers à commiter (ticket commun STE-TXT + STE-P1) : M Content/UI/CharGen.uasset, M Content/UI/StatMenu.uasset, A Source/LifePlay/LPWidgetStyleLibrary.h, A Source/LifePlay/LPWidgetStyleLibrary.cpp, les livrables STE-P1.