LifePlay-Revival/Docs/Migration/etat/REL/MAPDL1/MAPDL1-E3-VAL.md
2026-10-22 21:10:39 +02:00

278 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 MAPDL1-E3-VAL — Niveau N1 — Modèle prévu haiku | utilisé haiku (claude-haiku-5-5, déclaré par l'environnement ; non vérifié par `claude -p`) — Agent lp-validator — Skills lp-validate, sk-recount, sk-protocol, debug-verification
# MAPDL1-E3-VAL : validation statique de MAPDL1-E1 (2026-10-22)
Hors gabarit : aucun. Gabarit VAL de `D:\Game\LifePlay-Sandbox\Tools\claude\skills\lp-doc\gabarits.md` suivi (sections 1 à 6).
Lecture seule : aucun build, aucun éditeur, aucun commandlet. `Tools\Build.ps1 -FromLog` non lancé : il écrit un résumé dans `etat\` (lot MAPDL1-E2-VAL absent de `Tools\EtatDir.ps1`) ; le recomptage des journaux est fait par Grep (§ 3). `LPTestStringCompat` non lancé (commandlet interdit par la fiche). Seul ce livrable est écrit.
**Verdict global : PASS-STATIC** (aucun contrôle de la fiche E1 en échec ; points de jeu reportés ; réserves au § 5 et au § 6).
Heures des relevés : 2026-10-22, dernier relevé à 16:30:47 (horloge de la session). L'arbre est vivant : d'autres lots écrivent pendant la validation (§ 7).
## 1. Fiches amont relues
- `D:\Game\LifePlay-master 5.8\Docs\Migration\etat\REL\MAPDL1\MAPDL1-E1-FICHE.md` : lue en entier.
- `...\MAPDL1\MAPDL1-E1-IMPL.md` : lue en entier (246 lignes, § 1 à 6 et Constats). Seule IMPL du lot à ce jour.
- `...\MAPDL1\MAPDL1-E2-BUILD.md` : lue en entier (gabarit BUILD suivi : § 1 à 7 et écarts).
- `...\MAPDL1\MAPDL1-SPEC-05-v3.md` : lue en entier (§ 1 : JSON format 2 ; § 2 à 7 pour le contexte).
- `...\MAPDL1\MAPDL1-SPEC-05.md` : lue l. 1-140 (§ 1 à 6 ; § 2 : C1 à C5).
- `...\MAPDL1\MAPDL1-SPEC-05-v2.md` : Grep du texte de licence (l. 99) et de S5-5 (l. 133).
- Instantané : `D:\Game\LifePlay_Backup_5.5\MAPDL1-E1\manifest.csv` (lu en entier).
- Non relus, hors périmètre de cette VAL : `MAPDL1-E0-INV.md`, `MAPDL1-L1-CART-02.md`, `MAPDL1-L4-CART-01.md` (références de la fiche), `MAPDL1-E4-TESTS.md` (présent à 16:28, non lu).
## 2. Points à confirmer des IMPL : un par ligne
| Point (E1-IMPL § 5) | Verdict | Preuve |
|---|---|---|
| V-1 alias `TFunction` et fonction `MODDINGEXTRA_API` hors classe, acceptés par UHT | PASS (compilation) | Grep du journal éditeur `Saved\Logs\portage\MAPDL1-E2_Build_20261022-161830.log` : aucune ligne `error` ; `[1/14] Compile [x64] ModdingExtraBPLibrary.cpp` (l. 45). Journal jeu : `[8/11] Compile [x64] ModdingExtraBPLibrary.cpp`. |
| V-2 édition de liens `LifePlay` vers `ModdingExtraSetFileListFilter` | PASS (édition de liens) ; chargement à l'exécution reporté (E4) | Journal jeu l. 32 : `Création de la bibliothèque ...\Binaries\Win64\LifePlay.lib` ; E2-BUILD § 3 : `UnrealEditor-ModdingExtra.dll` liée côté éditeur. |
| V-3 compilation de `LPCityMapsSubsystem.cpp` (API listées) | PASS (compilation) | Journal éditeur l. 51 `[6/14] Compile [x64] LPCityMapsSubsystem.cpp` ; journal jeu l. 23 `[2/11] ...` ; aucune ligne d'erreur dans les deux (§ 3.8). |
| V-4 zéro avertissement nouveau ; pas de collision d'unity | PASS | 0 avertissement compilateur dans les deux journaux. Les 20 lignes `Warning: Plugin 'HyperAIStudio'` (journal éditeur l. 9-28) sont les connues de `lp-build` § 7. Journal éditeur l. 37 : `Excluded from LifePlay unity file: ... LPCityMapsSubsystem.cpp` (compilé hors unity). |
| V-5 journal au premier menu (`CARTES`, `ETAT`, `LISTE`, `MENU tri`) | reporté (E4, jeu) | Non vérifiable statiquement. Chaînes présentes : `LPCityMapsSubsystem.cpp` l. 414, 467, 513, 675. |
| V-6 `Construct` relancé après retrait, pas de clignotement | reporté (E4, jeu) | Non vérifiable statiquement (Blueprint `City`). Voir O2 (ticker de 0 s). |
| V-7 champ `StreetMapName*` lisible ; `City`, `InstalledText`, `CityButton` trouvés | reporté (E4, jeu) | Statique : `ReadRowCity` l. 161-202 (suffixe `StreetMapName`, repli `FStrProperty`) ; `FindRowWidget` l. 205-216. |
| V-8 Tokyo installé, gabarit « Not available », index d'essai « Download » | reporté (E4, jeu) | Voir O1 (entrées des villes servies par un pack non ajoutées). |
| V-9 clic téléchargeable : pas de `MoveCity`, ouverture du navigateur | reporté (E4, jeu) | Statique : `ULPCityRowClick::OnClicked` l. 235-241 ; `OpenCityPage` l. 751-768 (`LaunchURL` l. 767). Le blocage de `MoveCity` relève du Blueprint. |
| V-10 bandeau 10 s, une fois par ville, Z 1100, souris libre | reporté (E4, jeu) | Statique : `BannerSeconds` l. 53, `BannerZOrder` l. 54, `BannerShown` l. 794-801, `HitTestInvisible` l. 813. |
| V-11 `Content/Data/LPCityMaps.json` dans le pak | reporté (cuisson) | Statique : `DefaultGame.ini` ligne ajoutée (§ 3.4). |
| V-12 premier `ResolveCityPath` avant le montage des packs | reporté (E4, jeu) | Non vérifiable statiquement (un seul appelant Blueprint, non relu). |
| V-13 dépendance de commit avec STM1 (`OnCityMapResolved`, `ResolveCityPath`) | PASS statique ; ordre de commit reporté au gardien | Grep `LPAssetRegistryHelpers.h` : l. 70 `static FString ResolveCityPath(...)`, l. 73 `static FLPCityMapResolved& OnCityMapResolved()`. Ces fichiers restent `M` (STM1). |
| E-1 ticker `FTSTicker` de 0 s (et non `OnWorldPostActorTick`) | conforme à la fiche § 2.3 ; clignotement reporté (E4) | Voir O2. |
| C-1 à C-15 (choix de l'IMPL) | revus au § 4 | C-14 est un écart mineur (espaces de fin de ligne). |
## 3. Critères rejoués (commande → résultat)
### 3.1 Périmètre (contrôle 1) : OK
Commande : `git -C "D:\Game\LifePlay-master 5.8" status --short` (lecture seule). Relevé à 16:2x : 168 entrées (19 ` M`, 149 `??`, 0 autre). Le même décompte passé à 16:2x était de 167 (§ 7).
Fichiers E1 présents :
```
M Config/DefaultGame.ini
M Plugins/ModdingExtra/Source/ModdingExtra/Private/ModdingExtraBPLibrary.cpp
M Plugins/ModdingExtra/Source/ModdingExtra/Public/ModdingExtraBPLibrary.h
M Source/LifePlay/LifePlay.Build.cs
?? Content/Data/ (contient uniquement LPCityMaps.json)
?? Source/LifePlay/LPCityMapsSubsystem.cpp
?? Source/LifePlay/LPCityMapsSubsystem.h
```
`Tools/IndexCartes.ps1` n'apparaît pas : `git check-ignore -v Tools/IndexCartes.ps1` → `.gitignore:91:/Tools/ Tools/IndexCartes.ps1` (hors git, attendu).
Écart de forme, sans gravité : les trois fichiers neufs sont en `??` (non indexés) et non en `A`. Rien n'a été indexé ; c'est attendu avant le ticket du gardien.
Autres fichiers, listés sans jugement (lots STM1, BOSS, REL2, LOC1, AG, ST, REPO, MAPDL1 docs, commandlets `LifePlayEditorTools`) :
- `M` hors E1 (15) : `Docs/Migration/etat/BOSS/BOSS-ETAT.md`, `BOSS/BOSS-JOURNAL.md`, `REL/STM1/STM1-JOURNAL-BROUILLON.md`, `REL/STM1/STM1-TACHES.md`, `REPO/FILE.md`, `LifePlay.uproject`, `Source/LifePlay/LPAssetRegistryHelpers.cpp` et `.h`, `LPCityWaterMask.h`, `LPCityWaterSubsystem.cpp` et `.h`, `Source/LifePlayEditorTools/LPBuildCityWaterCommandlet.cpp` et `.h`, `LPImportCityOSMCommandlet.cpp`, `LifePlayEditorTools.Build.cs`.
- `??` hors E1 : 146 entrées, dont 116 sous `Docs/Migration/etat/` (STM1, BOSS, REL2, LOC1, AG, ST, REPO, MAPDL1 docs), 29 sous `Source/` (STM1 et commandlets), `Docs/LP-PROJET.ini`.
### 3.2 Blueprints (contrôle 2) : OK
- `git -C "..." status --short -- Content/UI Content/BPs` : sortie vide.
- `Get-Item` : `Content\UI\City.uasset` 08/10/2026 20:28:38 ; `CityMenu.uasset` 08/10/2026 20:28:38 ; `Content\BPs\GI.uasset` 14/10/2026 10:33:14.
- Balayage de `Content/UI` et `Content/BPs` : 312 fichiers, **0** modifié après 2026-10-22 15:55.
### 3.3 Fichiers STM1 (contrôle 3) : OK (réserve documentaire)
Commande : `Get-FileHash -Algorithm MD5` sur les 9 fichiers. Sortie (extrait) :
```
CC146CC6979ED4321413130DCD1B4417 LPCityWaterSubsystem.cpp
4A6C67116A76BFFB9D8D04E38A6C9AC5 LPCityWaterSubsystem.h
E5027FD7FD2B827831D52E8CE5727A36 LPCityWaterMask.h
F378333812EFD901C72F252131F28E47 LPCityNamesSubsystem.cpp
1063948323E856860350F143296D8611 LPCityNamesSubsystem.h
01CC49D85CA415B11A04D19E8EA23FBB LPCityHouses.h
B4FF95AE838F241DBBAB23C7DDAB4D5A LPCityLandmarks.h
7B44F5FA7A1CB33EA8E96C9ECC1C7BDE LPAssetRegistryHelpers.cpp
8E3B725A609CC8E5E23D2F0CEC309C1A LPAssetRegistryHelpers.h
```
Les 9 valeurs sont identiques à celles de `MAPDL1-E1-IMPL.md` § Constats 2 (9/9).
Réserve : le tableau « avant » de l'IMPL § 1 ne couvre que les 8 fichiers E1, pas les STM1. Pas de référence « avant » indépendante. Preuve indirecte : `Get-Item` donne des dates d'écriture 21/10/2026 entre 13:29 et 19:23, soit avant l'instantané E1 (22/10 15:56). E1 n'a donc pas écrit ces fichiers.
### 3.4 Config/DefaultGame.ini (contrôle 4) : OK
`git diff -- Config/DefaultGame.ini` : un seul ajout, après le contexte `+DirectoriesToNeverCook=...`, `+DirectoriesToAlwaysStageAsNonUFS=(Path="Modules")` :
```
+DirectoriesToAlwaysStageAsUFS=(Path="Data")
```
Hunk `@@ -72,6 +72,7 @@` : 1 insertion, 0 suppression.
### 3.5 Diff ModdingExtra (contrôle 5) : OK, écart mineur C-14
Lu en entier, par hunks.
- `.h` : hunk `@@ -49,3 +49,8 @@`, +5 hors de la classe : commentaire, alias `FModdingExtraFileListFilter` (`TFunction`), déclaration `MODDINGEXTRA_API void ModdingExtraSetFileListFilter(...)`. Rien d'autre.
- `.cpp`, +19 −2, trois hunks :
- `@@ -28,6 +28,15 @@` : `static FModdingExtraFileListFilter GLPFileListFilter;` et la définition de `ModdingExtraSetFileListFilter` (l. 31-38).
- `@@ -154,7 +163,9 @@` : `const FString ExtRecu = Ext;` (l. 167), placé avant la transformation de `Ext` en `*.uasset` (l. 178-185). La ligne vide à espaces (l. 166 d'origine) est remplacée.
- `@@ -221,7 +232,13 @@` : appel `if (GLPFileListFilter) { GLPFileListFilter(RootFolderFullPath, ExtRecu, Files); }` (l. 236-239), juste avant `return true;` (l. 241). La ligne `return true;` avec espaces de fin est normalisée.
- Écart C-14 : deux lignes portant des espaces de fin sont modifiées. Ce n'est ni de la logique ni un crochet ; la fiche § 2.1 dit « Rien d'autre ne change ». À signaler (§ 6).
- Aucune autre modification de logique. Le plugin ne dépend toujours pas du jeu.
### 3.6 Fiche § 2.2 à 2.4 (contrôle 6) : OK
Lecture de `LPCityMapsSubsystem.cpp` (842 l.) et `.h` (160 l.), en entier.
| Exigence | Preuve | Verdict |
|---|---|---|
| Filtre limité à `Heavy/StreetMap` (casse ignorée, `\` → `/`) et extension `uasset` | `FilterFileList` l. 494-505 : `NormalizeFolder` l. 145-157 ; `RemoveFromStart(".")`, comparaison `uasset` | OK |
| Retire seulement les états non `Installed` | l. 507-513 : `RemoveAll(GetCityState(...) != Installed)`. Journal l. 513. | OK |
| Installé : ni texte ni clic modifiés | `DecorateRows` l. 692-696 : `continue` si `Installed`. `SortRows` ne réécrit que l'ordre (l. 657-670). | OK (voir O2 pour la réinsertion) |
| `GI.Cities` non écrit | Grep `Cities` (sortie) : seulement commentaires, `BaseCities`, `ListName`, variables locales `Cities` (l. 363-366) ; aucune écriture sur `GameInstance` | OK |
| Ordre de lecture : `Saved` puis `Content/Data` | l. 306-309 (`Candidates`), premier fichier présent retenu l. 310-317 | OK |
| URL non HTTPS écartées | `IsHttps` l. 107-110 ; filtrage l. 393-405 ; `page` non HTTPS vidée l. 406-410 | OK |
| Bandeau seulement si demandé == résolu | `HandleCityMapResolved` l. 770-804 : `Resolved.Equals(Requested)` l. 789 ; chemin `/Game/Heavy/StreetMap/V.V` seulement l. 772-786 ; `Installed` exclu l. 793-795 | OK |
| Ticker et filtre retirés dans `Deinitialize` | l. 264-287 : `RemoveTicker` l. 266-270 ; `OnCityMapResolved().Remove` l. 271-275 ; filtre vidé l. 276-281 (si propriétaire) | OK |
### 3.7 Fins de ligne (contrôle 7) : OK
Commande : `git -C "..." ls-files --eol -- Config/DefaultGame.ini <3 autres M>` :
```
i/lf w/lf attr/-text Config/DefaultGame.ini
i/lf w/lf attr/-text Plugins/ModdingExtra/Source/ModdingExtra/Private/ModdingExtraBPLibrary.cpp
i/lf w/lf attr/-text Plugins/ModdingExtra/Source/ModdingExtra/Public/ModdingExtraBPLibrary.h
i/lf w/lf attr/-text Source/LifePlay/LifePlay.Build.cs
```
Fichiers neufs, `Tools\FileCheck.ps1 -Path @(...)` (lecture d'octets) :
```
LF 0 160 0 - 8D48BB187947025902FF1EC266C94256 Source\LifePlay\LPCityMapsSubsystem.h
LF 0 842 0 - 79C7BBAF4FD72DA869A7AD0849D922F9 Source\LifePlay\LPCityMapsSubsystem.cpp
LF 0 15 0 - 308B46C40A43BC4180B66E46A07018DE Content\Data\LPCityMaps.json
LF 0 194 0 - 30D9DFADB328AA71CCCE4610DEE6EDBF Tools\IndexCartes.ps1
fichiers=4 LF=4 alertes=0 introuvables=0 (exit=0)
```
CR = 0 et pas de BOM sur les 4 fichiers neufs. Ce sont les tailles et les MD5 de l'IMPL § 1 « après » (8/8 identiques).
### 3.8 JSON livré (contrôle 8) : OK
Commande : `Get-Content -Raw ... | Test-Json` puis lecture des champs.
```
Test-Json: True
format=2
base=CentralLondon,00BathCC
villes=0
licences=osm,lifeplay_ancienne
osm.titre=Map data (c) OpenStreetMap contributors, ODbL 1.0
osm.fichier=Licenses/OpenStreetMap_Geodata_License.txt
lpa.fichier=Licenses/Vinfamy_License.txt
v2 longueur=333 ; json longueur=333
identique=True
```
Le titre `lifeplay_ancienne` est comparé à `MAPDL1-SPEC-05-v2.md` l. 99 (texte entre « et ») : identique, sensible à la casse, 333 caractères. S5-5 (SPEC v2 l. 133) reste « à valider par l'utilisateur » (§ 6).
Compilation de la syntaxe du JSON : 0 erreur (Test-Json).
### 3.9 Tools\IndexCartes.ps1 (contrôle 9) : OK
Commande : `[System.Management.Automation.Language.Parser]::ParseFile(...)` puis compte des octets :
```
erreurs de syntaxe: 0
octets>127: 0 ; CR: 0 ; taille: 10734
```
Essai à blanc : `pwsh -NoProfile -File "...\Tools\IndexCartes.ps1" -Villes Manila -Hebergeur Forgejo -Owner exemple -Repo exemple -Tag t -ABlanc ; exit=$?`. Sortie (extrait) :
```
packs retenus : 1 ; ecartes : 0 ; archives : D:\Game\LifePlay_Publication\Mods ; hebergeur : Forgejo
"ville": "Manila", "version": "1.0.1", "jeu_min": "2026.10.2.2a", "jeu_max": "2026.12.99",
"octets": 22075120,
"sha256": "2ba28c4edfb98e7b0265be719e3a42489f0fd79b17268c6ee9f3fbe2dc08b4cf",
"urls": [ "https://forgejo.edujiro5972.fr/exemple/exemple/releases/download/t/lpm_city_manila-1.0.1-for-LifePlay-2026.10.2.2a.zip" ]
a blanc : rien n'a ete ecrit
exit=0
```
SHA-256 de Manila = `2BA28C4E…B4CF` en minuscules (`2ba28c4edfb98e7b0265be719e3a42489f0fd79b17268c6ee9f3fbe2dc08b4cf`). Critère atteint.
Non relu : `PRODUCTION.csv` (SPEC v1 § 2 C5 le cite comme source ; la fiche § 2.7 part des archives). La valeur `octets` 22075120 n'est donc pas recoupée par ce fichier.
### 3.10 Recomptage des journaux de build (sk-recount, sans recompiler)
Grep sur les deux journaux précis (pas sur le dossier `portage`, qui compte 704 fichiers) :
- Éditeur `MAPDL1-E2_Build_20261022-161830.log` : 33 lignes `error|warning|LPCityMapsSubsystem|ModdingExtraBPLibrary|Using Visual Studio|biblioth`, dont 20 `Warning: Plugin 'HyperAIStudio'`, 0 ligne `error`, 0 avertissement compilateur, 1 `Using Visual Studio 14.50.35739 toolchain (...MSVC\14.50.35717)`.
- Jeu `MAPDL1-E2_Build_20261022-162140.log` : 0 ligne `error` ni `Warning`, 1 ligne `Using Visual Studio` identique, `[2/11] Compile ... LPCityMapsSubsystem.cpp`, `[8/11] Compile ... ModdingExtraBPLibrary.cpp`, création de `LifePlay.lib`.
Concordance avec E2-BUILD § 4 : 0 erreur et 0 avertissement nouveau, confirmé.
Note : le total « 14 » (éditeur) et « 11 » (jeu) des étapes du journal diffère des « 9 unités » du résumé E2 ; le décompte des étapes `[n/N]` n'est pas celui des unités. Non résolu, sans incidence sur le verdict.
### 3.11 Contrôles hors fiche relevés
- `PubCheck.ps1` sur 11 fichiers (IMPL, E2, FICHE, les 4 fichiers E1, les 3 neufs, `IndexCartes.ps1`) : `PubCheck : 0 constat(s)`, exit 0.
- Chemins `C:\Users` : aucun dans ce livrable.
## 4. Diff lu en entier (fichiers, compte)
| Fichier | État | Compte | Lu |
|---|---|---|---|
| `Plugins/.../Public/ModdingExtraBPLibrary.h` | M | +5 −0 | en entier |
| `Plugins/.../Private/ModdingExtraBPLibrary.cpp` | M | +19 −2 (3 hunks) | en entier |
| `Source/LifePlay/LifePlay.Build.cs` | M | +4 −0 (`ModdingExtra`, `Json`, commentaire) | en entier |
| `Config/DefaultGame.ini` | M | +1 −0 | en entier |
| `Source/LifePlay/LPCityMapsSubsystem.h` | ?? (neuf) | 160 l. | en entier |
| `Source/LifePlay/LPCityMapsSubsystem.cpp` | ?? (neuf) | 842 l. | en entier |
| `Content/Data/LPCityMaps.json` | ?? (neuf) | 15 l. | en entier |
| `Tools/IndexCartes.ps1` | ignoré (hors git) | 194 l. | en entier |
Total des modifications E1 suivies : 4 fichiers, +29 −2 (IMPL : « 29 insertions, 2 deletions », cohérent avec les hunks). Total des fichiers neufs : 4 (3 dans git, 1 hors git).
Aucun Blueprint modifié (§ 3.2). Aucune modification de STM1 (§ 3.3). Aucun fichier de `Mods\` touché (contrôle implicite : `git status` ne montre rien sous `Mods/`).
## 5. Verdict et contrôles de la fiche
| # | Contrôle (fiche § 3, lp-validate) | Verdict | Motif |
|---|---|---|---|
| 1 | Périmètre | OK | 4 M E1 et 3 neufs E1 + Tools hors git, exactement comme annoncé. |
| 2 | Aucun Blueprint modifié | OK | `git status` vide sous `Content/UI` et `Content/BPs`, 0 fichier écrit après 15:55 sur 312. |
| 3 | Fichiers STM1 inchangés | OK (réserve) | 9/9 MD5 identiques au relevé de l'IMPL ; référence « avant » absente du tableau IMPL § 1 ; dates 21/10 antérieures. |
| 4 | DefaultGame.ini : une ligne | OK | 1 insertion, `+DirectoriesToAlwaysStageAsUFS=(Path="Data")`. |
| 5 | ModdingExtra : seulement le crochet | OK, écart mineur | Crochet conforme ; C-14 : 2 lignes à espaces de fin normalisées (non logique). |
| 6 | Fiche § 2.2 à 2.4 | OK | Huit exigences vérifiées ligne à ligne (§ 3.6). |
| 7 | Fins de ligne | OK | M : `i/lf w/lf` ×4 ; neufs : 0 CR, pas de BOM, LF ×4. |
| 8 | JSON livré | OK | `Test-Json` True ; format 2 ; base ; 2 licences ; `villes` vide ; titre identique au v2 § 4. |
| 9 | IndexCartes.ps1 | OK | 0 erreur de syntaxe ; 0 octet > 127 ; LF ; essai code 0 ; SHA-256 Manila en minuscules. |
Verdict global : **PASS-STATIC**.
Recomptage (sk-recount) :
| Élément | Valeur du livrable (IMPL) | Valeur recomptée | Méthode | Verdict |
|---|---|---|---|---|
| Fichiers M E1 | 4 | 4 | `git status --short`, préfixe ` M` | confirmé |
| Fichiers neufs E1 | 3 (+ Tools) | 3 `??` + Tools ignoré | `git status`, `check-ignore` | confirmé (`??`, pas `A`) |
| Lignes .h / .cpp / .cs / .ini | +5 / +19 −2 / +4 / +1 | +5 / +19 −2 / +4 / +1 | lecture des hunks | confirmé |
| Lignes neufs (h, cpp, json, ps1) | 160 / 842 / 15 / 194 | 160 / 842 / 15 / 194 | `FileCheck.ps1` | confirmé |
| MD5 après, 8 fichiers E1 | 8 valeurs | 8 valeurs identiques | `FileCheck.ps1` (même outil : pas un recomptage indépendant) | confirmé |
| MD5 STM1 | 9 valeurs (IMPL Constats 2) | 9 identiques | `Get-FileHash` | confirmé (après) ; avant non vérifiable |
| MD5 avant, 4 M E1 | IMPL § 1 | = `manifest.csv` | lecture du manifeste | confirmé |
| Erreurs de compilation | 0 | 0 | Grep des deux journaux | confirmé |
| Avertissements nouveaux | 0 (20 connus) | 0 compilateur, 20 UBT connus | Grep | confirmé |
| Blueprints modifiés | 0 | 0 | `git status`, `Get-ChildItem` | confirmé |
| `git status` total | non fourni | 168 (16:2x), 167 (16:1x) | `git status --short` | écart de temps, voir § 7 |
Témoin en jeu : à créer (cas à demander à l'orchestrateur). `MAPDL1-E4-TESTS.md` existe (16:28, non relu) : peut être le lieu du cas.
## 6. Points à confirmer par l'utilisateur (cases)
- [ ] E-1 : ticker `FTSTicker` de 0 s (fiche § 2.3, retenu) plutôt que `OnWorldPostActorTick` (SPEC v1 § 2 C3). À accepter ?
- [ ] O1 : les entrées des villes servies par un pack ne sont pas **ajoutées** à la liste (SPEC v1 § 2 C2 dit « ajoute » ; la fiche dit seulement « retire »). À confirmer en jeu (V-8).
- [ ] C-14 : deux lignes à espaces de fin normalisées dans `ModdingExtraBPLibrary.cpp`. À accepter ?
- [ ] O5 : nom du paramètre d'hébergeur. SPEC v3 § 1 écrit `-Principal` ; la fiche et l'IMPL écrivent `-Hebergeur` et `-Modele`. Lequel garder ? Et `-Miroir` avec `{tag}` (exemple de SPEC v3 § 1) : le script ne remplace que `{zip}`, `{tag}` reste littéral dans l'URL.
- [ ] V-13 : ordre de commit E1 et STM1 (`LPAssetRegistryHelpers.*` encore en M). Décision du gardien.
- [ ] S5-5 : texte de licence des anciennes cartes (SPEC v2 § 4) validé ? Il est repris dans le JSON livré.
- [ ] Écarts E2 (hors E1, relevés par BUILD) : (a) jeu compilé sans `-NoUBA` (`lp-build` § 2, U6) ; (b) résumés rangés dans `etat\MAPDL1-E2\` au lieu de `etat\REL\MAPDL1\` (`EtatDir.ps1` ne connaît pas le lot). À trancher par l'orchestrateur.
## 7. Constats
- Fichiers écrits : ce livrable seul, `D:\Game\LifePlay-master 5.8\Docs\Migration\etat\REL\MAPDL1\MAPDL1-E3-VAL.md`. Aucun fichier du projet modifié. Fichiers à commiter : aucun (la VAL ne commite pas).
- Mesuré (établi) : toutes les sorties citées ci-dessus, relevées le 2026-10-22, dernier relevé 16:30:47.
- Arbre vivant : entre le premier et le dernier relevé, `git status` passe de 167 à 168 entrées (`??` 148 à 149). Entrée nouvelle non identifiée ; les fichiers modifiés depuis 16:00 (`recent` : `Docs/.../BOSS-JOURNAL.md`, `Source/LifePlayEditorTools/LPBuildCityLandmarksCommandlet.cpp` à 16:30:18, `PROD1/...`, `MAPDL1-E4-TESTS.md` à 16:28) relèvent d'autres lots. Aucun fichier E1 n'a bougé : MD5 après relevés en fin de validation = relevés de l'IMPL.
- Estimé : cette VAL ne compte pas les fichiers modifiés par d'autres lots pendant la validation, faute de fiche dédiée.
- Non mesuré : chargement dans le jeu, cuisson, comportement du menu, bandeau, clic, `LPTestStringCompat` (interdit ici), `PRODUCTION.csv`, `MAPDL1-E0-INV.md`.
Observations pour l'orchestrateur (non bloquantes, sources citées) :
- O1 (`MAPDL1-SPEC-05.md` § 2 C2, « ajoute celles des villes servies par un pack ») : la fiche et l'IMPL ne font que retirer. Risque : une ville installée par pack sans gabarit dans `Content\Heavy\StreetMap` n'apparaîtrait pas. E0 indique que les 280 villes ont un gabarit, donc risque faible ; V-8 en jeu tranche.
- O2 (SPEC v1 C3, `OnWorldPostActorTick` ; `lp-city` § 3, R12-14) : le code suit la fiche (`FTSTicker`). La réinsertion `ClearChildren`/`AddChild` (l. 660-669) touche aussi les lignes `Installed` : texte et clic non modifiés par le code, mais le widget est retiré puis réinséré (V-6).
- O3 (SPEC v1 C1 : `Config/LPCityMaps.json` ; C5 : `PRODUCTION.csv`) : la fiche a choisi `Content/Data/LPCityMaps.json` et les archives. La fiche prime ; à noter dans la SPEC.
- O4 (SPEC v1 C1 : `GetDownloadInfo`, `ManifestUrl` facultatif D8) : remplacés par `GetDownloadBytes`/`GetDownloadUrls` (fiche § 2.2) ; `ManifestUrl` non implémenté (hors fiche).
- O5 (SPEC v3 § 1) : voir § 6.
- O6 (`IndexCartes.ps1` l. 183) : la sortie passe par `-replace "`r`n"`, donc LF ; OK.
À verser : lp-validate § 2 — `Tools\Build.ps1 -FromLog` écrit un résumé dans `etat\` ; pour un lot absent de `Tools\EtatDir.ps1` (MAPDL1-E2-VAL), en VAL recompter par Grep sur le journal, sans lancer le script.
Tours : 9 / 25