LifePlay-Revival/Docs/Migration/04_Cahier_Des_Charges.md
2026-09-30 20:24:09 +02:00

11 KiB
Raw Blame History

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 ✅ 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)