Fiche AMEL1-V1d — Niveau N1 — Modèle prévu sonnet | utilisé claude-sonnet-5-5 — Agent lp-validator — Skills sk-protocol, sk-recount, debug-verification, lp-validate # AMEL1-V1d-VAL : validation de la fiche R3, `Tools\EssaiJournal.ps1` (2026-10-14) Verdict en une ligne : outil et rejeu **PASS** ; affirmation I3 « 17 / 48 sans réserve » **recomptée 16 / 48 (33,3 %)** ; l'outil sert comme **liste d'alertes par contrôle**, pas comme contrôle global avant remise (15 journaux sur 17 FAIL). ## 1. Fiches amont relues - `Docs\Migration\etat\EVAL2\AMEL1\R3\AMEL1-R3-IMPL.md` (lue en entier, 161 lignes). - `…\R3\AMEL1-R3-KO.csv` (48 lignes, lu en entier), `…\R3\AMEL1-R3-REJEU.csv` (408 lignes, comparé), `…\R3\AMEL1-R3-REJEU.md` (exemples), `…\R3\AMEL1-R3-EXEMPLE-NONVERIFIABLE.md` (12 premières lignes). - `Tools\EssaiJournal.regles.json` (47 lignes, lu en entier) ; `Tools\EssaiJournal.ps1` (474 lignes : lignes 440-474 lues, le reste examiné par Grep des écritures seulement, voir § 4). - Sources de contrôle : `Docs\Migration\etat\EVAL2\data\commun.csv`, `Docs\Migration\etat\BOSS\COMMUN-4-BILAN.md`, `COMMUN-10-BILAN.md`, `COMMUN-11-BILAN.md`, et les journaux de `D:\Game\LifePlay_Backup_5.5\COMMUN-*\essais\`. ## 2. Points à confirmer des IMPL (IMPL § 5) | # | Point | Résultat | |---|---|---| | 1 | Rejeu du § 5 redonne `AMEL1-R3-REJEU.csv` | **PASS** : 408 lignes contre 408, `Compare-Object` sur journal / controle / compte / seuil / verdict / exemple = 0 écart ; MD5 des deux CSV `85A079CA13216D4326AD3D2EDFA06905` ; code 1 | | 2 | Codes 0 / 1 / 2 | **PASS** pour 0 (COMMUN-5 session 2), 1 (COMMUN-9), 2 (journal absent). **BLOCKED-ecriture** pour l'exemple « 900 premières lignes » : la copie tronquée exige une redirection de shell interdite par la fiche V1d ; fichier exemple lu (900 lignes, 0 relevé), non rejoué | | 3 | Journaux inchangés (MD5) | **PASS** : MD5 des 17 journaux relevés avant et après le rejeu, identiques ; les 5 cités par l'IMPL concordent (COMMUN-2 `3F2355F4…`, C3 s1 `27E654CC941D…`, C6 s1 `85C97D9F0CBC…`, C9 `6F95AD8F…`, C13 `D99EFD4B…`) | | 4 | LF de `EssaiJournal.ps1`, `.regles.json`, `Matrice.ps1` | **PASS** pour les deux premiers (`FileCheck` : LF 474 et 47, CR 0, alertes 0 ; CR 0 aussi dans les 7 fichiers de `R3\`). `Saved\AMEL1-R3\Matrice.ps1` : **reporté** (ignoré par git, hors diff) | | 5 | Relire les 3 réserves et les 12 « non » | Réserves : § 3 V2 (F8 non retenue, Q2 et R4 maintenues). Les 12 « non » : **reporté** (hors périmètre V1d) | | 6 | Seuils à décider | **reporté** à l'orchestrateur ; éléments au § 3 V3 (seuils au bord : bloque 6 / 5 / 4, rafale 129 / 100 / 77, couple 50 / 44,5) | | 7 | Tours (`FicheStats.py`) | **reporté** (non lancé ici) | | 8 | Écart de shell de l'IMPL (`> /dev/null`, copie `head -n 900 … >`) | **reporté** : jugement de l'orchestrateur, le crochet n'a rien refusé selon l'IMPL ; non rejoué | ## 3. Critères rejoués ### V1 rejeu (PASS) Commande (17 chemins construits depuis la liste de l'IMPL § 5, sorties sous `Docs\Migration\etat\EVAL2\AMEL1\V1d\`) : `pwsh -NoProfile -File Tools\EssaiJournal.ps1 -Journal <17 chemins> -Exemples 3 -Mesures -Sortie …\V1d\V1d-REJEU.md -Csv …\V1d\V1d-REJEU.csv` Sortie : `code=1`. Recompte : 343 PASS, 48 FAIL, 17 INFO (408). Codes 0 / 1 / 2 : `C5s2 code=0`, `C9 code=1`, `absent code=2`. Journaux : MD5 avant = après (17 / 17). ### V2 KO : 12 « oui » tirés (graine 20261014, parmi les 17 « oui » sans réserve) Tirage : `Get-Random -Count 12 -SetSeed 20261014` sur les lignes `detecte = oui`. Chaque contrôle cité sonne dans `V1d-REJEU.csv` (verdict FAIL, même compte). Relecture à la source : | KO | Journal | Preuve relue | Verdict | |---|---|---|---| | B1 | C2 | `commun2_definitif:5630` PlayerCharacter feetZ=-189,0, pièce -115 (la ligne citée 5625 est l'en-tête du relevé, 5 lignes avant) | confirmé | | B2 | C2 | même contrôle que B1 (`sous_piece` 276) ; pas de ligne propre à B2 | confirmé, non isolé de B1 | | B7 | C2 | `:27443` CLOSE gap=-40,0, 16.50.14 ; « 7 lignes » = compte du CSV, `QueryAndPhysics` non sur cette ligne | confirmé | | D1 | C3 s2 | `:11767` Person_C_2147481980 feetZ=-149,8, delta 35,4, 18.56.59 = heure du bilan | confirmé | | D6 | C3 s1 | 469 « Marche : le joueur quitte » (Grep, compte 469) ; second défaut de D6 non couvert | confirmé | | HF3 C3 | C3 s1 | même boucle (première à 18.25.50.909, `:4506`) ; même signal que D6 | confirmé | | D8 | C3 s1 | `:1442` « camera a 25 cm de la tete », 18.25.11.568 | confirmé | | K6 | C6 s1 | `:29517` « Touche C : BuilderOn=0 SpaceOn=0 … », 05.37.28.070 = heure B2j du bilan (12 lignes `SpaceOn=0`) | confirmé | | HF1 C4 | C4 s2 | `:1446` PlayerCharacter feetZ=-167,4, delta 59,4, 20.28.33 = « 20:28 » du bilan | confirmé | | O5 | C8 | `:17622` PlayerCharacter feetZ=-179,4, delta 71,4, 09.13.54 (bilan 09:13:49, 5 s d'écart) | confirmé | | Q1 | C10 | `:7442` dépassement 101 cm (marge 100), `:7487` 257 cm, 10.36.34-39 ; heure de Q1 non établie au bilan | confirmé (début au bord de la marge, 1 cm) | | P5 | C9 | `:1727` PlayerCharacter delta=-12,6, 09.49.45 | **réserve** : même ligne feetZ=-95,4 / floorZ=-105,1 / delta=-12,6 aux builds C3 s2, C4 s2, C5 s1, C6 s1, C7 (exemples `flotte` de `V1d-REJEU.md` l. 181, 299, 366, 475, 622) où aucun KO de flottement n'est déclaré ; le contrôle sonne sur une constante, il ne sépare pas C9 des autres | Bilan : 11 confirmés sur 12, 1 réserve (P5). Défaut de forme répété : 6 exemples sur 12 citent l'en-tête du relevé (`PersonsDump periodique`) et non la ligne de la personne (écart de 1 à 5 lignes). ### V2 réserves - **F8 (C4, `bloque` = 6) : non retenue.** Le bilan dit « place du comptoir `_214` chevauche le bureau `_220` ». Le seul blocage du joueur sur `_214` est en **session 1** (`commun4_session1:1516`, 20.06.33). Le contrôle sonne en session 2 (6 lignes `PlayerCharacter`, composants `_36 _37 _34 Box`, `commun4_session2:9156` à `:15917`). Session 1 compte 4 lignes (1 joueur + 3 PNJ), sous le seuil 5 : le seuil 5 sépare 6 de 4 et manque la session où F8 est très probablement. À requalifier en « non » (ou « oui, mauvaise session »). - **Q2 (C10, rafale 129) : réserve maintenue (estimé).** Lignes « Show couple : bloque par » par minute (Grep) : 10.31 = 27, 10.32 = 31, 10.33 = 245, 10.36 = 24. Le bilan date Q2 à 12:36 locale = 10.36 UTC ; la rafale de 129 est à 10.33, trois minutes avant. Seuil 100 réglé sur ce seul exemple (C11 77, C13 37). - **R4 (C11, `couple_flotte` = 26) : réserve maintenue (partiel).** Exemple cité `commun11:3068` à 11.16.36 (`call_a_hooker`, root -1,3 sur Room.Box -102,2 = 100,9 cm), 14 minutes avant les faits du bilan (refus du lit 11.30.13, pose Z=150 à 11.31.18). À 11.31.21 le couple est sur `fnt_bed03` : « loin du sol » vaut aussi pour un couple légitimement sur un lit ; le refus du lit n'a aucune règle. ### V3 discrimination (17 journaux, source `V1d-REJEU.csv`) Nombre de journaux où le contrôle sonne (FAIL) : flotte 9 ; sous_piece 8 ; enfonce 5 ; releve_tardif 5 ; chevauchement 4 ; couple_flotte 3 ; hitch_max 2 ; hors_piece 2 ; Témoin C2 2 ; bloque 1 ; rafale 1 ; « le joueur quitte » 1 ; « Touche C » 1 ; zqsd_ignore 1 ; fatal 1 ; plantage 1 ; error 1. À 0 : couple_sous, fige, hitch_nb, none_fonction, none_total, notify (INFO), repetition. - **Contrôles sonnant sur ≥ 12 journaux : aucun** (maximum 9). Pas de « bruit » au sens de la fiche ; le bruit est cumulatif : 17 contrôles différents sonnent, donc 15 journaux sur 17 sont FAIL (88 %). - **COMMUN-13 (témoin négatif)** : fatal 1, plantage 1, error 13, un seul événement (plantage GPU 14.21.45, lignes d'erreur 17611 à 17954 toutes D3D12 / RHI / fenêtre d'erreur, les 5 `InputMode:UIOnly` sont tolérées) ; 0 sur les 21 autres contrôles (`-Mesures` rejoué : couple au repos 0, flotte 0, hitch max 1351 ms). Un seul témoin, et ses seuils ont été réglés dessus (couple 50 pour 44,5). - **Précision par type** (KO « oui » reliés au contrôle, selon `AMEL1-R3-KO.csv`) : les contrôles d'événement (rafale, joueur quitte, Témoin C2, Touche C, hitch, zqsd, fatal) sonnent sur 1 à 2 journaux chacun et correspondent à un fait relu. Les contrôles de position (flotte, sous_piece, enfonce, releve_tardif, chevauchement, couple_flotte, hors_piece) portent 36 des 48 cellules FAIL : flotte relié à un KO sur 1 journal de 9 (et P5 en réserve), sous_piece 5 sur 8. - **I3 recalculé** : sans contrôle ≥ 12 journaux : inchangé, 17 / 48 = 35,4 %. Avec mes corrections de V2 (P5 en réserve) : **16 / 48 = 33,3 %** sans réserve ; réserves Q2, R4, P5 : 19 / 48 = 39,6 % (F8 sortie). Sensibilité : sans `flotte` ni `sous_piece` (les deux sonnant sur ≥ 8 journaux) : B1, B2 et P5 n'ont plus de contrôle, **14 / 48 = 29,2 %** (sous la cible 30 %). Avec les seuls contrôles d'événement (D6, HF3 C3, D8, K6, HF1 C5, HF2 C2) : 6 / 48 = 12,5 %, valeur de P3. Le gain d'I3 vient donc des contrôles de position, les moins précis, réglés sur les mêmes journaux. - **Conclusion** : utilisable comme **liste d'alertes par contrôle**, avec l'exemple `chemin:ligne` de chaque alerte relu par le builder ; **pas** comme contrôle global avant remise, car le verdict global ne départage pas les builds (15 FAIL / 17, dont C11 et C12 FAIL par un seul contrôle `couple_flotte` qui confond lit et flottement). Un verdict global exploitable demanderait de classer les contrôles (bloquants : fatal, plantage, error, hitch_max, rafale, « joueur quitte » ; informatifs : le reste) et un jeu de contrôle hors des 12 builds de calibrage. ### V4 innocuité et forme (PASS) - Écritures du script : `Grep` des écritures (`Set-Content`, `Out-File`, `Add-Content`, `WriteAllText`, `New-Item`, `Remove-Item`, `Copy-Item`…) dans `Tools\EssaiJournal.ps1` : 2 occurrences en écriture, `:467` (`$Sortie`) et `:472` (`$Csv`) ; lecture `:170` (`ReadAllLines`). Journaux inchangés (MD5 17 / 17). - LF : `FileCheck.ps1` `Fins LF`, CRLF 0, CR 0, alertes 0, `fichiers=2 LF=2` (MD5 `E50366F8A012F09C0F1674548DE534C3`, `2B14634E8C1F0CC34FDDAD77F9AF69AD`). - PubCheck (9 fichiers : 2 outils + 7 de `R3\`, chemins absolus, appelé depuis `pwsh -Command` en tableau) : `PubCheck : 0 constat(s)`, `pubcheck code=0`. L'IMPL ne l'avait pas lancé. - Nom de compte ou profil (nom du compte, prénom, `C:\Users`, `AppData`) dans `R3\` : 0. Chemins `D:\Game\…` du projet : 594 lignes dans 6 fichiers (convention du dossier `etat\`, pas de chemin machine privé). ## 4. Diff lu en entier `git status --short` : `Tools/EssaiJournal.ps1`, `Tools/EssaiJournal.regles.json`, `Docs/Migration/etat/EVAL2/AMEL1/R3/` et `…/V1d/` sont **non suivis** (`??`) : pas de diff contre un tag, ces fichiers sont neufs. Lus : JSON entier (47 lignes), script lignes 440-474, `AMEL1-R3-IMPL.md` entier, les 7 fichiers de `R3\` par comptage ; le corps du script (lignes 1-439) n'a pas été relu ligne à ligne : **non vérifié** au-delà du Grep des écritures. ## 5. Verdict - Rejeu, codes, journaux inchangés, innocuité, forme : **PASS**. - Exemple « non vérifiable » tronqué : **BLOCKED-ecriture** (non rejoué ; code 2 prouvé par le journal absent). - Affirmation I3 de l'IMPL (17 / 48 sans réserve, 20 / 48 avec réserves) : **FAIL partiel** : F8 n'est pas retenue (mauvaise session), P5 passe en réserve ; recompte 16 / 48 (33,3 %) sans réserve, 19 / 48 (39,6 %) avec Q2, R4, P5. Cible 30 % tenue de peu et sensible aux seuils (29,2 % sans les deux contrôles les plus larges). - Usage : alertes par contrôle oui, verdict global avant remise non. ## 6. Points à confirmer par l'utilisateur - [ ] Requalifier F8 en « non » dans `AMEL1-R3-KO.csv` (décision de l'orchestrateur, rien corrigé ici). - [ ] Requalifier P5 en réserve (contrôle `flotte` constant de C3 s2 à C9) et décider si `flotte` reste suivi (delta -12,6 à -9,3 stable sur 7 builds). - [ ] Seuils : accepter ou non les seuils réglés sur les 12 mêmes builds ; exiger un jeu de contrôle (builds C14 et suivantes) avant de citer I3. - [ ] Usage retenu : alertes par contrôle avec exemples relus ; classement bloquant / informatif des 24 contrôles avant tout verdict global. - [ ] Citations des relevés : viser la ligne de la personne et non l'en-tête `PersonsDump`. - [ ] Témoin en jeu : sans objet (outil, aucun comportement de jeu modifié). Tours : 27 / 40 ## Constats - Trace : `Docs\Migration\etat\EVAL2\AMEL1\V1d\V1d-REJEU.csv` et `.md` — Fiche AMEL1-V1d — 2026-10-14. Commande : voir § 3 V1. Environnement : copie 5.8, branche ue5.8, PowerShell 7 ; journaux de `D:\Game\LifePlay_Backup_5.5`. Attendu (écrit avant) : mêmes 408 lignes que R3, code 1. Obtenu : identique. Lecture : le code 1 vaut dès qu'un contrôle sonne. - Fichiers écrits : `D:\Game\LifePlay-master 5.8\Docs\Migration\etat\EVAL2\AMEL1\AMEL1-V1d-VAL.md`, `…\AMEL1\V1d\V1d-REJEU.md`, `…\AMEL1\V1d\V1d-REJEU.csv`. Fichiers à commiter : A les trois.