11 KiB
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
- Entrée : tests de sortie du lot précédent au vert ;
git statuspropre. git tag lot-XX-avant.Tools\Snapshot.ps1 -Lot XX -Path <tous les fichiers visés>(y compris hors git, ex.Content/Heavy).- Modification. Toute commandlet de correction est d'abord lancée en
-DryRun, rapport archivé dansDocs/Migration/etat/. - Tests de sortie.
- Vert → entrée
CHGau journal, commit,git tag lot-XX-apres. Rouge →Tools\Restore.ps1 -Lot XX(ougit checkout lot-XX-avant -- …), entréeCHGd'annulation, défaut inscrit au registre. - 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 ; sauvegardeD:\Game\LifePlay_Backup_5.5\L0(53 fichiers). - Sortie : aller-retour
Snapshot/Restorevé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é :
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.- Correctifs isolés : catalogue et protocole de réimport dans
05_Correctifs_Isoles.md; écarts de code 4.27 → 5.5 exportés danscorrectifs/P01…P06.patch. - Diagnostic brut de la base :
LPCheckMeshAssignmentetCompileAllBlueprints(etat/L1_*.txt).
- Écarté du lot : suppression des sections
AndroidFileServerRuntimeSettings/CookerSettingsdeDefaultEngine.ini: le plugin moteur AndroidFileServer la recrée à chaque lancement (nouveauSecurityToken). Traitement correct en L2 : désactiver ce plugin dans le.uproject.DefaultEditor.iniconservé (profils de prévisualisation réécrits par l'éditeur). - Déplacé en L2 : purge des dossiers régénérables (
Binaries,Intermediatesont 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 L1ougit 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"], sectionPluginsexplicite :ModdingExtra,StreetMap,EnhancedInput,McpAutomationBridgelimité à l'éditeur,AndroidFileServerdésactivé puis retrait de sa section dansDefaultEngine.ini) ; retrait deBuild/WindowsNoEditoretBuild/LinuxNoEditor; mise de côté (déplacement versD:\Game\LifePlay_Backup_5.5\L2\_purge, pas de suppression) deBinaries,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égorieLogLifePlaydéclarée dans le module ; résumé de démarrage (version du jeu et du moteur, modules activés, nombre de fichiers par type, échecsLoadTxt) ;ModdingExtra:LogLPModdingTraceramené enVerbose(activable par-LogCmds="LogLPModdingTrace Verbose") ; échec deLoadTxtjournalisé enWarningune seule fois par fichier ;DefaultEngine.ini[Core.Log]: niveaux par catégorie ; plafonnement desLogScriptrépétitifs.
- Sortie : T-BUILD-01, T-LOG-01 ; A/B : mêmes comptes
GetAllFilesFromFolderqu'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 deGI, 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 (LPCheckStreetMapsur 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 (
ParseIntoArrayUE5), validé en jeu (build L5d).
- Objectif :
generatePerson()sans argument produit des personnages distincts et habillés. - Périmètre :
LPDumpFunctiondans les deux versions surGeneratePerson,determinePersonVars,ChooseNPCBodyShape,DefaultDistributionIfNeeded,SpawnDummy,GenerateAndApplyStrings,ReturnStatIfNeeded; diff archivé.- Instrumenter l'écriture des variables DSL (
AddVariable,SetVariable) : pisteVariable.uasset/ LWC. - 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, sauvegardes1.sav/2.sav; « pas de souci majeur constaté ». EX-01 à EX-09 au vert (tableau dansJournal_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 ; étiquettev1.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 | ✅ 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, 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é |
| L7l | Personnages enfoncés dans le sol en extérieur (amélioration) | ERR-036, préexistant en 4.27 ; seulement si souhaité |
| L7k | Erreurs d'exécution fréquentes (ex-L7b) | getBeautyValue, standIdle (ERR-006), ContactMenu (ERR-007) ; ParseIntoArray déjà traité (CX-B08) |
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) |