11 KiB
11 KiB
Fiche TPL1-VAL — Niveau N1 — Modèle prévu sonnet | utilisé sonnet (Sonnet 5.5) — Agent lp-validator — Skills sk-protocol, sk-recount, debug-verification, lp-validate
TPL1-VAL : validation de T1 à T5, première fiche au nouveau gabarit (2026-10-09)
Verdict global : PASS avec écarts mineurs (V1 à V6 conformes ; 3 écarts de forme, aucun bloquant). Rien n'a été modifié dans les fichiers contrôlés ; seul ce livrable et un script de lecture dans le scratchpad de session ont été écrits.
1. Fiches amont relues
D:\Game\LifePlay-master 5.5\Docs\Migration\etat\TPL1\TPL1-TACHES.md(lignes T1 à T5, VAL) : lu en entier. T1 à T5 sont « acceptée », orchestrateur seul, aucune IMPL déléguée, donc aucune IMPL à relire.- Livrables relus :
sk-orchestrate/SKILL.md,lp-doc/gabarits.mdetSKILL.md(deux branches d'addon), 10 agents,Tools/FicheStats.py, doc 29. - Instantanés de référence lus :
D:\Game\LifePlay_Backup_5.5\TPL1,TPL1-claude,TPL1-addon,TPL1-addon58(manifest.csv + fichiers).
2. Points à confirmer des IMPL amont
sans objet : aucune IMPL (TPL1-TACHES.md : T1 à T5 faites par l'orchestrateur, colonne Agent = « orchestrateur »). Points amont de la fiche : « aucun ».
3. Critères rejoués (commande → résultat)
| Id | Critère | Commande / lecture | Résultat | Verdict |
|---|---|---|---|---|
| V1a | § 3 de sk-orchestrate : bloc gabarit avec en-tête, rubriques 1, 2, 2b, 3 + « Points amont à reprendre », 4 à 9 avec budget | Read %USERPROFILE%\.claude\skills\sk-orchestrate\SKILL.md:26-39 |
bloc en ``` présent : en-tête l.27, rubriques 1 (l.28), 2 (l.29), 2b (l.30), 3 (l.31) + « Points amont à reprendre » (l.32), 4 à 8 (l.33-37), 9 avec « ≈ 40 tours, pic ≤ 150 k, ≈ 20 min » (l.38) |
PASS |
| V1b | § 4 cite <LOT>-TACHES.md, Tools/FicheStats.py, contrôle des sections |
Read l.46 et l.49 | l.46 : registre etat/<projet>/<lot>/<LOT>-TACHES.md + python -I Tools/FicheStats.py --lot <LOT> ; l.49 : « contrôler l'en-tête et les sections numérotées du gabarit de rôle » |
PASS |
| V1c | ≤ 120 lignes | Read (dernière ligne numérotée), wc -l |
57 lignes | PASS |
| V1d | frontmatter identique à l'instantané | git diff --no-index <TPL1-claude\skills\sk-orchestrate\SKILL.md> SKILL.md |
premier hunk à @@ -22,17 +22,31 @@ : lignes 1 à 21 (frontmatter et §§ 1-2) non touchées ; 17 ajouts, 3 retraits, tous dans §§ 3 et 4 |
PASS |
| V2a | MD5 gabarits.md et SKILL.md identiques entre LifePlay-Sandbox et LifePlay-Sandbox-5.8 |
Get-FileHash -Algorithm MD5 (4 fichiers) |
gabarits.md : 2D49CE0EA197F6A936F68E6A90F9B800 des deux côtés ; SKILL.md : 8F24DC1AB67E1130D1DBF043D92DE2D1 des deux côtés ; recoupé par certutil -hashfile et FileCheck.ps1 (mêmes valeurs) |
PASS |
| V2b | gabarits.md : sections INV, CART, DIAG, SPEC, IMPL, BUILD, VAL, DOC, INT, EVAL, TACHES, chacune à sections numérotées | Read gabarits.md:15-70 |
les 11 sections présentes. INV 1-4, CART 1-6, DIAG 1-5, SPEC 1-7, IMPL 1-5, BUILD 1-7, VAL 1-6, DOC 1-4, INT 1-5, EVAL 1-6. TACHES : pas de numérotation, c'est un registre (tableau + statuts), voir écart E3 | PASS (E3) |
| V2c | ≤ 120 lignes, aucun contenu de jeu | wc -l ; lecture complète |
gabarits.md 70 lignes, SKILL.md 59 lignes, des deux côtés ; aucun nom, texte ni donnée de jeu, seulement des noms d'outils et de skills | PASS |
| V2d | SKILL.md : renvoi au gabarit | git diff --no-index <TPL1-addon\...\SKILL.md> SKILL.md |
3 ajouts, 1 retrait : l'ancienne ligne « annexe, à compléter en V4 » remplacée par un renvoi à gabarits.md (10 livrables + registre) |
PASS |
| V3a | 10 agents citent leur gabarit (rôle et chemin) | git diff --no-index <TPL1-claude\agents\X.md> X.md, lu pour les 10 |
lp-builder BUILD, lp-cart CART/DIAG, lp-impl et lp-impl-max IMPL/DIAG, lp-inventory INV, lp-validator VAL : chemin complet D:\Game\LifePlay-Sandbox\Tools\claude\skills\lp-doc\gabarits.md. opus-xhigh, opus-max, fable-top : chemin complet, rôle « nommé en rubrique 7 ». lp-writer DOC/INT : chemin relatif lp-doc/gabarits.md |
PASS (E1) |
| V3b | frontmatter identique octet pour octet ; seul le corps gagne des lignes | script de lecture binaire scratchpad\fm.py (coupe aux deux ---, compare les octets) + diff lu en entier |
10/10 frontmatter identique ; 10/10 corps : préfixe conservé, ajouts seuls (de +193 à +363 octets, +1 à +3 lignes) ; 0 CRLF avant et après ; pas de BOM | PASS |
| V4a | --lot U7 → code 0, 16 fiches, U7-T7 195 tours, pic 618 k, 69.8 M |
python -I Tools/FicheStats.py --lot U7 depuis la racine 5.8 |
code 0 ; « Fiches : 16 ; hors budget : 6 ; jetons lus : 139.2 M » ; ligne U7-T7 : 195 tours, 618 k, 69.8 M ; aucune ligne U7b ni U8 dans le tableau | PASS |
| V4b | --lot U8 → code 0, 2 fiches ; U8-T1 absente de U7 |
idem --lot U8 |
code 0 ; U8-T0 (15 tours, 75 k) et U8-T1 (59 tours, 243 k, hors budget) ; U8-T1 absente du tableau U7 de V4a | PASS |
| V4c | --lot ZZZ → code 1 ; --lot U7 --since bad → code 2 |
idem | ZZZ : stderr « aucune fiche ZZZ trouvée sous %USERPROFILE%.claude\projects\D--Game-LifePlay-master-5-* », code 1. --since bad : « argument de date invalide : Invalid isoformat string: 'bad' », code 2 |
PASS |
| V4d | contre-vérification par Saved\STAT1\heavy2.py |
python -I "D:\Game\LifePlay-master 5.8\Saved\STAT1\heavy2.py" |
U7-T7 : 195 tours, 618k, 69M ; U7-T6 : 117 tours, 291k, 20M (FicheStats : 20.6 M, écart d'arrondi : heavy2 tronque, FicheStats arrondit) ; U8-T1 concordant (59 tours, 243k, 8M / 8.5 M) | PASS |
| V4e | essai en plus : la fiche courante est reconnue | python -I Tools/FicheStats.py --lot TPL1 |
code 0, 1 ligne TPL1-VAL, agent lp-validator, sonnet-5-5 (transcription en cours, mesure partielle) : l'en-tête « Fiche TPL1-VAL — … » est bien lu |
PASS |
| V5 | doc 29 : git diff = un seul ajout, le paragraphe « Lot d'essai des gabarits (TPL1 …) » |
git -C 'D:\Game\LifePlay-master 5.8' diff -- Docs/Migration/29_Projet_Stabilisation_V2.md |
1 hunk, @@ -274,3 +274,8 @@, 5 lignes ajoutées, 0 retirée : la puce « Lot d'essai des gabarits (TPL1, 2026-10-09) … » |
PASS |
| V6a | fins de ligne des fichiers de la copie 5.8 | FileCheck.ps1 -Path Docs\Migration\29_Projet_Stabilisation_V2.md,Tools\FicheStats.py ; -Lot TPL1 -OnlyChanged |
doc 29 : LF, CRLF 0, LF 281, sans BOM ; HEAD en LF (276 LF, 0 CRLF, lecture binaire de git show HEAD:) donc inchangé. FicheStats.py : LF, 139 lignes, sans BOM. Code 0, 0 alerte |
PASS |
| V6b | fins de ligne des addons et de .claude vs instantané |
FileCheck.ps1 -Lot TPL1-addon -OnlyChanged -ProjectRoot D:\Game\LifePlay-Sandbox (idem TPL1-addon58, TPL1-claude) |
addon et addon58 : 2 fichiers LF chacun, snapshot LF, 0 alerte ; .claude : 11 fichiers LF, snapshot LF, 0 alerte ; codes 0 |
PASS |
| V6c | pas de fichier non annoncé | git status --short (copie 5.8, deux addons) |
voir § 4 : copie 5.8 et addons | PASS (voir § 4 pour 3 fichiers apparus en cours de fiche) |
4. Diff lu en entier
- Copie 5.8 : doc 29 (+5, 0 retrait),
Tools/FicheStats.py(nouveau, 139 lignes, relu en entier : lecture seule des transcriptions~/.claude/projects/.../subagents/*.jsonl, aucune écriture, codes de sortie 0/1/2 conformes au docstring). - Addons :
lp-doc/SKILL.md(+3 −1) etlp-doc/gabarits.md(réécrit, 33 → 70 lignes) ; contenu des deux branches identique (MD5).git statusde chaque addon : ces deux fichiers seulement. .claude:sk-orchestrate/SKILL.md(+17 −3) ; 10 agents (+1 à +3 lignes de corps chacun, frontmatter intact).- Total : 15 fichiers modifiés + 1 nouveau ; aucun hors périmètre parmi ceux-là.
- Journal, README, plan 27 et registre TACHES : non touchés par moi. Au début de la validation,
git statusde la copie 5.8 ne montrait que doc 29 etFicheStats.py; en fin de validation il montre en plusM21_Sandbox_Addon.md,Journal_Modifications.mdetREADME.md(modifiés par l'orchestrateur pendant ma fiche, vraisemblablement l'entrée CHG-273). Ces trois fichiers n'ont pas été relus : hors périmètre V1 à V6, à valider par une fiche DOC. - Note de lecture : l'instantané
TPL1\Docs\Migrationdu Journal et du README différait de la copie 5.8 de 1 ligne (CHG-272) lors de mon premier contrôle, parce que le commit5470b78(17:39:34) est postérieur à l'instantané (17:39:17). Ce n'est pas une modification du lot TPL1.
5. Verdict
PASS avec écarts (établi, preuves fraîches au § 3). Aucune contradiction de frontmatter ni de MD5, donc pas d'arrêt.
Écarts, tous mineurs et sans effet sur les critères V1 à V6 :
- E1 : lp-writer cite le gabarit par un chemin relatif (
lp-doc/gabarits.md, skill préchargé :lp-docfigure bien dans son frontmatter) alors que les 9 autres donnent le chemin absolu. Cohérent mais non uniforme. - E2 :
sk-orchestrate/SKILL.md:36renvoie à.claude/skills/lp-doc/gabarits.md(relatif à la racine d'une copie) alors que les agents donnent le chemin de l'addon. Les deux résolvent vers le même fichier (D:\Game\LifePlay-master 5.8\.claude\skillsest un lien versD:\Game\LifePlay-Sandbox\Tools\claude\skills, vérifié parls -la), mais pas dans une copie sans ce lien. Chemin à unifier. - E3 : la consigne de V2 dit « chacune à sections numérotées » ; TACHES n'est pas numérotée (registre, pas livrable). Lecture raisonnable, signalée.
6. Points à confirmer par l'utilisateur
- Non rejoué : fonctionnement réel du préchargement des gabarits par les agents (un agent cite bien le gabarit mais seul un lancement réel le prouve). Cette fiche en est le premier essai : le livrable suit les sections 1 à 6 de VAL dans l'ordre.
- Non rejoué : le gabarit TACHES n'a pas encore servi (registre STA à créer).
- Non rejoué : aucun commit ni build ; non demandé.
- Choix entre E1/E2 (uniformisation des chemins) : décision de l'orchestrateur.
- Relecture de
21_Sandbox_Addon.md,Journal_Modifications.mdetREADME.mdde la copie 5.8, modifiés en cours de fiche (§ 4).
Constats
- Utile : « Points amont à reprendre » (rubrique 3), commandes avec valeurs attendues en rubrique 4 et budget chiffré en rubrique 9 : tout se rejoue sans question.
- Gênant : rubriques 4 (liste V1 à V6) et 8 (« chacun PASS ») se recouvrent, et « utilisé <à remplir> » demande au validateur de deviner son modèle ; la section VAL 2 (points IMPL) est « sans objet » quand il n'y a pas d'IMPL, sans formule prévue pour le dire hors gabarit.
- Ambiguïté : l'en-tête du gabarit prescrit
# <LOT>-Tn-<ROLE>mais le fichier demandé estTPL1-VAL.md(sans Tn) ; la règle «<LOT>-VAL.mdpour la VAL de lot » est en ligne 3 du gabarit, loin de l'en-tête.