LifePlay-Revival/Docs/Migration/04_Cahier_Des_Charges.md
edujiro5972 162877b648 A faire : lot SAV1 (dossier de sauvegardes propre a Revival), ERR-042
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 13:21:38 +02:00

193 lines
15 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) ✅ (2026-10-02)
> Tous les lots ouverts sont clos : appliqués et validés en jeu, ou évalués non nécessaires (L7e, L7f).
> V1.1 publiée le 2026-10-01 (tag `v1.1`, branche `ue5.5-v1.1`).
| Lot | Famille | Périmètre |
|---|---|---|
| L7a | R-03 refait correctement | ✅ CX-B10 (56 nœuds, 8 Blueprints), validé en jeu le 2026-09-30 |
| L7b | R-04 : derniers nœuds dépréciés | ✅ CX-B11 (6 nœuds `GetRandomPointInNavigableRadius`, 3 Blueprints) : compilation et cuisson 0 avertissement ; validé en jeu (CHG-039) |
| L7c | Configuration | clés de nativisation retirées ; rendu explicite (GI 0, reflets SSR, ombres virtuelles 0, RHI D3D12), valeurs identiques à celles jouées (CHG-049) ; **validé en jeu le 2026-10-02** (jour et nuit identiques au build précédent L7i_B12) |
| L7d | Visuel | `AtmosphericFog` remplacé par `SkyAtmosphere` (26 propriétés et position vérifiées, CHG-050) ; aucun éclairage précalculé à reconstruire ; **validé en jeu le 2026-10-02** : ciel identique au build précédent L7i_B12 (soleil et grand disque blanc présents dans les deux) |
| L7e | Effets | **non nécessaire** (CHG-051) : 4 systèmes Cascade toujours pris en charge par UE 5.5, conversion Niagara reportée (elle changerait les effets par rapport à 4.27) ; aucun vêtement physique (NvCloth) |
| L7f | Entrées | **non nécessaire** (CHG-051) : Enhanced Input est déjà le système actif et exécute les 34 actions héritées ; migration complète des événements reportée |
| L7g | Packaging | build Shipping `LifePlay_Build_5.5_Shipping` construite (CHG-046), même structure que la version de l'auteur ; `McpAutomationBridge` déjà limité à l'éditeur ; ✅ validée en jeu le 2026-10-01 |
| L7h | Vérification StreetMap | ✅ 280 villes et 280 maillages identiques 4.27/5.5 (ERR-018 clos, CHG-044) |
| L7i | Variables DSL `Person` vides | ✅ ERR-030, ERR-037, ERR-003 préexistants en 4.27 ; ERR-005 corrigé par CX-B12 (385 nœuds `Contains`/`Split`/`FindSubstring`), validé en jeu le 2026-10-01 |
| L7j | Écran secondaire (amélioration) | caméra `SecondScreen` dotée d'une racine et placée sur `CameraScene` − 10 000 000 Y (CHG-052), puis cadrage du visage par le sous-système `LPSecondScreen` (CHG-054) ; **validé en jeu le 2026-10-01** |
| L7l | Personnages enfoncés dans le sol en extérieur (amélioration) | diagnostic (CHG-053) : sol de neige `fnt_new208` étiré ×100 en hauteur dans `forest___vin01.lpworld` (donnée de module) ; mesure (CHG-056) : cause réelle = plafond `WallT` à 18 cm du sol en extérieur ; plafond masqué en extérieur par `LPOutdoorRoom` (CHG-057) ; **validé en jeu le 2026-10-01** |
| L7k | Erreurs d'exécution fréquentes (ex-L7b) | ✅ ERR-006 et ERR-007 revenus au niveau 4.27 avec CX-B12 ; signatures restantes au niveau 4.27 (CHG-045) |
## 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) |
## 5. Bilan de la migration (2026-10-02)
| Indicateur | Valeur |
|---|---|
| Versions publiées | `v1.0` (2026-09-30), `v1.1` (2026-10-01) |
| Modifications tracées | `CHG-001` à `CHG-057` |
| Signatures d'erreurs enregistrées | 37 (`ERR-001` à `ERR-037`) |
| Correctifs de contenu réimportés | CX-B01 à B04, B07 à B12 (CX-B05 rejeté, CX-B06 remplacé par B11) |
| Paquets au format UE5 | 8 563 / 8 563 |
| Compilation Blueprints, cuisson | 0 erreur, 0 avertissement |
| Données `Modules` | 2 051 fichiers, identiques à 4.27 |
| Villes StreetMap | 280 / 280 identiques à 4.27 |
| Builds validées en jeu | V1rc (V1), L7a, L7b, L7i_B12, Shipping (V1.1), L7cdj (L7c, L7d, L7j, L7l) |
Restent ouverts au registre, sans effet constaté en jeu : ERR-004, ERR-008, ERR-009, ERR-013,
ERR-015, ERR-016, ERR-019, ERR-024. Défauts d'origine 4.27 conservés : ERR-030 (habillage), ERR-037
(Quick dress), nuit claire (le soleil ne suit pas l'heure), grand disque blanc à l'horizon.
Pistes pour la suite, une par lot selon `10_Protocole_Operations.md` : conversion Cascade → Niagara,
migration complète des entrées vers Enhanced Input, cycle jour/nuit, erreurs ouvertes par fréquence.
## 6. À faire (décidé, non commencé)
| Lot | Objet | Origine | Points à trancher avant de commencer |
|---|---|---|---|
| **SAV1** | **Dossier de sauvegardes propre à LifePlay Revival.** Aujourd'hui, Revival et le LifePlay d'origine (UE 4.27) partagent `%LOCALAPPDATA%\LifePlay\Saved` : mêmes emplacements de partie (`<n>.sav`), même `GameSettings.sav` (réglages, mods activés, dernière sauvegarde) ; seuls les réglages graphiques sont séparés (`Config\Windows` / `Config\WindowsNoEditor`). Rien n'est effacé, mais une sauvegarde peut écraser un emplacement du jeu d'origine et Revival réécrit le choix des mods (ERR-042). | question d'un joueur sur Discord, 2026-10-03 (V1.5) ; décision utilisateur : à faire | reprise des anciennes sauvegardes au premier lancement (copie, jamais déplacement) ou départ à vide ; nom du dossier ; compatibilité des sauvegardes 4.27 dans Revival (non testée) ; essai en jeu : nouvelle partie, Continue, Load |
| ERR-040 | Femme chauve par défaut à la création du personnage | test UI15, 2026-10-03 | confirmer si le défaut existe en 4.27 / V1.3 avant d'en chercher la cause |