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
SynchronizePropertiesré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'
UEditableTextBoxdansSource». Le Grep d'appui était tronqué à 20 lignes (head_limit) ; - recompté sans limite : 5 lignes
SetWidgetStyle, toutes surUSlider,UCheckBoxouUSpinBox, dont les setters 5.8 sont sûrs (Slider.cpp:215,CheckBox.cpp:244,SpinBox.cpp:154). AucunUEditableTextBox; - R3 est corrigé dans la SPEC. La conclusion ne change pas.
- la première rédaction disait « 0 occurrence d'
- É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.ps1ajoute 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, ligneUsing Visual Studio 14.50.35739 toolchain (…\MSVC\14.50.35717). - VAL-2 : unités
LPWidgetStyleLibrary.cppetLPWidgetStyleLibrary.gen.cpp(ou leur unité unity) compilées ;UnrealEditor-LifePlay.dllliée. - VAL-3 : 0
error; 0warning C4996, en particulier pas de C4996 surWidgetStyleni surFont_DEPRECATED(SPEC § 6.1-6.2) ; « autres lignes » = 20 (HyperAIStudio). - VAL-4 : aucune
LNK2019niLNK2001surZ_Construct_UClass_UEditableTextBox_NoRegister,UEditableTextBox::SetWidgetStyleouGetWidgetStyle(SPEC R9,MinimalAPI). - VAL-5 :
git status --short -- Source→ exactement?? Source/LifePlay/LPWidgetStyleLibrary.het.cpp;file→ ASCII, LF ; MD5 identiques au § 1 (aucune retouche après l'IMPL). - VAL-6 : en éditeur,
find_node_typestrouveSetEditableTextBoxStyle(catégorieLifePlay|UI), avec les brochesTextBoxetStyleet une brocheselfcachée. - VAL-7 : graphe, par l'orchestrateur : 4 nœuds Set remplacés, liens conformes à SPEC § 2.4, 0 nœud Set
WidgetStylerestant dans les EventGraph de CharGen et StatMenu. - VAL-8 :
compile_blueprintCharGen et StatMenu → 0 avertissement ;hyper_blueprint_debug_inspect→ 0 diagnostic (voir R5 :ErrorType = 1sur 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
FCachedTypefaceDatadansSaved\Crashesaprè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.hA Source/LifePlay/LPWidgetStyleLibrary.cppA Docs/Migration/etat/ST/STE/STE-P1-SPEC.mdA 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
UEditableTextBoxparmi les setters relus.UCheckBox::SetWidgetStyle(CheckBox.cpp:238-245) etUSlider::SetWidgetStyle(Slider.cpp:210-217) passent&WidgetStyle;USpinBox::SetWidgetStyleinvalide le style (SpinBox.cpp:149-156).- Seul
UEditableTextBoxpasse&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
UMultiLineEditableTextBoxniUEditableText. 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 poseWidgetStylesur une Text Box par un nœud Set garderait le risque de plantage. Grep sur des.uassetbinaires n'est pas fiable : il faudrait un relevéLPDumpFunctiondes 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.