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:ParseVersiondé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 :
GGameVersionlu dansGeneralProjectSettings.ProjectVersion, l. 240 ; - l. 274 :
MinGameVersion=2026.10.2.0, l. 31 ; - l. 367 :
MODULE_GAME_VERSIONde chaque mod.
- l. 273, version du jeu :
CompareVersions(l. 77-90) compare des entiers : le changer n'est pas nécessaire.- Aucun autre analyseur de version :
LPVersionSubsystem.cpp:15etLPModInfoSubsystem.cpp:124affichent la chaîne ;- aucun Blueprint ne lit
ProjectVersion(grep -asurContent/**/*.uasset: 0 ; seulGI.uassetcontientversion_text, l'affichage).
- Outils PowerShell (jeu et addon 5.8,
grep -i "[version]|ProjectVersion|GAME_VERSION") :BuildMod.ps1:181-183litProjectVersion=(.+)comme une chaîne (Trim), sans[version]ni regex de chiffres.:279l'écrit telle quelle dansMODULE_GAME_VERSION. Rien à changer.- Aucun
[version]dansTools/*.ps1du jeu ni dansTools/*.ps1de l'addon 5.8.
.uplugindes mods :NewMod.ps1:43écritVersion = 1(entier propre au mod) etVersionName = $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, pasFChar::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.1avaut2026.10.2.1. - Un mod
2026.10.2.0passe 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 jeu2026.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).
- instantané
-
V3 VAL (lp-validator distinct, statique) :
- le diff limité à
ParseVersion(et au commentaire.hs'il est touché) ; - le tableau du § 2, cas par cas, tracé dans le code (
fichier:ligne) ; - aucun
UE_LOGni message nouveau ; FChar::IsAlphaabsent ;- LF, ASCII ;
- compilabilité estimée.
Livrable :
REL-ALPHA-V3-VAL.md. - le diff limité à
-
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.1aest lancée avec un mod d'assets (Mods\<id>) construit en 5.8 (MODULE_GAME_VERSION=2026.10.2.0, ou2026.10.2.1as'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.