Fiche AMEL1-I2 — Niveau N1 — Modèle prévu non précisé par la fiche | utilisé claude-sonnet-5-5 — Agent lp-inventory — Skills sk-protocol, sk-recount, lp-paths # AMEL1-I2-INV : règle `.gitignore` pour suivre les scripts de `etat/` et effet mesuré (2026-10-14) > **Abandonnée, décision de l'utilisateur du 2026-10-14** : « Restent ignorés » pour les scripts de `etat/` ; `Tools/` > ignoré à son tour (« on gitignore Tools. c'est un dossier pour Agent IA », CHG-357). Les 3 lignes ci-dessous ne sont > pas appliquées ; ce document reste comme trace. Le nettoyage des chemins de profil des 10 scripts (instantané > `AMEL1-I2`) est conservé. Lecture seule. `.gitignore` n'est pas modifié. Seuls écrits : ce livrable et `%TEMP%\claude\amel1-i2\` (`mesure.py`, `repo\`, `liste-pubcheck.txt`). ## 1. Commandes exactes ``` Read D:\Game\LifePlay-master 5.8\.gitignore (91 lignes) Glob **/*.py | **/*.ps1 | **/*.jsonl path=...\Docs\Migration\etat python -I -X utf8 "%TEMP%\claude\amel1-i2\mesure.py" pwsh -NoProfile -Command '& "D:\Game\LifePlay-master 5.8\Tools\PubCheck.ps1" -Fichiers @(Get-Content -LiteralPath "$env:TEMP\claude\amel1-i2\liste-pubcheck.txt" | Select-Object -First 50); "EXIT=" + $LASTEXITCODE' pwsh ... Select-Object -Skip 50 ... (2e lot, 18 fichiers) ``` `mesure.py` (Write, dans `%TEMP%\claude\amel1-i2\`) fait : `os.walk` de `etat/` ; `git -C "D:\Game\LifePlay-master 5.8" check-ignore --no-index -v -n -z --stdin` (avant, dépôt réel) ; `git init` d'un dépôt jetable `%TEMP%\claude\amel1-i2\repo`, fichiers vides aux mêmes chemins, `.gitignore` réel copié octet pour octet, puis le même `check-ignore` ; puis le `.gitignore` avec les 3 lignes insérées, et le même `check-ignore` (après) ; `git ls-files -z -- Docs/Migration/etat`. **Méthode choisie** : dépôt temporaire avec le vrai moteur git (pas `fnmatch`, qui ne rend ni l'ordre « dernière règle gagnante » ni le ré-inclusion de répertoires). Validation de la méthode : écart entre « avant » du dépôt réel et « avant » du dépôt temporaire = **0** sur 68 scripts + 1135 témoins (`methode: ecarts ... : 0 []`). `--no-index` sert à juger la règle seule, que le fichier soit déjà suivi ou non. Un motif `!...` rapporté par `-v` est une ré-inclusion : compté « suivi », pas « ignoré » (première version du script l'avait compté ignoré : corrigée, réexécutée). ## 2. Lecture du `.gitignore` actuel (établi, `.gitignore:ligne`) | Ligne | Règle | Effet sous `etat/` | |---|---|---| | 53 | `/Docs/Migration/etat/**/*.txt` | ignore les `.txt` (redondante depuis 75) | | 66 | `__pycache__/` | ignore ces répertoires (mais voir 76) | | 75 | `/Docs/Migration/etat/**` | ignore **tout** fichier et répertoire sous `etat/` | | 76 | `!/Docs/Migration/etat/**/` | ré-inclut les répertoires (sinon git ne descend pas, les exceptions fichier seraient sans effet) ; vient après 66, donc `__pycache__/` est de nouveau parcouru | | 77 | `!/Docs/Migration/etat/**/*.md` | ré-inclut `.md` | | 78 | `!/Docs/Migration/etat/**/*.csv` | ré-inclut `.csv` | | 80 | `/Docs/Migration/etat/sandbox/DC2/DC2-BUILD.md` | après 77 : ré-ignore ce `.md` (adresse e-mail) | Git applique la **dernière règle qui correspond**. `.md` et `.csv` : 75 ignore, 77/78 ré-incluent, donc suivis. `.py`, `.ps1`, `.jsonl`, `.txt`, `.pyc` : seule 75 correspond (ou 53 pour `.txt`), donc ignorés. Preuve (sortie du script, « avant ») : les 68 scripts répondent tous `75:/Docs/Migration/etat/**`. ## 3. Texte exact proposé À insérer **après la ligne 78** (avant le commentaire « donnee personnelle », ligne 79 actuelle, qui devient 82) ; elles doivent rester après 75 et 76, et avant 80 sans importance (80 vise un `.md`) : ``` !/Docs/Migration/etat/**/*.py !/Docs/Migration/etat/**/*.ps1 !/Docs/Migration/etat/**/*.jsonl ``` Commentaire facultatif à mettre en ligne 74 ou avant : `# AMEL1-I2 : scripts de lot suivis aussi (.py, .ps1, .jsonl) ; .txt, .pyc, __pycache__ restent locaux`. Numéros observés dans le dépôt temporaire (sans commentaire) : 79 `.py`, 80 `.ps1`, 81 `.jsonl`. Témoins (dépôt temporaire, « après », chemins fictifs) : | Chemin | Avant | Après | Règle après | |---|---|---|---| | `etat/ZZ/L1/b.py` / `etat/ZZ/b.ps1` / `etat/b.jsonl` | ignoré | suivi | 79 / 80 / 81 | | `etat/ZZ/L1/a.txt` | ignoré | ignoré | 75 | | `etat/ZZ/L1/a.pyc` | ignoré | ignoré | 75 | | `etat/ZZ/L1/__pycache__/a.cpython-312.pyc` | ignoré | ignoré | 75 | | `etat/ZZ/L1/n.json`, `n.psm1`, `n.ps1.txt` | ignoré | ignoré | 75 | | `etat/ZZ/L1/n.md`, `n.csv` | suivi | suivi | 77 / 78 | | `etat/ZZ/L1/__pycache__/c.py` (hypothétique) | ignoré | **suivi** | 79 | | `Tools/x.py` | suivi | suivi | aucune | Réserve : un `.py` placé dans un `__pycache__/` serait suivi (cas non réel : Python n'y met que des `.pyc`). Aucun fichier de ce type n'existe (1135 témoins réels `.txt`/`.pyc`/`__pycache__` : 1135 ignorés avant, 1135 après). ## 4. Comptes bruts (sortie de `mesure.py`) ``` INVENTAIRE py/ps1/jsonl (os.walk): 68 temoins negatifs reels (txt/pyc/__pycache__): 1135 deja suivis (ls-files) parmi les scripts: 4 [EVAL2/AMEL1/R2/cas-v2.jsonl, construire_cas.py, ecriture-gardien-v2.py, test_crochet.py] methode: ecarts temp-avant vs reel-avant (ignore oui/non): 0 [] TOTAL devenus suivis: 68 fichiers, 1075449 octets motifs avant (scripts): {'75:/Docs/Migration/etat/**': 68} motifs apres (scripts): {'79:...*.py': 48, '80:...*.ps1': 19, '81:...*.jsonl': 1} ``` Recompte par Glob (autre méthode) : 48 `.py` (47 + les 4 relatifs `ecriture-gardien-v2.py`, `construire_cas.py`, `test_crochet.py`, `cas-v2.jsonl` à part : 45 chemins absolus + 3 relatifs `.py`), 19 `.ps1`, 1 `.jsonl` = 68. Concorde. | Extension | Total | Ignorés avant | Ignorés après | Passent à suivi | Octets | |---|---|---|---|---|---| | `.py` | 48 | 48 | 0 | 48 | 771 239 | | `.ps1` | 19 | 19 | 0 | 19 | 128 433 | | `.jsonl` | 1 | 1 | 0 | 1 | 175 777 | | **Total** | 68 | 68 | 0 | 68 | **1 075 449** (≈ 1,03 Mio) | Nuance : 4 de ces 68 (dossier `EVAL2/AMEL1/R2`) sont **déjà suivis** (ajoutés de force, `ls-files`). Les nouveaux suivis réels sont donc **64** ; la règle les rend simplement cohérents (plus d'ajout forcé nécessaire). | Lot (`etat//`) | Fichiers | Octets | |---|---|---| | AG/ORGA1 | 1 | 7 484 | | AG/P7 (hooks/ecriture-gardien.py, essais/…ps1) | 2 | 119 610 | | AG/PUB3 | 2 | 8 049 | | AG/TRACE1 | 12 | 108 104 | | AG/VERR1 | 1 | 839 | | AG/brouillons | 1 | 2 113 | | ARCH427 | 1 | 3 233 | | EVAL/scripts | 17 | 193 785 | | EVAL2/AMEL1 (R2, 4 déjà suivis) | 4 | 320 913 | | EVAL2/scripts | 16 | 236 490 | | OUT1 | 2 | 20 825 | | ST/STE | 6 | 46 599 | | U58/U3 | 1 | 1 662 | | U58/U7b | 2 | 5 743 | | **Total** | **68** | **1 075 449** | Liste complète des 68 chemins et tailles : sortie du script (section `LISTE`), reproductible par la commande ci-dessus ; liste absolue dans `%TEMP%\claude\amel1-i2\liste-pubcheck.txt`. ## 5. PubCheck sur les 68 fichiers (2 lots : 50 + 18) Sorties brutes : lot 1 `PubCheck : 16 constat(s)`, `EXIT=1` ; lot 2 `PubCheck : 4 constat(s)`, `EXIT=1`. Total **20 constats, 10 fichiers**, chaque fichier avec deux constats sur la même ligne, `PROFIL` et `NOM` (chemin de profil utilisateur contenant le nom du compte ; le nom n'est pas recopié ici). 58 fichiers sans constat, dont les 4 de `R2`. | Fichier (sous `etat/`) | Ligne | Constats | |---|---|---| | EVAL/scripts/eval_boss.py | 15 | PROFIL, NOM | | EVAL/scripts/eval_commandes.py | 13 | PROFIL, NOM | | EVAL/scripts/eval_load.py | 7 | PROFIL, NOM | | EVAL/scripts/eval_probe.py | 6 | PROFIL, NOM | | EVAL/scripts/eval_probe2.py | 4 | PROFIL, NOM | | EVAL/scripts/eval_probe3.py | 6 | PROFIL, NOM | | EVAL/scripts/eval_probe4.py | 4 | PROFIL, NOM | | EVAL/scripts/eval_probe8.py | 4 | PROFIL, NOM | | OUT1/OUT1_uasset_rejeu.py | 2 | PROFIL, NOM | | ST/STE/STE-J6-TRACE/run_pass.ps1 | 9 | PROFIL, NOM | **À corriger AVANT que la règle entre** : ces 10 lignes (chemin absolu du profil écrit en dur) deviendraient publiables avec le compte. Correction proposée à l'orchestrateur (non faite ici) : remplacer par `%USERPROFILE%` / `os.path.expanduser("~")` ou ``. Alternative : ne pas suivre ces 10 fichiers (règle plus étroite par lot) tant qu'ils ne sont pas nettoyés. ## 6. Écarts, établi / estimé / incertain - Écart au compte attendu : la fiche n'en donnait pas ; 68 trouvés (48/19/1). - **Établi** : lecture des règles (`.gitignore:53,66,75-80`) ; effet des 3 lignes sur les 68 scripts et 1135 témoins, par le moteur git sur dépôt jetable validé (0 écart « avant ») ; taille ; constats PubCheck. - **Estimé** : `.gitignore` réel a des fins de ligne mixtes (4 CRLF vers les l. 87-90 d'après `sk-protocol` § 7, non revérifié ici) ; Edit le ramènerait en LF : décision de l'orchestrateur sur la méthode d'écriture. L'écart du numéro de ligne (79-81) est établi seulement pour une insertion après la ligne 78. - **Incertain / non mesuré** : contenu des 58 fichiers sans constat relu seulement par PubCheck (ses motifs, pas une relecture humaine) ; autres dépôts (addon, modules) non concernés par cette règle, non mesurés ; scripts futurs ; `ecriture-gardien.py` (P7/hooks) et `ecriture-gardien-v2.py` (R2) font la même taille, 117 116 octets (non comparés au contenu) ; fichiers `.py` hors `etat/` non concernés. ## Fichiers à commiter Aucun par cet agent hors le présent livrable (`D:\Game\LifePlay-master 5.8\Docs\Migration\etat\EVAL2\AMEL1\AMEL1-I2-GITIGNORE.md`, A, `.md` donc déjà suivi). `.gitignore` : non touché. Tours : 7 / 40