279 lines
23 KiB
Markdown
279 lines
23 KiB
Markdown
|
|
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
|