11 KiB
Fiche STM1-B1-VAL — Niveau N1 — Modèle prévu sonnet | utilisé claude-sonnet-5-5 — Agent lp-validator — Skills lp-validate, sk-recount, sk-protocol, debug-verification
STM1-B1-VAL : validation de la trace C++ du choix de la ville (A1 à A6 de STM1-SPEC-01 § 7) (2026-10-20)
Copie D:\Game\LifePlay-master 5.8, branche ue5.8. Jeton UE : session STM1 (BUILD-GO STM1-B1, 06:30). Aucun fichier du projet modifié par ce validateur.
1. Fiches amont relues
Docs\Migration\etat\REL\STM1\STM1-SPEC-01.md(en entier ; § 2, 3, 7 : critères A1-A6).Docs\Migration\etat\REL\STM1\STM1-IMPL-01.md(en entier).- Résumé de build
Docs\Migration\etat\REL\STM1\STM1_Build_20261020-022610.txt(en entier) et journalSaved\Logs\portage\STM1_Build_20261020-022610.log(greps ciblés). - Gabarit VAL de
lp-doc\gabarits.mdlu avant écriture.
2. Points à confirmer des IMPL
| Point (STM1-IMPL-01 § 4 et § 6) | Verdict | Preuve |
|---|---|---|
| La compilation passe (« non compilé » en IMPL) | PASS | § 3 A2 : code 0, 0 erreur, 4 unités dont les 3 fichiers du lot |
Présence réelle des propriétés du GI actuel (Cities, SaveGameInstance, CityToMoveTo, StreetMapStatic, StreetMap, StaticMeshComponent) |
PASS (au menu) | A3 : 0 PROPRIETE ABSENTE ; CITIES, DEMANDE, STREETMAP, POSE lus. SaveGameInstance : pas de ligne SAUVEGARDE, donc non établi (objet nul au menu, ou aucune sauvegarde chargée) : reporté |
trace active, CITIES n=…, POSE …000Dummy, 0 PROPRIETE ABSENTE au premier lancement |
PASS partiel | POSE None et non …000Dummy au menu (§ 3 A3) : reporté à la partie en jeu (COMMUN) |
CityToMoveTo posé à chaque MoveCity (SPEC § 8) |
reporté | non joué ; T1 et T2e couvrent le cas |
Type exact de Save.City (chaîne ou texte) |
reporté | aucune sauvegarde chargée au menu |
| Unity build : catégorie définie une fois | PASS | build 0 erreur ; [Adaptive Build] Excluded from LifePlay unity file: LifePlay.cpp, LPAssetRegistryHelpers.cpp, LPCityTraceSubsystem.cpp (journal ligne 36) |
3. Critères rejoués
| # | Critère | Commande | Sortie brute | Verdict |
|---|---|---|---|---|
| A1 | Aucun Content/Plugins/Config hors CG2 |
git status --short -- Content Plugins Config |
M Content/UI/CharGen.uasset / M Content/UI/CharGenSlider.uasset / M Content/UI/VisualMorph.uasset ; code 0 |
PASS (exactement les 3 fichiers CG2 attendus) |
| A2 | 0 erreur, aucun avertissement dans les fichiers du lot | Tools\Build.ps1 -Lot STM1-B1-VAL -FromLog Saved/Logs/portage/STM1_Build_20261020-022610.log |
code=-1 duree=0s erreurs=0 avertissements=1 autres=20 unites=4 (le -1 est le code « journal existant, pas de compilation » ; le code 0 est dans STM1_Build_20261020-022610.txt l. 5 : code de sortie : 0, duree 77 s). Seul avertissement : LPCameraModeSubsystem.cpp(1643) : warning C4701 ... 'Aim'. Même ligne dans STG_Build_20261014-154145.log:21 (LPCameraModeSubsystem.cpp(1643) : warning C4701). Unités : LifePlay.cpp, LPAssetRegistryHelpers.cpp, LPCityTraceSubsystem.cpp, Module.LifePlay.cpp. Chaîne : MSVC 14.50.35717. Les 20 « autres » sont des Warning: Plugin 'HyperAIStudio' does not list plugin … (UBT, hors lot) |
PASS (C4701 antérieur, confirmé) |
| A3 | Lignes [LPCity] en jeu |
UeState.ps1 avant : processus=0 editeur=0 compilation=0 shaders=0 jeu=0, code 0 ; lancement UnrealEditor.exe ... -game -windowed -ResX=1024 -ResY=576 -log -abslog=...\STM1_VAL_game.log (pid 34808, départ 02:37:38) ; arrêt par Stop-Process -Id 34808 à ≈ 02:40 (≈ 120 s) ; UeState.ps1 après : processus=0 editeur=0 compilation=0 shaders=0 jeu=0, code 0 |
voir ci-dessous | PASS (réserve : POSE None, pas 000Dummy) |
| A4 | Rien à l'écran | git diff des 3 M + lecture des 2 A ; Grep AddOnScreenDebugMessage|GEngine|PrintString sur .h et .cpp |
.h : No matches found ; .cpp : Grep Set|Write|CopyComplete|ImportText|ProcessEvent|AddOnScreenDebugMessage|GEngine|Print ne rend que 4 lignes FString::Printf (l. 77, 137, 203, 208) ; diff des 3 M : uniquement UE_LOG et la déclaration de catégorie |
PASS-STATIC |
| A5 | Corps sous #if !UE_BUILD_SHIPPING, vide en #else |
lecture LPCityTraceSubsystem.cpp |
#if !UE_BUILD_SHIPPING l. 7 ; #else l. 279 ; #endif l. 304 ; en #else, Initialize, Deinitialize, Tick (rend false), Sample, DumpNow sans corps utile. En-tête sans #if (UHT) |
PASS-STATIC (build Shipping non compilée : absence de symbole non mesurée) |
| A6 | Lecture seule du GI | lecture du .cpp en entier |
Seuls GetObjectPropertyValue, GetObjectPropertyValue_InContainer, ContainerPtrToValuePtr, FScriptArrayHelper (Num, GetRawPtr), ExportTextItem_Direct (vers un FString local), GetPropertyValue, GetStaticMesh(). Aucun Set* sur le GI, ni CopyCompleteValue, ImportText, ProcessEvent. Les écritures portent sur les membres de suivi (LastSave, ReportedMissing…) et sur l'enregistrement de la commande console LP.CityTrace |
PASS-STATIC |
A3 : lignes [LPCity] (journal Saved\Logs\portage\STM1_VAL_game.log, 2120 lignes, menu atteint : l. 1909 LogLifePlay: Display: M1e : marche coupee par le menu MainMenu_C)
Grep \[LPCity\] : 5 lignes (recompte par Grep LogLPCity|NOT VALID|RESOLUTION : 5)
1613:[2026.10.20-00.38.38:569][ 0]LogLPCity: [LPCity] trace active (releve toutes les 0,25 s, ecrit au changement)
1904:[2026.10.20-00.38.46:496][ 1]LogLPCity: [LPCity] CITIES n=281 [0]='Central London' sm='/Game/Heavy/StreetMap/CentralLondon.CentralLondon' mesh='/Game/Heavy/StreetMap/Static/CentralLondon.CentralLondon' ; CentralLondon a l'indice 0
1905:[2026.10.20-00.38.46:501][ 1]LogLPCity: [LPCity] DEMANDE '' sm='/Game/Heavy/StreetMap/' mesh='/Game/Heavy/StreetMap/Static/'
1906:[2026.10.20-00.38.46:501][ 1]LogLPCity: [LPCity] STREETMAP None
1907:[2026.10.20-00.38.46:501][ 1]LogLPCity: [LPCity] POSE None (t=7.9 s)
PROPRIETE ABSENTE: 0.RESOLUTION: 0.NOT VALID: 0. Aucune ligneLogBlueprintUserMessagescontenant un nom de ville ouNOT VALID(seule ligne BP trouvée : l. 1781[CentralLondon_C_1] STARTUPCHECK - Level Blueprint BeginPlay, nom de niveau et non une trace de ville).- Attendu
trace active: présent.CITIES n=: 1 ligne (281 villes, Central London à l'indice 0).POSE: 1 ligne, maisNone, pas000Dummy. - Info clé : au menu, la ville demandée est la valeur par défaut de la structure
City(DEMANDE '', chemins/Game/Heavy/StreetMap/et.../Static/terminés par/), et aucunMoveCityn'a eu lieu :STREETMAP None,POSE None, aucune ligneRESOLUTION. Le choix de la ville (C1-C4 de la SPEC § 1) n'est donc pas tranché par ce lancement : il l'est en partie (nouvelle partie / Continuer), non jouée ici. - Pas de ligne
SAUVEGARDE: l'objetSaveGameInstanceest nul ou sans propriétéCitylisible au menu, sansPROPRIETE ABSENTEcorrespondant. Non établi.
MD5 des 5 sources contre STM1-IMPL-01 § 2
Commande : md5sum des 5 fichiers (et Tools\FileCheck.ps1, code 0, fichiers=5 LF=5 alertes=0).
| Fichier | MD5 IMPL-01 § 2 | MD5 recompté | Verdict |
|---|---|---|---|
LifePlay.h |
df5da24a8457f802b87eb87e103e4352 | df5da24a8457f802b87eb87e103e4352 | confirmé |
LifePlay.cpp |
c3d0b3b7ad8210404284f1faf1b27bbd | c3d0b3b7ad8210404284f1faf1b27bbd | confirmé |
LPAssetRegistryHelpers.cpp |
61b641efdff8942d0cceb827e5668c8e | 61b641efdff8942d0cceb827e5668c8e | confirmé |
LPCityTraceSubsystem.h |
47769ceca14092febc943cd499233117 | 47769ceca14092febc943cd499233117 | confirmé |
LPCityTraceSubsystem.cpp |
e5a0d22de9889c9265456c9b4f66fa59 | e5a0d22de9889c9265456c9b4f66fa59 | confirmé |
Fins de ligne : LF pour les 5 (CRLF 0, CR 0), comme IMPL-01 (FileCheck.ps1) ; git ls-files --eol : i/lf w/lf pour les 3 fichiers suivis. Numstat IMPL (3, 1, 13 ; 47 et 304 lignes) : diff relu, cohérent (3 + 1 + 13 lignes ajoutées ; wc FileCheck : 12, 25, 89, 47, 304 lignes).
4. Diff lu en entier
5 fichiers : LifePlay.h (+3, déclaration LogLPCity), LifePlay.cpp (+1, DEFINE_LOG_CATEGORY(LogLPCity)), LPAssetRegistryHelpers.cpp (+13 : trace T1 avant le dédoublonnage existant, qui est inchangé), LPCityTraceSubsystem.h (A, 47 lignes), LPCityTraceSubsystem.cpp (A, 304 lignes). Conforme à la SPEC § 3 (T1, T2a-T2e, T3) ; aucun ajout non demandé. Les clés de ReportedMissing, la commande LP.CityTrace et le désenregistrement dans Deinitialize sont conformes à IMPL-01 § 3. git status --short -- Source : exactement ces 5 fichiers.
5. Verdict
PASS avec réserves. A1, A2 : PASS. A3 : PASS pour les critères de la SPEC (CITIES et POSE présents, 0 PROPRIETE ABSENTE), avec la réserve que POSE vaut None au menu et non 000Dummy. A4, A5, A6 : PASS-STATIC. Non mesuré : la compilation Shipping (absence de symbole), les lignes SAUVEGARDE et RESOLUTION, le comportement après MoveCity (nouvelle partie, Continuer).
Témoin en jeu : à créer (cas COMMUN pour une nouvelle partie et un Continuer ; attendu : DEMANDE, RESOLUTION, STREETMAP, POSE d'une ville, lignes SAUVEGARDE en Continuer). À demander à Big Boss (COMMUN-14-TESTS.md).
Suite en jeu (ajoutée par la session STM1 le 2026-10-20, ligne proposée par etat\BOSS\COMMUN-14-BILAN.md § 4) : COMMUN-14.1 PASS (2026-10-20 07:33) ; COMMUN-14.2 KO partiel, cause hors trace (2026-10-20 07:48) ; COMMUN-14.3 PASS estimé et COMMUN-14.18 PASS (2026-10-20 08:53).
6. Points à confirmer par l'utilisateur
- Jouer jusqu'au symptôme (nouvelle partie puis Continuer) sur la build Development commune et transmettre
Saved\Logs\LifePlay.log: la signature C1-C4 (SPEC § 1) se lit alors. - Accepter que
POSE Noneau menu (avant toutMoveCity) est le comportement normal de la trace, et que la signature « 000Dummy au démarrage » n'est attendue qu'après le chargement d'une partie.
Fichiers écrits, fichiers à commiter
- Écrits par le validateur : ce livrable ;
Saved\Logs\portage\STM1_VAL_game.log(journal du lancement de contrôle, hors git) ;Docs\Migration\etat\REL\STM1\STM1-B1-VAL_BuildLog_20261020-023740.txt(écrit sousST\STM1\parEtatDir.ps1, rangé sousREL\STM1\par Big Boss le 2026-10-20 ; résumé produit parBuild.ps1 -FromLog, dont le code de sortie-1est celui d'un recompte sans compilation). - À commiter (A) :
Docs/Migration/etat/REL/STM1/STM1-B1-VAL.md,Docs/Migration/etat/REL/STM1/STM1-B1-VAL_BuildLog_20261020-023740.txt. Aucun fichier du projet (Source, Content) modifié par ce lot. À exclure des tickets STM1 :Content/UI/CharGen.uasset,CharGenSlider.uasset,VisualMorph.uasset(CG2). - État du jeton UE :
UeState.ps1= 0 avant et après ; processus 34808 arrêté par son pid.
Tours : 11 / 25 (déclaré ; FicheStats.py fait foi)
À verser : lp-validate § 2 ou § 5 — un Build.ps1 -FromLog rend code=-1 (recompte sans compilation) et écrit un fichier dans etat\ST\<lot>\ ; le code réel est dans le résumé du BUILD. Le crochet ecriture-gardien refuse un Set-Content vers %TEMP% hors \claude\ pour lp-validator : relever le pid par la sortie de la commande de lancement.