LifePlay-Revival/Docs/Migration/etat/sandbox/S1/S1-VAL.md
edujiro5972 04b053554f Sandbox addon : brancher le jeu sur LifePlay-Sandbox (plugin LPSandbox).
Charge le plugin via AdditionalPluginDirectories, conserve ShowCouple et les commandlets anim côté jeu, et documente les lots S0–S8 (CHG-212 à CHG-220).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 21:10:53 +02:00

5.4 KiB

S1-VAL — Validation du lot S1 (Config/LPSandbox.ini)

  • Date : 2026-10-06
  • Fiche : S1-T4 | Rôle : A-VAL
  • Modèle prévu : claude-sonnet-5-5-high (M2) | Modèle utilisé : claude-sonnet-5-5-high (M2)
  • Références : S1-SPEC.md, S1-IMPL.md, S1-CART.md

Verdict : PASS (preuve statique complète ; runtime UE non exécuté, voir « Limite »)

# Contrôle Résultat
1 Config/LPSandbox.ini existe, 19 clés du SPEC, 6 sections PASS
2 FLPSandboxConfig compile-ready (Get/Load, defaults = SPEC) PASS (revue statique, UBT non lancé)
3 LPPairSandbox.cpp sans TEXT("/Game/...) pour les clés SPEC (0 oubli S1-CART) PASS
4 Lancement court du bat Pair BLOCKED-RUNTIME (preuve statique PASS)
5 Test override WorldFile invalide Test manuel requis (procédure ci-dessous)

1. Config/LPSandbox.ini

Fichier présent. Sections : Sandbox.Mode, Sandbox.Assets, Sandbox.Roots, Sandbox.Content, Sandbox.Sky, Sandbox.Output. Les 19 clés du § 3 du SPEC sont toutes présentes avec une valeur identique au SPEC et au default de LPSandboxConfig.h (comparaison ligne à ligne) : Mode ; PersonBP, BridgetMesh, MichaelMesh, QuaterniusMannequinMesh, DazIdleFemale, DazIdleMale, FurnitureWallMaterial ; FurnitureRoot, DazAnimRoot, QuaterniusRoot, QuaterniusUALRoot ; ModuleRoot, WorldFile, ChatAction, QuaterniusUALDisk ; SkyCubemap, SkyIntensity ; MeasureOutputRoot.

2. FLPSandboxConfig (LPSandboxConfig.h/.cpp)

  • static const FLPSandboxConfig& Get() : singleton par static locale initialisée par lambda (appelle Load() privé, accès légal depuis un membre).
  • void Load() : FPaths::FileExists puis FConfigFile::Read(ProjectConfigDir()/LPSandbox.ini), lecture directe non hiérarchique ; fichier/clé absent ou valeur vide => default conservé ; SkyIntensity ignoré si non numérique.
  • 19 champs, 19 appels SandboxCfgReadString (dont SkyIntensity via texte) : aucune clé oubliée, noms de section/clé identiques à l'ini.
  • Defaults des initialiseurs de membres = littéraux du SPEC (Mode="Pair", SkyIntensity=0.6f, etc.).
  • Includes présents (CoreMinimal.h, Misc/ConfigCacheIni.h, Misc/Paths.h) ; LIFEPLAY_API sur le struct ; #include "LPSandboxConfig.h" dans LPPairSandbox.cpp (l. 8) et LPAnimRedirect.cpp (l. 2). Aucune erreur de syntaxe/API relevée à la lecture.

3. Grep littéraux (preuve d'absence d'oubli)

Recherche Fichier Résultat
/Game/ LPPairSandbox.cpp 0 littéral de chemin (1 seule occurrence de texte : message de log chat.lpaction illisible, l. 1050, non-chemin)
/Game/, Quaternius, Measurement LPAnimRedirect.cpp uniquement FLPSandboxConfig::Get().QuaterniusUALRoot (l. 23)
vin_Base, work___vin01, Daz/Anims, Quaternius/UAL, "Measurement", TEXT("Modules LPPairSandbox.cpp 0
FLPSandboxConfig::Get().<champ> LPPairSandbox.cpp / LPAnimRedirect.cpp 27 / 1 consommations

Câblage vérifié pour les clés « discrètes » : SkyIntensity (l. 1001), MeasureOutputRoot (l. 1688, 1863, 1874, 1886, 1932), Mode (l. 3926-3931, branche else après sandbox_mode.txt, Pair = comportement inchangé). Reste hors contrat (voulu) : *.lpaction (extension), noms Bridget/Michael/préfixes B_/M_, /Engine/.... LPInteractionSandbox.cpp (legacy) hors périmètre S1 (noté dans S1-CART). Concorde avec S1-CART.md : 0 OUBLI.

4. Runtime — BLOCKED-RUNTIME

  • UnrealEditor.exe trouvé : D:\Game\Launcher\Engine\UE_5.5\Engine\Binaries\Win64\UnrealEditor.exe (chemin déjà utilisé par Tools/debug/LifePlay_pair_sandbox.bat) ; aucun UnrealEditor en cours d'exécution.
  • Lancement non tenté : Binaries/Win64/UnrealEditor-LifePlay.dll date du 2026-10-06 16:09 alors que LPSandboxConfig.cpp date de 18:18. Les sources S1 n'ont donc jamais été compilées (S1-IMPL : « UBT non exécuté ») ; un lancement chargerait l'ancien binaire (ou la boîte de dialogue de recompilation), sans rien prouver sur S1. La compilation (UBT/BuildMod) n'est pas dans le périmètre de cette fiche.
  • Conséquence : compilation, chargement de l'ini et comportement runtime non démontrés. Prochaine étape : build LifePlayEditor puis lancer Tools/debug/LifePlay_pair_sandbox.bat (attendu : chambre work___vin01 chargée, aucun Error LogLifePlay nouveau).

5. Test override (manuel requis)

Procédure, après compilation :

  1. Sauvegarder Config/LPSandbox.ini. Dans [Sandbox.Content], mettre WorldFile=Modules/vin_Base/World/INEXISTANT.lpworld.
  2. Lancer Tools/debug/LifePlay_pair_sandbox.bat.
  3. Attendu : log LogLifePlay: Error: Sandbox collision : chambre illisible (…/Content/Modules/vin_Base/World/INEXISTANT.lpworld) (LPPairSandbox.cpp l. 838) ; pièce sans meubles ; pas de repli silencieux sur le fichier par défaut (critère SPEC § 4.4).
  4. Restaurer l'ini (WorldFile=Modules/vin_Base/World/work___vin01.lpworld), relancer : chambre normale, 54 meubles.
  5. Variante sans ini : renommer temporairement le fichier ; comportement identique à la valeur par défaut (critère SPEC § 4.1).

Limite

PASS fondé uniquement sur la preuve statique (ini + code branché + 0 oubli). Compilation et runtime non vérifiés ; tests 4 et 5 à exécuter manuellement après build.