119 lines
20 KiB
Markdown
119 lines
20 KiB
Markdown
|
|
Fiche U8P-T1v — Niveau N1 — Modèle prévu sonnet | utilisé claude-sonnet-5-5 (Sonnet 5.5) — Agent lp-validator — Skills lp-validate, sk-recount, sk-protocol, debug-verification
|
|||
|
|
# U8P-T1-VAL : validation de l'IMPL U8P-T1, pièges de la reprise U8 dans lp-build, lp-validate et FicheStats.py (2026-10-11)
|
|||
|
|
|
|||
|
|
Verdict global : **PASS**, avec 1 réserve de formulation (E1, piège B2) et 3 écarts mineurs de forme (E2 à E4) à trancher par l'orchestrateur. Aucun fichier modifié par la validation hors ce livrable ; aucune commande git qui écrit. Seul fichier produit hors dépôt : `FicheStats_old.py` (copie de `HEAD:Tools/FicheStats.py`, scratchpad de session, pour comparer l'ancienne et la nouvelle expression).
|
|||
|
|
|
|||
|
|
## 1. Fiches amont relues
|
|||
|
|
Tout lu en entier avant les contrôles :
|
|||
|
|
- `Docs/Migration/etat/U58/U8P/U8P-TACHES.md` (registre ; ligne U8P-T1 encore « à faire », voir E4).
|
|||
|
|
- `Docs/Migration/etat/U58/U8P/U8P-T1-IMPL.md` (seule IMPL du lot ; sa section 6 donne les 4 points à confirmer).
|
|||
|
|
- Source : `Docs/Migration/etat/U58/U8/U8-EVAL.md` § 3 à 5.
|
|||
|
|
- Sources des pièges : `U8-T2r2-BUILD.md`, `U8-T3r2-BUILD.md`, `U8-T4r2-BUILD.md`, `U8-T5br2-BUILD.md` (l. 17-18, forme de lancement), `U8-T8c-BUILD.md`, `U8-T5ar2-VAL.md`, `U8-T6-VAL.md`, `U8-T5b-BUILD.md` (l. 64), `U8-T5cr-VAL.md` (l. 14) ; `Tools/UeState.ps1` ; `RunUAT.bat` du moteur 5.8 ; `sk-windows-shell/SKILL.md` l. 11.
|
|||
|
|
- Gabarit : `D:\Game\LifePlay-Sandbox\Tools\claude\skills\lp-doc\gabarits.md` (sections IMPL, VAL, TACHES).
|
|||
|
|
|
|||
|
|
## 2. Points à confirmer de l'IMPL (section 6) : verdict un par un
|
|||
|
|
| Id | Point | Verdict | Preuve |
|
|||
|
|
|---|---|---|---|
|
|||
|
|
| IMPL-6.1 | Diffs = ajouts seuls (plus la ligne de renvoi l. 73 de `lp-build/SKILL.md`), identiques dans les deux addons (`cmp`) | **PASS** | § 3 critères 1 et 2 ; § 4 |
|
|||
|
|
| IMPL-6.2 | Chaque piège exact au regard de sa source ; B2 contre `UeState.ps1:43` | **PASS avec réserve E1** (B1, B3, V1, V2 PASS ; B2 : fait central établi, formulation « cuisson » plus forte que la source) | § 3 critère 3 |
|
|||
|
|
| IMPL-6.3 | `FicheStats.py` : `--lot U8 --since 2026-10-10T19:00` (16 fiches) et non-régression sur un autre lot | **PASS** | § 3 critères 4 et 5 |
|
|||
|
|
| IMPL-6.4 | Fins de ligne LF, sans BOM, aucun autre fichier touché (fichiers CG de l'addon 5.8 hors périmètre) | **PASS** | § 3 critères 6 et 7 |
|
|||
|
|
|
|||
|
|
## 3. Critères rejoués (commande → résultat brut)
|
|||
|
|
| # | Critère | Valeur du livrable | Recompté | Commande | Verdict |
|
|||
|
|
|---|---|---|---|---|---|
|
|||
|
|
| 1 | Diff addon 5.8 (ue5.8, HEAD `9227db8`) | SKILL.md lp-build 3+/1−, shipping.md 24+/0−, lp-validate 10+/0− | idem : `3 1`, `24 0`, `10 0` (`git diff --numstat`) ; seule suppression : la ligne de renvoi « Pièges Shipping / UAT … : `shipping.md` » (l. 73, remplacée par 2 lignes) | `git -C "D:/Game/LifePlay-Sandbox-5.8" diff -- Tools/claude/skills/lp-build Tools/claude/skills/lp-validate` (EXIT=0, lu en entier) | PASS |
|
|||
|
|
| 1b | Diff addon DC3 (lot/DC3-atelier, HEAD `1334ac1`) | idem | `3 1`, `24 0`, `10 0` ; sortie du `git diff` identique à celle de l'addon 5.8 ligne à ligne (index `2b30942..f489baa`, `c83c521..8285418`, `bfefc85..c900333` des deux côtés) | `git -C "D:/Game/LifePlay-Sandbox" diff -- <mêmes chemins>` | PASS |
|
|||
|
|
| 2 | `cmp` des 3 fichiers entre les deux addons | identiques | `cmp lp-build/SKILL.md -> 0`, `cmp lp-build/shipping.md -> 0`, `cmp lp-validate/SKILL.md -> 0` | `cmp "LifePlay-Sandbox-5.8/Tools/claude/skills/<f>" "LifePlay-Sandbox/Tools/claude/skills/<f>"` | PASS |
|
|||
|
|
| 2b | Aucun autre fichier de skill modifié | 3 fichiers par addon | 5.8 : `git diff --name-only` = 3 skills + `LPSandboxModWrappers.cpp` (CG, autre session, hors périmètre) ; DC3 : `git status --short` = 3 `M` seulement ; `git diff --cached` vide des deux côtés | `git -C <addon> status --short` ; `diff --name-only` ; `diff --cached --name-only` | PASS |
|
|||
|
|
| 2c | Hachages avant : instantané R0 = HEAD | `D72868B7`, `54472DE3`, `AB4A0437`, FicheStats `EDFE8D25` | `git show HEAD:<f> \| md5sum` = `d72868b7`, `54472de3`, `ab4a0437` ; FicheStats `edfe8d25` ; lignes avant : 149, 29, 98 → après 151, 53, 108 (+2, +24, +10 = diff) | `git show HEAD:<f> \| md5sum \| cut -c1-8` ; `wc -l` | PASS |
|
|||
|
|
| 3 | Exactitude des pièges (B1, B2, B3, V1, V2) | voir tableau § 3.1 | | lectures `Read` / `Grep` des sources | PASS, réserve E1 |
|
|||
|
|
| 4 | `FicheStats.py --lot U8 --since 2026-10-10T19:00` | code 0, 16 fiches | **EXIT=0, `Fiches : 16 ; hors budget : 2 ; jetons lus : 28.3 M`** ; lignes : U8-INT, U8-T0r, U8-T2r-T5br, U8-T5cr, U8-T7, U8-R3, U8-T2r2-T5br2, U8-T8a, U8-T7b, U8-T5cr2, U8-R4, U8-T8c, U8-T8b, U8-DOC, U8-R5, U8-R6 (16 comptées une à une) | `cd "D:/Game/LifePlay-master 5.8"; python -I Tools/FicheStats.py --lot U8 --since 2026-10-10T19:00` | PASS |
|
|||
|
|
| 5 | Non-régression | OBP 10 fiches ; STE depuis le 2026-10-11 : 1 (STE-R6) | OBP : `Fiches : 10 ; hors budget : 0`, EXIT_OBP=0 ; STE : `Fiches : 1`, STE-R6, EXIT_STE=0 | `python -I Tools/FicheStats.py --lot OBP` ; `--lot STE --since 2026-10-11` | PASS |
|
|||
|
|
| 5b | Faux positifs de l'expression | `U8P-T1` et `U8-ADDON-T1` non pris | voir § 3.2 : 30 cas, 0 faux positif sur les cas visés | `python -I -c` (regex ancienne et nouvelle, cas en dur) | PASS |
|
|||
|
|
| 5c | Ancienne contre nouvelle sur toutes les données (sans `--since`) | 10 → 16 avec `--since` | U8 : ancien 17, nouveau 23 ; perdues : `U8-T2r`, `U8-T5c`, `U8-T5c` (mal attribuées, remplacées) ; gagnées : `U8-DOC`, `U8-INT`, `U8-R3`, `U8-R4`, `U8-R5`, `U8-R6`, `U8-T2r2-T5br2`, `U8-T5cr`, `U8-T5cr2` (17 − 3 + 9 = 23 ✓). OBP : ancien 6, nouveau 10 (gagnées : OBP-R2, R5, R6, R8, sans perte) | `python -I FicheStats_old.py --lot U8` contre `Tools/FicheStats.py`, `comm` des colonnes Fiche | PASS |
|
|||
|
|
| 6 | Fins de ligne des 4 fichiers | LF, CR = 0 | `git ls-files --eol` : `i/lf w/lf attr/-text` pour les 3 skills (les deux addons) et `Tools/FicheStats.py` ; `tr -cd '\r' \| wc -c` = **0** pour les 8 fichiers (LF : 151, 53, 108 ; FicheStats 162) | `git ls-files --eol -- <f>` ; `tr -cd '\r' < f \| wc -c` | PASS |
|
|||
|
|
| 7 | BOM | aucun | 3 premiers octets `2d2d2d` (`---`), `23206c` (`# l`), `2d2d2d`, FicheStats `222222` (`"""`) : aucun `efbbbf` | `head -c3 f \| od -An -tx1` | PASS |
|
|||
|
|
| 8 | Syntaxe `FicheStats.py` | — | `ast.parse` : `syntax ok` ; le script s'exécute (critères 4 et 5) | `python -I -c "import ast; ast.parse(...)"` | PASS |
|
|||
|
|
|
|||
|
|
### 3.1 Exactitude des pièges contre leurs sources (ligne par ligne)
|
|||
|
|
| Piège | Affirmation du skill | Source relue | Verdict |
|
|||
|
|
|---|---|---|---|
|
|||
|
|
| B1 | `Target is up to date`, 0 action, ni `Creating makefile` ni `Using Visual Studio`, exe et `.pdb` à la date du build précédent | `U8-T2r2-BUILD.md` § 3 : l. 8 `Target is up to date`, l. 9 « run 0 action(s) », « Absents : `Creating makefile`, `Using Visual Studio` », exe et pdb du 10/10/2026 19:58:14 | PASS |
|
|||
|
|
| B1 | Critère « code 0 et exe à jour selon UBT, cohérent avec `git diff --name-only <commit précédent> HEAD -- Source Config Plugins LifePlay.uproject` » ; sortie vide = « up to date » attendu | `U8-T2r2-BUILD.md` § Écarts E1 : `git diff --name-only 36d1fa4 4283c13 -- Source Config Plugins LifePlay.uproject` = 0 ligne ; `U8-EVAL.md` § 3.1 (leçon) | PASS (généralisation de la commande de E1, même chemins) |
|
|||
|
|
| B1 | « Jamais "exe daté de ce build" : ce critère a arrêté U8-T2r2 sur un succès » | `U8-T2r2-BUILD.md` l. 4 et E1 (critère trop strict, accepté par l'orchestrateur) ; `U8-EVAL.md` § 3.1 | PASS |
|
|||
|
|
| B1 | Ligne ajoutée à `SKILL.md` § 9 : « aucun code changé → `Target is up to date` attendu » ; renvoi « `SKILL.md` § 9 » | `## 9.` en l. 133 de `lp-build/SKILL.md`, ligne ajoutée l. 139, avant `## 10.` | PASS |
|
|||
|
|
| B2 | `UeState.ps1` ne suit pas UAT (`dotnet … AutomationTool`, absent des motifs de `UeState.ps1:43`) | `Tools/UeState.ps1:43` : `Compilation = "Name='UnrealBuildTool.exe' OR Name='cl.exe' OR (Name='dotnet.exe' AND CommandLine LIKE '%UnrealBuildTool%')"` (numéro de ligne exact) ; moteur `RunUAT.bat:85` : `dotnet %UATExecutable% %*` avec `UATExecutable=AutomationTool.dll` (l. 19) : la ligne de commande ne contient pas `UnrealBuildTool` ; aucune des 4 familles (l. 42-45) ne nomme `AutomationTool` | PASS (établi par lecture du code) |
|
|||
|
|
| B2 | « `-WaitExit` peut rendre la main pendant qu'une cuisson, une mise en scène ou un archivage tourne encore » | Aucun livrable U8 ne rapporte un retour prématuré observé de `-WaitExit` pendant un UAT ; seule source : `U8-EVAL.md` § 4 (« `UeState -WaitExit` ne voit pas UAT ») et § 5. Une cuisson lance `UnrealEditor-Cmd.exe` (`U8-T3r2-BUILD.md` § 2 : `Took 149,69s to run UnrealEditor-Cmd.exe`), famille `Editeur` (`UeState.ps1:42`) : avec `-Kind` incluant `Editeur` (défaut : toutes) la cuisson est vue ; restent invisibles la mise en scène, le pak et l'archivage (aucun processus des 4 familles) et les intervalles entre processus fils | **Réserve E1** : « cuisson » plus fort que la source ; « mise en scène / archivage » plausible mais non observé |
|
|||
|
|
| B2 | Lancer UAT en arrière-plan, attendre la notification de fin, puis lire `AutomationTool exiting with ExitCode=<n>` et `BUILD SUCCESSFUL` | `U8-T3r2-BUILD.md` § 2 et `U8-T4r2-BUILD.md` § 2 : les deux lignes figurent dans les journaux. Mais T3r2 et T4r2 ont été lancés **au premier plan** (§ 1 des deux) et n'ont pas utilisé `UeState` ; la pratique « attente bornée puis notification » vient de `U8-T5b-BUILD.md` l. 64, non citée par le skill | PASS pour les lignes de journal ; la recommandation « arrière-plan » est sourcée par T5b, pas par T3r2 / T4r2 (rattaché à E1) |
|
|||
|
|
| B3 | Depuis pwsh : `cmd.exe /c "<fichier.cmd>"` | `U8-T8c-BUILD.md` § 1 : « Staging (depuis PowerShell 7) : `cmd.exe /c "…make_game_v2_0.cmd"` » et Écarts 1 (relancé par `cmd.exe /c` depuis PowerShell 7 : `stage code=0`) | PASS |
|
|||
|
|
| B3 | Depuis un agent sous Git Bash : `pwsh -NoProfile -Command "& cmd /c '<fichier.cmd>'"` (forme des fiches U8-T3r2 à U8-T5br2) | `U8-T3r2-BUILD.md` § 1, `U8-T4r2-BUILD.md` § 1, `U8-T5br2-BUILD.md` l. 17 : forme `pwsh -NoProfile -Command "& cmd /c '…cmd'"` identique | PASS |
|
|||
|
|
| B3 | Depuis Git Bash, `cmd /c "<fichier.cmd>"` n'exécute rien : bannière, code 0 trompeur, aucun dossier de staging créé | `U8-T8c-BUILD.md` Écarts 1 : « `cmd` a ouvert sa bannière sans exécuter le fichier (sortie `code=0` trompeuse). Vérifié par `Test-Path` : aucun dossier de staging créé » | PASS |
|
|||
|
|
| B3 | Cause « estimée : `/c` converti par MSYS » ; renvoi à `sk-windows-shell` (`cmd //c`) | Cause absente des livrables U8 (T8c ne donne pas de cause) : marquée « estimée » dans le skill et dans l'IMPL § 2 écart 3, donc non présentée comme établie ; `sk-windows-shell/SKILL.md` l. 11 : « `cmd //c` depuis Git Bash » (cohérent) | PASS (estimé, annoncé comme tel) |
|
|||
|
|
| B3 | « Toujours vérifier le produit attendu (`Test-Path`), pas seulement le code » | `U8-T8c-BUILD.md` Écarts 1 (méthode employée) | PASS |
|
|||
|
|
| V1 | Un Shipping sans `-UserDir` écrit dans `%LOCALAPPDATA%\LifePlay\Saved` (`lp-build` § 4) | `lp-build/SKILL.md` l. 71-72 (« `Saved` va dans `%LOCALAPPDATA%\LifePlay\Saved`… `-UserDir` », source U8-T5a) | PASS |
|
|||
|
|
| V1 | Un Development empaqueté écrit dans son propre `Saved` | `U8-T5cr-VAL.md` l. 14 : journal à `…\LifePlay_Build_5.8_Development_U8r_essai\Windows\LifePlay\Saved\Logs\LifePlay.log` (source non citée par le skill, mais existante) | PASS |
|
|||
|
|
| V1 | Empreinte avant ET après la fermeture du dernier jeu ; relevé « inchangé » pris après, jamais au lancement ; tout Shipping par son `.bat` (`-UserDir`) | `U8-EVAL.md` § 3.4 (leçons : relever après chaque session, insister sur le `.bat`) ; `U8-T5ar2-VAL.md` l. 23 : « 73 → 74 fichiers, 22 006 958 → 22 009 399 o » (fichiers, octets, heures d'écriture : mêmes grandeurs que le skill) | PASS |
|
|||
|
|
| V1 | Incident : caches, `LPKeyboard.ini`, `GameUserSettings.ini` réécrits pendant T6 (20:37-20:48), relevé « inchangé » pris à 20:33 | `U8-T5ar2-VAL.md` l. 23-27 (20:37 caches + `LPKeyboard.ini` ; 20:48 `GameUserSettings.ini`) ; `U8-T6-VAL.md` l. 29 (« date de 20:33 ») ; `U8-EVAL.md` § 3.4. Le skill n'affirme pas la cause (celle-ci est « estimée » à la source) | PASS |
|
|||
|
|
| V2 | Test A/B : vérifier que le réglage existe dans les deux builds avant de solliciter l'utilisateur | `U8-EVAL.md` § 3.3 ; `U8-T6-VAL.md` l. 10-11 (« la V1.5 n'offre pas le réglage Effects en jeu ») | PASS |
|
|||
|
|
| V2 | « U8-T6 annulée : la V1.5 n'a pas le réglage Effects, une session de jeu perdue » | `U8-T6-VAL.md` l. 9 (ANNULÉE, décision utilisateur) et l. 10-11 ; « une session de jeu » : `U8-EVAL.md` § 3.3 (« a coûté une session de jeu ») ; le skill cite les deux | PASS |
|
|||
|
|
|
|||
|
|
### 3.2 Test de l'expression (`python -I -c`, 30 cas ; extrait établi)
|
|||
|
|
| Lot | Chaîne | Nouvelle | Ancienne |
|
|||
|
|
|---|---|---|---|
|
|||
|
|
| U8 | `U8P-T1` | aucune | aucune |
|
|||
|
|
| U8 | `Fiche U8P-T1v` | aucune | aucune |
|
|||
|
|
| U8 | `U8-ADDON-T1` | aucune | aucune |
|
|||
|
|
| U8 | `XU8-T1` (lookbehind) | aucune | aucune |
|
|||
|
|
| U8 | `U8-T5cr2` | `U8-T5cr2` | `U8-T5c` |
|
|||
|
|
| U8 | `U8-T2r2-T5br2` | `U8-T2r2-T5br2` | `U8-T2r` |
|
|||
|
|
| U8 | `U8-R6` / `U8-R12` | `U8-R6` / `U8-R12` | aucune |
|
|||
|
|
| U8 | `U8-R6x` / `U8-R12x` | aucune | aucune |
|
|||
|
|
| U8 | `U8-DOC` / `U8-DOCS` | `U8-DOC` / aucune | aucune |
|
|||
|
|
| U8 | `U8-INTRO` / `U8-VALUE` | aucune / aucune | aucune |
|
|||
|
|
| U8 | `U8-TACHES.md` | aucune | aucune |
|
|||
|
|
| U8 | `U8-EVAL.md` | `U8-EVAL` | aucune (voir E3) |
|
|||
|
|
| U8 | `U8-T0m`, `U8-T10`, `U8-T1-CART`, `U8-VAL` | inchangés | inchangés |
|
|||
|
|
| U8 | `u8-t1`, `U8-`, `U8-T` | aucune | aucune |
|
|||
|
|
| OBP | `OBP-T2v`, `OBP-T1d` / `OBP-R8` | inchangés / `OBP-R8` | idem / aucune |
|
|||
|
|
| STE | `STE-R6` / `STE-H4` | `STE-R6` / aucune | aucune / aucune |
|
|||
|
|
|
|||
|
|
## 4. Diff lu en entier
|
|||
|
|
- Addon `D:\Game\LifePlay-Sandbox-5.8` : 3 fichiers, 3+24+10 = **37 lignes ajoutées**, 1 supprimée (le renvoi l. 73). Hunks lus : `lp-build/SKILL.md` (§ 4 renvoi allongé, § 9 +1 ligne), `lp-build/shipping.md` (+24 en fin : 3 sections B1, B2, B3), `lp-validate/SKILL.md` (§ 5, +10 : 2 puces V1 et V2).
|
|||
|
|
- Addon `D:\Game\LifePlay-Sandbox` : même diff (index blob identiques, `cmp` = 0).
|
|||
|
|
- Jeu `D:\Game\LifePlay-master 5.8`, `Tools/FicheStats.py` : 6+ / 2− ; 2 suppressions = la ligne de docstring complétée et l'ancienne `FICHE_RE` ; ajouts = 2 lignes de commentaire, nouvelle `FICHE_RE`, ligne de docstring (400 premiers caractères : décrit `prompt[:400]` de la l. 126, code non modifié). Aucun autre changement de logique.
|
|||
|
|
- Entrées du dépôt jeu non liées (`BOSS-JOURNAL.md`, `STE-*`, dossiers `ARCH427`, `CAM`, `EVAL`) : autres sessions, non comptées.
|
|||
|
|
|
|||
|
|
## 5. Verdict
|
|||
|
|
**PASS** : diffs conformes (ajouts seuls hors la ligne de renvoi), addons identiques au `cmp`, `FicheStats.py` rejoué (16 / 10 / 1 fiches, code 0), fins de ligne LF sans BOM, aucun autre fichier de skill modifié. Réserve E1 (formulation B2) et écarts de forme E2 à E4 non bloquants.
|
|||
|
|
|
|||
|
|
## 6. Points à confirmer par l'utilisateur / l'orchestrateur (cases)
|
|||
|
|
- [ ] E1 : accepter la formulation B2 telle quelle, ou la resserrer (voir écart) avant le ticket U8P-R1 / R2.
|
|||
|
|
- [ ] E2 : accepter les écarts de gabarit de l'IMPL ou demander une reprise de forme (aucune incidence sur les fichiers de skill).
|
|||
|
|
- [ ] E3 : accepter que `U8-EVAL` (et `U8-CART`, `U8-SPEC`…) soit reconnu par la recherche de repli dans les 400 premiers caractères d'un prompt qui ne commence pas par « Fiche ».
|
|||
|
|
|
|||
|
|
## Écarts numérotés
|
|||
|
|
1. **E1 (réserve, piège B2, `lp-build/shipping.md` section « Fin d'UAT »)** : « `-WaitExit` peut rendre la main pendant qu'une cuisson, une mise en scène ou un archivage tourne encore » est plus fort que la source. Établi : UAT (`dotnet AutomationTool.dll`) n'est dans aucune famille de `UeState.ps1` l. 42-45. Non établi : retour prématuré observé (aucun livrable U8 ne l'a consigné ; seule `U8-EVAL.md` § 4-5 le dit en une phrase). La cuisson, elle, lance `UnrealEditor-Cmd.exe` (famille `Editeur`, `UeState.ps1:42`) et est donc vue si `-Kind` inclut `Editeur`. En outre les fiches citées (T3r2, T4r2) ont attendu UAT au premier plan ; la pratique « arrière-plan puis notification » est sourcée par `U8-T5b-BUILD.md` l. 64. Proposition (non appliquée, rôle validateur) : écrire « ne voit pas UAT : la mise en scène, le pak et l'archivage ne sont portés par aucun processus des familles de `UeState` » et citer T5b.
|
|||
|
|
2. **E2 (forme de l'IMPL, gabarit lp-doc)** : `U8P-T1-IMPL.md` ne suit pas l'ordre des sections IMPL : le gabarit prévoit 1 Fichiers, 2 Écarts à la SPEC, 3 Instantané, 4 Ce qui n'a pas été fait, 5 Points à confirmer, 6 Fichiers à commiter ; l'IMPL insère un § 4 « Preuves rejouées » (non prévu) qui décale « Ce qui n'a pas été fait » en § 5, « Points à confirmer » en § 6 et « Fichiers à commiter » en § 7 (aucune section absente). La tête n'a ni « Agent » ni « Skills » (gabarit : `… — Agent <a> — Skills <liste>`), le titre `# U8P-T1-IMPL` précède la ligne « Fiche » (gabarit : l'inverse) et n'a ni date ni sous-titre, et la dernière ligne `Tours : …` manque. Aucune annonce `Hors gabarit`.
|
|||
|
|
3. **E3 (observation sur `FicheStats.py`, non bloquante)** : la nouvelle alternance `(?:VAL|DOC|INT|EVAL|CART|SPEC|IMPL|BUILD|STATS)` fait reconnaître, en repli (prompt ne commençant pas par « Fiche »), un nom de fichier cité dans les 400 premiers caractères (cas établi : `U8-EVAL.md` donne `U8-EVAL`, ancienne expression : aucune). Aucun faux positif observé sur les données réelles (comparaison § 3 critère 5c : 0 fiche inattendue). Aussi : la docstring (ligne 5) dépasse la largeur des autres lignes (cosmétique) ; les identifiants `STE-H4`, `STE-H7`… (fiches non suivies présentes dans le dépôt) ne sont pas reconnus, hors périmètre de la fiche.
|
|||
|
|
4. **E4 (registre)** : `U8P-TACHES.md` indique U8P-T1 « à faire » alors que `U8P-T1-IMPL.md` existe (mise à jour de l'orchestrateur à venir).
|
|||
|
|
5. **Remarque de cohérence (non écart)** : `lp-build/SKILL.md` l. 66 dit encore « Cuisson DLC et version de référence : toujours via `cmd /c` ou un `.cmd` » ; le piège B3 de `shipping.md` précise que `cmd /c` depuis Git Bash n'exécute rien. Les deux textes ne se contredisent pas (le second restreint le premier à pwsh), mais aucun renvoi croisé n'existe en l. 66. Écart déjà annoncé par l'IMPL (§ 2 écart 2) : `lp-build/SKILL.md` passe de 149 à 151 lignes (cible OBP de 120 dépassée avant l'IMPL).
|
|||
|
|
6. Fichiers non commités présents dans l'addon 5.8 mais **hors IMPL** : `Plugins/LPSandbox/Source/LPSandbox/LPSandboxModWrappers.cpp` (M), `Docs/CG/`, `Plugins/LPSandbox/Modules/Mods/lps_chargen/`, `LPSandboxCharGenMod.*` (CG, autre session) et des dossiers de skills non suivis (`sk-*`, `debug-verification`, `ue-cpp-build`, `synced`, `Tools/claude/agents/`) : non comptés, non touchés. Le ticket addon doit lister les 3 chemins du lot, pas `git add -A`.
|
|||
|
|
|
|||
|
|
## Ce qui n'a pas été rejoué
|
|||
|
|
- Aucune compilation, ni `LPTestStringCompat`, ni éditeur : sans objet (skills et script Python seulement).
|
|||
|
|
- Le comportement de `UeState.ps1 -WaitExit` pendant un UAT réel n'a pas été rejoué (aucun UAT disponible ; le contrôle B2 est statique : lecture de `UeState.ps1` et de `RunUAT.bat`). **PASS-STATIC** pour ce point.
|
|||
|
|
- Les journaux de sous-agents bruts (`~/.claude/projects/…/subagents/*.jsonl`) n'ont pas été relus au-delà de ce que mesure `FicheStats.py` ; la détection de `U8-T0m` (introuvable, signalée par l'IMPL § 5) n'a pas été recherchée.
|
|||
|
|
- Les citations « lot U8P » des skills renvoient à ce lot : leur existence est vérifiée (`U8P-TACHES.md`), pas leur commit.
|
|||
|
|
|
|||
|
|
## Commandes jouées (sortie brute résumée ci-dessus)
|
|||
|
|
- `git -C "D:/Game/LifePlay-Sandbox-5.8" diff -- Tools/claude/skills/lp-build Tools/claude/skills/lp-validate` → EXIT=0 ; idem `D:/Game/LifePlay-Sandbox` → EXIT=0.
|
|||
|
|
- `git -C <addon> status --short` / `diff --numstat` / `diff --cached --name-only` / `branch --show-current` / `rev-parse --short HEAD` (5.8 : `ue5.8` `9227db8` ; DC3 : `lot/DC3-atelier` `1334ac1`).
|
|||
|
|
- `git -C "D:/Game/LifePlay-master 5.8" diff -- Tools/FicheStats.py` (lu en entier) ; `python -I Tools/FicheStats.py --lot U8 --since 2026-10-10T19:00` (EXIT=0) ; `--lot OBP` (EXIT_OBP=0) ; `--lot STE --since 2026-10-11` (EXIT_STE=0).
|
|||
|
|
- `git ls-files --eol`, `tr -cd '\r' < f | wc -c`, `head -c3 f | od -An -tx1`, `md5sum`, `wc -l`.
|
|||
|
|
|
|||
|
|
## Fichiers à commiter
|
|||
|
|
A Docs/Migration/etat/U58/U8P/U8P-T1-VAL.md
|
|||
|
|
|
|||
|
|
Tours : 17 / 40
|