LifePlay-Revival/Docs/Migration/etat/sandbox/S7/S7-CART.md

71 lines
5.1 KiB
Markdown
Raw Normal View History

# S7-T3 - Cartographie de conformite du plugin `LPSandbox` (contrat S7-SPEC)
- **Fiche :** S7-T3 | **Role :** CART | **Date :** 2026-10-06
- **Cible :** `D:\Game\LifePlay-Sandbox\Plugins\LPSandbox\Source` (modules `LPSandbox`, `LPAnimMeasure`)
- **Outil :** `rg` (ripgrep). Compte hors commentaires precise quand applicable.
## Resultats des grep exiges
| # | Motif | Portee | Resultats | Attendu |
|---|---|---|---:|---:|
| 1 | `#include <LifePlay.h>` / `"LifePlay.h"` | `Source/**` | **0** | 0 |
| 2 | `LIFEPLAY_API` | `Source/**` | **0** | 0 |
| 3 | `"LifePlay"` ou `"LifePlayEditorTools"` (module) | `*.Build.cs` | **0** | 0 |
| 4 | `^\s*#include.*LifePlay` (tout include mentionnant LifePlay) | `Source/**` | **0** | 0 |
| 5 | `LifePlay` (mot, tous contextes) | `Source/**` | 16 | commentaires + 1 nom de section ini (voir ci-dessous) |
| 6 | `SpawnActor.*Person`, `ConstructorHelpers`, `TSubclassOf<`, `TObjectPtr<APerson` | `Source/**` | **0** | 0 |
Detail #5 (16 hits) : 15 sont des **commentaires** (provenance, regles de dependance ; ex. `LPAnimMeasure.Build.cs:3`, `LPCoupleSim.h:11`). Le 16e est `LPAnimRedirect.cpp:37` :
`GConfig->GetString(TEXT("LifePlay.Anim"), TEXT("Target"), ...)` : **nom de section d'un fichier `.ini`** (donnee), pas une dependance de code.
## Cases du contrat
### C1 - Aucun lien vers `LifePlay`
- [x] Aucun `#include "LifePlay.h"` ni header du module jeu (grep #1, #4 : 0).
- [x] Aucun `LIFEPLAY_API` (grep #2 : 0).
- [x] Aucune dependance de module `LifePlay` / `LifePlayEditorTools` dans les `*.Build.cs` (grep #3 : 0 ; `LPSandbox` -> `Core`, `CoreUObject`, `Engine`, `InputCore`, `SlateCore`, `LPAnimMeasure`, `Slate`, `ImageWrapper`, `AssetRegistry`, `Json` ; `LPAnimMeasure` -> `Core`, `CoreUObject`, `Engine`, `Json`).
- [x] Aucun chemin `Source/LifePlay` hors commentaires.
- [x] Graphe acyclique `LPSandbox -> LPAnimMeasure` ; `LPAnimMeasure` sans dependance vers `LPSandbox` (verifie dans `LPAnimMeasure.Build.cs`).
### C2 - Aucun chargement de graphe `GI` / `Person` / `Room`
- [x] Aucune reference a `GI` du jeu : `\bGI\b`, `BPs/GI`, `BPs/Room`, `BP_Room` -> **0** sur le code (le motif `\bRoom\b` donne 66 hits : tous des **variables locales** `ALPPairSandboxStage* Room`, type du plugin, aucune relation avec le Blueprint `Room` du jeu).
- [x] `Person` : lecture de CDO uniquement. Deux sites, tous deux `LoadObject<UClass>(nullptr, *FLPSandboxConfig::Get().PersonBP)` puis `GetDefaultObject()` :
- `LPSandboxRoomBuilder.cpp:119-120` ;
- `LPCoupleSim.cpp:39-40`.
Aucun `SpawnActor` de `Person`, aucun `CallFunctionByName`. Le seul `ProcessEvent` du plugin (`LPSandboxRoomBuilder.cpp:308`) vise `BP_Sky_Sphere` du **moteur**.
- [x] Chemin du Blueprint : `Config/LPSandbox.ini` `[Sandbox.Assets] PersonBP` (defaut `/Game/BPs/Person.Person_C`, `LPSandboxConfig.h:15`).
- [x] Lanceur : `GameInstanceClass=/Script/Engine.GameInstance` (`Tools/debug/LifePlay_pair_sandbox.bat`) ; le journal runtime confirme `Game class is 'LPPairSandboxGameMode'` et « profil Person lu ». L'unique `LogLifePlay: Error: Coiffures : GI.HairstyleTable ...` est emis par le **module jeu** (categorie `LogLifePlay`, pas `LogLPSandbox`) : erreur connue (S3-VAL, S4-VAL, S5-VAL), non liee au plugin.
### C3 - `SoftObjectPath` / config seulement
- [x] Aucun `ConstructorHelpers`, `TSubclassOf<>` ni `TObjectPtr<>` vers un type du jeu (grep #6 : 0).
- [x] Un seul litteral `/Game/` hors config : `LPAnimRedirect.cpp:17` (`/Game/Quaternius/UAL`), **defaut interne** documente (S2), surcharge par `LPAnimRedirect::SetUALRoot` (poussee par le module jeu depuis la config) ; asset de contenu tiers, pas de code du jeu.
- [x] `LoadObject` par chaine (config) et `AssetRegistry` + `GetSoftObjectPath().ToString()` (`LPCoupleSim.cpp:227,236`) pour Quaternius.
- [x] Repli au litteral historique si fichier/cle absents (S1) ; journal `LogLPSandbox` sur asset introuvable.
### C4 - Montage sibling documente
- [x] Layout sibling + decision « pas de submodule » : `21_Sandbox_Addon.md` (section S3) et `S3-INT.md`.
- [x] `LifePlay.uproject` : `AdditionalPluginDirectories` = `../LifePlay-Sandbox/Plugins` ; `LPSandbox` `Enabled: true`, `Optional: true` (S7-T2).
- [x] Pin consigne : `S3-INT.md` (maj S7-T4 -> `f09c42e`).
- [x] README de l'addon : layout, clone sibling, junction `Content` (S3).
### C5 - Configurations
- [x] `SupportedTargetPlatforms: ["Win64"]`.
- [x] `LPSandbox` : `TargetConfigurationDenyList: ["Shipping"]`.
- [x] `LPAnimMeasure` : aucune deny-list.
- [x] Pas de `TargetAllowList: ["Editor"]`.
## Ecarts / observations
| # | Observation | Gravite |
|---|---|---|
| 1 | `LoadObject<UClass>(PersonBP)` charge le **package** `Person` (donnees serialisees) : le contrat C2 interdit l'execution, pas ce chargement ; inevitable pour lire le CDO. | Info |
| 2 | Section ini `[LifePlay.Anim]` lue par `LPAnimRedirect` : couplage de **nom** (donnee), pas de code. | Info |
| 3 | `Optional: true` ne dispense pas du clone sibling pour compiler le jeu (`LifePlay.Build.cs` -> `LPAnimMeasure`). | Limite (documentee S7-IMPL-L) |
**Verdict CART : conforme (0 ecart bloquant).**