# SB1-VAL — Validation automatique du registre de mods (SB1-T5, partie automatique) **Fiche SB1-T5 — A-VAL — Modèle prévu sonnet | utilisé sonnet** - Date : 2026-10-07. Build testé : celui de SB1-T4 (compilation code 0). - Journaux copiés : `D:\Game\LifePlay-master 5.5\Saved\Logs\portage\SB1_VAL_E1.log`, `_E2`, `_E3`, `_E4`, `_E4b`, `_E5`. - Procédure : lancement par `LifePlay_pair_sandbox.bat`, attente des lignes `LogLPSandboxMods` + `Ouvert :`, copie du journal, arrêt du seul `UnrealEditor` lancé (E5 : le pilote lance et ferme lui-même). ## Tableau des essais | Essai | Attendu | Observé | Verdict | |---|---|---|---| | E1 démarrage (g, i) | 7 modules sandbox ; ordre système puis mods ; aucun refus ni prérequis manquant ; `.lpmod` du jeu lus ; mod ouvert ; `sandbox_mods.ini` créé | `Modules : 7 sandbox, 16 jeu ; ordre : lps_system_core, lps_system_animmeasure, lps_lib_scene, lps_lib_actors, lps_asset_integration, lps_couple, lps_interaction` ; les 7 en `pret` ; aucun `Warning` de lecture (`LogLifePlay: Modules : 16 .lpmod lu(s), 0 avec MODULE_GAME_VERSION`) ; `Ouvert : lps_couple`. `sandbox_mods.ini` : `Order=lps_asset_integration,lps_couple,lps_interaction`, `Open=lps_couple`, 3 cases `true` | PASS | | E2 mod requérant un mod (d) | `lps_test_bad` refusé, 3 mods prêts | `Modules : 8 sandbox …, lps_test_bad` ; `lps_test_bad [mod] refuse : un mod ne peut pas requerir un autre mod (lps_couple) : partager le composant dans une bibliotheque` (Display + Warning) ; les 3 mods `pret` ; `Ouvert : lps_couple` | PASS | | E3 prérequis absent (e) | couple et interaction « prérequis manquant », asset_integration prêt | `Modules : 6 sandbox` ; `lps_couple [mod] prerequis manquant : prerequis absent : lps_lib_scene` ; idem `lps_interaction` ; `lps_asset_integration [mod] pret`. Le `Open=lps_couple` persisté est tenté puis refusé : `Ouverture refusee : lps_couple (prerequis absent : lps_lib_scene)` puis `Ouvert : lps_asset_integration` (repli sur le premier mod prêt, § 6.4 de la SPEC) | PASS | | E4 persistance (f) | ordre du fichier, `lps_couple` désactivé, `Ouvert : lps_interaction` | ordre `…, lps_asset_integration, lps_couple, lps_interaction` ; `lps_couple [mod] desactive` ; `Ouvert : lps_interaction` | PASS (*) | | E4b (essai ajouté) ordre non alphabétique | l'ordre du fichier prime | avec `Order=lps_interaction,lps_asset_integration,lps_couple` : `ordre : …, lps_lib_actors, lps_interaction, lps_asset_integration, lps_couple` | PASS | | E5 non-régression Mesure (h) | tournée identique, mêmes fichiers, `Ouvert : lps_asset_integration` | `AnimPipeline.ps1 -Pack freeanims -From 5 -To 5` : `verdict : ok (435 s)`, `Chaine terminee`, code de sortie 0 ; journal `SB1_VAL_E5.log` : `Ouvert : lps_asset_integration` (ordre `lps_couple, lps_interaction, lps_asset_integration`) ; 32 fichiers de même noms (10 `vignettes\*.png`, 10 `planches\*.jpg`, 10 `planches\*.json`, 2 `retarget_pose_*.txt`) ; 10 `planches\*.json` identiques ; `eval_Bridget.csv` / `eval_Michael.csv` identiques (SHA-256) ; 20 images (10 png, 10 jpg) d'empreinte différente | PASS pour les fichiers et JSON ; images : voir ci-dessous | (*) L'ordre demandé en E4 (`lps_asset_integration, lps_couple, lps_interaction`) est aussi l'ordre alphabétique par défaut : il ne prouve pas à lui seul la lecture du fichier ; E4b le prouve. ### E5 — images dont l'empreinte diffère (tailles en octets, référence → nouveau) Tous les noms et les `.json` sont identiques ; écarts de taille faibles (rendu non déterministe attendu), à juger par l'utilisateur. | Fichier | Référence → nouveau | |---|---| | planches\AS_AirKiss.jpg | 148582 → 148574 | | planches\AS_AttackInLevitation2.jpg | 139248 → 139244 | | planches\AS_ChillDriving.jpg | 187677 → 187692 | | planches\AS_ComboHands.jpg | 159898 → 159913 | | planches\AS_EatingOnParty.jpg | 141183 → 141291 | | planches\AS_FlyingUp.jpg | 119016 → 119041 | | planches\AS_GoForward.jpg | 150693 → 150742 | | planches\AS_Rest.jpg | 138519 → 138633 | | planches\AS_RightLegKick2.jpg | 88070 → 88116 | | planches\AS_Talk.jpg | 144361 → 144274 | | vignettes\AS_AirKiss.png | 261580 → 261353 | | vignettes\AS_AttackInLevitation2.png | 253439 → 253838 | | vignettes\AS_ChillDriving.png | 289382 → 289345 | | vignettes\AS_ComboHands.png | 268915 → 270145 | | vignettes\AS_EatingOnParty.png | 263792 → 263826 | | vignettes\AS_FlyingUp.png | 263466 → 263846 | | vignettes\AS_GoForward.png | 256944 → 256957 | | vignettes\AS_Rest.png | 242586 → 242608 | | vignettes\AS_RightLegKick2.png | 265358 → 265512 | | vignettes\AS_Talk.png | 260640 → 259551 | Référence : `D:\Game\LifePlay_Backup_5.5\SB1-VAL\reference_freeanims\` (+ `eval_*.csv` avant). Nouveau : `D:\Game\LifePlay-master 5.5\Saved\AnimPipeline\freeanims\sandbox\`. ## Observations - Le fichier `sandbox_mods.ini` n'existait pas avant E1 (créé au premier lancement avec l'ordre alphabétique, conforme à la SPEC § 4). - E2 a inscrit `lps_test_bad` dans l'ini (Order et Enabled) ; E3 et E5 ont modifié `Open` (le mod ouvert est mémorisé à chaque ouverture, dont celle de la tournée Mesure : `Open=lps_asset_integration` après E5). Le fichier a été remis à l'état demandé. - Le pilote (étape 5) lance `LifePlay_interaction_sandbox.bat` et non `LifePlay_pair_sandbox.bat`. - Aucun avertissement de lecture sur les 16 `.lpmod` du jeu (le registre ne journalise pas les modules du jeu un par un ; seul le total est donné). ## État final des fichiers remis en place - `Test-Path ...\Modules\Mods\lps_test_bad` : False (dossier supprimé). - `Test-Path ...\Modules\System\0010_lps_lib_scene\lps_lib_scene.lpmod` : True ; `D:\Game\LifePlay_Backup_5.5\SB1-VAL\0010_lps_lib_scene` : absent (déplacé retour). - Aucun processus `UnrealEditor` actif à la fin. - `D:\Game\LifePlay-master 5.5\Saved\sandbox_mods.ini` : ``` [Mods] Order=lps_couple,lps_interaction,lps_asset_integration Open=lps_couple [Enabled] lps_couple=true lps_interaction=true lps_asset_integration=true ``` - `Saved\sandbox_mode.txt` : `Pair` (remis par le pilote). `git status` de l'addon : aucun fichier parasite sous `Modules\`. - Aucun source, `.lpmod` existant ni script modifié ; aucun commit. ## À contrôler visuellement par l'utilisateur - (a) Chaque mod (Couple, Interaction, Asset integration) s'ouvre depuis la barre latérale et se comporte comme l'ancien mode. - (b) Enchaînement couple → interaction → asset integration → couple sans résidu (caméra, vue libre, animation automatique). - (c) Un mod décoché n'est pas ouvrable (▶ inactif) ; décocher le mod ouvert ramène la scène neutre. - Aspect de la barre latérale : sections Mods, Système (case « modules masqués »), Jeu (16 modules, repliée), bouton ◀ / ▶, ⚠ avec infobulle. - Images E5 qui diffèrent : les 20 fichiers du tableau ci-dessus (comparer vignettes et planches avec la référence). ## Verdict partiel **PASS** de la partie automatique (E1 à E5 : critères d, e, f, g, h, i satisfaits ; images E5 : écarts de pixels à juger visuellement). Critères a, b, c restent à contrôler par l'utilisateur. ## Contrôle visuel utilisateur (2026-10-07) | Critère | Verdict | |---|---| | (a) chaque mod s'ouvre depuis la barre latérale et se comporte comme l'ancien mode | PASS (« pas de défauts constatés ») | | (b) enchaînement couple, interaction, asset integration, couple sans résidu | PASS (« pas de défauts constatés ») | | (c) mod décoché non ouvrable ; décocher le mod ouvert ramène la scène neutre | PASS (« pas de défauts constatés ») | | Aspect de la barre latérale | PASS (« pas de défauts constatés ») | | Images E5 (20 fichiers qui diffèrent) | PASS (« pas de défauts constatés ») | ## Verdict global du lot SB1 **PASS** (partie automatique E1 à E5 + contrôle visuel utilisateur). Commits addon : `82dae58380b76c45f60541fd7cb5a0a409700e10` (code) puis commit de pin README ; tag `lot-SB1-valide`. ## Modèles par fiche | Fiche | Modèle prévu | Modèle utilisé | |---|---|---| | SB1-T1 | opus | opus | | SB1-T2 | opus | opus | | SB1-T3 | sonnet | sonnet | | SB1-T4 | haiku | haiku | | SB1-T5 | sonnet | sonnet | | SB1-T6 | sonnet | sonnet |