LifePlay-Revival/Docs/Migration/03_Plan_Migration_Tests.md
2026-10-02 00:25:11 +02:00

147 lines
8.4 KiB
Markdown

# 03 — Plan de migration fondé sur les tests
> Règle : **aucun lot n'est validé sans ses tests de sortie**. Un test de sortie en échec entraîne
> le retour arrière du lot (§5), puis une analyse. Les résultats sont consignés dans
> `Journal_Modifications.md`, les défauts dans `Registre_Erreurs.md`.
---
## 1. Environnement de test
| Élément | Chemin |
|---|---|
| Moteur 5.5.4 | `D:\Game\Launcher\Engine\UE_5.5` |
| Moteur 4.27 (référence) | `D:\Game\Launcher\Engine\UE_4.27` |
| Projet cible | `D:\Game\LifePlay-master 5.5\LifePlay.uproject` |
| Projet de référence (lecture seule) | `D:\Game\LifePlay-master 4.27\LifePlay.uproject` |
| **Build de référence 4.27 Development (journalisée)** | `D:\Game\LifePlay_Build_427_Dev\WindowsNoEditor\LifePlay` |
| Sauvegardes de lots | `D:\Game\LifePlay_Backup_5.5\<lot>\` |
Raccourcis utilisés ci-dessous :
```powershell
$UE = 'D:\Game\Launcher\Engine\UE_5.5\Engine'
$Cmd = "$UE\Binaries\Win64\UnrealEditor-Cmd.exe"
$Proj = 'D:\Game\LifePlay-master 5.5\LifePlay.uproject'
```
## 2. Règles de mesure (acquises, à ne pas remettre en cause)
1. **Ne jamais mesurer l'exécution avec `UnrealEditor.exe -game`** : ce mode casse l'affichage des
personnages en 4.27 comme en 5.5 (rapport du 2026-09-28, §5.1).
2. **Comparer des builds empaquetées de même configuration** (Development ; Shipping ne journalise pas).
3. **Vérifier que les deux journaux atteignent le même point** : `index SPAWN > 0` des deux côtés.
4. **Normaliser** les compteurs par le nombre de personnages générés.
5. **Recouper** tout écart catégorique par un second comptage formulé autrement.
## 3. Catalogue des tests
### 3.1 Niveau statique (secondes, sans moteur)
| ID | Vérifie | Commande | Critère |
|---|---|---|---|
| T-STAT-01 | format des packages | `Tools\AssetHeaders.ps1` | 0 package UE4, 0 illisible |
| T-STAT-02 | données de jeu intactes | `Tools\CheckIntegrity.ps1 -Modules` | 2 051 fichiers, MD5 identiques à 4.27 |
| T-STAT-03 | environnement de développement intact | `Tools\CheckIntegrity.ps1 -Env` | `.claude/`, `.mcp.json`, `Saved/Backups` = empreintes L0 |
| T-STAT-04 | référence 4.27 non modifiée | `Tools\CheckIntegrity.ps1 -Ref427` | `Source`, `Config`, `.uproject`, `Content/BPs` 4.27 = empreintes L0 |
| T-STAT-05 | traçabilité | `git status` | arbre propre après commit du lot ; tag `lot-XX-apres` posé |
### 3.2 Niveau compilation
| ID | Vérifie | Commande | Critère |
|---|---|---|---|
| T-BUILD-01 | éditeur | `& "$UE\Build\BatchFiles\Build.bat" LifePlayEditor Win64 Development -Project="$Proj" -WaitMutex` | code 0, 0 erreur, 0 nouvel avertissement |
| T-BUILD-02 | jeu | `Build.bat LifePlay Win64 Development -Project="$Proj"` | code 0 |
### 3.3 Niveau chargement (commandlets, éditeur sans interface)
| ID | Vérifie | Commande | Critère |
|---|---|---|---|
| T-LOAD-01 | tous les Blueprints | `& $Cmd $Proj -run=CompileAllBlueprints -unattended -nopause` | 0 erreur, 0 Blueprint en échec de chargement |
| T-LOAD-02 | broches orphelines | `& $Cmd $Proj -run=LPCheckMeshAssignment` | 0 broche `bOrphanedPin` |
| T-LOAD-03 | villes | `& $Cmd $Proj -run=LPCheckStreetMap -CSV=Docs/Migration/etat/streetmap.csv` | 280/280 ; totaux = `Docs/Architecture/streetmap_5.5.csv` |
| T-LOAD-04 | démarrage éditeur propre | `Tools\LogStats.ps1 <journal>` | 0 `LogClass: Error`, 0 `Failed to load` sur `/Game/` |
| T-LOAD-05 | cuisson | `& $Cmd $Proj -run=Cook -TargetPlatform=Windows -unattended` | `0 error(s)` |
### 3.4 Niveau exécution (build empaquetée Development)
Construction : `RunUAT BuildCookRun -project="$Proj" -platform=Win64 -clientconfig=Development
-build -cook -iterate -stage -archive -archivedirectory=D:\Game\LifePlay_Build_5.5_<lot> -unattended -utf8output -nop4`
(sans `-pak` : fichiers nus, comme la version de l'auteur ; voir `09_Commandes_Utiles.md` §2).
| ID | Vérifie | Mesure (`Tools\LogStats.ps1`) | Critère |
|---|---|---|---|
| T-PKG-01 | contenu cuit complet | nombre de `.uasset` sous `Windows/LifePlay/Content` de la build | **≥ 8 555** (référence 4.27 et build 5.5 du 28/09 : 8 561 ; 6 matériaux Substance de `fBlah` exclus). Un chiffre plus bas signifie des assets chargés par chemin non cuits |
| T-RUN-01 | démarrage et données | lignes `GetAllFilesFromFolder` / `LoadTxt` par module | mêmes comptes que la référence 4.27 (ex. `vin_Base` : 752 `.lpscene`) |
| T-RUN-02 | génération de personnages | `index SPAWN` ; `Accessed None` sur maillage par personnage | ≥ 10 personnages ; ≤ 1,0 par personnage (4.27 : 0,3) |
| T-RUN-03 | personnages distincts | prénoms des `Saves/_session/Characters/*.lpcharacter` | ≥ 8 prénoms différents sur 10 |
| T-RUN-04 | scène, sauvegarde, rechargement | parcours manuel scénarisé (§4) | aucun blocage ; partie rechargée identique |
| T-RUN-05 | stabilité | session de 30 min | aucun dossier nouveau dans `Saved/Crashes` |
| T-LOG-01 | journal exploitable | lignes `LogLifePlay` du démarrage | résumé présent ; démarrage lisible en < 200 lignes hors moteur |
### 3.5 Non-régression A/B
Chaque test T-RUN est exécuté sur la build 5.5 **et** sur la référence 4.27 avec le même scénario.
`Tools\LogStats.ps1 -Compare <journal 4.27> <journal 5.5>` produit le tableau normalisé.
Depuis L3, la trace d'entrée/sortie de `ModdingExtra` (catégorie `LogModdingExtra`, même format de
ligne que l'ancienne `LogLPModdingTrace` de la build 4.27) est en `Verbose`. Pour un A/B, lancer la
build 5.5 avec :
```
LifePlay.exe -LogCmds="LogModdingExtra Verbose"
```
Journal de session 5.5 : chercher `===== LifePlay : demarrage =====` (résumé des données) et
`===== LifePlay : bilan de session` (signatures d'erreurs dédoublonnées, écrit à la fermeture ou par
la commande console `LifePlay.LogSummary`).
## 4. Scénario d'exécution de référence (T-RUN-04)
1. Lancer la build, nouvelle partie avec le personnage par défaut.
2. Attendre la fin du chargement (menu principal puis ville `CentralLondon`).
3. Déclencher 3 actions de lieu provoquant des scènes avec PNJ générés (`generatePerson()`).
4. Vérifier à l'écran : PNJ visibles, habillés, prénoms variés.
5. Sauvegarder (emplacement `TestV1`), quitter, relancer, charger `TestV1`.
6. Vérifier : même jour et heure, contacts présents.
7. Copier le journal : `Saved/Logs/LifePlay.log` → `Docs/Migration/etat/<lot>_run_<date>.log`.
## 5. Procédure de retour arrière
| Portée | Commande |
|---|---|
| Fichiers suivis par git (code, config, docs, Blueprints de `BPs`, `UI`, `Structs`, `Scenes`, `Render`) | `git checkout lot-XX-avant -- <chemins>` ou `git revert <commit>` |
| Tout fichier sauvegardé par le lot (y compris `Content/Heavy`) | `Tools\Restore.ps1 -Lot XX` (`-WhatIf` pour simuler) |
| Un seul fichier | `Tools\Restore.ps1 -Lot XX -Only <chemin>` |
Après retour arrière : relancer T-STAT-01 à T-STAT-04 et T-BUILD-01. Consigner l'entrée
`CHG` d'annulation dans le journal.
## 6. Correspondance risques ↔ tests
| Risque (audit 02) | Test qui le couvre |
|---|---|
| `GI` au format UE4, broches AssetRegistry perdues | T-STAT-01, T-LOAD-02 |
| Nœuds dépréciés, liaisons perdues par une commandlet | T-LOAD-01, T-LOAD-02 |
| Données StreetMap perdues au resave | T-LOAD-03 |
| `Modules` non livré en fichiers nus | T-RUN-01 |
| Conteneur `Variable` (LWC), `generatePerson()` | T-RUN-02, T-RUN-03 |
| Plantages | T-RUN-05 |
| Journal illisible | T-LOG-01 |
| Environnement de développement abîmé | T-STAT-03 |
| Référence 4.27 abîmée | T-STAT-04 |
## 7. Outils
| Script | Rôle | État |
|---|---|---|
| `Tools/Snapshot.ps1` | sauvegarde avant modification, manifeste MD5 | ✅ testé (L0) |
| `Tools/Restore.ps1` | restauration vérifiée, réversible elle-même | ✅ testé (L0) |
| `Tools/AssetHeaders.ps1` | format UE4/UE5 des packages | ✅ |
| `Tools/CheckIntegrity.ps1` | T-STAT-02 à T-STAT-04 | ✅ (L0) |
| `Tools/LogStats.ps1` | compteurs de journal, comparaison A/B | ✅ (L0) |
| `Tools/RunCommandlet.ps1` | lancement d'une commandlet, journal archivé par lot | ✅ |
| `Tools/ReimportCorrectif.ps1` | réimport scripté d'un correctif (photo, simulation comptée, application, diff, compilation) | ✅ (L4) |
| `Tools/DiffRemplacementNoeuds.py` | diff indépendant d'un rebranchement de nœuds (profils `L7a`, `L7b`, `CX-B12`) | ✅ (L7a) |
| Commandlets `LifePlayEditorTools` | 24 commandlets d'analyse et de correction (catalogue : `08_Guide_Developpeur.md` §5) | ✅ |
| Options de diagnostic du jeu | `-LPDumpVars`, `-LPTrace*`, `-LPDump*` (`09_Commandes_Utiles.md` §4) | ✅ |