LifePlay-Revival/Docs/Migration/etat/REL/REL2/REL2-VAL.md

191 lines
23 KiB
Markdown
Raw Permalink Normal View History

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`).