179 lines
24 KiB
Markdown
179 lines
24 KiB
Markdown
|
|
Fiche COMMUN-21-FIT — Niveau N1 — Modèle prévu sonnet | utilisé claude-sonnet-5-5 — Agent lp-writer (rôle A-DOC) — Skills sk-protocol, lp-doc, lp-lot
|
||
|
|
# COMMUN-21-TESTS : fiche de tests commune de la build Development COMMUN-21 (F6 redirection des sauvegardes, KEY2 confirmation des touches) (2026-10-20)
|
||
|
|
|
||
|
|
Demande de Big Boss (`local_104ff22d`), 2026-10-20, sur ordre de l'utilisateur : « Oui, lance la build Development COMMUN-21 (F6 redirection des sauvegardes, KEY2 confirmation des touches) et prépare le cahier de tests. » Cette fiche reprend `FIX1-F6-SPEC.md` § 7.2 (E1 à E8), `FIX1-F6-IMPL.md` § 5, `FIX1-F6-VAL.md` (réserves), le lot REL-SAV (`etat\REL\SAV\REL-SAV-SPEC.md` § 3), `KEY2-BUILD-04.md` § 3 (preuve en 5 points) et `KEY2-DIAG-03.md`, puis des non-régressions courtes. Fiche **prête** : § 1 (MD5, heure) à compléter par Big Boss à la remise de la build. Rédigée sans copie UE, sans MCP, sans lancer le jeu. Aucun contenu de jeu : chaque action est décrite par sa fonction. Forme reprise de `COMMUN-20-TESTS.md`.
|
||
|
|
|
||
|
|
**Porte J4 : au plus tard le 2026-10-23 au soir** (`FIX1-F6-SPEC.md` § 7.2). F6 est acceptée si E1 à E8 sont conformes ce soir-là ; sinon retour arrière à froid, F6 passe en build 2 (`FIX1-F6-SPEC.md` § 3). Les cas F6 de cette fiche doivent donc être joués **avant** cette date.
|
||
|
|
|
||
|
|
**Hors fiche** : E9 (build Shipping, sur accord de l'utilisateur, `%LOCALAPPDATA%\LifePlay-Revival\Saved\Saves\…`) ; la branche « pièce cachée » et ERR-145 ; le libellé de l'axe de zoom (`ScrollDownUp`) ; les réserves 1 à 3 de `FIX1-F6-VAL.md` § 5 (concurrence, `..` dans un chemin, cas limites de `Saves/`), sans effet attendu à l'écran.
|
||
|
|
|
||
|
|
## 1. Build testé
|
||
|
|
|
||
|
|
| Élément | Valeur |
|
||
|
|
|---|---|
|
||
|
|
| Chemin de la build | `D:\Game\LifePlay_Build_5.8_Development_COM21\Windows\` (lancer `Windows\LifePlay.exe`) ; confirmé par Big Boss à la remise ; pas de dossier `Content\Saves` livré dans l'archive (relevé du builder) |
|
||
|
|
| Exe | `Windows\LifePlay\Binaries\Win64\LifePlay.exe` |
|
||
|
|
| MD5 de l'exe | `811f72f20545613b93eb913f384ca1b2` (identique à `Binaries\Win64\LifePlay.exe`, compilation FIX1-F6 ; contient aussi KEY2 611c2148), 335 846 400 octets |
|
||
|
|
| Date de génération | exe lié le 2026-10-20 à 19:09:31 ; paquet `BuildDebug.ps1 -SkipBuild` lancé à 19:17:55, UAT code 0 en 83 s, CheckPackage PASS, cuisson 0 erreur (0 paquet recuit : aucun asset modifié depuis COM20) ; journal `Saved\Logs\portage\BuildDebug_Development_20261020-191755.log` |
|
||
|
|
| Configuration | Development, commune à plusieurs lots |
|
||
|
|
| Base | HEAD du dépôt + sources non commitées de F6 (`ModdingExtraBPLibrary.cpp`) et de KEY2 (`LPKeyboardSubsystem.cpp`) |
|
||
|
|
|
||
|
|
MD5 des sources attendus (relevés dans les livrables amont) :
|
||
|
|
- `ModdingExtraBPLibrary.cpp` `1f93601c71d126f173fe30636aec0660` (`FIX1-F6-IMPL.md` § 1 ; `FIX1-F6-VAL.md` § 3) ;
|
||
|
|
- `LPKeyboardSubsystem.cpp` `611c2148` (`KEY2-BUILD-04.md` § 1 ; `FIX1-F6-VAL.md` § 2, B1) ;
|
||
|
|
- binaires de contrôle de la dernière compilation de F6 (à titre de repère, la build COM21 peut différer) : `LifePlay.exe` `811f72f2…` dans `FIX1-F6-IMPL.md` Constats, `181dc8e6` dans `KEY2-BUILD-04.md` § 2 (deux compilations différentes ; seul le MD5 relevé par Big Boss fait foi).
|
||
|
|
|
||
|
|
Lots et correctifs couverts :
|
||
|
|
- **FIX1-F6** (ERR-042) : les fichiers de partie `Saves/…` (personnages `.lpcharacter`) sont écrits sous `<Saved>\Saves\…` au lieu de `<jeu>\Content\Saves` ; lecture au même endroit, avec repli **par slot** sur l'ancien `Content\Saves` ; `_session` jamais de repli ; interrupteur `-LPNoSavesRedirect`. VAL statique : PASS-STATIC avec réserves ; **aucun essai en jeu** (E1 à E9 non faits, `FIX1-F6-VAL.md` § 2).
|
||
|
|
- **KEY2-IMPL-03 / BUILD-04** (décision « 1 » sur `KEY2-DIAG-03.md`) : une touche déjà liée à une autre action n'est plus retirée d'office ; le premier appui avertit, un second appui de la même touche remplace. Construit à 0 erreur ; **jamais vu en jeu**.
|
||
|
|
|
||
|
|
Les deux lots sont dans le **même** exe : l'essai porte sur « F6 + KEY2 » (`FIX1-F6-IMPL.md` § 5, B1).
|
||
|
|
|
||
|
|
## 2. Faisabilité
|
||
|
|
|
||
|
|
Machine calme : réserve « mesure » non requise.
|
||
|
|
|
||
|
|
### 2.1 Où est le dossier de sauvegarde de cette build (établi)
|
||
|
|
|
||
|
|
Source : `REL-SAV-SPEC.md` § 2 (ligne 45) et § 3 (lignes 50-61) ; `FIX1-F6-SPEC.md` résumé.
|
||
|
|
|
||
|
|
| Contexte | Racine `Saved` | Dossier des parties (nouveau) |
|
||
|
|
|---|---|---|
|
||
|
|
| **Build Development COM21, sans `LPSaveLocation.ini`** (cas prévu) | `<build>\Windows\LifePlay\Saved\` | `<build>\Windows\LifePlay\Saved\Saves\` |
|
||
|
|
| Development avec `LPSaveLocation.ini` (`[SaveLocation] SaveDir=…`) dans `<build>\Windows\LifePlay\` | `<SaveDir>\Saved\` (relance du jeu avec `-UserDir`) | `<SaveDir>\Saved\Saves\` |
|
||
|
|
| Shipping, sans `.ini` (hors fiche, E9) | `%LOCALAPPDATA%\LifePlay-Revival\Saved\` | `%LOCALAPPDATA%\LifePlay-Revival\Saved\Saves\` |
|
||
|
|
|
||
|
|
- **Ancien dossier** (ne doit **rien** recevoir) : `<build>\Windows\LifePlay\Content\Saves\`.
|
||
|
|
- Dans une Development, la garde de relance n'est active **que si `LPSaveLocation.ini` existe** (`REL-SAV-SPEC.md:45`). Vérifier d'abord, avant l'essai :
|
||
|
|
```powershell
|
||
|
|
Test-Path "D:\Game\LifePlay_Build_5.8_Development_COM21\Windows\LifePlay\LPSaveLocation.ini"
|
||
|
|
```
|
||
|
|
`False` = cas prévu. `True` = noter le contenu du fichier au BILAN et relever le dossier `<SaveDir>\Saved\Saves` à la place.
|
||
|
|
- Le journal annonce le dossier retenu : ligne `Dossier de sauvegarde : … (relance=…, source=…, motif=…)` (`REL-SAV-SPEC.md:82`) ; lire aussi `Saves redirige : racine '…'` (cas F6.1).
|
||
|
|
- Le dossier de sauvegarde « réel » des parties de l'utilisateur sur les versions précédentes (Shipping) est `%LOCALAPPDATA%\LifePlay\Saved` (`REL-SAV-DOC.md:14`) : **lecture seule**, jamais touché par cet essai.
|
||
|
|
|
||
|
|
### 2.2 Relevés avant et après (à faire à la remise de la build)
|
||
|
|
|
||
|
|
**Avant l'essai** : copier la sauvegarde du joueur, puis relever les deux dossiers. Commandes PowerShell prêtes (adapter `$B` seulement si la build est ailleurs) :
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
# Copie de sécurité de la sauvegarde existante (lecture seule sur l'original) ; le dossier de copie est neuf.
|
||
|
|
$B = "D:\Game\LifePlay_Build_5.8_Development_COM21\Windows\LifePlay"
|
||
|
|
Copy-Item -Recurse -Path "$env:LOCALAPPDATA\LifePlay\Saved" -Destination "D:\Game\LifePlay_Backup_5.5\COM21-sauvegarde-avant" -ErrorAction SilentlyContinue
|
||
|
|
|
||
|
|
# Relevé AVANT : ancien dossier (Content\Saves) et nouveau dossier (Saved\Saves), avec dates et tailles.
|
||
|
|
Get-ChildItem -Recurse -File "$B\Content\Saves" -ErrorAction SilentlyContinue | Select-Object FullName, Length, LastWriteTime | Format-Table -AutoSize
|
||
|
|
Get-ChildItem -Recurse -File "$B\Saved\Saves" -ErrorAction SilentlyContinue | Select-Object FullName, Length, LastWriteTime | Format-Table -AutoSize
|
||
|
|
|
||
|
|
# Relevé AVANT avec MD5 (pour comparer exactement à l'après) ; sortie rangée dans un fichier du lot.
|
||
|
|
Get-ChildItem -Recurse -File "$B\Content\Saves" -ErrorAction SilentlyContinue | Get-FileHash -Algorithm MD5 | Select-Object Hash, Path | Out-File "D:\Game\LifePlay_Backup_5.5\COM21-avant-Content-Saves.txt"
|
||
|
|
Get-ChildItem -Recurse -File "$B\Saved\Saves" -ErrorAction SilentlyContinue | Get-FileHash -Algorithm MD5 | Select-Object Hash, Path | Out-File "D:\Game\LifePlay_Backup_5.5\COM21-avant-Saved-Saves.txt"
|
||
|
|
```
|
||
|
|
|
||
|
|
Dossier absent ou vide = cas normal avant l'essai (`FIX1-F6-SPEC.md` § 7.2, préparation). Noter au BILAN le nombre de fichiers de chaque dossier.
|
||
|
|
|
||
|
|
**Après l'essai** (après chaque cas F6 qui écrit) : refaire les mêmes deux relevés avec `-ErrorAction SilentlyContinue` ; pour les MD5, sortie vers `…-apres-….txt`, puis :
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
Compare-Object (Get-Content "D:\Game\LifePlay_Backup_5.5\COM21-avant-Content-Saves.txt") (Get-Content "D:\Game\LifePlay_Backup_5.5\COM21-apres-Content-Saves.txt")
|
||
|
|
```
|
||
|
|
Aucune sortie = ancien dossier **identique** (attendu).
|
||
|
|
|
||
|
|
### 2.3 Journal et témoins
|
||
|
|
|
||
|
|
« Journal » = `<build>\Windows\LifePlay\Saved\Logs\LifePlay.log` (le jeu en sauvegarde un exemplaire horodaté à chaque lancement : lire le fichier du lancement jugé). Motifs exacts de F6, lus dans `ModdingExtraBPLibrary.cpp` (catégorie `LogModdingExtra`, niveau `Display` sauf mention) :
|
||
|
|
|
||
|
|
| Motif (texte exact du code) | Ligne du code | Quand |
|
||
|
|
|---|---|---|
|
||
|
|
| `Saves redirige : racine '<chemin>\Saved\Saves' (repli de lecture par slot : '<chemin>\Content\Saves')` | `:73` | **une fois**, au premier accès redirigé |
|
||
|
|
| `Saves slot '_session' : nouvelle racine` | `:83` | première lecture ou écriture de `_session` |
|
||
|
|
| `Saves slot '<Slot>' : nouvelle racine` | `:83` | première lecture ou écriture d'un slot dans le nouveau dossier |
|
||
|
|
| `Saves slot '<Slot>' : lu dans l'ancien Content/Saves (repli)` | `:83` | slot trouvé seulement dans l'ancien dossier |
|
||
|
|
| `Saves non redirige (-LPNoSavesRedirect) : ancien chemin Content/Saves` | `:102` | avec l'interrupteur, une fois |
|
||
|
|
| `Saves : <n> lecture(s) nouvelle racine \| <m> lecture(s) repli \| <k> ecriture(s)` (suivi de ` (redirection desactivee)` avec l'interrupteur) | `:269` | bilan `LoadTxt` (console `ModdingExtra.LoadTxtStats`, et à la fermeture) |
|
||
|
|
| `LoadTxt ECHEC \| '<chemin>' introuvable ou illisible` (Warning) | `:332` | **jamais attendu** sur un chemin `Saves/` pendant F6.1 à F6.4 |
|
||
|
|
| `SaveTxt ECHEC \| '<chemin>' (<n> car.) : ecriture impossible` (Warning) | `:361` | jamais attendu |
|
||
|
|
| `GetAllFilesFromFolder \| '…' : liste lue dans Content, Saves non redirige pour les listes (FIX1-F6)` (Warning) | `:136` | jamais attendu (E7) |
|
||
|
|
|
||
|
|
Relevé commun du journal pour F6 (commande prête, à lancer après chaque lancement) :
|
||
|
|
```powershell
|
||
|
|
Select-String -Path "D:\Game\LifePlay_Build_5.8_Development_COM21\Windows\LifePlay\Saved\Logs\LifePlay.log" -Pattern 'LogModdingExtra: (Display|Warning): Saves','FIX1-F6','LoadTxt ECHEC','SaveTxt ECHEC','Dossier de sauvegarde'
|
||
|
|
```
|
||
|
|
|
||
|
|
Témoins de KEY2 (`LPKeyboardSubsystem.cpp`, catégorie `LogLifePlay`, `Display`) :
|
||
|
|
- `Clavier : <n> actions et <m> axes relus depuis …\LPKeyboard.ini` (`:1467`, au lancement) ;
|
||
|
|
- `Clavier : <n> actions et <m> axes enregistres dans …` (`:1509`, à chaque écriture du fichier) ;
|
||
|
|
- messages de la **ligne d'état** du menu Clavier (à l'écran, pas au journal) : `Capture cancelled.` (`:978`), `<touche> is used by <action>. Press it again to replace, Escape to cancel.` (`:1027`), `<touche> saved. Removed from: <action>.` (`:1083`).
|
||
|
|
|
||
|
|
Compte attendu des actions : **51** au départ (`DefaultInput.ini`), 50 après un remplacement confirmé, 51 après Reset (`KEY2-DIAG-03.md` § 1 et § 4). Si le fichier `LPKeyboard.ini` de la build COM21 est neuf (dossier `Saved` neuf), il part à 51 ; s'il affiche 50 dès le départ, faire d'abord **Reset** dans le menu Clavier et le noter au BILAN.
|
||
|
|
|
||
|
|
| Cas | Fonction ou réglage dans la build ? | Dépend d'un travail non fini ou d'une observation |
|
||
|
|
|---|---|---|
|
||
|
|
| .1 à .6 (F6) | oui (FIX1-F6, compilée, VAL statique PASS-STATIC avec réserves) | jamais vu en jeu ; .4 demande une ancienne partie ; .5 est facultatif |
|
||
|
|
| .7 à .11 (KEY2) | oui (KEY2-IMPL-03, compilée à 0 erreur) | jamais vu en jeu |
|
||
|
|
| .12 à .14 | oui | non-régressions de COMMUN-20 ; POV de scène : voir COMMUN-19.1 |
|
||
|
|
|
||
|
|
## 3. Cas
|
||
|
|
|
||
|
|
Contrôle automatique : motif cherché dans le journal de jeu, lancé avant la remise par `Tools\EssaiJournal.ps1` quand il existe. Verdict, Découvreur et Heure restent vides : le BILAN les remplit. « Journal » = `Saved\Logs\LifePlay.log` de la build. « Ancien dossier » = `<build>\Windows\LifePlay\Content\Saves` ; « nouveau dossier » = `<build>\Windows\LifePlay\Saved\Saves` (§ 2.1).
|
||
|
|
|
||
|
|
### 3.1 FIX1-F6 : sauvegardes redirigées
|
||
|
|
|
||
|
|
Prérequis communs : § 2.2 fait (copie de la sauvegarde, relevés AVANT des deux dossiers, `LPSaveLocation.ini` vérifié). Jeu lancé **sans** argument, sauf le cas .6. Pour chaque cas qui écrit, refaire les relevés APRÈS.
|
||
|
|
|
||
|
|
| Cas | Lot | Correctif (CHG / ERR / ticket) | Action de l'utilisateur | Attendu | Contrôle automatique du journal | Verdict | Découvreur | Heure |
|
||
|
|
|---|---|---|---|---|---|---|---|---|
|
||
|
|
| COMMUN-21.1 | FIX1 | FIX1-F6 ; ERR-042 ; `FIX1-F6-SPEC.md` § 7.2 E1, E4 | 1. Relevés AVANT. 2. Lancer le jeu, **Nouvelle partie** ; 3. créer un personnage (création complète, jusqu'à la validation) ; 4. relever le nouveau dossier (§ 2.2) sans quitter | Le **nouveau dossier** contient `Saves\_session\Characters\*.lpcharacter` (fichiers créés, dates du jour) ; l'**ancien dossier** : relevé APRÈS **identique** au relevé AVANT (0 fichier créé ou modifié) | motif `Saves redirige : racine` : **1** ligne (recopier la racine annoncée, doit finir par `\Saved\Saves`) ; motif `Saves slot '_session' : nouvelle racine` : au moins 1 ; motif `LoadTxt ECHEC.*Saves/` et `SaveTxt ECHEC` : 0 | | | |
|
||
|
|
| COMMUN-21.2 | FIX1 | idem ; E2 | Dans la partie du cas .1, **enregistrer dans un emplacement neuf** (nom jamais utilisé) ; relever le nouveau dossier | `Saved\Saves\<Slot>\Characters\` existe et contient les mêmes familles de fichiers que `_session` (numérotés, `F…`, `C…`, `OldPlayer`, `Player` : comparer les noms avec ceux de `_session`) ; un `.sav` apparaît dans `Saved\SaveGames` ; ancien dossier toujours identique | motif `Saves slot '<Slot>' : nouvelle racine` : au moins 1 (le nom du slot est celui choisi) ; motif `Saves : .* ecriture\(s\)` au bilan : nombre d'écritures **> 0** | | | |
|
||
|
|
| COMMUN-21.3 | FIX1 | idem ; E3 | **Quitter** le jeu complètement, **relancer**, puis **Continuer** (ou Charger l'emplacement du cas .2) ; vérifier que la partie est identique (même personnage, même lieu) | Partie rechargée **sans** message « missing crucial \*.lpcharacter files » ; personnage identique ; ancien dossier toujours identique | nouvelle session de journal : motif `Saves slot '<Slot>' : nouvelle racine` : au moins 1 ; motif `lu dans l'ancien Content/Saves` : **0** ; motif `LoadTxt ECHEC` sur un chemin `Saves/` : 0 ; motif `Fatal\|Unhandled\|Critical error\|Assertion failed` : 0 | | | |
|
||
|
|
| COMMUN-21.4 | FIX1 | idem ; E5, repli de lecture | **Seulement si l'utilisateur a une ancienne partie** : recopier **une copie** d'un ancien emplacement de partie dans l'**ancien dossier** `Content\Saves\<SlotX>` (jamais l'original), avec son `.sav` dans `Saved\SaveGames` ; relancer, charger cette partie ; la rejouer un instant, **enregistrer** dans le même emplacement, quitter, relancer, recharger. Sans ancienne partie : noter « sans objet : aucune ancienne partie » | Chargement **sans** message d'erreur ; après l'enregistrement, `Saved\Saves\<SlotX>` **existe** ; le rechargement suivant lit la nouvelle racine ; le dossier copié dans l'ancien dossier reste **identique** (MD5 avant et après) | motif `Saves slot '<SlotX>' : lu dans l'ancien Content/Saves \(repli\)` : 1 au premier chargement ; motif `Saves slot '<SlotX>' : nouvelle racine` : 1 après l'enregistrement et le rechargement ; motif `LoadTxt ECHEC` : 0 | | | |
|
||
|
|
| COMMUN-21.5 | FIX1 | idem ; E6, interrupteur (**facultatif**) | Fermer le jeu. Relever les deux dossiers (AVANT), puis lancer : `& "D:\Game\LifePlay_Build_5.8_Development_COM21\Windows\LifePlay.exe" -LPNoSavesRedirect` ; **Nouvelle partie** et création d'un personnage ; quitter ; relever les deux dossiers (APRÈS). Après l'essai, **relancer sans l'argument** pour la suite | **Ancien comportement** : de nouveaux fichiers dans l'**ancien dossier** `Content\Saves\_session\Characters\` ; rien de nouveau dans le nouveau dossier pour cette partie | motif `Saves non redirige \(-LPNoSavesRedirect\)` : 1 ; motif `Saves redirige : racine` : **0** dans ce journal ; au bilan `\(redirection desactivee\)` | | | |
|
||
|
|
| COMMUN-21.6 | FIX1 | idem ; E7, E8 | Dans une session des cas .1 à .3, ouvrir la console et saisir `ModdingExtra.LoadTxtStats` (ou fermer le jeu : le bilan s'écrit aussi à la fermeture) ; recopier au BILAN les lignes du bilan `LoadTxt` | Ligne `Saves : n lecture(s) nouvelle racine \| m lecture(s) repli \| k ecriture(s)` avec **n > 0** et **k > 0** après .1 à .3 ; aucune liste n'a visé `Saves` ; la ligne `Cache de donnees pret : <x> fichier(s)` : noter x (la référence « même build sans F6 » reste à choisir : réserve de `FIX1-F6-VAL.md` § 6 ; la build COM20 contient KEY2 sans F6 et peut servir de repère) | motif `FIX1-F6` : **0** ligne (aucun avertissement de liste sur `Saves`) ; motif `Saves : .* lecture\(s\) nouvelle racine` : au moins 1 ; motif `LoadTxt CACHE ECART` : 0 | | | |
|
||
|
|
|
||
|
|
Constats à relever pour la porte J4 (hors verdict de cas) : durée du chargement d'une partie (le repli ajoute deux tests de dossier par lecture d'un slot, risque R4 de la SPEC : une gêne perceptible est à signaler) ; toute ligne `Saves slot ''` (fichier posé directement dans `Saves/` : cosmétique, `FIX1-F6-VAL.md` § 5 réserve 3).
|
||
|
|
|
||
|
|
### 3.2 KEY2 : confirmation avant de prendre une touche déjà liée
|
||
|
|
|
||
|
|
Prérequis communs : ouvrir le menu **Clavier** des réglages (menu principal ou pause). Choisir une action de départ dont on connaît la touche d'origine (**noter la touche d'origine** avant tout changement). L'exemple de la preuve (`KEY2-BUILD-04.md` § 3) est la flèche « **Map Left** » (section Map & World) et le **pavé 7**, déjà liée à l'action « **Favorite 7** » (section Favorites). Si le menu indique un autre nom, prendre une flèche et une action du même genre, et le dire. Relever le nombre d'actions du journal avant (`Clavier : <n> actions` : attendu 51, § 2.3).
|
||
|
|
|
||
|
|
| Cas | Lot | Correctif (CHG / ERR / ticket) | Action de l'utilisateur | Attendu | Contrôle automatique du journal | Verdict | Découvreur | Heure |
|
||
|
|
|---|---|---|---|---|---|---|---|---|
|
||
|
|
| COMMUN-21.7 | KEY2 | KEY2-IMPL-03 ; `KEY2-BUILD-04.md` § 3 point 1 ; `KEY2-DIAG-03.md` § 4 option 1 | Dans Map & World, cliquer **Change** sur une flèche (exemple : Map Left), puis appuyer sur le **pavé 7** (déjà pris par Favorite 7) **une seule fois**, sans maintenir | La ligne d'état affiche « … is used by **Favorite 7**. Press it again to replace, Escape to cancel. » ; **rien n'est changé** : la flèche garde sa touche d'origine, Favorite 7 garde le pavé 7 ; la capture reste en attente | motif `Clavier : .* actions et .* axes enregistres` : **aucune** ligne neuve à ce moment ; à la relecture ultérieure, 51 actions (jamais 50) | | | |
|
||
|
|
| COMMUN-21.8 | KEY2 | idem ; point 2 | Même montage que .7 (Change, pavé 7 une fois), puis appuyer sur **Échap** ; ouvrir de nouveau le menu pour relire la flèche et Favorite 7 | Ligne d'état « **Capture cancelled.** » ; la flèche et Favorite 7 gardent leurs touches d'origine ; aucune action perdue | motif `Clavier : .* enregistres` : aucune ligne neuve ; motif `Fatal\|Unhandled\|Critical error\|Assertion failed` : 0 | | | |
|
||
|
|
| COMMUN-21.9 | KEY2 | idem ; point 3 | Change sur la même flèche, pavé 7 (message d'avertissement), puis **second appui** du pavé 7 (appui bref, sans maintenir) | Ligne d'état « **NumPad 7 saved. Removed from: Favorite 7.** » (le nom d'affichage de la touche peut différer, le reste du texte est exact) ; la flèche a le pavé 7 ; Favorite 7 n'a plus le pavé 7 (elle garde l'autre touche qu'elle avait) | motif `Clavier : 50 actions et 17 axes enregistres` : 1 ligne (51 → **50**) | | | |
|
||
|
|
| COMMUN-21.10 | KEY2 | idem ; point 4 | Après le cas .9, cliquer **Reset** dans le menu Clavier (confirmer s'il le demande) ; relire la flèche et Favorite 7 | Les **51 actions** sont rendues : la flèche a sa touche d'origine, Favorite 7 retrouve le pavé 7 ; aucune ligne manquante | motif `Clavier : 51 actions et 17 axes enregistres` : 1 ligne après le Reset ; à la relance suivante : `Clavier : 51 actions et 17 axes relus` | | | |
|
||
|
|
| COMMUN-21.11 | KEY2 | idem ; point 5 | Change sur une flèche, puis **maintenir** le pavé 7 enfoncé plusieurs secondes (sans relâcher) pour provoquer la répétition de touche ; relâcher | Une touche **tenue** ne remplace pas : la ligne d'état reste sur l'avertissement « … is used by Favorite 7. Press it again… » ; ni « saved » ni « Removed from » ; Favorite 7 garde le pavé 7. Terminer par **Échap** | motif `Clavier : .* enregistres` : aucune ligne neuve pendant la touche tenue ; 51 actions inchangées | | | |
|
||
|
|
|
||
|
|
Après .7 à .11 : vérifier que le menu est revenu à l'état d'origine (51 actions) ; sinon **Reset** et le noter.
|
||
|
|
|
||
|
|
### 3.3 Non-régression
|
||
|
|
|
||
|
|
| Cas | Lot | Correctif (CHG / ERR / ticket) | Action de l'utilisateur | Attendu | Contrôle automatique du journal | Verdict | Découvreur | Heure |
|
||
|
|
|---|---|---|---|---|---|---|---|---|
|
||
|
|
| COMMUN-21.12 | KEY2 | menu regroupé de KEY2-IMPL-02 (COMMUN-20.1 à .4) | Faire défiler tout le menu Clavier et **noter l'ordre des titres de section** (capture bienvenue) | **9 sections dans cet ordre** : Movement, Camera, Map & World, Couple (scene), Actions & Interaction, Menus, Time, Favorites, System ; aucune section « Other » ; Pause dans Time, TestScenes dans System ; les flèches présentes dans Map & World **et** Couple (scene) | sans objet : constat visuel | | | |
|
||
|
|
| COMMUN-21.13 | STM1 | STM1-B6 (COMMUN-20.6, .7) | Charger la carte de **Londres** (mode par défaut) ; laisser finir le chargement ; suivre le fleuve en vue de dessus ; regarder ponts et quais ; puis lire la **dernière** ligne `[LPCity] EAU CentralLondon` du journal | **Plus aucune maison générique sur la Tamise** ; ponts, quais, jeeps, arbres intacts ; maisons des berges en place | motif `\[LPCity\] EAU CentralLondon : masque 59 centres` : au moins 1 ; `epargnees 0` sur la dernière ligne ; recopier N, `masquees` et `centres sans instance` | | | |
|
||
|
|
| COMMUN-21.14 | CAM2 | POV de scène (voir COMMUN-19.1 pour la méthode ; COMMUN-20.10) | Lancer une **scène** en pièce visible, passer en **POV** (tête du personnage 1) ; souris bouton tenu : haut, bas, gauche, droite ; **C** pour le personnage 2 et recommencer | Même comportement qu'au BILAN de COMMUN-19 / COMMUN-20 : la vue **bouge** à la souris ; noter les sens. F6 et la confirmation des touches ne doivent rien changer ici. Une partie lancée à la scène doit aussi se **charger** sans erreur (les personnages de la scène viennent du nouveau dossier) | motif `POV souris : ` : au moins 1 ligne par geste ; motif `Fatal\|Unhandled\|Critical error\|Assertion failed` : 0 ; motif `LoadTxt ECHEC` : 0 | | | |
|
||
|
|
|
||
|
|
Décompte : **14 cas** : F6 6 (.1 à .6, dont .4 conditionnel à une ancienne partie et .5 facultatif), KEY2 5 (.7 à .11), non-régression 3 (.12 à .14).
|
||
|
|
|
||
|
|
Relevés communs au journal (hors cas) : `Fatal|Unhandled|Critical error|Assertion failed` = 0 ; `Accessed None` : aucun nouveau ; toute ligne `LogModdingExtra: Display: Saves` de la session recopiée au BILAN ; relevé final des deux dossiers (§ 2.2) recopié au BILAN avec le nombre de fichiers de chacun.
|
||
|
|
|
||
|
|
## 4. Cas témoins
|
||
|
|
|
||
|
|
| Cas | VAL statique (chemin) | Verdict statique |
|
||
|
|
|---|---|---|
|
||
|
|
| COMMUN-21.1 à .6 | `Docs\Migration\etat\REL\FIX1\FIX1-F6-VAL.md` | PASS-STATIC avec réserves (V1 à V6 conformes, deux compilations à 0 erreur) ; E1 à E9 **reportés**, aucun essai en jeu |
|
||
|
|
| COMMUN-21.7 à .11 | `Docs\Migration\etat\REL\KEY2\KEY2-BUILD-04.md` | build seule : compilation à 0 erreur, `Compile LPKeyboardSubsystem.cpp` ; **aucune VAL** de comportement, preuve « à faire à la prochaine build d'essai » |
|
||
|
|
| COMMUN-21.12 | `COMMUN-20-TESTS.md` (cas .1 à .4) et son BILAN | à relever dans le BILAN de COMMUN-20 |
|
||
|
|
| COMMUN-21.13 | `COMMUN-20-TESTS.md` (cas .6, .7) et son BILAN | à relever dans le BILAN de COMMUN-20 |
|
||
|
|
| COMMUN-21.14 | `COMMUN-19-TESTS.md` (cas .1) et son BILAN | à relever dans le BILAN de COMMUN-19 |
|
||
|
|
|
||
|
|
Aucune VAL de comportement n'existe pour les cas .1 à .11 : aucun verdict statique ne vaut pour un cas de jeu.
|
||
|
|
|
||
|
|
PubCheck : à lancer par l'auteur après écriture (`pwsh -NoProfile -File Tools/PubCheck.ps1 -Fichiers Docs/Migration/etat/BOSS/COMMUN-21-TESTS.md -Depot "D:/Game/LifePlay-master 5.8"`, stdin sur `/dev/null`) ; résultat cité au compte rendu.
|
||
|
|
|
||
|
|
Tours : 5 / 40
|
||
|
|
|
||
|
|
## Fichiers à commiter
|
||
|
|
- `Docs/Migration/etat/BOSS/COMMUN-21-TESTS.md` (A).
|