LifePlay-Revival/Docs/Migration/etat/EVAL2/EVAL2-T6-INV.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

212 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Fiche EVAL2-T6b — Niveau N1 — Modèle prévu sonnet | utilisé Sonnet 5.5 (claude-sonnet-5-5) — Agent lp-inventory — Skills sk-protocol, sk-recount, lp-paths
# EVAL2-T6-INV : commandes et refus du crochet pendant P3 (2026-10-14, reprise T6b)
Reprise T6b d'un livrable T6 arrêté au premier refus du crochet (voir § 5). Réécriture complète (un Write), § 2.1 corrigé, règle de classement révisée, titres de session remplis.
## 1. Commandes exactes
- Copie : `etat\EVAL2\scripts\eval2_commandes.py` (Write, d'après `etat\EVAL\scripts\eval_commandes.py` lu avec Read, original intact). Complément : `etat\EVAL2\scripts\eval2_refus.py` (exécute le premier en silence par `runpy`, puis ajoute titres, règle v2, échantillon, cas STE) ; le premier script n'a pas pu être modifié (agent sans Edit), d'où ce second fichier.
- Mesure : `cd "D:/Game/LifePlay-master 5.8/Docs/Migration/etat/EVAL2/scripts" && python -I -X utf8 eval2_commandes.py` (défauts : début 2026-10-11 05:30:00, fin 2026-10-14 18:25:41, coupure P3a/P3b 2026-10-13 10:00, UTC+2) puis `… && python -I -X utf8 eval2_refus.py` (réécrit `data/refus.csv`, 135 lignes).
- Sources : `%USERPROFILE%\.claude\projects\` dossiers `D--Game-LifePlay-master-5-8`, `…-5-8-Docs-Migration-etat-AG-P7`, `…-5-5`, `D--Game-LifePlay-Backup-5-5-P7-jetable-copie`. Exclus : `be193763`, `b339a92a` et leurs sous-agents.
- Titres de session : `local_*.json` (champs `title`, `cliSessionId`). L'application est installée en MSIX : le chemin `%USERPROFILE%\AppData\Roaming\Claude\claude-code-sessions` donne 0 fichier pour Python ; le dossier réel est `%USERPROFILE%\AppData\Local\Packages\Claude_*\LocalCache\Roaming\Claude\claude-code-sessions` (sortie : « fichiers local_*.json : 67 ; sessions avec titre : 65 »).
- Crochet : `%USERPROFILE%\.claude\hooks\ecriture-gardien.py` lu (Read) ; rejoué en lecture par `importlib`.
- Détection d'un refus : résultat d'outil en erreur d'un appel Bash/PowerShell contenant `hook error` et `Refus du crochet ecriture-gardien` (exclut les lectures de documents). Résultats dédoublonnés par identifiant d'appel.
- Contrôles : Grep `Refus du crochet ecriture-gardien` (count, tout `projects\`) → 195 occurrences dans 80 fichiers (toutes dates, lectures de documents et copies comprises : contrôle de non-nullité seulement) ; Grep `mv -n Saved/Autosaves` dans les transcriptions de la session STE ; Grep `crochet|refus|contourn|autosave` dans `etat\ST\STE\STE-ORG4c-*.md`.
## 2. Comptes bruts (sortie des scripts)
```
fichiers principaux lus : 100 ; sous-agents : 613 ; tool_use bruts : 42345 ; doublons ignores : 2366 ; tool_use dans la fenetre : 15898
Bash+PowerShell : 5910 (Bash 5438, PowerShell 472) ; P3a 2163 P3b 3747
total crochet-refus : 82 ; P3a 19 ; P3b 63 ; agent du message != agentType : 0
```
### 2.1 Refus par catégorie et période
| Catégorie | P3a | P3b | Total |
|---|---|---|---|
| crochet-refus (`ecriture-gardien`) | 19 | 63 | 82 |
| crochet-casse (fichier du crochet `Tools/claude/hooks/ecriture-gardien.py` absent, python code 2 ; 4 de la session principale) | 1 | 3 | 4 |
| mode auto (classifieur) | 29 | 5 | 34 |
| refus utilisateur (« The user doesn't want to proceed » ; lp-inventory 6, principale 1) | 6 | 1 | 7 |
| sécurité intégrée (rm, chemin non résolu) | 1 | 1 | 2 |
| PubCheck (sortie non nulle d'un appel de `PubCheck.ps1`, principale) | 0 | 3 | 3 |
| pre-push (lp-gardien 2, principale 1) | 0 | 3 | 3 |
Mode auto, sortie brute du script (total 34 = 1+2+1+1+3+6+20) :
```
mode-auto ? P3a 1
mode-auto Auto-Mode Bypass P3a 2
mode-auto Credential Materialization P3a 1
mode-auto Instruction Poisoning P3a 1
mode-auto Interfere With Workloads P3a 2 ; P3b 1
mode-auto Modify Shared Resources P3a 6
mode-auto Self-Modification P3a 16 ; P3b 4
```
Par acteur : Self-Modification principale 13, lp-writer 7 ; Modify Shared Resources lp-gardien 3, lp-mcp-bp 2, lp-writer 1 ; Auto-Mode Bypass principale 2 ; Interfere With Workloads principale 2, lp-builder 1 ; Credential Materialization principale 1 ; Instruction Poisoning lp-writer 1 ; raison non lue (« ? ») principale 1.
### 2.2 Refus du crochet : motif (premier motif de l'« Ecriture »), période
| Motif | P3a | P3b | Total |
|---|---|---|---|
| `>` (« chevron ») | 8 | 41 | 49 |
| `->` (« tiret-chevron ») | 0 | 4 | 4 |
| `tee` | 0 | 2 | 2 |
| `python -c` | 1 | 9 | 10 |
| autre : `mkdir` 5 (1+4), `pwsh -Command` 3 (2+1), python heredoc 2 (P3a), `sed -i` 2 (P3a), `set-content` 2 (1+1), `new-item` 1, `cp` 1, `copy-item` 1 | 9 | 8 | 17 |
| Total | 19 | 63 | 82 |
Occurrences, tous motifs d'une même commande : chevron 51, python -c 11, tiret-chevron 5, mkdir 5, pwsh -Command 3, set-content 3, python heredoc 3, tee 2, copy-item 2, sed -i 2, move-item 1, rm 1, new-item 1, cp 1. Le nom d'agent du message égale le `agentType` dans 82 cas sur 82.
### 2.3 Par agent, par session (avec titre), par lot
| Agent (message du crochet) | Refus |
|---|---|
| lp-validator | 55 |
| lp-mcp-bp | 12 |
| lp-cart | 5 |
| essai-bash (agent d'essai du crochet) | 4 |
| lp-builder | 3 |
| essai-pwsh (agent d'essai du crochet) | 2 |
| lp-inventory | 1 |
Les 6 refus des agents d'essai sont des tests du crochet : 76 refus opérationnels. Tableau par session (refus opérationnels du crochet, classement v2 de § 2.4, puis tous les autres refus de § 2.1) :
| Session | Titre (application) | Crochet | à tort | utile | Autres refus |
|---|---|---|---|---|---|
| `8d9744a8` | STG : chevauchement et enfoncement des p… | 28 | 11 | 17 | 0 |
| `e4f91a9c` | CAM | 17 | 12 | 5 | 1 |
| `36e41eab` | STE | 12 | 6 | 6 | 1 |
| `c3654992` | (sans titre) | 7 | 3 | 4 | 6 |
| `f3df474e` | (sans titre) | 4 | 3 | 1 | 3 |
| `09f8dd29` | (sans titre) | 3 | 0 | 3 | 0 |
| `f0bc1ed9` | REL : dossier de sauvegarde LifePlay-Rev… | 2 | 1 | 1 | 0 |
| `8acd287c` | STE (remplacée, ne plus utiliser) | 1 | 0 | 1 | 8 |
| `7d408374` | REG1 | 1 | 0 | 1 | 6 |
| `ee6fdcd1` | (sans titre) | 1 | 0 | 1 | 0 |
| `92a3927f` | (sans titre dans l'application ; Big Boss selon l'orchestrateur) | 0 | 0 | 0 | 8 |
| `dd295daa` | VERR1 | 0 | 0 | 0 | 8 |
| `4f688665` | (sans titre) | 0 | 0 | 0 | 7 |
| `37530d8d` | LOT STE | 0 | 0 | 0 | 3 |
| `ebc15012` | Big Boss | 0 | 0 | 0 | 1 |
| `90154b30` | (sans titre) | 0 | 0 | 0 | 1 |
Total crochet 76 (28+17+12+7+4+3+2+1+1+1). Par lot de fiche du sous-agent (v2) : sans identifiant de fiche 55 (à tort 28, utile 27), STG 7 (3/4), STE 5 (1/4), P7 4 (3/1), TRACE1 3 (0/3), REG1 1 (0/1), CAM 1 (1/0). Unités à 3 refus ou plus : cinq lp-validator (`c3654992/add5ac01` 4, `09f8dd29/aa75c29b` 3, `8d9744a8/a23b4b49` 3, `c3654992/aff13c81` 3, `f3df474e/afa804d7` 3). Une session « principale » n'a jamais de refus du crochet (pas de `agent_type`) : tous viennent de sous-agents.
### 2.4 Règles de classement
- Règle v1 (script `eval2_commandes.py`) : le motif est « utile » s'il subsiste après retrait des textes entre guillemets et des heredocs ; pour Python, « utile » seulement si le code contient une écriture.
- Règle v2 (décision de l'orchestrateur, `eval2_refus.py`, fonction `classe2`) : « utile/conforme » si le refus vise un motif interdit par sk-protocol § 7 tel qu'écrit : toute écriture réelle hors texte cité, tout `python -c`, tout heredoc ou entrée standard Python (même sans écriture), tout `tee`, `pwsh -Command` avec cmdlet d'écriture ; « à tort » si le motif n'apparaît que dans un texte cité (guillemets, heredoc : chevron d'un motif de recherche ou de `awk`, tiret-chevron d'un `echo`).
- Résultat v1 (opérationnels 76) : à tort 48, utile 28. Résultat v2 (opérationnels 76) : **à tort 36, utile 40** ; sur les 82 (essais compris) : à tort 36, utile 46. Seules 12 lignes changent de v1 à v2 : 10 `python -c` et 2 heredocs Python, de « à tort » à « utile ».
- v2 par motif (opérationnels) : `->` à tort 4 ; `>` à tort 30, utile 19 ; autre à tort 2, utile 9 ; `python -c` utile 10 ; `tee` utile 2. Par période : P3a à tort 3, utile 10 ; P3b à tort 33, utile 30.
- Sous-classe de « utile » (chevron, `tee`, `mkdir`) dont la cible est désignée par une variable (`$S`, `$TEMP`, `$L`) : **18 sur 40** utiles opérationnels. Le crochet ne peut pas rapprocher `"$S/x"` du dossier temporaire ou du scratchpad, qui sont des chemins libres. Ces refus sont conformes à la lettre de la règle mais bénins quant à l'effet (écriture sous le dossier temporaire).
Relecture à la main, 15 lignes (`random.Random(20261014).sample` sur les 76 refus opérationnels ; commande complète lue pour 7, partielle pour 8) :
| N° | Agent | Motif | Verdict v2 | Relecture |
|---|---|---|---|---|
| 1 | lp-builder | python -c (lecture de zips) | utile | accord (interdit tel qu'écrit) |
| 2 | lp-validator | mkdir `"$TEMP/v"` | utile | accord à la lettre ; écriture dans le dossier temporaire, cible par variable |
| 3 | lp-validator | chevron vers `"$S/real.patch"` | utile | accord à la lettre ; scratchpad par variable |
| 4 | lp-mcp-bp | chevron | à tort | accord : le chevron est dans `sed "s/ $USERNAME / <compte> /"` |
| 5 | lp-validator | tiret-chevron | à tort | accord : `echo "== $1 -> $2 cpp"` |
| 6 | lp-validator | python -c (comptage de CR) | utile | accord (python -c interdit, aucune écriture) |
| 7 | lp-validator | chevron vers `"$S/arbre.txt"` | utile | accord à la lettre ; scratchpad par variable |
| 8 | lp-mcp-bp | chevron | à tort | accord : le chevron est dans un motif `grep "ECollisionTraceFlag> …"` |
| 9 | lp-validator | chevron vers `$S/d2.diff` | utile | accord à la lettre ; scratchpad par variable |
| 10 | lp-builder | python heredoc (`print(1)`) | utile | accord (heredoc Python interdit) |
| 11 | lp-validator | chevron | à tort | accord : `grep -c '^>'` |
| 12 | lp-validator | chevron vers `v1b.ps1` | utile | accord à la lettre ; fichier relatif, après `cd` dans le scratchpad |
| 13 | lp-validator | chevron | à tort | accord : `grep -c "^>"` |
| 14 | lp-validator | chevron | à tort | accord : `awk '… (s>115) …'` entre apostrophes |
| 15 | lp-validator | chevron | à tort | accord : `awk 'NR>=9700 && …'` entre apostrophes |
**Accord règle v2 / relecture : 15 sur 15.** Parmi les 8 « utile » de l'échantillon, 5 (nos 2, 3, 7, 9, 12) écrivent dans le dossier temporaire ou le scratchpad, donc des écritures autorisées par la politique mais invisibles pour le crochet : la règle v2 les compte « utile » ; en lecture « écriture hors chemin libre », le total « utile » baisserait (estimé : jusqu'à 18 lignes sur 40). Limite : un échantillon de 15 sur 76 (20 %), dont 8 commandes lues tronquées à 420 caractères (nos 1, 5, 6, 8, 10, 13, 14, 15).
### 2.5 Suite donnée au refus du crochet (règle : premier appel de l'agent après le refus, plus les 3 suivants pour les moyens d'écriture)
| Suite | Refus (82) |
|---|---|
| poursuite sans retenter (lecture) | 22 |
| reformulation (même outil, autre commande) | 22 |
| contournement : autre moyen d'écriture (script, Set-Content, Out-File, python, copie) | 13 |
| Write du livrable sous `etat/` (conforme au message du crochet) | 9 |
| contournement : Write/Edit hors `etat/` | 8 |
| arrêt de l'agent (aucun appel ensuite) | 7 |
| changement d'outil (Bash ↔ PowerShell) | 1 |
| reformulation puis nouveau refus | 0 |
Après un refus du mode auto (34) : poursuite sans retenter 13, Write/Edit hors `etat/` 12, changement d'outil 4, Write sous `etat/` 3, autre moyen d'écriture 2. Après un refus utilisateur (7) : poursuite 5, changement d'outil 1, arrêt 1. Après la sécurité intégrée (2) : Write sous `etat/` 1, Write hors `etat/` 1. « Contournement » est une étiquette heuristique, pas un jugement d'intention ; les trois appels suivants figurent dans la colonne `suite_detail` de `refus.csv`.
### 2.6 Cas STE-ORG (sessions STE `36e41eab` et `8acd287c`)
- Refus du crochet dans ces deux sessions : 13 (36e41eab 12 ; 8acd287c 1), plus 9 autres refus (mode auto 8 dans 8acd287c, un dans 36e41eab). Dans la session `36e41eab` : lp-mcp-bp 4, lp-cart 5, lp-validator 3 selon la liste du script (corrigé par l'orchestrateur, recompté sur `data\refus.csv`) ; six « à tort » (v2) et six « utile ».
- **STE-ORG4c, 2026-10-14 10:33:49 (sous-agent lp-mcp-bp, unité `36e41eab/a25364bd`)** : commande `cd … && md5sum Saved/Autosaves/Game/BPs/GI_Auto1.uasset && ls -la …/STE-ORG4c && mkdir -p …/LifePlay_Backup_5.5/STE-ORG4c/autosave && mv -n Saved/Autosaves/Game/BPs/GI_Auto1.uasset …` ; motif relevé par le crochet : `mkdir` (écriture réelle hors chemins libres) ; classement **utile** (le déplacement d'un fichier est une écriture). Le fichier de l'éditeur (52 684 303 octets, écrit à 10:32) devait être mis à l'écart.
- **Suite** : arrêt de l'agent (la fiche, rubrique 5, prescrit « au premier refus, arrêt »), après Write de son livrable `STE-ORG4c-IMPL.md` (l. 32 et 113 : « refusé par le crochet, commande non exécutée » ; « son MD5 n'a pas été mesuré »).
- **Contournement** : par l'orchestrateur (session principale, sans `agent_type`, donc hors du crochet) : « déplacée par l'orchestrateur vers `D:\Game\LifePlay_Backup_5.5\STE-ORG4c\autosave\` ; `find Saved/Autosaves -name 'GI_Auto*'` → aucun résultat » (`STE-ORG4c-IMPL.md:120`, `fiches/STE-ORG4c-v.md:4`).
- **Effet** : un retard et une fiche de plus (le déplacement revient à l'orchestrateur), le MD5 de l'autosauvegarde jamais mesuré, la VAL `STE-ORG4c-VAL.md:13` passe en PASS avec le fichier déplacé. L'heure du déplacement par l'orchestrateur n'a pas été relevée. Le livrable note que le crochet refuse ce déplacement à `lp-mcp-bp` (l. 140) et propose que l'orchestrateur le prévoie ou coupe l'autosauvegarde (piste non vérifiée).
- Même sous-lot, 2026-10-13 23:14 à 23:45, agent lp-cart (audit `STE-ORG-AUDIT.md`) : 4 refus (tiret-chevron dans un `printf`, deux chevrons dans une commande de recherche, un `python -c` de lecture binaire) ; trois « à tort », un « utile » ; l'agent a poursuivi par reformulation ou par Write du livrable.
- Le chiffre « 60 » que donnait un premier sondage de la commande `mkdir` STE-ORG4c venait de copies de transcriptions ; dans la fenêtre il y a 1 refus.
### 2.7 Refus dus à la consigne (motif interdit par sk-protocol § 7 et par les fiches)
| Ensemble | Refus | Détail |
|---|---|---|
| Dans la fenêtre P3, agents opérationnels : `python -c`, heredoc ou entrée standard Python, `tee` | 14 (P3a 3, P3b 11) | python -c/heredoc/stdin 12 ; tee 2 ; par agent : lp-validator 7 (python -c 6, tee 1), lp-mcp-bp 3 (python -c 2, tee 1), lp-cart 2 (python heredoc 1, python -c 1), lp-builder 2 (python -c 1, python heredoc 1) |
| Hors fenêtre (session EVAL exclue, après 18:25:41 le 2026-10-14) : 3 refus de lp-inventory | 3 | 18:42:58 EVAL2-T1a (`python -I -c`) ; 18:47:00 EVAL2-T6 (heredoc Python, première tentative de cet agent) ; 18:48:29 EVAL2-T4 (`python -I -X utf8 -c "print(1)"`). Les trois sont conformes (le motif est interdit tel qu'écrit). L'orchestrateur en annonçait deux (T1a, T6) ; le troisième est T4. |
« Dues à leur propre consigne » est estimé : j'ai tenu `python -c`, heredoc, entrée standard Python et `tee` pour interdits dans toute fiche (rappel de la fiche STE-ORG4c-v, rubrique 5, et de sk-protocol § 7) sans relire chaque fiche.
### 2.8 Familles de commandes (mêmes familles que l'EVAL ; total | principale | sous-agents | P3a P3b | unités | fiches)
```
a.* union 927 | 511 | 416 | 234 693 | 200 | 60 a.md5sum 730 | 395 | 335 | 169 561 ; a.Get-FileHash 168 ; a.certutil 16 ; a.sha-sum 9 ; a.hashlib 4
b.* union 240 | 159 | 81 | 122 118 | 42 | 13 b.tasklist 119 ; b.Stop-Process/taskkill 48 ; b.Get-CimInstance 44 ; b.Get-Process 42
c.* union 1168 | 550 | 618 | 574 594 | 209 | 76 c.git-status 662 | 257 | 405 | 350 312 ; c.git-diff-stat 332 ; c.git-log 310 ; c.git-ls-files-eol 150 ; c.comptes-CR 133 ; c.git-show-name-status 75
d.* union 1132 | 562 | 570 | 368 764 | 148 | 39
e.* union 238 | 75 | 163 | 54 184 | 54 | 14 e.Warning: 109 ; e.Accessed None 98 ; e.Error: 66 ; e.LogScript 56 ; e.LogBlueprint 36 ; e.avec-compte 72
f.* union 879 | 303 | 576 | 636 243 | 76 | 33 f.dossier-etat/REPO 814 ; f.REPO-JOURNAL.md 250 ; f.NUMEROS.md 249 ; f.VERROU 203 ; f.mkdir-verrou 121
g.* union 138 | 95 | 43 | 24 114 | 37 | 9 g.dossier-build+taille/date 123 ; g.gci-Recurse+Measure 22 ; g.du 6
h.* union 957 | 540 | 417 | 392 565 | 87 | 30 h.python-heredoc 335 (principale 322) ; h.lance-un-script-ecrit-avant 255 ; h.Write-script hors Tools 234 ; h.python-c(>200 car.) 152
```
Les appels `h.python-heredoc` (322 de la session principale) et `h.python-c` ne sont pas soumis au crochet (pas de `agent_type`).
### 2.9 Appels des outils `Tools\*` et date de création (`git log --diff-filter=A`)
| Fichier | Commit | Création | Appels shell P3 | Accès Read/Grep/… | Unités | dont P3a (P3b = total − P3a) |
|---|---|---|---|---|---|---|
| UeState.ps1 | 866e869 | 2026-10-09 16:37 | 370 | 9 | 78 | 55 |
| FileCheck.ps1 | 866e869 | 2026-10-09 16:37 | 111 | 8 | 37 | 44 |
| Verrou.ps1 | f4ac257 | 2026-10-12 22:37 | 110 | 13 | 33 | 73 |
| Numero.ps1 | f4ac257 | 2026-10-12 22:37 | 77 | 5 | 21 | 55 |
| CopieEtat.ps1 | f4ac257 | 2026-10-12 22:37 | 43 | 10 | 8 | 43 |
| GitEtat.ps1 | f4ac257 | 2026-10-12 22:37 | 23 | 8 | 5 | 23 |
| PubCheck.ps1 | 1ae1575 | 2026-10-13 10:20 | 101 | 26 | 19 | 25 |
| Traces.ps1 | 3967e9d | 2026-10-13 10:22 | 57 | 25 | 9 | 35 |
| Corbeille.ps1 | 3967e9d | 2026-10-13 10:22 | 38 | 19 | 9 | 23 |
| TracesRacines.ps1 | 3967e9d | 2026-10-13 10:22 | 21 | 3 | 6 | 4 |
| Build.ps1 | 8e21f6b | 2026-10-08 17:39 | 45 | 3 | 33 | 13 |
| Snapshot.ps1 | 1122e17 | 2026-09-29 00:56 | 119 | 8 | 21 | 32 |
| RunCommandlet.ps1 | 9b7e971 | 2026-09-29 01:12 | 83 | 4 | 31 | 21 |
| EtatDir.ps1 / FicheStats.py | 1d1d283 / 80022ad | 2026-10-09 | 35 / 30 | 11 / 5 | 10 / 9 | 35 / 30 |
Autres : BuildDebug 24, CheckPackage 20, LogStats 29, Engine 11, Restore 10, SplitModules 6, CollectDebugArtifacts 3, DiffRemplacementNoeuds 3, ReimportCorrectif 1 ; 9 fichiers à 0 appel ni accès (AssetHeaders, AuditAssets, AuditScriptDeps, BuildCollections, CheckIntegrity, FixTextureMips, SummarizeDebugCsv, uasset.py, uasset58.py). Liste complète : `data/commandes.csv` (type `outil`).
Lecture comparée : état git `c.git-status` 662 appels (312 en P3b) contre `GitEtat.ps1` 23 appels, tous en P3a ; empreintes `a.*` 927 contre `FileCheck.ps1` 111 ; verrou : `f.mkdir-verrou` 121 (102 en P3a) puis `Verrou.ps1` 110 et `Numero.ps1` 77 ; `CopieEtat.ps1` 43 appels, tous en P3a ; processus `b.*` 240 contre `UeState.ps1` 370 ; tailles de build `g.*` 138 sans outil dédié.
### 2.10 Erreurs de shell
Appels shell 5910 ; erreurs classées 51.
| Type | Total | P3a | P3b | Bash | PowerShell |
|---|---|---|---|---|---|
| guillemets / échappement | 26 | 4 | 22 | 26 | 0 |
| chemin introuvable | 21 | 5 | 16 | 21 | 0 |
| redirection | 1 | 1 | 0 | 1 | 0 |
| commande Unix sous PowerShell | 1 | 1 | 0 | 0 | 1 |
| arguments d'un script pwsh | 1 | 1 | 0 | 0 | 1 |
| commande inconnue autre | 1 | 0 | 1 | 0 | 1 |
Exemples types : (1) Bash, `cat … <<'PYEOF'` d'un script Python long, session `8d9744a8` → « unexpected EOF while looking for matching » (apostrophe). (2) Bash, `printf '%s\n' '| 2026-10-13 | STE …'` avec apostrophe dans le texte, session `92a3927f` → même message. (3) Bash, `for d . ; do :; done`, session `c3654992` → « syntax error near unexpected token ». (4) PowerShell avec `grep` dans `% { … }`, session `7e1d28c3` → « Le terme « grep » n'est pas reconnu comme nom d'applet de commande ». (5) `pwsh -NoProfile -File Tools\UeState.ps1 …` lancé hors de la racine, session `7e1d28c3` → code 64, « n'est pas reconnu comme nom d'un fichier de script ».
Réserves : « chemin introuvable » est bruité (le motif apparaît aussi dans la sortie de commandes qui citent une autre erreur) ; « redirection » (1) est un faux positif (le mot figure dans un document lu). Les types guillemets et PowerShell-vs-Bash sont fiables.
## 3. Écarts au compte attendu de la fiche
- La fiche n'attend pas de nombre. Écarts de méthode : PubCheck et pre-push comptés par heuristique de texte (3 + 3 cas, messages non relus) ; la règle v1 du script de base reste dans la colonne `classement`, la règle v2 est dans `classement_v2` ; 4 appels « crochet cassé » (fichier absent, `D` dans le `git status` de départ) : leur blocage est déduit du code 2 de Python.
- Ajouts : colonnes P3a/P3b, catégories `crochet-casse` et `securite-integree`, colonnes `classement_v2`, `regle_v2`, `agent_essai`, `cible_par_variable` dans `refus.csv`.
## 4. Établi / estimé / incertain
- Établi (sorties des scripts, § 1) : comptes des § 2.1 à § 2.10 aux définitions près ; § 2.6, l. de `STE-ORG4c-IMPL.md` citées ; la relecture de 15 lignes.
- Estimé : le classement (le crochet rejoué est celui d'aujourd'hui, l'historique de ses versions n'est pas connu) ; « contournement » (heuristique) ; « dues à leur propre consigne » (§ 2.7) ; 18 « cibles par variable » (détection par le caractère `$` dans la cible) ; la nature des sessions de `…P7-jetable-copie` (essais du crochet, non vérifié).
- Incertain : l'heure du déplacement de l'autosauvegarde par l'orchestrateur ; l'attribution d'un appel commun à des transcriptions copiées (dédoublonnage par identifiant, première transcription lue) ; l'usage de `CopieEtat.ps1` et `GitEtat.ps1` en P3b sous un autre libellé que `<nom>.ps1` ; les titres des sessions `c3654992`, `f3df474e`, `09f8dd29`, `4f688665`, `90154b30`, `ee6fdcd1` (absents de l'application). Le recompte indépendant (sk-recount) n'a pas été fait par un second agent ; les totaux des tableaux ont été recoupés entre eux (82 = 19 + 63 = 49 + 4 + 2 + 10 + 17 ; 76 = somme des sessions ; 36 + 40 = 76 ; 34 = somme du mode auto).
## 5. Refus subi par cet agent (traçabilité)
Pendant la première tentative, cet agent a lancé une commande Bash avec heredoc Python pour lire les `local_*.json` ; le crochet l'a refusée (Agent lp-inventory, motif « python avec code en argument ou heredoc »). Conforme (heredoc interdit par la fiche), hors fenêtre, hors des comptes ; compté en § 2.7. Arrêt, compte rendu, puis reprise T6b sur ordre de l'orchestrateur ; aucun autre refus depuis (les scripts sont écrits par Write et lancés par `python -I -X utf8 fichier.py`).
Tours : 21 / 40 (reprise T6b ; 11 pour la première tentative)
## Fichiers à commiter
- A `Docs/Migration/etat/EVAL2/EVAL2-T6-INV.md`, `Docs/Migration/etat/EVAL2/data/commandes.csv`, `Docs/Migration/etat/EVAL2/data/refus.csv`, `Docs/Migration/etat/EVAL2/scripts/eval2_commandes.py`, `Docs/Migration/etat/EVAL2/scripts/eval2_refus.py` (dépôt du jeu ; `etat/` suit les `.md` et `.csv` ; les `.py` à vérifier selon `.gitignore`).