Fiche EVAL-T5 — 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 # EVAL-T5-INV : indicateurs des fiches et des registres, 2026-10-08 05:30 → 2026-10-11 05:30 (2026-10-11) Fenêtre : date de modification (mtime) comprise dans `[2026-10-08 05:30, 2026-10-11 05:30[` (UTC+2, décalage local lu : +2:00). Sous-périodes sur le mtime : P0 < 2026-10-08 13:30 ; P1 < 2026-10-10 10:45 ; P2 ensuite. Racine `D:\Game\LifePlay-master 5.8\Docs\Migration\etat\`, dossier `EVAL\` exclu. Lecture seule hors `EVAL\data\`, `EVAL\scripts\` et ce livrable. Aucune commande git qui écrit. Sortie complète du script (tableaux par lot, par registre) : `...\EVAL\data\fiches-stats.txt` (état de 05:49). Tables : `fiches.csv` (414 lignes + en-tête, UTF-8, LF, 0 CR), `fiches-registres.csv` (21 lignes + en-tête, 0 CR), `fiches-lots.csv` (37 lignes + en-tête). Script : `...\EVAL\scripts\eval_fiches.py`. ## 1. Commandes exactes Commande rejouable (écrit les 4 fichiers de `EVAL\data\` ; la même sortie va aussi sur la sortie standard) : ``` python -I -X utf8 "D:\Game\LifePlay-master 5.8\Docs\Migration\etat\EVAL\scripts\eval_fiches.py" ``` Méthode d'en-tête identique à `D:\Game\LifePlay-master 5.8\Saved\STAT1\fiches.py` : 1 500 premiers caractères du texte (lecture UTF-8, `errors="replace"`, fins de ligne universelles, donc CRLF/LF sans effet) ; motifs `[Mm]od[eè]le (pr[ée]vu|utilis)`, `\b[Aa]gent\b`, `\b[Ss]kills?\b` (colonnes `entete_modele_fp`, `agent`, `skills`) ; mêmes compteurs `escalad` / `contredit|contre-v[ée]rif|recompt` / `\bFAIL\b` sur le texte entier ; même regex de nom `fixre` (colonne `fixlike`). Écarts à `fiches.py`, déclarés : (a) lots pris par mtime et non par liste fixe ; (b) racine = copie 5.8 (`fiches.py` lit la copie 5.5) ; (c) colonnes en plus : `modele_prevu` (`[Mm]od[eè]le pr[ée]vu`), `modele_utilise` (`\|\s*utilis[ée]\b` ou `[Mm]od[eè]le utilis`), `niveau` (`[Nn]iveau\s*:?\s*\**N[0-5]`), `entete_complet` (prévu ET utilisé ET agent ET skills ET niveau), `ligne_tours` (`^…Tours\s*:` en début de ligne, n'importe où), `tours_valeur` (dernière occurrence `Tours : n / b`), `etat_reprise` (titre ou ligne commençant par « État de reprise »), `fichiers_a_commiter` (`Fichiers…à commiter`), `tentative_nom` (jeton `T|R|H` + chiffres + `b|c|d` dans le nom, hors 1er jeton) ; (d) les `*-TACHES.md` sans tableau de registre sont comptés en rôle `autre`. Rôle déduit du nom (heuristique) : dernier jeton du nom (séparateurs `- _ .`) qui vaut `INV|CART|DIAG|SPEC|IMPL|BUILD|VAL|DOC|INT|EVAL` (suffixe chiffre et lettre admis : `VAL1`, `T5cr2-VAL` → VAL) ; nom en `-TACHES.md` → TACHES ; sinon `autre`. Lot = dossier : deux niveaux sous `ST`, `OB`, `U58`, `DOC`, `sandbox`, `VQ` (ex. `ST/STE`), un niveau ailleurs (`AG`, `CAM`, `REPO`…), `(racine)` pour les fichiers directement sous `etat\`. « Livrables de rôle » (dénominateur B) = les 10 rôles INV…EVAL (233 fichiers) ; dénominateur A = tous les `.md` modifiés dans la fenêtre (414). Registres : tout `*-TACHES.md` dont une ligne d'en-tête de tableau commence par `Fiche|Id|Tâche` et contient `Statut` ; une « ligne de fiche » = ligne de ce tableau à 1re cellule non vide (plusieurs tableaux par fichier admis). Statut = premier mot-clé trouvé dans la cellule (8 statuts du gabarit, plus deux classes hors gabarit : `faite*` = fait/faite/écrite/retiré, `en cours*` = en cours/en attente/à écrire). Recomptes par une autre formulation (lancés par moi) : ``` pwsh -NoProfile -Command "Get-ChildItem -Recurse -File … | Where-Object { LastWriteTime -ge 2026-10-08 05:30 -and -lt 2026-10-11 05:30 }" (comptes de fichiers, octets, P0/P1/P2, .md, .txt/.log/.csv) pwsh … ReadAllText + Substring(0,1500) + -cmatch (hdrModele, agent, skills sur les .md de la fenêtre) ; -match "(?m)^[\s>*_`-]*Tours\s*:" python -I -X utf8 -c "import csv … " (relecture de fiches.csv : lignes, octets, noms uniques, rôles, comptes d'en-tête) Grep ^\s*\| sur **/*-TACHES.md (output_mode count) ; Grep ^[\s>*_`-]*Tours\s*: sur **/*.md (count) ; Grep ^\s*\|.*acceptée sur **/*-TACHES.md (count) wc -l …\fiches.csv …\fiches-registres.csv …\fiches-lots.csv ; tr -cd '\r' < …\fiches.csv | wc -c ; git check-ignore -v ; git status --short -- Docs/Migration/etat/EVAL ``` ## 2. Comptes bruts ### 2.1 Fichiers de `etat\` (hors EVAL) — sortie `fiches-stats.txt` § A, recomptée par `Get-ChildItem` : identique | Mesure | Valeur | Recompte pwsh | |---|---|---| | Fichiers sous `etat\` (tous types) | 1428 | 1428 | | Fichiers modifiés dans la fenêtre | 1002 | 1002 | | `.md` au total / dans la fenêtre | 511 / **414** | — / 414 | | Octets des `.md` de la fenêtre | **4 574 463** | 4 574 463 | | `.md` par sous-période (nombre ; octets) | P0 15 ; 304 311 — P1 153 ; 2 083 611 — P2 246 ; 2 186 541 | 15 / 153 / 246 | | Fichiers postérieurs à la borne de fin (non comptés) | 24, dont 16 `.md` | 24 | | Journaux bruts `.txt` + `.log` + `.csv` dans la fenêtre | **530 fichiers ; 105 208 273 octets** | 530 ; 105 208 273 | | dont `.txt` / `.log` / `.csv` | 478 ; 75 953 583 — 36 ; 28 719 264 — 16 ; 535 426 | identique | | par sous-période | P0 0 ; 0 — P1 268 ; 57 486 097 — P2 262 ; 47 722 176 | — | - Journaux bruts par lot (nombre, octets) : ST/STE 142 (43 746 917) ; REPO 83 (5 419) ; ST/STA 77 (11 710 155) ; ST/STB 41 (13 633 108) ; U58/U7 36 (15 360 618) ; CAM 21 (3 264 947) ; U58/U7b 20 (1 487 130) ; U58/U4 15 (682 698) ; U58/U5 15 (1 064 715) ; U58/U6 11 (12 415 248) ; U58/U8 10 (153 256) ; DOC/ETAT3 7 ; OUT1 7 ; U58/U3 6 ; anim 5 ; ST/STC 5 ; ST/STF 4 ; AG 3 ; ST/LISIB 3 ; ST/STM 3 ; U58/U0 3 ; U58/U1 3 ; (racine) 2 ; ETAT2 2 ; OB/OBA 2 ; U58/U2 2 ; DOC/DOCMV 1 ; OB/OBB 1. Les 16 `.csv` sont comptés dans les « journaux bruts » comme la fiche le demande ; je n'ai pas relu leur contenu (certains peuvent être des tables et non des journaux d'exécution). - Autres extensions modifiées dans la fenêtre (non comptées ci-dessus) : `.png` 12, `.json` 12, `.jpg` 11, `.ini` 6, `.runtime-xml` 4, `.dmp` 4, `.py` 3, `.ps1` 2, sans extension 1, `.depart` 1, `.essai2` 1, `.lpcharacter` 1. - `.md` postérieurs à la borne (16) : `ARCH427/ARCH427-T2-REFS`, `ARCH427/ARCH427-TACHES`, `ARCH427/fiches/ARCH427-T1`, `…-T2`, `BOSS/BOSS-JOURNAL`, `REPO/NUMEROS`, `REPO/REPO-JOURNAL`, `REPO/tickets/U8-R6`, `U8P-R1`, `U8P-R2`, `ST/STE/STE-H10-SPEC`, `ST/STE/STE-TACHES`, `U58/U8/U8-INT`, `U58/U8P/U8P-T1-IMPL`, `U8P-T1-VAL`, `U58/U8P/U8P-TACHES`. ### 2.2 Livrables `.md` par rôle (414) INV 16 ; CART 21 ; DIAG 18 ; SPEC 16 ; IMPL 33 ; BUILD 42 ; VAL 46 ; DOC 22 ; INT 13 ; EVAL 6 ; TACHES 17 ; autre 164 (dont 63 fichiers de `REPO\`, tickets de dépôt pour l'essentiel, et 101 hors REPO). Fins de ligne : CRLF 24 fichiers, LF seul 390 (lecture en octets). ### 2.3 Indicateurs par sous-période (doc 31 § 3) — `fiches-stats.txt` § C A = tous les `.md` ; B = les 233 livrables de rôle (3 en P0, 111 en P1, 119 en P2). | | .md (A) | modèle (fiches.py) A | agent A | skills A | en-tête complet B | niveau B | ligne Tours B | État de reprise B | Fichiers à commiter B | escalad. (mentions) | |---|---|---|---|---|---|---|---|---|---|---| | P0 | 15 | 12/15 = 80,0 % | 2/15 = 13,3 % | 5/15 = 33,3 % | 0/3 = 0,0 % | 0/3 | 0/3 = 0,0 % | 0/3 | 0/3 | 18 | | P1 | 153 | 137/153 = 89,5 % | 140/153 = 91,5 % | 136/153 = 88,9 % | 106/111 = 95,5 % | 110/111 = 99,1 % | 7/111 = 6,3 % | 1/111 = 0,9 % | 7/111 = 6,3 % | 14 | | P2 | 246 | 155/246 = 63,0 % | 163/246 = 66,3 % | 164/246 = 66,7 % | 107/119 = 89,9 % | 115/119 = 96,6 % | 84/119 = 70,6 % | 0/119 | 87/119 = 73,1 % | 7 | | **Total** | **414** | 304/414 = 73,4 % | 305/414 = 73,7 % | 305/414 = 73,7 % | 213/233 = 91,4 % | 225/233 = 96,6 % | 91/233 = 39,1 % | 1/233 = 0,4 % | 94/233 = 40,3 % | 39 | Recompte indépendant (pwsh, mêmes motifs, 1 500 car.) sur les 414 `.md` : modèle 304, agent 305, skills 305 ; lignes `Tours :` en début de ligne 92 (CSV : 92 = 91 de rôle + 1 hors rôle) ; Grep `Tours :` sur tous les `.md` de `etat\` : 100 fichiers, dont 4 sous `EVAL\` (exclus) et 4 postérieurs à la borne (exclus) → 92. Identique. - Lignes `Tours : n / b` lisibles : 87 ; budgets b : 40 ×59, 60 ×20, 20 ×4, 30 ×3, 25 ×1. Lignes `Tours` sans valeur `n / b` lisible : 5. **n > b : 1** (`ST/STF/STF-VAL.md`, 36 / 25). - Fiches reprises : 1 livrable de rôle avec section « État de reprise » (P1). Noms de livrables à suffixe de tentative `T|R|H n b|c|d` : 39 (P1 13, P2 26) ; regex `fixre` de `fiches.py` : 102 (P1 13, P2 89), dont **62 dans le lot `REPO`** (noms `…-Rn`) ; hors REPO : 40 (P2 27). - Escalades : mentions du radical `escalad` dans les livrables, 39 (P0 18, P1 14, P2 7). Statut `escaladée` dans les registres : 0 ; mot `escaladée` dans les registres : 0. - Lots avec VAL : 24 lots ayant ≥ 1 livrable VAL dans la fenêtre (P0 1, P1 14, P2 10) sur 37 lots touchés ; lots avec EVAL : 6 (`DOC/DOCMV`, `OB/OBA`, `OB/OBB`, `ST/STB`, `U58/U8`, `sandbox/DC4`). ### 2.4 Par lot (livrables modifiés dans la fenêtre) — `fiches-lots.csv`, `fiches-stats.txt` § D `rôle` = livrables de rôle ; `complet` = en-tête complet ; `Tours` = ligne Tours (sur les livrables de rôle) ; `reg.` = lignes de fiche du registre du lot s'il est modifié dans la fenêtre ; `b/c/d` = lignes de tentative du registre ; VAL / EVAL = livrable de ce rôle dans la fenêtre. | Lot | livr. | rôle | complet | Tours | reg. | b/c/d | VAL | EVAL | P0/P1/P2 | |---|---|---|---|---|---|---|---|---|---| | (racine) | 4 | 0 | — | — | — | — | non | non | 0/4/0 | | AG | 23 | 6 | 6/6 | 6/6 | 12 | 3 | oui | non | 0/10/13 | | CAM | 9 | 6 | 6/6 | 6/6 | 9 | 1 | non | non | 0/0/9 | | DOC/DOCMV | 7 | 6 | 6/6 | 1/6 | 8 | 0 | oui | oui | 0/0/7 | | DOC/DOCSTAT | 4 | 3 | 1/3 | 1/3 | 8 | 0 | oui | non | 0/0/4 | | DOC/ETAT3 | 4 | 3 | 3/3 | 2/3 | 8 | 0 | non | non | 0/3/1 | | DOC/README | 5 | 4 | 1/4 | 1/4 | 8 | 0 | oui | non | 0/0/5 | | DOC/REPO-MV | 1 | 1 | 1/1 | 0/1 | — | — | non | non | 0/0/1 | | EDIT1 | 1 | 1 | 1/1 | 0/1 | — | — | non | non | 0/1/0 | | ETAT2 | 8 | 7 | 7/7 | 0/7 | — | — | oui | non | 0/8/0 | | OB/OBA | 8 | 7 | 7/7 | 0/7 | 7 | 0 | non | oui | 0/8/0 | | OB/OBB | 27 | 25 | 25/25 | 21/25 | 22 | 4 | oui | oui | 0/1/26 | | OB/OBP | 8 | 7 | 7/7 | 6/7 | 10 | 2 | oui | non | 0/0/8 | | OUT1 | 2 | 1 | 0/1 | 0/1 | — | — | non | non | 0/2/0 | | REPO | 63 | 0 | — | — | — | — | non | non | 0/0/63 | | SK | 6 | 0 | — | — | — | — | non | non | 5/1/0 | | ST/LISIB | 11 | 7 | 7/7 | 3/7 | 12 | 0 | oui | non | 0/0/11 | | ST/STA | 11 | 10 | 10/10 | 0/10 | 11 | 1 | non | non | 0/11/0 | | ST/STB | 11 | 10 | 10/10 | 1/10 | 13 | 0 | oui | oui | 0/11/0 | | ST/STC | 10 | 8 | 8/8 | 4/8 | 10 | 2 | oui | non | 0/8/2 | | ST/STD | 4 | 3 | 3/3 | 0/3 | 9 | 0 | non | non | 0/3/1 | | ST/STE | 47 | 22 | 20/22 | 18/22 | — (registre à 05:30:05, 5 s après la borne) | — | oui | non | 0/0/47 | | ST/STF | 16 | 11 | 11/11 | 4/11 | 13 | 2 | oui | non | 0/1/15 | | TPL1 | 2 | 1 | 1/1 | 0/1 | 6 | 0 | oui | non | 0/2/0 | | U58/U0 | 4 | 1 | 1/1 | 0/1 | — | — | oui | non | 0/4/0 | | U58/U1 | 7 | 4 | 4/4 | 0/4 | — | — | oui | non | 0/6/1 | | U58/U2 | 6 | 5 | 4/5 | 0/5 | — | — | oui | non | 0/6/0 | | U58/U3 | 6 | 2 | 1/2 | 0/2 | — | — | oui | non | 0/6/0 | | U58/U4 | 8 | 7 | 7/7 | 0/7 | — | — | oui | non | 0/8/0 | | U58/U5 | 7 | 4 | 4/4 | 0/4 | — | — | oui | non | 0/7/0 | | U58/U6 | 5 | 4 | 3/4 | 0/4 | — | — | oui | non | 0/5/0 | | U58/U7 | 19 | 15 | 15/15 | 0/15 | — | — | oui | non | 0/19/0 | | U58/U7b | 8 | 8 | 8/8 | 0/8 | — | — | oui | non | 0/8/0 | | U58/U8 | 41 | 31 | 25/31 | 17/31 | 34 | 5 | oui | oui | 0/10/31 | | U58/UA | 8 | 0 | — | — | — | — | non | non | 7/0/1 | | VQ/VQ5 | 1 | 1 | 0/1 | 0/1 | — | — | oui | non | 1/0/0 | | sandbox/DC4 | 2 | 2 | 0/2 | 0/2 | — | — | non | oui | 2/0/0 | Lots portant un registre `*-TACHES.md` mais absents du tableau (registre et livrables postérieurs à la borne) : `ARCH427` (registre à 05:36:49), `U58/U8P` (05:45:41). Contrôle d'acceptation : lignes du CSV 414 = somme des livrables par lot (37 lots) 414 = somme P0 + P1 + P2 (15 + 153 + 246) 414 = somme par rôle 414 = `.md` de la fenêtre comptés par pwsh 414 (assertion aussi dans le script). ### 2.5 Registres `*-TACHES.md` — `fiches-registres.csv`, `fiches-stats.txt` § E - 21 fichiers `*-TACHES.md` hors `EVAL\` ; 20 portent un tableau de registre ; **17 modifiés dans la fenêtre** ; 3 modifiés après la borne (`ARCH427` 05:36:49, `ST/STE` 05:30:05, `U58/U8P` 05:45:41). Le 21e, `SK/SK-T1-TACHES.md`, est un livrable (taxonomie des types de tâches, 242 lignes lues, aucune ligne de registre) : compté en rôle `autre`, hors registres. - Recompte des lignes : Grep `^\s*\|` sur les 20 registres = 284 lignes de tableau = 234 lignes de fiche + 50 (25 tableaux × en-tête + séparateur). Identique au script (234). Registres modifiés dans la fenêtre (17), lignes de fiche = **200** : | Mesure | Valeur | |---|---| | Statuts du gabarit | à faire 15 ; envoyée 4 ; reçue 3 ; acceptée 96 ; reprise 0 ; escaladée 0 ; coupée 0 ; bloquée 0 | | Statuts hors gabarit | `faite*` 64 ; `en cours*` 2 ; autre 16 (textes cités dans `fiches-stats.txt`, dernière ligne) | | Niveaux (note → Nx) | N0 23 ; N1 72 ; N2 33 ; N3 22 ; N4 3 ; N5 0 ; sans niveau 47 (lignes sans note exploitable : « — », « à noter », sessions, lignes de suivi) | | Agents cités (une occurrence par ligne et par agent) | orchestrateur 72 ; lp-validator 26 ; lp-builder 26 ; lp-gardien 24 ; lp-writer 18 ; lp-cart 17 ; autre 12 ; lp-inventory 10 ; lp-impl 4 | | Lignes de tentative b/c/d (id `…Tnb|c|d`) | 20 (AG 3, CAM 1, OBB 4, OBP 2, STA 1, STC 2, STF 2, U8 5) ; `ST/STE` 6 hors fenêtre | | Mots (texte entier des registres) | `escaladée` 0 ; `bloquée` 0 ; `hors budget` 20 (STA 7, OBA 6, U8 5, OBB 1, STB 1) ; `reprise` 12 | | Colonnes remplies (sur 200 lignes) | Tours 81 = 40,5 % ; Pic 22 = 11,0 % ; Jetons 77 = 38,5 % ; Durée 83 = 41,5 % | Les 20 registres (avec les 3 hors fenêtre) : 234 lignes ; à faire 19, envoyée 4, reçue 3, acceptée 98, `faite*` 83, `en cours*` 11, autre 16 ; N0 25, N1 80, N2 35, N3 34, N4 3 ; tentatives b/c/d 27 ; Tours 36,3 %, Pic 9,4 %, Jetons 33,3 %, Durée 37,2 %. Par registre (lignes ; Tours/Pic/Jetons/Durée remplis ; tentatives) : AG 12 (8/0/8/8 ; 3) ; CAM 9 (0/0/0/0 ; 1) ; DOCMV 8 (3/0/3/4 ; 0) ; DOCSTAT 8 (1/0/1/1) ; ETAT3 8 (0/0/0/0) ; README 8 (0/0/0/0) ; OBA 7 (7/0/7/7) ; OBB 22 (18/2/16/13 ; 4) ; OBP 10 (6/0/6/6 ; 2) ; LISIB 12 (colonnes de mesure absentes) ; STA 11 (10/10/10/10 ; 1) ; STB 13 (2/2/2/2) ; STC 10 (colonnes absentes ; 2) ; STD 9 (0/0/0/0) ; STF 13 (colonnes absentes ; 2) ; TPL1 6 (1/1/1/1) ; U8 34 (25/7/23/31 ; 5) ; hors fenêtre : ARCH427 6 (colonnes absentes) ; STE 22 (3/0/0/3 ; 6) ; U8P 6 (1/0/1/1 ; 1). Recompte du statut « acceptée » : le script en compte 98 sur les 20 registres (96 sur les 17 de la fenêtre) ; Grep `^\s*\|.*acceptée` donne 100 lignes de tableau contenant le mot, toutes colonnes confondues (borne haute cohérente, non probante : voir § 4). ## 3. Écarts au compte attendu de la fiche La fiche ne fixait pas de total attendu. Points où les faits diffèrent de sa description : 1. **mtime ≠ date de production.** La fenêtre est définie par mtime ; un fichier réécrit plus tard en sort (voir 2) et un fichier déplacé ou restauré avec mtime conservé n'est pas détecté. Répartition des `.md` de `etat\` par jour de mtime (hors `EVAL`) : 10-06 : 25 ; 10-07 : 51 ; 10-08 : 64 ; 10-09 : 79 ; 10-10 : 232 ; 10-11 : 60. Pas de regroupement de masse (au plus 6 `.md` à la même minute). 2. **Dérive pendant la mesure.** Un premier passage (05:47) a compté 415 `.md` (4 584 831 o) ; `REPO/NUMEROS.md` a été réécrit par une autre session à 05:49:21 et sort de la fenêtre (414 `.md`, 4 574 463 o). Les fichiers livrés sont ceux du second passage (05:49:13) ; le recompte pwsh qui suit donne 414 / 4 574 463. Un rejeu ultérieur peut donner un total plus bas pour la même raison (tout fichier réécrit après 05:30 sort de la fenêtre). 3. **Registre `ST/STE` exclu pour 5 secondes** (mtime 05:30:05) alors que son lot a 47 livrables dans la fenêtre : il figure dans « tous les registres » ci-dessus, pas dans les 200 lignes. 4. **`SK/SK-T1-TACHES.md`** n'est pas un registre malgré son nom (fiche SK-T1) ; sans cette règle, le rôle TACHES aurait compté 18 au lieu de 17 et les registres 21 au lieu de 20. 5. Le rôle `autre` (164) regroupe 63 fichiers de `REPO\`, des fiches d'émission (`fiches\*.md`), des rapports (`*-TRACE`, `*-MESURE`…), synthèses et READMEs : leur en-tête n'est pas du format « Fiche … » ; l'indicateur « en-tête complet » ne porte que sur les 233 livrables de rôle ; les pourcentages A (modèle, agent, skills) portent sur les 414 et baissent en P2 notamment parce que les 63 fichiers de `REPO\` y entrent (0 sur 63 ont un en-tête de fiche). 6. `fixlike` (regex de `fiches.py`) est faussé par les noms `…-Rn.md` : 62 des 102 correspondances sont dans `REPO\`, non des reprises ; la colonne « hors REPO » (40) et `tentative_nom` (39) sont plus proches de la notion de reprise. Aucun des deux ne distingue une reprise d'une sous-fiche (`T8a`, `T5cr2` sont des fiches distinctes d'U8 et ne sont pas comptées dans `tentative_nom`). 7. « Fiches » du registre : les 200 lignes comprennent des lignes qui ne sont pas des fiches d'agent (par exemple `AG-T1` session claude.ai, `AG-ERR` ligne de l'orchestrateur, décisions) : le dénominateur des colonnes Tours/Pic/Jetons/Durée est le nombre de lignes, non le nombre de fiches d'agent. 8. Critère d'acceptation : « lignes du CSV = total des agrégats par lot » → 414 = 414, vérifié (assertion et recompte). Commande rejouable : oui, avec la réserve du point 2. ## 4. Établi / estimé / incertain **Établi** (recompté par une seconde méthode) : 1428 fichiers, 1002 modifiés dans la fenêtre, 414 `.md` / 4 574 463 o, P0/P1/P2 = 15/153/246, 530 journaux bruts / 105 208 273 o (par extension identique), comptes d'en-tête modèle 304 / agent 305 / skills 305, 92 lignes `Tours :`, 234 lignes de fiche des 20 registres, CSV en LF (0 CR) avec 414 lignes de noms uniques. **Établi (une seule méthode, lecture du script)** : les statuts par registre, les niveaux, les agents cités, les mots `escaladée|bloquée|hors budget|reprise`, les colonnes remplies. La répartition `faite*` / `en cours*` / `autre` repose sur un mot-clé cherché dans la cellule (premier trouvé) ; le total par statut n'est pas recomptable à l'identique par Grep (cellule de statut non isolable par expression régulière simple) : le Grep « acceptée » (toutes colonnes) donne 100 pour 98 comptées, cohérent mais non probant. **Estimé** : (a) les sous-périodes par mtime reflètent la date de dernière écriture (§ 3 point 1) ; (b) le rôle par le nom du fichier ; (c) « niveau » et « agent » des registres lus dans les colonnes `Note → Nx` et `Agent` (lignes sans colonne claire classées « sans niveau » ou « autre ») ; (d) l'équivalence de « reprise » avec les suffixes `b/c/d` du nom ; (e) l'en-tête « complet » exige cinq éléments, plus strict que le seul motif `fiches.py`. **Incertain** (essai qui trancherait) : (1) la date de création réelle des fichiers (mtime seul) : comparer à `git log --diff-filter=A` pour les fichiers suivis (`.md` et `.csv`) ; (2) les 16 statuts « autre » : lecture ligne à ligne des registres concernés ; (3) les 47 lignes « sans niveau » : filtrer `fiches-registres.csv` (colonne `N_sans`) et lire les lignes ; (4) les 5 lignes `Tours` illisibles : Grep sur `Tours` sans `n / b` ; (5) si les fiches des lots ARCH427 / U8P (postérieures à la borne) doivent compter : relancer après la clôture de ces lots ; (6) le contenu des 16 `.csv` comptés comme journaux bruts. Tours : 20 / 40 ## Constats - Aucun registre de la fenêtre ne porte de statut `escaladée`, `coupée`, `bloquée` ou `reprise` (colonne de statut) ; le mot `escaladée` y est absent, `hors budget` y apparaît 20 fois (STA, OBA, U8, OBB, STB) et `reprise` 12 fois. - La ligne `Tours : n / b` passe de 0 % (P0) à 6,3 % (P1) puis 70,6 % (P2) des livrables de rôle ; la section « État de reprise » n'apparaît que dans 1 livrable de rôle sur 233. - Les colonnes Pic, Jetons, Durée des registres sont remplies à 11,0 %, 38,5 % et 41,5 % (200 lignes) ; 3 registres de la fenêtre (LISIB, STC, STF) et 1 hors fenêtre (ARCH427) n'ont pas ces colonnes. - 5 des 17 registres modifiés dans la fenêtre n'ont pas de livrable VAL dans leur lot (`CAM`, `DOC/ETAT3`, `OB/OBA`, `ST/STA`, `ST/STD`) ; 12 en ont un. - `git status --short -- Docs/Migration/etat/EVAL` ne montre que `?? Docs/Migration/etat/EVAL/` (dossier entier non suivi, mes fichiers y compris). `fiches.py` ne retire pas le BOM, mon script non plus : effet nul constaté sur les comptes (recompte pwsh identique). ### Fichiers écrits et à commiter (dépôt jeu 5.8, branche `ue5.8` ; aucun commit de ma part) - `A Docs/Migration/etat/EVAL/EVAL-T5-INV.md` (`.gitignore:77`, ajoutable) - `A Docs/Migration/etat/EVAL/data/fiches.csv` (`.gitignore:78`, ajoutable) - `A Docs/Migration/etat/EVAL/data/fiches-registres.csv` (`.gitignore:78`, ajoutable) - `A Docs/Migration/etat/EVAL/data/fiches-lots.csv` (`.gitignore:78`, ajoutable) - Écrits mais **ignorés par git** (`.gitignore:75`, `git check-ignore -v`) : `Docs/Migration/etat/EVAL/data/fiches-stats.txt`, `Docs/Migration/etat/EVAL/scripts/eval_fiches.py` (rejouable depuis le disque ; à ranger dans `Tools/` sur décision de l'orchestrateur).