LifePlay-Revival/Docs/Migration/etat/REL/REL2/REL2-VAL.md
2026-10-21 09:36:04 +02:00

190 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Fiche REL2-VAL — Niveau N1 — Modèle prévu sonnet | utilisé claude-sonnet-5-5 — Agent lp-validator (A-VAL) — Skills sk-protocol, sk-recount, debug-verification, lp-validate
# REL2-VAL : VAL commune de la build 1 (alpha 2026.10.2.2a), statique, sans jeton UE (2026-10-21)
Ordonnateur : Big Boss (`local_104ff22d`). Rien n'a été modifié hors ce livrable ; aucun jeton UE, aucun jeu lancé, aucune compilation, aucune commande git qui écrit.
Copie : `D:\Game\LifePlay-master 5.8`, branche `ue5.8` (`git rev-parse --abbrev-ref HEAD`), HEAD `05364875f7783502376fa8f2b4e0669cd4ecc93f` (0536487). Tag de base `v2026.10.2.1a` = `2f5d51b74d1c99ede72126a7ced12034eea768a9` (2026-10-14 18:25).
État de l'arbre au contrôle (`git status --short`) : `M Config/DefaultGame.ini`, `M LifePlay.uproject`, `M` de trois fichiers `Docs/Migration/etat/BOSS|REPO`, plus des fichiers non suivis (`Docs/LP-PROJET.ini`, `etat\AG\ORGA2`, `etat\REL\ERR145|GIREV|REL2`). Aucun fichier de `Source`, `Plugins`, `Content` modifié ou non suivi ; `git diff --stat HEAD -- Config Source Plugins Content` : `Config/DefaultGame.ini | 2 +-`, 1 fichier.
## 1. Fiches amont relues
- `etat\REL\REL2\REL2-T1-IMPL.md` (seule IMPL de REL2 ; lue en entier, 13 lignes).
- `etat\REL\ALPHA\REL-ALPHA.md` (T1v, T2.1 lus l. 1 à 80) ; `Source\LifePlay\LPModGuard.cpp` l. 40 à 119.
- Bilans d'essai `etat\BOSS\COMMUN-14, 16, 17, 18, 19, 20, 21, 23-BILAN.md` (comptes de verdicts et cas liés aux changements) ; `COMMUN-15-TESTS.md` et `COMMUN-22\COMMUN-22-BUILD.md` (pas de bilan : voir C4) ; `BOSS-JOURNAL.md` l. 1049 à 1062 (QPERS) ; `BOSS-ETAT.md` (extraits).
- IMPL/BUILD/VAL citées par MD5 (colonne « Fiche qui cite le MD5 actuel » du contrôle 2).
- `Docs\Journal_Modifications.md` l. 1134 à 1150 (CHG-370 à CHG-386).
- Non relus ligne à ligne : les journaux de jeu (`COMMUN-*\*.log`), lus seulement via les bilans.
## 2. Points à confirmer des IMPL amont
| Id | Point (REL2-T1-IMPL, l. 10) | Résultat |
|---|---|---|
| P1 | Diff d'une ligne | PASS (contrôle 1.1) |
| P2 | MD5 de l'instantané = MD5 de HEAD | PASS (contrôle 1.2) |
| P3 | Format accepté par `ParseVersion` | PASS-STATIC (contrôle 1.4, lecture du code ; non exécuté) |
## 3. Critères rejoués
Légende : PASS, CONSTAT (écart ou réserve, non bloquant), ÉCHEC (bloquant). Aucun ÉCHEC.
### Contrôle 1 — T1v
| N° | Contrôle | Commande | Résultat brut | Verdict |
|---|---|---|---|---|
| 1.1 | `git diff -- Config/DefaultGame.ini` = 1 ligne | `git diff -- Config/DefaultGame.ini` | un seul hunk `@@ -1,7 +1,7 @@` : `-ProjectVersion=2026.10.2.1a` / `+ProjectVersion=2026.10.2.2a` (ligne 4) ; `git diff --stat HEAD -- Config` : `1 file changed, 1 insertion(+), 1 deletion(-)` | PASS |
| 1.2 | MD5 instantané = MD5 HEAD | `md5sum "D:/Game/LifePlay_Backup_5.5/REL2/Config/DefaultGame.ini"` ; `git show HEAD:Config/DefaultGame.ini \| md5sum` ; `manifest.csv` | `4f89f2d1b63dd7d6bcae0fa1575f6727` des deux côtés ; manifeste : `"Config\DefaultGame.ini","True","3324","4F89F2D1B63DD7D6BCAE0FA1575F6727","2026-10-21T08:29:55"`, seul fichier du manifeste | PASS |
| 1.3 | Aucun autre fichier de Config modifié | `git diff --name-only HEAD -- Config` | `Config/DefaultGame.ini` (1 ligne de sortie) | PASS |
| 1.4 | Format accepté par `ParseVersion` | Read `LPModGuard.cpp:55-92` ; `git diff --stat v2026.10.2.1a HEAD -- Source/LifePlay/LPModGuard.cpp Source/LifePlay/LPModGuard.h` | découpe sur `.` → `2026`,`10`,`2`,`2a` ; lettres ASCII de fin de la dernière composante retirées (l. 61-75) → `2` ; composantes non vides, ≤ 9 chiffres, chiffres seuls (l. 76-89) → `{2026,10,2,2}`, `true`. `LPModGuard.cpp` et `.h` : 0 ligne de différence depuis le tag (MD5 `54aac4d9…` / `c09543be…` = valeurs de `REL-ALPHA.md` l. 46). Estimé par lecture, non exécuté | PASS-STATIC |
| 1.5 | Fins de ligne conservées | `git ls-files --eol Config/DefaultGame.ini` | `i/lf w/lf attr/-text` | PASS |
| 1.6 | MD5 de la nouvelle valeur | `md5sum Config/DefaultGame.ini` | `8d7f4bdf45e4f36620ccfe043b380c66` = valeur citée par `REL2-T1-IMPL.md` l. 9 | PASS |
### Contrôle 2 — Inventaire `v2026.10.2.1a..HEAD` (Source, Plugins, Config, Content)
Commandes : `git diff --name-status v2026.10.2.1a..HEAD -- Source Plugins Config Content` → **34 fichiers** ; recompte `… | cut -c1 | sort | uniq -c` : `11 A`, `23 M`, 0 `D` (11 + 23 = 34) ; `git diff --stat …` : `34 files changed, 3634 insertions(+), 141 deletions(-)`. Hors liste : `Content/Heavy` (ignoré, `git ls-files Content/Heavy | wc -l` = 0). Les 586 fichiers du diff global du tag comprennent `Docs/`, `Tools/` (retirés de l'index par CHG-357), `.gitignore`, `README.md` : hors périmètre.
Les 34 fichiers sont propres par rapport à HEAD (`git diff --quiet HEAD -- <fichier>` : 34 « CLEAN »). Aucun fichier de `Source`, `Plugins/ModdingExtra`, `Content/BPs`, `Content/UI`, `Config` n'est plus récent que le 2026-10-20 21:40 (`find … -newermt`) sauf `Config/DefaultScalability.ini` (22:49) et `Config/DefaultGame.ini` (2026-10-21 08:29) ; l'exe de la dernière build d'essai (COM23) date de 21:37.
« Fiche » = fiche qui cite le MD5 actuel (grep des 8 premiers caractères dans `etat\**\*.md`). Recoupé avec la date du dernier commit du fichier (`git log -1`) : aucun fichier n'a de MD5 plus récent que celui cité. PASS = fiche IMPL/BUILD/VAL/BILAN et CHG trouvés et MD5 du disque cité.
| Fichier | CHG (journal l. 1134-1150) | Fiche qui cite le MD5 actuel | MD5 disque (complet) | Verdict |
|---|---|---|---|---|
| Config/DefaultInput.ini | 373 | KEY2-BUILD-01/02, KEY2-IMPL-01, KEY2-VAL-01 | 1a8e89a1ac4acc462280e654ffe4ffd8 | PASS |
| Config/DefaultScalability.ini | 386 | **seulement** `BOSS-JOURNAL.md` l. 1055 (`3dca7e5d -> b3ecb28c`) et `QPERS-PRE.md` ; **aucune IMPL, BUILD ni VAL** | b3ecb28c561866d90bb96476387e298c | CONSTAT C1 |
| Content/BPs/PC.uasset | 375, 376 | CAM2-IMPL-06, COMMUN-19-BILAN, STM1-B5-FIN | 6603c77ff670d51927863cbd9d56203c | PASS |
| Content/BPs/Room.uasset | 375, 376 | CAM2-IMPL-02 à 06, CAM2-VAL-02/03, COMMUN-17-BUILD | 2b1cfa2eb1ea51f632eef80d4271b9e4 | PASS |
| Content/UI/CharGen.uasset | 371 | CG2-IMPL-01, CG2-VAL-01, COMMUN-14-BUILD | 8d781ec0b94318b5bfbf22ee3b33556a | PASS |
| Content/UI/CharGenSlider.uasset | 371 | idem | cbe53469fc73e7829a00710126095c7e | PASS |
| Content/UI/VisualMorph.uasset | 371 | idem | 84dd9b17b977a007f9a13940406e970a | PASS |
| Content/UI/MainMenu.uasset | 380 | DISC1-B1, COMMUN-20-BUILD/BILAN | 2815910e8a7f0f48a9fdb1e172c7eac5 | PASS |
| Plugins/ModdingExtra/…/ModdingExtraBPLibrary.cpp | 381 | FIX1-F6-IMPL, FIX1-F6-VAL, COMMUN-21-BILAN | 1f93601c71d126f173fe30636aec0660 | PASS |
| Source/LifePlay/LPAssetRegistryHelpers.cpp | 370 | STM1-IMPL-01, STM1-B1-VAL | 61b641efdff8942d0cceb827e5668c8e | PASS |
| Source/LifePlay/LifePlay.cpp | 370 | idem | c3d0b3b7ad8210404284f1faf1b27bbd | PASS |
| Source/LifePlay/LifePlay.h | 370 | idem | df5da24a8457f802b87eb87e103e4352 | PASS |
| Source/LifePlay/LPCityTraceSubsystem.cpp (A) | 370 | idem | e5a0d22de9889c9265456c9b4f66fa59 | PASS |
| Source/LifePlay/LPCityTraceSubsystem.h (A) | 370 | idem | 47769ceca14092febc943cd499233117 | PASS |
| Source/LifePlay/LPCityWaterMask.h (A) | 379 | STM1-B6-FIN, COMMUN-20-BILAN | 966dc14d525c34c7fd19d0f0b73b8a6d | PASS |
| Source/LifePlay/LPCityWaterSubsystem.cpp (A) | 372, 379 | idem | 9c0b257ee0ae377146aeda72519330bf | PASS |
| Source/LifePlay/LPCityWaterSubsystem.h (A) | 372, 379 | idem | 2cdc10018eb1287d7f9e302eee182185 | PASS |
| Source/LifePlay/LPCameraModeSubsystem.cpp | 373-376, 383 | FIX1-F8a-IMPL, COMMUN-23-BILAN | 976bf0a458b87f9aecf974fcec3209f0 | PASS |
| Source/LifePlay/LPCameraModeSubsystem.h | 373, 374 | CAM2-IMPL-02/03, KEY2-IMPL-01 | 36feac2a77e13529a8ea689be74c954f | PASS |
| Source/LifePlay/LPRoomBoundsCameraModifier.cpp (A) | 375, 376 | CAM2-IMPL-03 à 06, CAM2-VAL-03 | a3b0319458288ceb69293563b0bea35b | PASS |
| Source/LifePlay/LPRoomBoundsCameraModifier.h (A) | 375, 376 | idem | f5eeae0574f760ed2382c2538a23e1a9 | PASS |
| Source/LifePlay/LPKeyboardSubsystem.cpp | 373, 376, 378, 382 | KEY2-BUILD-04, SET1-V1b-IMPL, COMMUN-21-BILAN | 611c21489d80374a4817f70e408cf4db | PASS |
| Source/LifePlay/LPKeyboardSubsystem.h | 373 | KEY2-IMPL-01 | 06793e5749102b5a943ee8bbc8a1f625 | PASS |
| Source/LifePlay/LPSettingsSubsystem.cpp | 373, 385 | SET1-V1b-IMPL, COMMUN-23-BILAN | 6277a8fc139c05dc10e302f88de0f8d9 | PASS |
| Source/LifePlay/LPSettingsSubsystem.h | 385 | idem | 138350efe8473c430db984db63c8feac | PASS |
| Source/LifePlay/LPColorGradeSubsystem.cpp | 385 | idem | 5be400543166b6de7a4a88f6097a9d93 | PASS |
| Source/LifePlay/LPVideoQualitySubsystem.cpp | 385 | idem | c3055197030bdbbce813df4cc6d7cd63 | PASS |
| Source/LifePlay/LPModInfoSubsystem.cpp | 385 | idem | 98206e688308e908b04ae15cf408e1bb | PASS |
| Source/LifePlay/LPDirectControlSubsystem.cpp | 384 | FIX1-MZ2-IMPL, COMMUN-23-BILAN | 86ef519e880989941e033edeadda7c26 | PASS |
| Source/LifePlayEditorTools/LPBuildCityWaterCommandlet.cpp (A) | 372, 379 | STM1-B6-FIN, COMMUN-20-BILAN | fa6fbb72cabc0fd73663ef0e86942309 | PASS |
| Source/LifePlayEditorTools/LPBuildCityWaterCommandlet.h (A) | 372 | STM1-IMPL-02 | 7b1e1a523d914f1cad832ff40ada1710 | PASS |
| Source/LifePlayEditorTools/LPImportCityOSMCommandlet.cpp (A) | 377 | STM1-B5-FIN | 1470d0b30d0eb5092aee4659a91bd342 | PASS |
| Source/LifePlayEditorTools/LPImportCityOSMCommandlet.h (A) | 377 | STM1-B5-FIN | d3f90da28f235b21c1867f452344c24b | PASS |
| Source/LifePlayEditorTools/LifePlayEditorTools.Build.cs | 372, 377 | STM1-B3-FIN | da4771a9ddd0a921a538ae52369f5c62 | PASS |
Compte : 34 lignes = 33 PASS + 1 CONSTAT (C1). Le module `LifePlayEditorTools` (5 fichiers du tableau) est un module éditeur : absent de la cible Shipping. Journal : 17 lignes CHG-370 à CHG-386 présentes (l. 1134-1150) ; CHG-379 cite aussi `CentralLondon_Mask.uasset` et CHG-377 `Paris.uasset`, sous `Content/Heavy` (ignoré, hors diff, non vérifiés ici : C7).
### Contrôle 3 — Builds d'essai utilisateur
| Changement (CHG) | Essai en jeu (bilan) | Verdict |
|---|---|---|
| CHG-370 trace de ville (STM1) | COMMUN-14.1 PASS (`COMMUN-14-BILAN.md`) ; COMMUN-16.25 PASS | PASS |
| CHG-371 CG2 (3 Blueprints) | COMMUN-14 : .6 et .10 PASS partiel (boutons de créature non vus), .8 et .9 non joués (C8, Q8 reportés en build 2) ; aucun second essai | CONSTAT C3 |
| CHG-372 eau de Londres | COMMUN-16.23 PASS partiel (maisons dans le fleuve), puis COMMUN-20.7 et COMMUN-21.13 PASS | PASS |
| CHG-373 à 376 CAM2 et KEY2 | COMMUN-15 suspendu (KO bloquant) ; COMMUN-16 : 12 PASS, 4 KO ; COMMUN-17 : 3 PASS, 14 non joués ; COMMUN-18 : 18 PASS, 1 FAIL (.2), 1 non concluant (.10) ; COMMUN-19 : 11 PASS dont la résolution du FAIL .2 par CAM2-IMPL-06 ; COMMUN-20 : 12 PASS (dont V/X du couple .12). L'état final (MD5 actuels de `PC`, `Room`, `RoomBounds`, `Keyboard`) a été joué en COMMUN-19, 20 et 21 | PASS avec réserve (C4 : COMMUN-18.10 « pièce cachée » jamais atteint, reporté en build 2) |
| CHG-377 commandlet OSM | éditeur seulement, aucun essai en jeu requis (STM1-B5-FIN, compilation) | sans objet |
| CHG-378 KEY2 sections | COMMUN-20.1 à .5 PASS | PASS |
| CHG-379 Tamise (option D) | COMMUN-20.6-.8 PASS, COMMUN-21.13 PASS, COMMUN-23.7c PASS (« quelques blocs gris restent » : volumes de la carte, build 2) | PASS |
| CHG-380 lien Discord | COMMUN-20.9 PASS | PASS |
| CHG-381 F6 sauvegardes | COMMUN-21.1-.3 et .6 PASS ; .4 sans objet (repli de lecture non éprouvé) ; .5 non joué (`-LPNoSavesRedirect`) ; **E9 (Shipping, `%LOCALAPPDATA%\LifePlay-Revival`) jamais joué** | PASS avec réserve (C5) |
| CHG-382 KEY2 second appui | COMMUN-21.7 à .11 PASS | PASS |
| CHG-383 F8a | COMMUN-23.7a PASS (22:03) | PASS |
| CHG-384 M-Z talons | COMMUN-23.6 PASS (meshZ −80,4 conservé, 0 ligne `M-Z :`) | PASS |
| CHG-385 SET1 | COMMUN-23.1 à .5 PASS ; **.4 (onglets au titre après retour de partie) incertain** : ligne `onglets poses … (ecran titre)` absente du journal, rejeu prévu à l'essai final | CONSTAT C2 |
| CHG-386 QPERS (`r.Tonemapper.Sharpen=0.5`, High/Epic) | **aucun essai de l'ini** ; essai par commande console le 2026-10-20 22:38 (« un peu plus net »), gravé à 22:49 (`BOSS-JOURNAL.md` l. 1051, 1055), après la dernière build d'essai (COM23, exe 21:37) | CONSTAT C1 |
Bilans : COMMUN-17 à 23 existent sauf COMMUN-22 (ni fiche de tests ni bilan : séance FIX1-MES sur la build COM22 « F8a + trace M-Z », verdicts dans `BOSS-JOURNAL.md` l. 1022-1028 et annexe de `COMMUN-23-BILAN.md`). Dernière build d'essai : `D:\Game\LifePlay_Build_5.8_Development_COM23` (exe 335 855 104 octets, 2026-10-20 21:37). Aucun changement de code ou de Blueprint n'est postérieur à cette build (contrôle 2).
### Contrôle 4 — Restes de débogage (code modifié)
Commande : `git diff -U0 v2026.10.2.1a HEAD -- Source Plugins | grep -E '^\+\+\+ |^\+.*(UE_LOG|UE_BUILD_SHIPPING|WITH_EDITOR|FAutoConsole|IConsoleManager|RegisterConsole|Exec\(|FConsoleCommand|PersonsLog|DrawDebug)'` → 74 lignes, relues en entier (fichier du scratchpad).
| Point | Constat | Verdict |
|---|---|---|
| Traces `UE_LOG` Warning | 2 : `ModdingExtraBPLibrary.cpp` (« liste lue dans Content, Saves non redirige pour les listes ») et `LPCityWaterSubsystem.cpp` (« masque … illisible ») : cas d'exception seulement | PASS |
| Traces `UE_LOG` Display | ModdingExtra F6 (4), `LPColorGrade`, `LPModInfo`, `LPSettings` (2), `LPVideoQuality`, `LPKeyboard` (2), `LPDirectControl` (M-Z, 1) : à l'ouverture d'un menu ou à l'événement, pas par trame ; COMMUN-23 : 0 ligne `M-Z :`, 5 `onglets poses` en 17 min | PASS |
| Traces `Log` (CameraMode, CityTrace, CityWater) | niveau `Log`, par événement ; ex. `POV souris` 52 lignes, `C1 souris` 23 lignes sur un essai (COMMUN-20) | PASS |
| Compilées en Shipping ? | non : ni `bUseLoggingInShipping` ni `NO_LOGGING` forcé dans `Source/*.Target.cs` ou `Config` (Grep sur `Source` : seul le commentaire `LPSessionLogSubsystem.cpp:25`) → `UE_LOG` supprimé du Shipping par défaut du moteur | PASS (estimé par le défaut moteur, non exécuté) |
| `-LPPersonsLog` actif par défaut | non : `LPDebugSubsystem.cpp:638-642` lit le paramètre de ligne de commande ; fichier non modifié depuis le tag ; sous `#if !UE_BUILD_SHIPPING` (l. 7 à 820) | PASS |
| `#if !UE_BUILD_SHIPPING` attendus | `LPCityTraceSubsystem.cpp` (corps, commande `LP.CityTrace`) et `.h` (commentaire) présents. Seule commande console ajoutée : `LP.CityTrace` (aucun autre `RegisterConsoleCommand`, `Exec(`, `FAutoConsole` dans le diff) | PASS |
| Interrupteur de ligne de commande conservé en Shipping | `-LPNoSavesRedirect` (F6) : repli volontaire vers l'ancien chemin, sans effet par défaut | PASS (non éprouvé en jeu : C5) |
| Chemins absolus de la machine | `git diff -U0 … -- Source Plugins Config \| grep -E '^\+' \| grep -nE '[A-Za-z]:[\\/]\|<profil>\|/Users/'` : sortie vide (motif non éprouvé sur un cas positif : lire « aucun trouvé ») | PASS |
### Contrôle 5 — `Mods\`, `LPSaveLocation.ini`, `LifePlay.uproject`
| Point | Commande | Résultat | Verdict |
|---|---|---|---|
| `Mods\` vide | `ls -d Mods` ; `ls -A Mods \| wc -l` | dossier présent, 0 entrée | PASS |
| `LPSaveLocation.ini` | `find . -name LPSaveLocation.ini -not -path './.git/*'` | 0 résultat | PASS |
| `Content/Saves` (ignoré, présent) | `find Content/Saves -type f` | 4 fichiers : `Default/Characters/Player.lpcharacter`, `_session/Characters/1.lpcharacter`, `2.lpcharacter`, `3.lpcharacter` ; `DirectoriesToAlwaysCook=/Game` ne cuit que des assets ; l'archive reste à contrôler | CONSTAT C7 |
| `LifePlay.uproject` | `git diff HEAD -- LifePlay.uproject` ; JSON : `pwsh … Get-Content -Raw … \| ConvertFrom-Json \| Out-Null` sans erreur | modifié localement (15 insertions, 7 suppressions, daté 2026-10-19 23:32), **non committé volontairement** (`BOSS-ETAT.md` l. 145, 175). Diff : (a) `McpAutomationBridge` (Enabled false, TargetAllowList Editor) retiré de sa place d'origine (l. 52-57) et ajouté en fin de liste, contenu identique ; (b) **ajout de `HyperAIStudio`** (`Enabled: true`, `MarketplaceURL`, `SupportedTargetPlatforms: Win64`, **sans** `TargetAllowList`) en fin de liste. Le `.uproject` du tag n'a pas cette entrée | CONSTAT C6 |
Ce changement local d'`uproject` **entre dans toute build faite depuis cette copie** (UBT et UAT lisent le fichier sur disque, pas HEAD) ; les builds Development COMMUN-14 à 23 l'avaient déjà. HyperAIStudio : modules de type `Editor` (`HyperAIStudio.uplugin` l. 18-40 lues), donc non liés au Shipping ; le plugin a un dossier `Content` et `"CanContainContent": true`. Le Shipping `2026.10.2.1a` (tag) a été construit sans cette entrée. Incertain : effet sur le contenu de l'archive Shipping ; l'essai qui tranche est `CheckPackage` Shipping (T2.5).
### Contrôle 6 — PubCheck sur l'arbre
Commande : `pwsh -NoProfile -File Tools\PubCheck.ps1 -Arbre ue5.8 < /dev/null` → sortie : `PubCheck : 0 constat(s)` ; code de sortie `0`. PASS.
### Contrôle 7 — MD5 de contrôle d'entrée pour la build Shipping (comme REL-ALPHA T2.1)
À rejouer avant `Build.ps1` par `Get-FileHash -Algorithm MD5` ; écart = ARRÊT. Les 8 premiers caractères suffisent à la comparaison rapide ; valeurs complètes au contrôle 2. Cette liste remplace celle de COMMUN-13 (`REL-ALPHA.md` l. 37-46), périmée pour tous les fichiers ci-dessous.
- Config : `DefaultGame.ini` **8d7f4bdf** (`ProjectVersion=2026.10.2.2a`, LF) ; `DefaultInput.ini` 1a8e89a1 ; `DefaultScalability.ini` b3ecb28c.
- Contenu : `PC.uasset` 6603c77f ; `Room.uasset` 2b1cfa2e ; `CharGen` 8d781ec0 ; `CharGenSlider` cbe53469 ; `MainMenu` 2815910e ; `VisualMorph` 84dd9b17.
- Plugin : `ModdingExtraBPLibrary.cpp` 1f93601c.
- `Source/LifePlay` : `LPAssetRegistryHelpers.cpp` 61b641ef ; `LPCameraModeSubsystem.cpp` 976bf0a4 / `.h` 36feac2a ; `LPCityTraceSubsystem.cpp` e5a0d22d / `.h` 47769cec ; `LPCityWaterMask.h` 966dc14d ; `LPCityWaterSubsystem.cpp` 9c0b257e / `.h` 2cdc1001 ; `LPColorGradeSubsystem.cpp` 5be40054 ; `LPDirectControlSubsystem.cpp` 86ef519e ; `LPKeyboardSubsystem.cpp` 611c2148 / `.h` 06793e57 ; `LPModInfoSubsystem.cpp` 98206e68 ; `LPRoomBoundsCameraModifier.cpp` a3b03194 / `.h` f5eeae05 ; `LPSettingsSubsystem.cpp` 6277a8fc / `.h` 138350ef ; `LPVideoQualitySubsystem.cpp` c3055197 ; `LifePlay.cpp` c3d0b3b7 ; `LifePlay.h` df5da24a ; `LPModGuard.cpp` 54aac4d9 ; `LPModGuard.h` c09543be.
- `Source/LifePlayEditorTools` (hors cible Shipping, pour mémoire) : `LPBuildCityWaterCommandlet.cpp` fa6fbb72 / `.h` 7b1e1a52 ; `LPImportCityOSMCommandlet.cpp` 1470d0b3 / `.h` d3f90da2 ; `LifePlayEditorTools.Build.cs` da4771a9.
- Inchangés depuis le tag (absents du diff) : GI, Person, TopRight, ShowCouple, OutdoorRoom, Debug, SaveRelaunch, BonusReward. Leurs MD5 de COMMUN-13 (`REL-ALPHA.md` l. 38-44) restent la référence ; **non rejoués ici** (chemins non relevés), à rejouer en T2.1.
- Autres conditions de T2.1 : `UeState.ps1` = 0 processus ; `Mods\` vide ; aucun `LPSaveLocation.ini` (conformes à cet instant, contrôle 5).
## 4. Diff lu en entier
- Lu en entier : `Config/DefaultGame.ini` (1 ligne), `Config/DefaultInput.ini` et `DefaultScalability.ini` (diffs complets), `LifePlay.uproject` (diff complet).
- `DefaultInput.ini` : retrait de `SpeedUp/SpeedDown` sur pavé, `Equals`, `Hyphen`, `TestScenes` sur `Tilde`, `MoveForward` sur `Z`, `MoveRight` sur `Q` ; ajout `ActionPanel` (Q), `CameraHeight` (G/B), `CoupleMoveY` (V/X) : cohérent avec `COMMUN-15-TESTS.md` § 1 (estimé, non comparé caractère à caractère à `KEY2-SPEC-01.md`). `DefaultScalability.ini` : +4 lignes (deux commentaires, deux `r.Tonemapper.Sharpen=0.5` sous `[AntiAliasingQuality@2]` et `@3`). Fins de ligne CRLF conservées pour ces deux fichiers (`git ls-files --eol` : `i/crlf w/crlf`).
- Code C++ (Source, Plugins) : **non relu ligne à ligne** (3634 lignes ajoutées) ; validé par les IMPL/VAL/BUILD amont, les MD5 identiques à ceux des builds jouées et le balayage ciblé du contrôle 4. Les 6 `.uasset` sont binaires : seul le MD5 est comparé.
- `REL2-T1-IMPL.md` l. 8 déclare « sed sur la ligne 4 seule » pour `DefaultGame.ini` : écart de méthode au sens de `sk-protocol` § 7 (Edit prescrit), sans effet mesuré (diff d'une ligne, LF gardé).
## 5. Verdict
**PASS-STATIC : prêt pour la build Shipping, aucun bloquant.**
- T1v : PASS (diff, MD5 de l'instantané, aucun autre fichier de Config) ; format de version : PASS-STATIC.
- Inventaire : 33 fichiers sur 34 couverts par IMPL/BUILD et CHG, à MD5 identique ; le 34e (`DefaultScalability.ini`) est couvert par CHG-386 et le journal de Big Boss, sans IMPL, VAL ni build.
- Aucun reste de débogage actif en Shipping ; `Mods\` vide ; aucun `LPSaveLocation.ini` ; PubCheck 0.
- Réserves à porter à l'essai final et à la décision de Big Boss : C1 à C7.
Témoin en jeu (R8) : les correctifs de comportement ont leur témoin au contrôle 3 (COMMUN-19.1, 20.1-.12, 21.1-.14, 23.1-.7). QPERS : `Témoin en jeu : à créer` (cas à demander à l'orchestrateur, fiche FIT).
## 6. Points à confirmer par l'utilisateur
- [ ] C1 : accepter de livrer `r.Tonemapper.Sharpen=0.5` (High/Epic) sans essai de l'ini en build, ou le faire contrôler à l'essai final Shipping.
- [ ] C6 : `LifePlay.uproject` (HyperAIStudio activé) : construire avec la copie locale telle quelle, ou retirer l'entrée avant le Shipping (décision de Big Boss ; ce validateur ne le fait pas).
- [ ] C5 : jouer E9 de F6 en Shipping (sauvegardes sous `%LOCALAPPDATA%\LifePlay-Revival`, lancement par le `.bat` avec `-UserDir`, relevé de `%LOCALAPPDATA%\LifePlay` avant et après la fermeture).
- [ ] C2 : rejouer COMMUN-23.4 (écran titre après un retour de partie) à l'essai final.
## Constats
- **C1 (non bloquant, à décider)** : `Config/DefaultScalability.ini` (CHG-386, QPERS) sans IMPL/VAL/BUILD ; essai par console seulement ; gravé après la dernière build d'essai.
- **C2** : COMMUN-23.4 incertain (bilan, « Incertain » 1) ; rejeu prévu à l'essai final.
- **C3** : CHG-371 (CG2, trois Blueprints) : un seul essai (COMMUN-14), couverture partielle ; C8, Q7, Q8 et boutons de créature en build 2.
- **C4** : COMMUN-18.10 non concluant (`Room cachee=1` : 0 ligne) reporté en build 2. COMMUN-22 sans fiche de tests ni bilan. COMMUN-20 : 51 actions à la première écriture contre 50 relues (cause non établie), flèches du couple sans ligne de trace.
- **C5** : F6 : E9 (Shipping) jamais joué ; repli de lecture (COMMUN-21.4) et `-LPNoSavesRedirect` (.5) non éprouvés en jeu ; réserves 1 à 3 de `FIX1-F6-VAL.md` reportées en build 2.
- **C6** : `LifePlay.uproject` local (HyperAIStudio) : voir contrôle 5. Le Shipping de l'alpha précédente est construit sans cette entrée.
- **C7** : `Content/Saves` contient 4 fichiers `.lpcharacter` (ignorés par git) ; `CentralLondon_Mask.uasset` et `Paris.uasset` (CHG-379, CHG-377) non vérifiés ici ; à contrôler dans l'archive par `CheckPackage` (T2.5) et le contrôle T3 de `LPSaveLocation.ini`. `README.md` cite encore `2026.10.2.1a` (l. 10-14, 61-64) : mise à jour attendue à la publication, hors périmètre de cette VAL.
Non rejoué : compilation (`Build.ps1 -FromLog`), `LPTestStringCompat`, ouverture de l'éditeur (G-U3), lecture des journaux de jeu, MD5 des Blueprints inchangés (GI, Person…), relecture ligne à ligne du C++.
Tours : 25 / 40
## Fichiers à commiter
- `A Docs/Migration/etat/REL/REL2/REL2-VAL.md` (seul fichier écrit par ce validateur ; dépôt jeu, branche `ue5.8`).