LifePlay-Revival/Docs/Migration/04_Cahier_Des_Charges.md
edujiro5972 5d1f9a142f L7a (CX-B10) : 56 noeuds Get SkeletalMesh deprecies remplaces par LPMeshCompat::GetSkeletalMesh (R-03, ERR-012)
Semantique exacte du getter moteur (Cast<USkeletalMesh>(GetSkinnedAsset())) pour tout
USkinnedMeshComponent, contrairement a CX-B05. Diff avant/apres : 56/56 liaisons identiques,
0 autre objet modifie. Compilation 190 -> 6 avertissements, cuisson 95 -> 3.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 17:05:46 +02:00

162 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 04 — Cahier des charges : migration itérative par lots bornés
> Méthode : développement itératif. Chaque lot tient dans **une session IA** (≈ 2 à 3 h), a **un
> objectif mesurable**, des **tests d'entrée et de sortie** (catalogue : `03_Plan_Migration_Tests.md`)
> et une **procédure de retour arrière**. Un lot ne commence qu'après validation du précédent.
---
## 1. Exigences
### 1.1 V1 — « compile, fonctionne, ne plante pas, journal exploitable »
| ID | Exigence | Test d'acceptation |
|---|---|---|
| EX-01 | L'éditeur `LifePlayEditor Win64 Development` compile sans erreur | T-BUILD-01 |
| EX-02 | Tous les Blueprints se chargent et se compilent | T-LOAD-01, T-LOAD-02 |
| EX-03 | Tous les packages sont au format UE5 | T-STAT-01 |
| EX-04 | Les données `Modules` sont intactes et chargées comme en 4.27 | T-STAT-02, T-RUN-01 |
| EX-05 | Une build Development empaquetée démarre, génère des personnages distincts et visibles, joue une scène, sauvegarde et recharge | T-RUN-02 à T-RUN-04 |
| EX-06 | Aucun plantage sur une session de 30 minutes | T-RUN-05 |
| EX-07 | Journal efficace : catégorie `LogLifePlay`, résumé de démarrage, erreurs répétitives plafonnées, instrumentation de portage retirée du niveau par défaut | T-LOG-01 |
| EX-08 | Toute modification est tracée et réversible | T-STAT-05 ; essai réel de `Restore.ps1` |
| EX-09 | Environnement de développement et référence 4.27 préservés | T-STAT-03, T-STAT-04 |
Hors V1, tolérés et inscrits au registre : visuel dégradé (éclairage précalculé, brouillard),
avertissements cosmétiques du moteur, dette R-03/R-07, rendu Cascade.
### 1.2 V2 et suivantes — corrections par lots soutenables
Traitement du `Registre_Erreurs.md` **par ordre de fréquence × gravité**, un lot par famille
(≤ 30 assets ou une commandlet), avec non-régression complète des tests V1.
## 2. Règles de conduite d'un lot
1. **Entrée** : tests de sortie du lot précédent au vert ; `git status` propre.
2. `git tag lot-XX-avant`.
3. `Tools\Snapshot.ps1 -Lot XX -Path <tous les fichiers visés>` (y compris hors git, ex. `Content/Heavy`).
4. Modification. Toute commandlet de correction est d'abord lancée en `-DryRun`, rapport archivé
dans `Docs/Migration/etat/`.
5. Tests de sortie.
6. Vert → entrée `CHG` au journal, commit, `git tag lot-XX-apres`.
Rouge → `Tools\Restore.ps1 -Lot XX` (ou `git checkout lot-XX-avant -- …`), entrée `CHG` d'annulation,
défaut inscrit au registre.
7. Un lot qui dépasse la session est **coupé** : ce qui est validé est commité, le reste redevient
un lot à part.
## 3. Lots
### L0 — Filet de sécurité et documentation ✅ (2026-09-29)
- **Objectif** : pouvoir tout annuler et savoir ce qu'on migre.
- **Livrables** : documents 01 à 04, journal, registre ; dépôt git local (tag `lot-L0-base`) ;
`Tools/` (Snapshot, Restore, AssetHeaders, CheckIntegrity, LogStats) ; empreintes L0 ; sauvegarde
`D:\Game\LifePlay_Backup_5.5\L0` (53 fichiers).
- **Sortie** : aller-retour `Snapshot`/`Restore` vérifié par MD5 ; T-STAT-02 à 04 au vert.
### L1 — Base saine ✅ (2026-09-29)
- **Objectif** : repartir d'un contenu de gameplay **connu et sain** (décisions D-01, D-02) et
mesurer ce que le moteur 5.5 en dit, sans aucun correctif.
- **Périmètre réalisé** :
1. `Content/{BPs,UI,Structs,Scenes,Render,Characters}` (385 fichiers) remis **à l'identique de
4.27** (MD5 vérifiés). Tous les correctifs de contenu antérieurs sont ainsi retirés, R-03 et
R-04 compris. `Content/Heavy` (resave moteur seul, sans correctif) est conservé et sera
contrôlé en L4.
2. Correctifs isolés : catalogue et protocole de réimport dans `05_Correctifs_Isoles.md` ;
écarts de code 4.27 → 5.5 exportés dans `correctifs/P01…P06.patch`.
3. Diagnostic brut de la base : `LPCheckMeshAssignment` et `CompileAllBlueprints`
(`etat/L1_*.txt`).
- **Écarté du lot** : suppression des sections `AndroidFileServerRuntimeSettings` / `CookerSettings`
de `DefaultEngine.ini` : le plugin moteur AndroidFileServer la **recrée à chaque lancement**
(nouveau `SecurityToken`). Traitement correct en L2 : désactiver ce plugin dans le `.uproject`.
`DefaultEditor.ini` conservé (profils de prévisualisation réécrits par l'éditeur).
- **Déplacé en L2** : purge des dossiers régénérables (`Binaries`, `Intermediate` sont
nécessaires aux commandlets tant que la reconstruction n'est pas faite).
- **Sortie** : contenu de gameplay = 4.27 (MD5) ; relevé de base archivé ; T-STAT-02 à 05.
T-STAT-01 (0 package UE4) est **reporté** au sous-lot `L4-CX-B07` (resave contrôlé).
- **Retour** : `Tools\Restore.ps1 -Lot L1` ou `git checkout lot-L1-avant -- Content`.
### L2 — Compilation propre ✅ (2026-09-29)
- **Objectif** : binaires reconstruits à partir de zéro, projet conforme UE5.
- **Périmètre** : `.uproject` (`TargetPlatforms: ["Windows"]`, section `Plugins` explicite :
`ModdingExtra`, `StreetMap`, `EnhancedInput`, `McpAutomationBridge` limité à l'éditeur,
`AndroidFileServer` désactivé puis retrait de sa section dans `DefaultEngine.ini`) ;
retrait de `Build/WindowsNoEditor` et `Build/LinuxNoEditor` ; mise de côté (déplacement vers
`D:\Game\LifePlay_Backup_5.5\L2\_purge`, pas de suppression) de `Binaries`, `Intermediate`,
`Plugins/*/Binaries`, `Plugins/*/Intermediate`, `Saved/Cooked`, `Saved/StagedBuilds` ;
régénération des fichiers de projet ; compilation éditeur et jeu.
- **Sortie** : T-BUILD-01, T-BUILD-02, T-LOAD-04.
### L3 — Journalisation efficace ✅ (2026-09-29)
- **Objectif** : un journal qui sert au diagnostic.
- **Périmètre** :
- `Source/LifePlay` : catégorie `LogLifePlay` déclarée dans le module ; résumé de démarrage
(version du jeu et du moteur, modules activés, nombre de fichiers par type, échecs `LoadTxt`) ;
- `ModdingExtra` : `LogLPModdingTrace` ramené en `Verbose` (activable par
`-LogCmds="LogLPModdingTrace Verbose"`) ; échec de `LoadTxt` journalisé en `Warning` une seule
fois par fichier ;
- `DefaultEngine.ini` `[Core.Log]` : niveaux par catégorie ; plafonnement des `LogScript`
répétitifs.
- **Sortie** : T-BUILD-01, T-LOG-01 ; A/B : mêmes comptes `GetAllFilesFromFolder` qu'avant.
### L4 — Réimport contrôlé des correctifs, chargement stable ✅ (2026-09-30)
> Clôture : CX-B01 à B04, B08 et B07 réimportés ; A/B d'exécution faits par les parties utilisateur (L5d, L6a, V1rc) ;
> cuisson 0 erreur (T-LOAD-05) ; 8563/8563 paquets UE5 (T-STAT-01). Le contrôle StreetMap 4.27/5.5 est reporté en L7h
> (aucun défaut visible de carte signalé en jeu).
> État au 2026-09-29 : CX-B01, CX-B02 (essai 2), CX-B03, CX-B04 réimportés et validés statiquement ;
> T-LOAD-01 (0 erreur) et T-LOAD-02 (0 broche orpheline) au vert. Restent : A/B d'exécution de
> CX-B01 sur build Development, CX-B07 (resave UE5), contrôle StreetMap 4.27/5.5, T-LOAD-05 (cuisson).
- **Objectif** : 0 erreur de chargement et de compilation des Blueprints, cuisson à 0 erreur.
- **Périmètre** : un sous-lot par correctif, dans l'ordre de `05_Correctifs_Isoles.md` §2, selon
le protocole §3 (photographie avant/après, `-DryRun`, diff, compilation, A/B si gameplay) :
`L4-CX-B01` (broches AssetRegistry de `GI`, **avec A/B d'exécution**), `L4-CX-B02`
(`EditableTextBoxStyle`), `L4-CX-B03` (mur à échelle nulle), `L4-CX-B04` (événements orphelins),
`L4-CX-B07` (resave UE5 des dossiers de gameplay) ; contrôle StreetMap (`LPCheckStreetMap` sur
4.27 **et** 5.5, comparaison des CSV).
- **Sortie** : T-LOAD-01 à T-LOAD-05, T-STAT-01.
### L5 — Données et personnages ✅ (2026-09-30)
> ERR-027/ERR-002 clos par CX-B08 (`ParseIntoArray` UE5), validé en jeu (build L5d).
- **Objectif** : `generatePerson()` sans argument produit des personnages distincts et habillés.
- **Périmètre** :
1. `LPDumpFunction` dans les deux versions sur `GeneratePerson`, `determinePersonVars`,
`ChooseNPCBodyShape`, `DefaultDistributionIfNeeded`, `SpawnDummy`, `GenerateAndApplyStrings`,
`ReturnStatIfNeeded` ; diff archivé.
2. Instrumenter l'**écriture** des variables DSL (`AddVariable`, `SetVariable`) : piste
`Variable.uasset` / LWC.
3. Correction minimale, puis inconnues de `01_Architecture_Initiale.md` §7.
- **Sortie** : T-RUN-01 à T-RUN-03 sur build Development, A/B avec la référence 4.27.
### L6 — Session complète → **V1** ✅ (2026-09-30, étiquette `v1.0`)
> Lots L6a (TAA, ERR-032), L6e (marges des boutons, ERR-034), L6f (ERR-031 préexistant en 4.27, hors périmètre).
> Validation finale : build `LifePlay_Build_5.5_V1rc` (= L4-CX-B07), partie utilisateur d'environ 2 h, 339 personnages,
> 0 plantage, sortie normale, sauvegardes `1.sav`/`2.sav` ; « pas de souci majeur constaté ». EX-01 à EX-09 au vert
> (tableau dans `Journal_Modifications.md`, section V1).
- **Objectif** : EX-01 à EX-09 au vert.
- **Périmètre** : build Development `D:\Game\LifePlay_Build_5.5_V1` ; scénario T-RUN-04 ;
session de 30 min ; tri du registre ; étiquette `v1.0`.
- **Sortie** : tous les tests V1.
### L7+ — Lots post-V1 (un par famille)
Ordre indicatif, à réviser selon le registre :
| Lot | Famille | Périmètre |
|---|---|---|
| L7a | R-03 refait correctement | ✅ outil et réimport faits (CX-B10, 56 nœuds, 8 Blueprints) ; validation en jeu en attente |
| L7b | Erreurs d'exécution fréquentes | `ParseIntoArray`, `getBeautyValue`, `standIdle`, `ContactMenu` |
| L7c | Configuration | clés de nativisation, rendu 5.5 explicite (GI, ombres, RHI) |
| L7d | Visuel | AtmosphericFog → SkyAtmosphere ; reconstruction de l'éclairage |
| L7e | Effets | 4 systèmes Cascade → Niagara (si nécessaire) ; NvCloth → Chaos |
| L7f | Entrées | Enhanced Input (R-07), avec test manuel des 34 commandes |
| L7g | Packaging | build Shipping ; exclusion de `McpAutomationBridge` |
| L7h | Vérification StreetMap | `LPCheckStreetMap` sur 4.27 et 5.5, comparaison des CSV (ERR-018) |
| L7i | Variables DSL `Person` vides | ERR-030/ERR-003 : `GI::Dress` par rafales (0 à 284 par personnage selon les lieux), `ReturnStatIfNeeded` ; traceur par fonction |
| L7j | Écran secondaire (amélioration) | ERR-031, préexistant en 4.27 : caméra `SecondScreen` sans racine ; seulement si souhaité |
## 4. Décisions
| ID | Question | Recommandation | Statut |
|---|---|---|---|
| D-01 | Base de reconstruction de `GI` | **Décidé (utilisateur, 2026-09-29)** : les correctifs antérieurs sont douteux (ni suivis ni testés). On repart d'une base saine — le contenu de gameplay 4.27 — et on **isole** les correctifs pour les réimporter un par un avec un contrôle renforcé (`05_Correctifs_Isoles.md`) | acquis (L1) |
| D-02 | R-03/R-04 présents sur `AI`, `Room` et 7 widgets, annulés sur `Person` et `GI` | **Décidé (utilisateur)** : tout annuler maintenant — réalisé par le retour à la base 4.27 | acquis (L1) |
| D-03 | Mesure d'exécution | builds empaquetées Development uniquement (règle §2 du document 03) | acquis |
| D-04 | Suivi de version | dépôt git local, Blueprints de gameplay inclus, `Content/Heavy` exclu (sauvegardes par lot) | acquis (L0) |