3.9 KiB
Fiche P7-H2v — Niveau N1 — Modèle prévu sonnet | utilisé <modèle déclaré par ton environnement> — Agent lp-validator — Skills sk-protocol, sk-recount, lp-validate
1 Objectif : verdict PASS / FAIL sur la nouvelle version du crochet ecriture-gardien.py (P7-H2) : plus aucun faux positif des incidents, et rien d'affaibli, prouvé par des cas adverses écrits par toi — lot P7, registre P7-TACHES.md ligne H2v
2 Complexité : a1 b1 c1 d0 e1 f1 = 5 → N2, ramené à N1 (motif : critères et jeu de cas fournis ; les cas adverses sont la part de jugement)
2b Agent : lp-validator (modèle surchargé : aucun) — préchargés : sk-protocol, sk-recount — à invoquer : lp-validate — outils retirés : Edit
3 Contexte : livrable D:\Game\LifePlay-master 5.8\Docs\Migration\etat\AG\P7\P7-H2.md et fiche ...\P7\fiches\P7-H2.md (rubrique 4b = ce qui doit passer, ce qui doit rester refusé). Fichiers : D:\Game\LifePlay_Backup_5.5\P7-H2\ecriture-gardien.py (nouveau, MD5 C60F774F…), ecriture-gardien.py.avant (= actif, F00D9739…), cas.jsonl (69 cas : 35 refus, 34 passe), cas.py (lanceur), ecriture-gardien.diff. Rejeu de l'orchestrateur : nouveau 69 / 69, ancien 50 / 69. Ajouts plus stricts déclarés par l'auteur (à juger) : eval et iex réanalysés, programme d'awk lu, refus si l'analyse échoue (fail-closed) ; cas A6, A7, A12 devenus refusés. Le crochet ne s'applique qu'aux charges avec agent_type hors rédacteurs et lp-gardien. Points amont à reprendre : aucun.
4 Entrées et commandes (tout depuis %TEMP%, python -I -X utf8) :
a. Rejouer cas.py sur les deux scripts (sorties collées) ; MD5 des 3 fichiers.
b. Lire le diff en entier : toute règle retirée ou relâchée hors rubrique 4b de la fiche = écart.
c. Écrire ton fichier D:\Game\LifePlay_Backup_5.5\P7-H2\cas-val.jsonl (même format) d'au moins 25 cas adverses « refus » qui tentent de passer une vraie écriture grâce aux nouvelles règles : cible entre guillemets après un > hors guillemets (echo x >"D:\x.txt", > 'D:\x'), >|, &>, 1>, 2> vers fichier, >> collé, guillemets échappés (echo \"x\" > D:\x), guillemets non fermés, $(…) et backticks contenant une écriture, bash -c / pwsh -Command imbriqués deux fois, here-string PowerShell, /dev/null en préfixe (/dev/nullx, /dev/null/../x), NUL.txt, $null2, tee -a, Out-File après un | dans des guillemets, cmd /c "echo x > f" ; et au moins 15 cas « passe » de lecture courante (grep / rg / sed sans -i / awk / jq avec > ou < dans les motifs, comparaisons PowerShell -gt et > dans un Where-Object { } entre accolades, 2>&1 | Select-String, Get-Content a | Measure-Object, git log --format='%h > %s'). Passer cas-val.jsonl sur le nouveau script ; tout « refus » qui passe = FAIL (citer le cas) ; tout « passe » refusé = faux positif (réserve).
d. Juger le fail-closed (refus si l'analyse échoue) : donner 3 commandes de lecture réalistes qui le déclenchent ou dire qu'aucune n'a été trouvée.
5 Pièges : lp-validate § 1 ; le crochet lit tool_input.command et agent_type : ne pas oublier agent_type dans les charges ; python -I ignore PYTHONIOENCODING → -X utf8.
6 Interdits : aucune modification des scripts ni de cas.jsonl ; seuls cas-val.jsonl et le livrable sont écrits ; rien sous %USERPROFILE%\.claude ; aucune commande git qui écrit (+ sk-protocol § 2).
7 Livrable : D:\Game\LifePlay-master 5.8\Docs\Migration\etat\AG\P7\P7-H2-VAL.md au gabarit VAL + compte rendu sk-protocol § 3
8 Critère d'acceptation : 69 / 69 rejoué ; ≥ 25 cas adverses « refus » et ≥ 15 « passe » écrits et passés, résultats bruts collés ; verdict PASS si aucun « refus » ne passe et aucune règle n'est relâchée hors fiche ; faux positifs listés en réserves
9 Budget et arrêt : 40 tours, pic ≤ 150 k, ≈ 25 min — tentative 1/4 ; au budget : livrable partiel + état de reprise