LifePlay-Revival/Docs/Migration/etat/ST/STC/STC-VAL.md

117 lines
16 KiB
Markdown
Raw Normal View History

Fiche STC-VAL — Niveau N1 — Modèle prévu lp-validator | utilisé claude-sonnet-5-5 — Agent lp-validator — Skills lp-validate, lp-commandlets, sk-recount, sk-protocol, debug-verification
# STC-VAL (2026-10-10)
Copie `D:\Game\LifePlay-master 5.8`, branche `ue5.8`, HEAD `20620f6`, changements non commités. Éditeur fermé avant toute
commande : `Tools\UeState.ps1 -Kind Editeur` → `processus=0 editeur=0` (rejoué avant les commandlets, code 0).
`Docs/Migration/32_Organisation_Agents.md` (non suivi) hors lot, ignoré.
## 1. Fiches amont relues
Toutes lues en entier dans `D:\Game\LifePlay-master 5.5\Docs\Migration\etat\ST\STC\` :
- `STC-TACHES.md` (décisions utilisateur D1-D5 ; T3 : écart E2 tranché par l'orchestrateur, style limité à `SliderCameraSpeed`)
- `STC-SPEC.md` (§ 2 C++, § 3-4 Blueprints, § 6 critères V1-V9 et J1)
- `STC-T0-CART.md` (relevé des 14 SpinBox, lu en partie : § 1-3 ; sans effet sur les critères de VAL)
- `STC-T3-IMPL.md` (IMPL C++, diff complet, 6 écarts E1-E6)
- `STC-T4-BUILD.md` (BUILD, code 0)
- `STC-T5-IMPL-BP.md` (MainMenu et GI par MCP ; voir Constats C3)
- `STC-T6-PIE.md` (relevés PIE P0-P5)
Non lue : `STC-reponse-fable.md` (notes de la session de diagnostic, hors dossier du lot, citée par la SPEC ; non requise par les
critères de la fiche).
## 2. Points à confirmer des IMPL
Source : `STC-T3-IMPL.md` § 5 (T4 : « Points à confirmer : aucun » ; T5 : aucun point listé).
| # | Point (T3 § 5) | Verdict | Preuve |
|---|---|---|---|
| P-a | BUILD code 0, `LPUserSettings.gen.cpp` produit, 2 `.cpp` compilés, 0 avertissement nouveau | PASS (recompté sur journal) | § 3 V1 ; `Intermediate\Build\Win64\UnrealEditor\Inc\LifePlay\UHT\LPUserSettings.gen.cpp` et `.generated.h` présents (Glob) |
| P-b | Unity build, espace de noms `LPUserSettingsGi`, pas de C2374 | PASS | journal l. 36 `Excluded from LifePlay unity file: LPSettingsSubsystem.cpp, LPUserSettings.cpp` ; 0 `error C` ; `Result: Succeeded` l. 53 |
| P-c | Palette Blueprint : 4 nœuds sous `LifePlay|Settings` | PASS-STATIC | 4 `UFUNCTION` `Category = "LifePlay|Settings"` (`LPUserSettings.h:41, 49, 53, 57`) ; `LPUserSettingsLibrary` présent 2 fois dans `MainMenu.uasset` ; `ApplyCameraSpeedAtStartup` 1 fois dans `GI.uasset`. Affichage dans la palette non vu (éditeur fermé) |
| P-d | V8 : journal « reprise de GI … premier lancement » et section ini | reporté (J1) | non couvert par T6 § 3 (l'entrée existait) ; à faire dans l'archive, dossier `Saved/Config/Windows` vierge |
| P-e | V8 (risque) : `CameraSpeed` du sav avant migration valant 0.2 → reprise 1 et non 3 | reporté (J1) | non mesuré ; le code arrondit puis borne (`LPUserSettings.cpp:58-61`, `:82-84`) ; `GameSettings.sav` actuel non décodé (binaire, MD5 seul) |
| P-f | V6 : ligne « vitesse 5 lue … recopiee dans GI (avant X) » et `GI.CameraSpeed = 5` | PASS pour la ligne de journal ; PASS partiel pour GI | `Saved\Logs\LifePlay.log:4301` `vitesse 5 lue dans GameUserSettings.ini (ini 5.00), recopiee dans GI (avant 3.00)` ; valeur de GI vient de T6 P4 (non rejouable éditeur fermé) ; relance complète du PIE non rejouée (T6 § 3) |
| P-g | V5 : une ligne « enregistree » par cran changé, aucune si valeur inchangée ; fichier écrit sur disque | PASS | `LifePlay.log:3093-3108, 3398-3401, 4410` (22 lignes « Camera : » au total, § 3 F2) ; code `LPUserSettings.cpp:101-108` ; ini sur disque `CameraSpeed=4.000000` |
| P-h | V9 : seule la section `LPUserSettings` ajoutée dans `GameUserSettings.ini` | PASS | § 3 F1 (comparaison ligne à ligne : lignes 1-50 identiques, section ajoutée l. 52-54) |
| P-i | Style (E1, E2) : slider caméra lisible, aspect acceptable, aucune valeur modifiée à l'ouverture | PASS-STATIC pour le code, accord utilisateur pour l'aspect | `LPSettingsSubsystem.cpp` diff : filtre `GetFName() != TEXT("SliderCameraSpeed")`, aucun `SetValue` ; T6 § 1 « ok pour l'apparence ». E2 résolu par restriction au seul slider caméra (§ 4) |
| P-j | Cases et SpinBox : rendu inchangé (aucune ligne de leur traitement modifiée) | PASS | diff relu en entier (§ 4) : 0 ligne `-`, hunks limités à include, `CollectSliders`, constantes, collecte, boucle slider |
## 3. Critères rejoués
Chaque ligne : contrôle, commande, attendu, obtenu, verdict. Tous les contrôles sont rejoués à neuf par le validateur
(sauf mention), éditeur fermé.
| Id | Contrôle | Commande (copie 5.8) | Attendu | Obtenu | Verdict |
|---|---|---|---|---|---|
| a1 | Branche, état git | `git branch --show-current` ; `git rev-parse --short HEAD` ; `git status --short` | `ue5.8`, `20620f6`, seuls fichiers du lot | `ue5.8`, `20620f6` ; ` M Content/BPs/GI.uasset`, ` M Content/UI/MainMenu.uasset`, ` M Source/LifePlay/LPSettingsSubsystem.cpp`, `?? LPUserSettings.cpp`, `?? LPUserSettings.h`, `?? Docs/Migration/32_Organisation_Agents.md` (hors lot) ; `git diff --cached --stat` vide | PASS |
| a2 | Fins de ligne | `git ls-files --eol -- Source/LifePlay/LPSettingsSubsystem.cpp Source/LifePlay/LPModSettingsLibrary.cpp` ; `git ls-files -o --eol -- Source/LifePlay/` ; `Tools\FileCheck.ps1 -Lot STC -OnlyChanged` | `LPSettingsSubsystem.cpp` `i/crlf w/crlf` ; neufs `w/lf` | `i/crlf w/crlf` ; neufs `i/ w/lf` ; FileCheck : `LPSettingsSubsystem.cpp` CRLF 887 / LF seul 0, `LPUserSettings.cpp` LF 115 / CRLF 0, `LPUserSettings.h` LF 59 / CRLF 0, `fichiers=9 … alertes=0`, code 0 | PASS |
| a3 | Diff C++ contre SPEC § 2 | `git diff -- Source/LifePlay/LPSettingsSubsystem.cpp` + lecture des deux neufs | conforme § 2.1, 2.2, 2.3 | voir § 4 | PASS (avec écarts annoncés E1, E3-E6 et E2 résolu) |
| V1 | Recompte du build | `Tools\Build.ps1 -Lot STC-VAL -FromLog "…\Saved\Logs\portage\STC_Build_20261010-092036.log"` | code 0 (livrable), 0 erreur, 0 avertissement compilateur, `LPUserSettings`/`LPSettingsSubsystem` compilés | `erreurs=0 avertissements=0 autres=20 unites=3` ; `Result: Succeeded` l. 53 ; `[1/6] LPUserSettings.cpp`, `[2/6] LPSettingsSubsystem.cpp`, `[3/6] Module.LifePlay.cpp` l. 42-44, link DLL l. 47 ; ligne toolchain `…MSVC\14.50.35717` l. 35 ; 20 « autres » = avertissements UBT HyperAIStudio connus (T4 § 4). Le `code=-1` de `-FromLog` signifie « code non lisible dans le journal » : le code 0 est celui du livrable T4, corroboré par `Result: Succeeded`. Chronologie : `LPSettingsSubsystem.cpp` écrit 09:20:02, journal 09:20:36-09:21:22, DLL 09:21:21 : le build a compilé la version finale (avec le filtre de nom) | PASS |
| V2 | `CompileAllBlueprints` | `Tools\RunCommandlet.ps1 -Lot STC-VAL -Commandlet CompileAllBlueprints` | 418 / 418, 0 erreur, 0 avertissement | `code=0 duree=181s erreurs=0 avertissements=0` ; 418 lignes « Loading and Compiling » et 418 lignes « a réussi » (Grep count) ; `LogInit: Display: Success - 0 error(s), 0 warning(s)` (journal l. 3239) ; `GI` l. 2019 « [0053,47] La compilation de GI a réussi ! [en 3 610 ms] », `MainMenu` l. 2800 « [0107,02] La compilation de MainMenu a réussi ! [en 431 ms] » | PASS |
| V3 | `LPTestStringCompat` | `Tools\RunCommandlet.ps1 -Lot STC-VAL -Commandlet LPTestStringCompat` | `3120 cas : compat != herite(UE4) : 0 ; moteur != herite(UE4) : 60`, code 0 | code 0 ; journal l. 1995 `=== 3120 cas : compat != herite(UE4) : 0 ; moteur != herite(UE4) : 60 ===` ; les 2 « avertissements » du résumé sont cette même ligne de résultat (émise en `Warning`, l. 1995 et 2000) | PASS |
| E1 | MD5 `MainMenu.uasset` | `md5sum` + `Tools\FileCheck.ps1 -Lot STC -OnlyChanged` | `59D1EE71…` | `59d1ee7190afb88bf51b90eda26fcc32` (2 171 521 o, = taille du `git diff --stat`) ; identique avant et après les commandlets | PASS |
| E2 | MD5 `GI.uasset` | idem | `D93785FC…` | `d93785fca90e3342575fc0b601cc2e93` (52 423 688 o) ; identique avant et après les commandlets | PASS |
| E3 | Recherche binaire `MainMenu.uasset` (latin-1, `python -I`) | lecture seule | 0 `SpinBoxCameraSpeed`, 0 `SpinBoxSexDurationMultiplier` ; présence `SliderCameraSpeed`, `SpinBoxSexDuration`, `LPUserSettingsLibrary` | `SpinBoxCameraSpeed` 0 ; `SpinBoxSexDurationMultiplier` 0 ; `SliderCameraSpeed` 7 ; `SpinBoxSexDuration` 7 ; `LPUserSettingsLibrary` 2 (taille lue 2 171 521) | PASS |
| E4 | Recherche binaire `GI.uasset` | idem | présence `ApplyCameraSpeedAtStartup` | 1 occurrence | PASS |
| F1 | `GameUserSettings.ini` (PIE) | Read de `Saved\Config\WindowsEditor\GameUserSettings.ini` et de l'instantané `D:\Game\LifePlay_Backup_5.5\STC\Saved\Config\WindowsEditor\GameUserSettings.ini` ; `md5sum` | section `[/Script/LifePlay.LPUserSettings]` `CameraSpeed=4.000000`, `bCameraSpeedSet=True` ; reste = instantané | l. 52-54 : `[/Script/LifePlay.LPUserSettings]`, `CameraSpeed=4.000000`, `bCameraSpeedSet=True` ; l. 1-50 identiques à l'instantané (comparées ligne à ligne) ; MD5 actuel `6f25ef00…`, instantané `f1be407c…` (= manifeste), 55 lignes CRLF contre 51 | PASS |
| F2 | Journal éditeur, lignes « Camera : » | Grep `Camera :` dans `Saved\Logs` (un seul fichier : `LifePlay.log`) | concordantes avec T6 § 2 | 22 lignes : 3093-3108 (P1, 16 lignes, 07:35:56 → 07:36:14 UTC, positions 2, 3, 2, 1, 2, 3, 4, 5, 6, 5, 6, 7, 6, 5, 4, 3) ; 3242 (P2 07:38:02 « vitesse 3 lue … avant 3.00 ») ; 3398-3401 (P3 07:38:21-24, 2, 3, 4, 5) ; 4301 (P4 07:45:14 « vitesse 5 lue … avant 3.00 ») ; 4410 (P5 07:46:54 « vitesse 4 enregistree »). Horaires T6 (heure locale) = UTC + 2 : cohérent avec les mtime des assets. Aucune ligne `Warning` « Camera : » | PASS |
| F3 | `GameSettings.sav` | `md5sum Saved\SaveGames\GameSettings.sav` ; mtime | `590B2CC503344F5B76971517B1DE098E` | `590b2cc503344f5b76971517b1de098e`, mtime 2026-10-08 17:20:07 (antérieur au lot) ; `Default.sav` `81f13c39…` = manifeste | PASS |
| F4 | Fichiers du lot non écrits par la VAL | `git status --short` et MD5 après les commandlets | inchangés | identiques à l'état d'entrée (cf. a1, E1, E2, `LPSettingsSubsystem.cpp` `b72671af…`) | PASS |
Journaux et résumés produits par les scripts :
- `D:\Game\LifePlay-master 5.8\Saved\Logs\portage\STC_Build_20261010-092036.log` (journal BUILD relu)
- `D:\Game\LifePlay-master 5.8\Docs\Migration\etat\ST\STC\STC-VAL_BuildLog_20261010-095001.txt` (résumé `-FromLog`)
- `D:\Game\LifePlay-master 5.8\Saved\Logs\portage\STC-VAL_CompileAllBlueprints_20261010-095013.log` et `…\Docs\Migration\etat\ST\STC\STC-VAL_CompileAllBlueprints_20261010-095013.txt`
- `D:\Game\LifePlay-master 5.8\Saved\Logs\portage\STC-VAL_LPTestStringCompat_20261010-095315.log` et `…\Docs\Migration\etat\ST\STC\STC-VAL_LPTestStringCompat_20261010-095315.txt`
- Éditeur (PIE de T6) : `D:\Game\LifePlay-master 5.8\Saved\Logs\LifePlay.log`
## 4. Diff lu en entier
`git diff --stat` : 3 fichiers, 52 insertions, 0 suppression (`LPSettingsSubsystem.cpp`) + 2 `.uasset` binaires
(`GI` 52 419 873 → 52 423 688 o, `MainMenu` 2 124 652 → 2 171 521 o) ; 2 fichiers neufs (59 et 115 lignes).
- `LPSettingsSubsystem.cpp` (5 hunks, lus) : `#include "Components/Slider.h"` ; `CollectSliders` (calquée sur `CollectSpinBoxes`) ;
4 constantes de couleur ; collecte dans la boucle existante ; boucle de style limitée par
`Slider->GetFName() != TEXT("SliderCameraSpeed")` (restriction demandée par l'orchestrateur après T3, notée dans `STC-TACHES.md`
ligne STC-T3). Appels d'écriture : `SetWidgetStyle`, `SetSliderBarColor`, `SetSliderHandleColor` ; aucun `SetValue`. Aucun
traitement de case ou de SpinBox modifié. Le `+52` annoncé par T3 reste exact (le filtre tient sur la ligne du `if` ; la
ligne de commentaire est allongée sur la même ligne).
- `LPUserSettings.h` : conforme § 2.1-2.2 (signatures, `UCLASS(config = GameUserSettings)`, valeurs 3 / faux, catégorie `LifePlay|Settings`).
- `LPUserSettings.cpp` : conforme § 2.2 ; écarts annoncés E3 (propriété GI absente), E4 (ligne `Display` de `SetCameraSpeed`,
utile, relevée au journal), E5 (pas de garde NaN : `Clamp` renvoie 7 pour NaN, estimé), E6 (nom de broche `V`). Aucun ajout
non annoncé (source relue comparée au bloc « contenu intégral » de T3 : identique ; MD5 des neufs `7D67C3F7…` et `BA74F9E3…`
= ceux de T3, FileCheck).
- Écart de traçabilité : le MD5 de `LPSettingsSubsystem.cpp` est `B72671AF…` ; T3 annonce `ede28e6d…` (avant la
restriction de l'orchestrateur) et son « Diff complet » montre l'ancienne boucle sans filtre. Le filtre est consigné dans
TACHES, pas dans une T3 corrigée (Constats C1). Pas de modification hors lot : `git status` limité aux 5 fichiers.
- Assets : diff binaire non lisible ; contenu contrôlé par E1-E4, V2 (compilation) et T5 (relevés MCP déclarés). Les relevés
de T5 (graphes, broches) ne sont pas rejoués ici (éditeur fermé).
## 5. Verdict
**PASS** pour les critères V1, V2, V3 et pour les contrôles a-f de la fiche (tous rejoués à neuf, valeurs brutes au § 3).
Le verdict ne couvre pas la preuve en jeu : V4 à V7 reposent sur des relevés PIE de l'orchestrateur et du joueur (T6),
dont seules les traces disque (ini, journal, `.sav`) ont été recomptées ; V8 et J1 restent ouverts (§ 6).
Recompte sk-recount (livrable | recompté | méthode | verdict) :
| Élément | Livrable | Recompté | Méthode | Verdict |
|---|---|---|---|---|
| Build : erreurs / avertissements / unités | 0 / 0 / 3 | 0 / 0 / 3 | `Build.ps1 -FromLog` + Grep du journal | confirmé |
| `CompileAllBlueprints` | 418 / 418 (SPEC) | 418 « Loading » / 418 « a réussi », 0 / 0 | Grep count sur le journal + ligne `Success` | confirmé |
| `LPTestStringCompat` | 3120 / 0 / 60 | 3120 / 0 / 60 | Grep journal | confirmé |
| MD5 MainMenu / GI | `59D1EE71…` / `D93785FC…` | idem (32 car. complets au § 3) | `md5sum`, `FileCheck` | confirmé |
| Occurrences binaires | T5 : 0 / 0 / 7 / 7 / 2 | 0 / 0 / 7 / 7 / 2 ; GI : 1 | python latin-1 | confirmé |
| Lignes « Camera : » | T6 § 2 | 22, horaires UTC+2 cohérents | Grep | confirmé |
| `+52` lignes C++ | T3 | 52 | `git diff --stat` | confirmé |
| MD5 `LPSettingsSubsystem.cpp` | `ede28e6d…` (T3) | `b72671af…` | `md5sum` | écart expliqué (filtre de l'orchestrateur, TACHES) |
## 6. Points à confirmer par l'utilisateur
Cases à cocher (reste pour la porte J1) :
- [ ] V8 : archive Development avec `Saved/Config/Windows` sans section `LPUserSettings` : une ligne « reprise de GI … premier lancement » au journal, section `[/Script/LifePlay.LPUserSettings]` écrite, GI et ini = `Clamp(Round(sav))` ; relever aussi la valeur de `CameraSpeed` dans `GameSettings.sav` avant migration (risque 0.2 → 1, P-e).
- [ ] J1 : slider fonctionnel et persistant entre deux lancements de l'archive ; valeur intacte après ouverture / fermeture du menu ; durée des scènes inchangée sauf action du joueur (saisie ou glisser).
- [ ] V7, glisser de la durée : non relevé séparément en PIE (T6 § 3), à regarder dans l'archive.
- [ ] V6 : relance complète du PIE (ou de l'archive) avec ini à 5 : `GI.CameraSpeed = 5` dès l'écran titre / premier lancement de partie (T6 n'a relevé que le lancement de partie).
- [ ] V9 en archive : `GameUserSettings.ini` installé (`Saved/Config/Windows/`, piège U8 « -UserDir ») reçoit la section ; `GameSettings.sav` réécrit seulement par une sauvegarde de partie.
- [ ] Constat hors périmètre T5 § 3 : sur écran titre, les 12 autres réglages changés restent écrasés par `GameSettings.sav` au lancement suivant ; à signaler au lot STF.
- [ ] Palette Blueprint (P-c) : vérifier à l'ouverture de l'éditeur que `ClampCameraSpeed` apparaît aussi (non utilisé par T5).
Tours : 14 / 40
## Constats
- C1 : `STC-T3-IMPL.md` n'a pas été mis à jour après la restriction de style au seul `SliderCameraSpeed` (MD5 et boucle du « Diff complet » périmés). Rien à corriger dans le code ; le journal CHG du style doit décrire le code actuel (`B72671AF…`), pas T3.
- C2 : `-FromLog` affiche `code=-1` quand le journal ne porte pas le code de sortie ; ne pas le lire comme un échec (preuve du succès : `Result: Succeeded`).
- C3 : `STC-T5-IMPL-BP.md` et `STC-T6-PIE.md` ne suivent pas à la lettre le gabarit IMPL / VAL de `gabarits.md` (T5 : pas de sections « Écarts à la SPEC », « Instantané », « Fichiers à commiter » numérotées, pas de ligne `Tours :` ; l'écart à la SPEC § 3.3 est dans le tableau § 1, instantané en préambule). Hors gabarit : à signaler à l'orchestrateur, sans effet sur le verdict.
- C4 : `FileCheck.ps1` refuse des chemins en argument positionnel (erreur « paramètre positionnel » au premier essai) ; contrôle fait par `-Lot STC -OnlyChanged` et `git ls-files --eol`.
- C5 : fichiers écrits par la VAL : ce livrable, les résumés et journaux des scripts listés au § 3 (dossier ignoré par git `Docs/Migration/etat/` pour la copie 5.8). Aucun fichier source, asset ou config modifié ; aucune commande git en écriture. Fichiers à commiter : sans objet.