193 lines
15 KiB
Markdown
193 lines
15 KiB
Markdown
# 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 |
|