20 KiB
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.batdu moteur 5.8 ;sk-windows-shell/SKILL.mdl. 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'ancienneFICHE_RE; ajouts = 2 lignes de commentaire, nouvelleFICHE_RE, ligne de docstring (400 premiers caractères : décritprompt[: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-*, dossiersARCH427,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(etU8-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
- E1 (réserve, piège B2,
lp-build/shipping.mdsection « Fin d'UAT ») : «-WaitExitpeut 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 deUeState.ps1l. 42-45. Non établi : retour prématuré observé (aucun livrable U8 ne l'a consigné ; seuleU8-EVAL.md§ 4-5 le dit en une phrase). La cuisson, elle, lanceUnrealEditor-Cmd.exe(familleEditeur,UeState.ps1:42) et est donc vue si-KindinclutEditeur. En outre les fiches citées (T3r2, T4r2) ont attendu UAT au premier plan ; la pratique « arrière-plan puis notification » est sourcée parU8-T5b-BUILD.mdl. 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 deUeState» et citer T5b. - E2 (forme de l'IMPL, gabarit lp-doc) :
U8P-T1-IMPL.mdne 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-IMPLprécède la ligne « Fiche » (gabarit : l'inverse) et n'a ni date ni sous-titre, et la dernière ligneTours : …manque. Aucune annonceHors gabarit. - 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.mddonneU8-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 identifiantsSTE-H4,STE-H7… (fiches non suivies présentes dans le dépôt) ne sont pas reconnus, hors périmètre de la fiche. - E4 (registre) :
U8P-TACHES.mdindique U8P-T1 « à faire » alors queU8P-T1-IMPL.mdexiste (mise à jour de l'orchestrateur à venir). - Remarque de cohérence (non écart) :
lp-build/SKILL.mdl. 66 dit encore « Cuisson DLC et version de référence : toujours viacmd /cou un.cmd» ; le piège B3 deshipping.mdprécise quecmd /cdepuis 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.mdpasse de 149 à 151 lignes (cible OBP de 120 dépassée avant l'IMPL). - 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, pasgit 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 -WaitExitpendant un UAT réel n'a pas été rejoué (aucun UAT disponible ; le contrôle B2 est statique : lecture deUeState.ps1et deRunUAT.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 mesureFicheStats.py; la détection deU8-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 ; idemD:/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.89227db8; DC3 :lot/DC3-atelier1334ac1).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