LifePlay-Revival/Docs/Migration/etat/AG/AG-T2b-VAL.md

83 lines
12 KiB
Markdown
Raw Normal View History

Fiche AG-T2b — Niveau N1 — Modèle prévu sonnet | utilisé claude-sonnet-5-5 (Sonnet 5.5) — Agent lp-validator — Skills sk-protocol, sk-recount, debug-verification, lp-validate
# AG-T2b-VAL : revérification des 8 fichiers de skills des deux arbres de l'addon et du hook après la correction AG-T1b (2026-10-10)
Lecture seule. Seul écrit : ce fichier (Write). Aucune commande git qui écrit. Hook non installé. Aucun fichier de la copie 5.5 touché.
Preuve : « établi » = commande rejouée ou fichier lu (cité) ; « estimé » = déduit ; « incertain » = non vérifié.
## 1. Fiches amont relues
| Amont | Lu | Usage |
|---|---|---|
| `AG\fiches\AG-T2b.md` | en entier | fiche de cette VAL |
| `AG\AG-T2-VAL.md` | en entier | écarts E1, E2, E3 (§ 5) ; « tout le reste conforme, ne pas refaire l'ensemble » |
| `AG\AG-T1b-IMPL.md` | en entier | remplacements (§ 1), MD5 avant / après (§ 3), points à confirmer (§ 5) |
| `AG\fiches\AG-T1b.md` | en entier, § 4 en particulier | texte attendu des remplacements E1a, E1b, E1c, E2a, E2b, E2c, E3 |
| `lp-doc/gabarits.md` (VAL) | lu avant d'écrire | gabarit de ce livrable |
| `D:\Game\LifePlay_Backup_5.5\AG-fix\` | `manifest.csv` et 6 fichiers (`find`) | référence « avant » des diffs |
Arbres : `D:\Game\LifePlay-Sandbox-5.8` branche `ue5.8`, HEAD `8f6bc11` ; `D:\Game\LifePlay-Sandbox` branche `lot/DC3-atelier`, HEAD `3d0cb95`
(`git branch --show-current`, `git rev-parse --short HEAD`) : conformes à la fiche.
## 2. Points à confirmer des IMPL amont (AG-T1b-IMPL § 5)
| Réf. | Point | Résultat | Preuve |
|---|---|---|---|
| C1 | « 5 paires MD5 égales entre arbres » | **PASS** (8 paires sur 8, davantage que demandé) | § 3 ligne V4 |
| C2 | « les 7 remplacements, relus dans le fichier » | **PASS** | § 3 ligne V3 : `diff` fichier par fichier contre `AG-fix`, texte conforme au § 4 de AG-T1b |
| C3 | `git diff -- Tools/claude/skills \| md5sum` identique, `7f117a8e…` ; `AG-R1.md` l. 21 cite l'ancien `01860dfc…` | **PASS** (diff identique, valeur `7f117a8e…` rejouée) ; ticket : `AG-R1.md` l. 21 contient désormais `01860dfc` et `7f117a8e` (Grep `-o`) | V2 ; le texte exact de la ligne 21 n'a pas été relu en entier (ligne longue omise par Grep) : estimé mis à jour |
| C4 | E1 : `lp-repo` § 9 (« fichier du § 3 indexé ») cohérent avec le § 3 corrigé et le filtre du hook | **PASS-STATIC** (lecture + essai à sec du filtre) | `lp-repo/SKILL.md` l. 30-31 (§ 3 : `etat/` sauf `.md` et `.csv`), l. 82-85 (§ 9 renvoie au § 3), hook l. 29 (filtre `grep -vE` sur `.md` / `.csv`) ; V6 pour l'essai à sec. Remarque R2 sur `DC2-BUILD.md` |
| C5 | E3 : accepter le libellé imposé de `lp-mcp` l. 25 | **reporté** (décision de l'utilisateur, case § 6) ; conformité au texte imposé : **PASS** | `lp-mcp/SKILL.md` l. 24-25 lu ; texte = AG-T1b § 4 E3 ; phrase un peu elliptique, signalée par l'IMPL (§ 2) |
## 3. Critères rejoués
| Réf. | Critère | Commande | Résultat | Verdict |
|---|---|---|---|---|
| V1 | les mêmes 8 fichiers qu'en AG-T2, rien d'autre | `git -C <arbre> status --porcelain -uall` dans les deux arbres ; `diff --cached --name-only \| wc -l` | 6 ` M` (lp-build, lp-doc/SKILL, lp-doc/gabarits, lp-lot, lp-paths, lp-validate) + 2 `??` (`lp-mcp/SKILL.md`, `lp-repo/SKILL.md`), sortie identique dans les deux arbres ; index : 0 fichier dans chaque arbre | PASS |
| V2 | diff identique des deux arbres | `git diff -- Tools/claude/skills \| md5sum` ; `--stat` ; `grep -c '^@@'` | `7f117a8e325a8b03f7f4522e433a190a` des deux côtés ; 6 fichiers, 93 insertions, 57 suppressions ; 15 hunks (contexte 3) des deux côtés. Avant correction (AG-T2) : `01860dfc…`, +90 −54 ; le changement vient de lp-doc/gabarits (25/11) et lp-paths (18/15) : cohérent avec V3 (`--numstat`) | PASS |
| V3 | seules les lignes des remplacements ont changé | `diff` de chaque fichier contre `AG-fix\Tools\claude\skills\<f>` (5 skills) et contre `AG-fix\Docs\…\hooks\pre-commit` | **lp-repo** : l. 30 → 30-31 (E1a) et l. 74 → 75 (E2c) seulement ; **lp-paths** : l. 42-43 (E1b) seulement ; **lp-doc/SKILL.md** : l. 27-28 (E2a) seulement ; **lp-doc/gabarits.md** : l. 84-88 (E2b : mot « est dans `…REPO-JOURNAL.md` » → « se retrouve par `git log --grep <ticket>` (R-REPO1) », césure refaite sur 5 lignes, reste du paragraphe identique en sens et en mots) ; **lp-mcp** : l. 25 (E3) seulement ; **hook** : l. 7 (chemin `5.5` → `5.8`) et l. 29 (`\| grep -vE '^Docs/Migration/etat/.*\.(md\|csv)$'` ajouté, motif conservé) seulement. Textes conformes à AG-T1b § 4, sens conservé. Les 3 fichiers non touchés (lp-build, lp-lot, lp-validate) gardent les MD5 d'AG-T2 (`929d29ff…`, `a1cba1d9…`, `f99ffe9b…`) | PASS |
| V4 | 8 paires MD5 égales | `md5sum` des 8 fichiers dans chaque arbre (boucle, comparaison automatique) | 8 × `EGAL` : lp-build `929d29ff21e0208131ee0c3922c7f461`, lp-doc `e169eb4cc62880f3e8e61d47bb595372`, gabarits `0280a86d8217effd1744a19a38c01b85`, lp-lot `a1cba1d995c44c4afff20662da584b05`, lp-paths `a8a8597d5c788f672c283226d78e2ac9`, lp-validate `f99ffe9b04b32ab195e30d8b6511b758`, **lp-mcp `35983be22608e10c69114a1e77264a78`**, lp-repo `122d15b78985c66f06f173b6f46e55d4`. Valeurs égales à celles de l'IMPL § 3 ; MD5 « avant » rejoués sur `AG-fix` (806b7f78…, 53be296c…, c08e0f51…, ad38ca06…, 8a896676…) = manifeste | PASS |
| V5 | LF sans BOM | `pwsh -NoProfile -Command "& '…\Tools\FileCheck.ps1' @(8 skills + hook)"` | `fichiers=9 LF=9 alertes=0 introuvables=0`, `code=0`, CRLF 0 / CR 0 / BOM `-` partout (le hook compris) ; MD5 du hook relevé par FileCheck = `9451cf2d…` | PASS |
| V6 | hook : seules l. 7 et 29 ; `sh -n` ; essai à sec | `sh -n "…\hooks\pre-commit"` ; `printf 'Docs/Migration/etat/AG/x.md\nDocs/Migration/etat/AG/x.txt\nMods/a\nDocs/Migration/etat/AG/y.csv\n' \| grep -E '<motif l. 29>' \| grep -vE '^Docs/Migration/etat/.*\.(md\|csv)$'` | `sh -n` code 0, aucune sortie, 32 lignes ; essai à sec : sortie `Docs/Migration/etat/AG/x.txt` et `Mods/a` seuls (`.md` et `.csv` passent, `.txt` et `Mods/` restent refusés) ; `git config core.hooksPath` vide (code 1) : hook non installé ; `git check-ignore -v` : le hook est ignoré (`.gitignore:75`), non suivi | PASS |
| V7 | longueurs | `wc -l` ; longueur en caractères des lignes ajoutées (`diff` contre `AG-fix`, décodage UTF-8 par `python -I`) | lp-repo 93, lp-paths 72, lp-doc 64, gabarits 88, lp-mcp 62 (≤ 120) ; lignes modifiées : 89 à 116 caractères (max 116, lp-repo l. 75) ; lp-build 148 (141 à HEAD, antérieur, remarque AG-T2 R1) | PASS |
| V8 | plus de « hash … dans `REPO-JOURNAL.md` » | Grep `correspondance\|hash du commit est dans\|hash est dans\|ticket → hash` dans les deux arbres | 0 occurrence de l'ancienne formule dans lp-doc, gabarits, lp-repo (seule remontée : `lp-paths/SKILL.md:55`, « correspondances » d'index, sans rapport). Un motif plus large `hash.*REPO-JOURNAL\|REPO-JOURNAL.*hash` remonte 2 lignes dans chaque arbre, `lp-doc/SKILL.md:28` et `lp-repo/SKILL.md:42` : ce sont les textes corrigés, qui nient le hash (« note le HEAD d'avant, pas le hash », « ne portent pas le hash ») | PASS |
| V9 | plus de « tout le dossier, `.gitignore:74` » | Grep `tout le dossier\|gitignore:74` dans les deux arbres | 0 occurrence (`Found 0` ; les comptes de la sortie Grep ne remontent que lp-repo / lp-doc pour le motif large de V8) ; `lp-paths/SKILL.md` l. 42-43 lu : « sauf les `.md` et `.csv` … `.gitignore` l. 74-78 ; l. 53 pour les `.txt` » | PASS |
| V10 | `lp-mcp` : plus de « commit de ses seuls fichiers » | Grep `commit de ses seuls` dans les deux arbres ; lecture de `lp-mcp/SKILL.md` l. 24-25 | 0 occurrence ; l. 25 : « ses seuls fichiers et lignes, commités par ticket au gardien (`lp-repo`). » ; nouveau MD5 `35983be22608e10c69114a1e77264a78` (V4) ; `AG-R1.md` l. 12 et `AG-R2.md` l. 12 exigent déjà cette valeur (Grep) | PASS |
| V11 | numéros de ligne de `.gitignore` cités | lecture de `D:\Game\LifePlay-master 5.8\.gitignore` l. 48-80 | l. 53 `/Docs/Migration/etat/**/*.txt` ; l. 74 commentaire ETAT3 ; l. 75-78 `/Docs/Migration/etat/**`, `!…/**/`, `!…/**/*.md`, `!…/**/*.csv` : « l. 74-78 » et « l. 53 » exacts | PASS |
| V12 | fichiers hors périmètre non touchés | `git status --short -uall -- Docs/Migration/etat/AG/AG-T1-CONCEPTION.md Tools/claude` (copie 5.8) | sortie vide : `AG-T1-CONCEPTION.md` non modifié ; `Tools/claude` de la copie 5.8 non modifié | PASS |
## 4. Diff lu en entier
`git -C <arbre> diff -- Tools/claude/skills` : 15 hunks, 6 fichiers suivis, +93 −57, identique dans les deux arbres (V2) ; les 2 fichiers
non suivis (`lp-mcp`, `lp-repo`) sont couverts par le diff contre `AG-fix` (V3), plus les lignes 24-45 et 68-93 de `lp-repo` et 38-47 de `lp-paths` lues en entier.
Le delta par rapport à AG-T2 (valide, 90 / 54) est donc exactement : E1b, E2a, E2b dans les fichiers suivis (hunks déjà attribués à AG), plus E1a, E2c, E3
dans les fichiers nouveaux. Aucun hunk nouveau hors des 7 remplacements (V3). Le hook (2 lignes) n'est pas suivi par git : contrôlé par `diff` contre l'instantané seulement.
Écarts : **aucun**. E1, E2, E3 levés au sens de la fiche AG-T1b (E3 : texte imposé appliqué, acceptation par l'utilisateur reportée).
Remarques (pas des écarts) :
- R1. Faute de frappe « des copie 5.8 » de `lp-lot/SKILL.md` l. 55 : toujours là, hors décision (AG-T1b § 5).
- R2. Le filtre du hook (`.md` et `.csv` de `etat/` autorisés) laisse aussi passer `etat/sandbox/DC2/DC2-BUILD.md`, que `.gitignore` l. 80 ignore (donnée personnelle) : seul un `git add -f` l'indexerait ; la VAL AG-T2 proposait d'écrire cette exception dans `lp-repo` § 3, la fiche AG-T1b ne l'a pas retenue. Estimé sans risque courant (le gardien commite sur chemins explicites).
- R3. `AG-T1-CONCEPTION.md` l. 106 (spécification du hook, `^Docs/Migration/etat/` sans exception) reste ancienne : document daté, non modifié (conforme à la fiche) ; le fichier hook réel est corrigé.
- R4. `lp-build` 148 lignes > 120, antérieur au lot (AG-T2 R1).
## 5. Verdict
**PASS.** Critères de la rubrique 8 rejoués et tenus : E1 (V3, V6, V9, V11), E2 (V3, V8), E3 (V3, V10) levés ; aucune autre ligne n'a changé (V3, V12) ; 8 paires MD5 égales (V4) ; diffs des deux arbres identiques, MD5 `7f117a8e…` (V2) ; LF sans BOM (V5) ; `sh -n` = 0 et essai à sec conforme (V6) ; longueurs ≤ 120 (V7). Les tickets `AG-R1` / `AG-R2` exigent « VAL PASS » : cette condition est remplie, sous réserve de la case E3 du § 6.
## 6. Points à confirmer par l'utilisateur
- [ ] E3 : accepter le libellé imposé de `lp-mcp/SKILL.md` l. 25 (« ses seuls fichiers et lignes, commités par ticket au gardien (`lp-repo`). »), un peu elliptique ; MD5 `35983be2…` déjà inscrit dans `AG-R1` / `AG-R2` (l. 12).
- [ ] R2 : accepter que le hook laisse passer `DC2-BUILD.md` (protégé par `.gitignore` l. 80) ou demander l'exception dans `lp-repo` § 3 et le hook.
- [ ] Hook : pas d'installation (`core.hooksPath` inchangé) avant ticket du gardien ; `AG-T1-CONCEPTION.md` l. 106 à réviser si le document est repris.
Non rejoué : aucune compilation, aucun commandlet, aucun test en jeu (documentation d'outillage, sans objet) ; le texte intégral de `AG-R1.md` l. 21 n'a pas été relu (valeurs `01860dfc` et `7f117a8e` seulement repérées) ; le hook n'a pas été exécuté en vrai commit (seulement `sh -n` et un essai à sec du filtre) ; le contenu de `lp-build`, `lp-lot`, `lp-validate` n'a pas été relu (MD5 identiques à ceux validés en AG-T2).
Tours : 10 / 30
## Constats
Fichiers à commiter (dépôt du jeu, copie 5.8, suivi par git en texte seul depuis ETAT3) :
- A `Docs/Migration/etat/AG/AG-T2b-VAL.md`
Fichiers modifiés par moi : ce seul fichier (Write). Aucun script, aucune édition d'un autre fichier. Le hook `etat/REPO/hooks/pre-commit` n'est pas suivi (ignoré, `.gitignore:75`).