LifePlay-Revival/Docs/Migration/etat/REL/ALPHA/REL-ALPHA-V-SPEC.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

5.5 KiB

Fiche REL-ALPHA-V1 — Niveau N3 — Modèle prévu opus | utilisé claude-opus-5-5 (session REL) — Agent session REL — Skills lp-lot, lp-paths

REL-ALPHA-V-SPEC : version de jeu terminée par une lettre (2026.10.2.1a) dans LPModGuard (2026-10-14)

Décision de l'utilisateur (option B, transmise par Big Boss le 2026-10-14, mot pour mot : « Lettre acceptée ») : ProjectVersion=2026.10.2.1a, et LPModGuard accepte une version qui se termine par une lettre. Le format MODULE_GAME_VERSION du contrat des mods change ici par sa décision.

Règle (Big Boss) :

  • Le dernier composant peut finir par une ou plusieurs lettres ASCII a-z, sans casse, sans espace.
  • Ce suffixe est ignoré à la comparaison.
  • Toute autre forme reste illisible, avec le comportement actuel.
  • Aucune trace nouvelle en Shipping.

Le code ne s'y oppose pas (ci-dessous).

1. Constat (lecture du code, établi)

  • Source/LifePlay/LPModGuard.cpp:52-74 : ParseVersion découpe la chaîne sur . et refuse toute composante vide, de plus de 9 caractères, ou qui contient un caractère autre qu'un chiffre.
  • Il n'a que trois appels :
    • l. 273, version du jeu : GGameVersion lu dans GeneralProjectSettings.ProjectVersion, l. 240 ;
    • l. 274 : MinGameVersion = 2026.10.2.0, l. 31 ;
    • l. 367 : MODULE_GAME_VERSION de chaque mod.
  • CompareVersions (l. 77-90) compare des entiers : le changer n'est pas nécessaire.
  • Aucun autre analyseur de version :
    • LPVersionSubsystem.cpp:15 et LPModInfoSubsystem.cpp:124 affichent la chaîne ;
    • aucun Blueprint ne lit ProjectVersion (grep -a sur Content/**/*.uasset : 0 ; seul GI.uasset contient version_text, l'affichage).
  • Outils PowerShell (jeu et addon 5.8, grep -i "[version]|ProjectVersion|GAME_VERSION") :
    • BuildMod.ps1:181-183 lit ProjectVersion=(.+) comme une chaîne (Trim), sans [version] ni regex de chiffres. :279 l'écrit telle quelle dans MODULE_GAME_VERSION. Rien à changer.
    • Aucun [version] dans Tools/*.ps1 du jeu ni dans Tools/*.ps1 de l'addon 5.8.
  • .uplugin des mods : NewMod.ps1:43 écrit Version = 1 (entier propre au mod) et VersionName = $ModVersion, la version du mod (MODULE_VERSION, BuildMod.ps1:202, 284). Aucun champ numérique ne dépend de la version du jeu.

2. Changement (un seul fichier, une fonction)

Fichier : Source/LifePlay/LPModGuard.cpp, fonction ParseVersion (l. 52-74), plus le commentaire de LPModGuard.h:19 si son texte devient faux. L'IMPL vérifie : la règle « suffixe ignoré » s'y ajoute en une demi-ligne.

  • Pour la dernière composante seulement, retirer les lettres ASCII de fin ('a'..'z', 'A'..'Z', tests explicites, pas FChar::IsAlpha, qui accepte des lettres non ASCII), puis appliquer les contrôles existants, inchangés, à ce qui reste : non vide, 9 caractères au plus, chiffres seulement.
  • Commentaire de la fonction : mentionner le lot REL-ALPHA, la décision de l'utilisateur et l'exemple "2026.10.2.1a" -> {2026, 10, 2, 1}.
  • Rien d'autre : ni CompareVersions, ni journal nouveau, ni changement des messages.

Comportement attendu (tableau de la VAL) :

Entrée Résultat Composantes
2026.10.2.0 lisible 2026, 10, 2, 0
2026.10.2.1 lisible 2026, 10, 2, 1
2026.10.2.1a lisible 2026, 10, 2, 1
2026.10.2.1A lisible 2026, 10, 2, 1
2026.10.2.1rc lisible 2026, 10, 2, 1
2026.10.2.1-a illisible (- reste) —
2026.10.2.a illisible (composante vide après retrait) —
2026.10a.2.1 illisible (lettre hors de la dernière composante) —
2026.10.2.1 a illisible (l'espace reste) —
chaîne vide illisible (le moteur 5.8 rend 1 composante vide, refusée par IsEmpty) —

Conséquences :

  • Le jeu 2026.10.2.1a vaut 2026.10.2.1.
  • Un mod 2026.10.2.0 passe le contrôle min (= MinGameVersion) et le contrôle max (≤ jeu).
  • Un mod construit pour l'alpha (2026.10.2.1a, BuildMod) passe sur l'alpha, et serait refusé par le contrôle max d'un jeu 2026.10.2.0, ce qui est attendu.

3. Fiches

  • V2 IMPL (lp-impl) :

    • instantané Tools\Snapshot.ps1 -Lot REL-ALPHA -Path Source\LifePlay\LPModGuard.cpp, Source\LifePlay\LPModGuard.h, fait par la session REL avant l'envoi ;
    • Edit de ParseVersion ;
    • sans compiler ;
    • LF et ASCII gardés ;
    • livrable REL-ALPHA-V2-IMPL.md (diff, MD5 avant et après).
  • V3 VAL (lp-validator distinct, statique) :

    • le diff limité à ParseVersion (et au commentaire .h s'il est touché) ;
    • le tableau du § 2, cas par cas, tracé dans le code (fichier:ligne) ;
    • aucun UE_LOG ni message nouveau ;
    • FChar::IsAlpha absent ;
    • LF, ASCII ;
    • compilabilité estimée.

    Livrable : REL-ALPHA-V3-VAL.md.

  • Puis T1 (ProjectVersion=2026.10.2.1a) et T1v, puis la demande d'UE-GO pour T2 : le Shipping de livraison compile ce C++. Pas de build Development d'essai.

4. Essai (dans l'essai Shipping de l'utilisateur, T4)

  • Ligne d'essai : l'alpha 2026.10.2.1a est lancée avec un mod d'assets (Mods\<id>) construit en 5.8 (MODULE_GAME_VERSION = 2026.10.2.0, ou 2026.10.2.1a s'il est reconstruit). Attendus :
    • le mod est chargé : il apparaît dans le gestionnaire de mods, et ses assets ou ses scènes sont visibles en jeu ;
    • aucune fenêtre de refus des mods ;
    • les cases « Mods: … (restart) » de Settings > Misc restent cochées.
  • Sans journal en Shipping, la preuve est visuelle (fenêtre absente, mod présent) et se fait avec l'utilisateur.