135 lines
8 KiB
Markdown
135 lines
8 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 — Assainissement du contenu et des caches
|
|||
|
|
- **Objectif** : 0 package UE4 ; `GI` dans un état 5.5 connu et documenté ; projet débarrassé des artefacts.
|
|||
|
|
- **Périmètre** :
|
|||
|
|
1. Reconstituer `GI` « R-03 annulé + correctif AssetRegistry » : restaurer
|
|||
|
|
`Saved/Backups/avant-R03-R06/BPs/GI.uasset`, puis `LPFixAssetRegistryPins -DryRun`, puis réel
|
|||
|
|
(décision D-01, §4).
|
|||
|
|
2. Rendre R-03/R-04 cohérents sur les autres assets (décision D-02, §4).
|
|||
|
|
3. Purger les dossiers régénérables (`02_Audit_Logiciel.md` §8), après sauvegarde.
|
|||
|
|
4. `DefaultEngine.ini` : retirer `AndroidFileServerRuntimeSettings` et `CookerSettings` ;
|
|||
|
|
`DefaultEditor.ini` : vider les `SharedProfiles` générés.
|
|||
|
|
- **Sortie** : T-STAT-01 à 05, T-LOAD-02 (0 broche orpheline), T-LOAD-01.
|
|||
|
|
- **Retour** : `Restore.ps1 -Lot L1` ; les caches purgés se régénèrent seuls.
|
|||
|
|
|
|||
|
|
### L2 — Compilation propre
|
|||
|
|
- **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) ;
|
|||
|
|
retrait de `Build/WindowsNoEditor` et `Build/LinuxNoEditor` ; 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
|
|||
|
|
- **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 — Chargement stable
|
|||
|
|
- **Objectif** : 0 erreur de chargement et de compilation des Blueprints, cuisson à 0 erreur.
|
|||
|
|
- **Périmètre** : relevé `CompileAllBlueprints` + `LPCheckMeshAssignment` ; une famille de
|
|||
|
|
correction par sous-lot (`LPFixAssetRegistryPins`, `LPFixOrphanBoundEvents`,
|
|||
|
|
`LPFixEditableTextBoxFont`, `LPFixZeroScaleActors`) ; contrôle StreetMap (`LPCheckStreetMap`
|
|||
|
|
sur 4.27 **et** 5.5, comparaison des CSV).
|
|||
|
|
- **Sortie** : T-LOAD-01 à T-LOAD-05.
|
|||
|
|
|
|||
|
|
### L5 — Données et personnages
|
|||
|
|
- **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**
|
|||
|
|
- **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 | `GetSkinnedAsset()` pour les proxies ; 56 nœuds, 10 Blueprints |
|
|||
|
|
| 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` |
|
|||
|
|
|
|||
|
|
## 4. Décisions
|
|||
|
|
|
|||
|
|
| ID | Question | Recommandation | Statut |
|
|||
|
|
|---|---|---|---|
|
|||
|
|
| D-01 | Base de reconstruction de `GI` | `avant-R03-R06` + `LPFixAssetRegistryPins` : reproduit l'état « R-03 annulé + correctif » décrit par le rapport du 28/09. Alternative : repartir du `GI` 4.27 actuel (le moteur le convertira) + même commandlet | à valider (L1) |
|
|||
|
|
| D-02 | R-03/R-04 présents sur `AI`, `Room` et 7 widgets, annulés sur `Person` et `GI` | **conserver en l'état pour la V1** (les widgets ne portent pas de proxies ; `CompileAllBlueprints` passait) ; refaire R-03 proprement en L7a | à valider (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) |
|