161 lines
19 KiB
Markdown
161 lines
19 KiB
Markdown
|
|
Fiche AMEL1-R10-R13-b — Niveau N3 — Modèle prévu sonnet | utilisé claude-sonnet-5-5 — Agent lp-impl — Skills sk-protocol, ue-cpp-build, lp-build, lp-ue-compat
|
|||
|
|
# AMEL1-R10-R13-IMPL : contrôle d'instantané du lot dans CopieEtat.ps1 (R10, I10b) et niveau N3 / identifiants de fiche dans FicheStats.py (R13, I13) (2026-10-14, reprise b)
|
|||
|
|
|
|||
|
|
Plan : `Docs\Migration\etat\EVAL2\AMEL1\AMEL1-INDICATEURS.md` (§ 2 lignes R10 et R13, § 3). Première passe puis reprise b (décisions de l'orchestrateur sur le § 5 de la première passe : filtre sur la date d'écriture, ligne INFO, élargissement de `FICHE_RE`). Aucune compilation (outils PowerShell et Python).
|
|||
|
|
|
|||
|
|
## 1. Fichiers modifiés
|
|||
|
|
|
|||
|
|
| Fichier | Lignes (état final) | Changement |
|
|||
|
|
|---|---|---|
|
|||
|
|
| `Tools\CopieEtat.ps1` | 23-33 (aide, contrôle 5), 61-64 (`.PARAMETER Depuis`), 86 (exemple), 99 (`[string]$Depuis`), 137-142 (`Get-LPMtime`), 254-258 (lecture et validation de `-Depuis`), 435-475 (section 5 « Instantané du lot »), 521-531 (bloc JSON `instantane_lot`), 543 (ligne `INFO`) | Paramètre `-Depuis "AAAA-MM-JJ HH:MM"` ; avec lui, alerte `INSTANTANE` si aucun dossier `<BackupRoot>\<Lot>*` n'a été créé ou modifié depuis cette heure **et** que des fichiers suivis par git, modifiés hors `Docs/Migration/etat/`, ont une date d'écriture ≥ `-Depuis`. Les fichiers suivis modifiés plus anciens sont ignorés et comptés à part. Sans `-Depuis` : ligne `INFO : controle d'instantane non fait (parametre -Depuis absent)` en dernière ligne, mode texte seulement. Codes de sortie 0/1/2 inchangés. |
|
|||
|
|
| `Tools\FicheStats.py` | 20-24 (`FICHE_RE`), 25-27 (`AGENTS_N3`) | `AGENTS_N3` : ajout de `lp-mcp-bp`, `lp-diag`, `lp-cart-max`. `FICHE_RE` : nouvelle alternative `[A-Za-z]\d+[A-Za-z0-9]*(?:-[A-Za-z0-9]+)*(?![A-Za-z0-9])` (identifiants `<LOT>-<lettre><n>[-suffixe]`, ex. `STE-H10-GI1`, `CAM-B2p-F`, `STG-B1`), sans accolades (le motif passe par `str.format`). `level_of` inchangée : le « Niveau Nx » déclaré reste prioritaire. |
|
|||
|
|
|
|||
|
|
Détail R10 (`CopieEtat.ps1`) :
|
|||
|
|
- Dossiers d'instantané = `Get-ChildItem -Directory -Filter "<Lot>*"` sous `-BackupRoot` (défaut `D:\Game\LifePlay_Backup_5.5`) ; date retenue par dossier = la plus récente parmi : création du dossier, dernière écriture du dossier, dernière écriture de `manifest.csv`, colonne `Date` du manifeste (format `Get-Date -Format s`, `Snapshot.ps1:55,58`). Manifeste = `<BackupRoot>\<Lot>\manifest.csv`, colonnes `Rel,Existed,Size,MD5,Date` (`Snapshot.ps1:27,55,58,62`).
|
|||
|
|
- Fichiers suivis modifiés = entrées de `git status` dont le code XY n'est pas `??` : jeu (hors `^Docs/Migration/etat(/|$)`), addon (périmètre déjà lu par le script), Modules. Date d'écriture = `LastWriteTime` du fichier ; fichier supprimé (` D`) : celle du dossier existant le plus proche (`Get-LPMtime`) ; date introuvable : le fichier compte.
|
|||
|
|
- Message : « aucun instantane du lot depuis AAAA-MM-JJ HH:MM : lancer Snapshot.ps1 -Lot <Lot> avant d'ecrire (n fichier(s) suivi(s) modifie(s) depuis cette heure hors Docs/Migration/etat/ ; m plus ancien(s) ignore(s) ; dernier instantane : <heure | aucun dossier …>) ».
|
|||
|
|
- JSON : clé `instantane_lot` (`controle`, `depuis`, `dernier`, `dossiers`, `suivis_modifies`, `suivis_anciens`, `suivis_exemples` ≤ 5). Sans `-Depuis`, la section 5 ne scanne rien.
|
|||
|
|
- Fichiers de test (non versionnés, `Saved\` ignoré par git) : `Saved\AMEL1-R10\essai_r10.ps1`, `essai_r13_niveau.py`, `essai_r13b.py`, `bk\ZZR10A-snap\manifest.csv`, `old\Tools\{CopieEtat,UeState}.ps1` (état d'avant), `ref.json`.
|
|||
|
|
|
|||
|
|
## 2. Écarts à la SPEC (fiche)
|
|||
|
|
|
|||
|
|
1. **« Heure du dernier GO » non lue automatiquement.** Le GO est un message (`boss.md:17`), pas un fichier ; `BOSS-JOURNAL.md` ne porte l'heure que sur une partie des lignes (plan § I11a : 18,6 %). Seule la borne explicite `-Depuis` est implémentée. Un repli sur l'`horodatage` de `-Reference` a été écrit puis retiré (alerte à chaque BUILD-FIN, comportement changé pour tous les appels avec `-Reference`). La fiche d'un lot doit passer `-Depuis`.
|
|||
|
|
2. **Message sans accents** (« instantane », « ecrire »), y compris la ligne `INFO` : `CopieEtat.ps1` est en ASCII pur, sans BOM (Grep `[^\x00-\x7F]` = 0 occurrence) ; un accent serait mal lu par Windows PowerShell 5.1.
|
|||
|
|
3. **Pas de `Write-Warning`** (décision orchestrateur de la reprise b) : sous `pwsh -File`, il part sur stdout et cassait `-Json` (première version, essai E6). Le cas « contrôle non fait » s'affiche par la ligne `INFO` (mode texte) ; en `-Json`, `instantane_lot.controle = false` et rien d'autre sur stdout (essai E6 : `contient INFO : False`).
|
|||
|
|
4. **Filtre sur la date d'écriture** (décision orchestrateur de la reprise b, plus étroit que la fiche d'origine) : seuls comptent les fichiers suivis modifiés écrits à partir de `-Depuis` ; les autres sont dits « ignorés » dans le message. Choix propre à l'implémentation, à confirmer : un fichier supprimé prend la date de son dossier existant le plus proche.
|
|||
|
|
5. **Périmètre** : l'addon et Modules sont comptés en plus du jeu (le dossier `Docs/Migration/etat/` n'existe que dans le jeu).
|
|||
|
|
6. **`FICHE_RE` élargie** (décision orchestrateur de la reprise b, hors fiche d'origine) : voir Constats (b2).
|
|||
|
|
7. **Scripts d'essai sous `Saved\AMEL1-R10\`** (hors « deux fichiers + livrable » de la fiche) : la fiche demandait des scripts de test par Write ; rangés selon `sk-protocol` § 7, non versionnés.
|
|||
|
|
8. **Snapshot en deux appels** (un `-Path` chacun, `pwsh -File`) : sous `-File`, une liste `a,b` arrive en une seule chaîne (`lp-build` § 8) ; avec `Snapshot.ps1`, elle aurait été consignée `Existed=False` (estimé, non essayé).
|
|||
|
|
|
|||
|
|
## 3. Instantané
|
|||
|
|
|
|||
|
|
Lot `AMEL1-R10` : `pwsh -NoProfile -File Tools/Snapshot.ps1 -Lot AMEL1-R10 -Path Tools/CopieEtat.ps1` puis `… -Path Tools/FicheStats.py`. Manifeste : `D:\Game\LifePlay_Backup_5.5\AMEL1-R10\manifest.csv`. Reprise b : pas de nouvel instantané (décision de l'orchestrateur, celui-ci couvre l'état d'avant des deux fichiers).
|
|||
|
|
```
|
|||
|
|
sauvegarde : Tools/CopieEtat.ps1 (5E441FA06F05B1F1D91B91DCAC5B023F)
|
|||
|
|
sauvegarde : Tools/FicheStats.py (536575EFCAD437CA9BB89A25E654670E)
|
|||
|
|
```
|
|||
|
|
Dossier créé à 2026-10-14 20:14:45. État final (reprise b) : voir la ligne « Contrôles de clôture » dans Constats (MD5 et PubCheck).
|
|||
|
|
|
|||
|
|
## 4. Ce qui n'a pas été fait
|
|||
|
|
|
|||
|
|
- Pas de compilation (sans objet), pas de Restore.
|
|||
|
|
- « Outils nommés dans le gabarit de fiche » (autre moitié de R10, `lp-lot`) : hors de cette fiche.
|
|||
|
|
- Pas d'essai sous Windows PowerShell 5.1 (seul `pwsh` 7).
|
|||
|
|
- Cas non essayés : plusieurs dossiers `<Lot>*` pour un même lot ; manifeste illisible ; `-BackupRoot` inexistant avec `-Depuis` ; entrées Modules modifiées (0 entrée Modules dans les essais) ; `-Depuis` aux formats `…:SS` et `…THH:MM` (acceptés par le code, non rejoués) ; fichier supprimé dont le dossier parent a disparu (la remontée s'arrête à la racine du dépôt, non essayé).
|
|||
|
|
- Identifiants sans chiffre (`STG-WALKA`, `STG-FACADE`) : toujours non reconnus par `FICHE_RE` (la décision demandait `<lettre><n>`).
|
|||
|
|
|
|||
|
|
## 5. Points à confirmer en VAL
|
|||
|
|
|
|||
|
|
1. Sans `-Depuis`, la sortie texte de `CopieEtat.ps1` est celle de l'ancien script plus la dernière ligne `INFO : controle d'instantane non fait (parametre -Depuis absent)`, code inchangé (comparer `Saved\AMEL1-R10\old\Tools\CopieEtat.ps1` à `Tools\CopieEtat.ps1`, mêmes arguments : essais A0 / E4).
|
|||
|
|
2. Les essais (a) se rejouent par `pwsh -NoProfile -File Saved\AMEL1-R10\essai_r10.ps1` (≈ 2 min) : codes 0 (E1, E2c, E4, E7), 1 (E2, E2b), 2 (E3a, E3b, E3c).
|
|||
|
|
3. Filtre sur la date d'écriture : dans E2, 3 fichiers comptés (les deux outils de ce lot et la suppression de `Tools/claude/hooks/ecriture-gardien.py`, datée par son dossier) et 13 ignorés (addon d'un autre lot) ; vérifier que la date d'un fichier modifié par `git checkout` ou par un `git stash pop` (date = moment de l'opération) ne produit pas d'alerte à tort ou manquante.
|
|||
|
|
4. Fichier supprimé : date du dossier existant le plus proche (modifiée par toute création ou suppression dans ce dossier) : trop large ou acceptable ?
|
|||
|
|
5. Limite de `Snapshot.ps1` : si tous les fichiers sont « déjà sauvegardés », le manifeste n'est pas modifié (`Snapshot.ps1:46,62`) et l'alerte persiste après un nouveau GO ; parade : un `-Depuis` postérieur au dernier instantané utile.
|
|||
|
|
6. Glob `<Lot>*` : `-Lot CAM` retient aussi `CAM-B1…` et tout dossier commençant par `CAM` (règle de la fiche) ; `-Lot AMEL1` retient `AMEL1-M1`, `AMEL1-R3`, `AMEL1-R10`.
|
|||
|
|
7. `FICHE_RE` : l'alternative nouvelle reconnaît aussi des identifiants cités à titre de référence dans les 400 premiers caractères d'un prompt non déclaré (même risque que pour `Tn` avant) ; non-régression mesurée sur 8 lots (Constats b2), aucune ligne perdue ni renommée.
|
|||
|
|
8. Les lignes de tableau de `FicheStats.py --lot <L>` augmentent pour les lots de la période P3 (STE de 2 à 31, STG de 0 à 17, CAM de 0 à 43 lignes, tous agents confondus) : les comptes de fiches par lot des relevés EVAL2 faits avant ne sont plus comparables tels quels.
|
|||
|
|
9. Fins de ligne : les deux outils et le livrable restent LF (0 CR).
|
|||
|
|
10. `lp-cart` (N2+) est conservé dans `AGENTS_N3` comme avant (non demandé).
|
|||
|
|
|
|||
|
|
## 6. Fichiers à commiter
|
|||
|
|
|
|||
|
|
Dépôt jeu (`D:\Game\LifePlay-master 5.8`, branche `ue5.8`) :
|
|||
|
|
- M `Tools/CopieEtat.ps1`
|
|||
|
|
- M `Tools/FicheStats.py`
|
|||
|
|
- A `Docs/Migration/etat/EVAL2/AMEL1/AMEL1-R10-R13-IMPL.md`
|
|||
|
|
|
|||
|
|
Ne pas commiter : `Saved/AMEL1-R10/` (ignoré). Autres entrées du `git status` (`Tools/EssaiJournal.*`, `Tools/Indicateurs.py`, `D Tools/claude/hooks/ecriture-gardien.py`, `Docs/32_…`, addon) : pas de ce lot.
|
|||
|
|
|
|||
|
|
Tours : 25 / 50 (première passe) ; reprise b : 9 / 30
|
|||
|
|
|
|||
|
|
## Constats
|
|||
|
|
|
|||
|
|
Trace : `Saved\AMEL1-R10\essai_r10.ps1`, `essai_r13_niveau.py`, `essai_r13b.py` — Fiche AMEL1-R10-R13-b — 2026-10-14 20:28-20:29 (série CopieEtat), 20:2x (série FicheStats)
|
|||
|
|
Commande : `pwsh -NoProfile -File "D:\Game\LifePlay-master 5.8\Saved\AMEL1-R10\essai_r10.ps1"` puis `… -Serie ancien -Ce "D:\Game\LifePlay-master 5.8\Saved\AMEL1-R10\old\Tools\CopieEtat.ps1"` ; `python -I -X utf8 Saved\AMEL1-R10\essai_r13b.py "D:/Game/LifePlay_Backup_5.5/AMEL1-R10/Tools/FicheStats.py" "D:/Game/LifePlay-master 5.8/Tools/FicheStats.py"` ; `python -I -X utf8 Saved\AMEL1-R10\essai_r13_niveau.py "D:/Game/LifePlay-master 5.8/Tools/FicheStats.py" lp-mcp-bp`
|
|||
|
|
Environnement: copie 5.8, branche `ue5.8`, HEAD jeu `89e19ca`, addon `082fb00`, Modules `c8661cd` ; machine non calme (cpu 4-31 %), copie partagée avec d'autres lots (addon modifié, 13 `[ M]` et 4 `[??]` d'un autre lot).
|
|||
|
|
Attendu : E1, E2c, E4, E7 → 0 ; E2, E2b → 1 avec le message (fichiers récents et anciens comptés) ; E3 → 2 ; E4 = A0 plus la ligne INFO ; `FICHE_RE` : plus de fiches reconnues sans ligne perdue ni identifiant changé.
|
|||
|
|
Obtenu : ci-dessous.
|
|||
|
|
Lecture : les alertes `GIT` préexistantes de l'addon font rendre 1 à tout appel sans `-Reference` : les essais E1 à E7 utilisent `-Reference ref.json` (écrit par R0, même état git) pour les neutraliser, sinon le 0 viendrait d'une autre cause que celle testée. Le nombre de transcriptions « reconnues » en (b2) est un minorant (clé de dédoublonnage = début + tours).
|
|||
|
|
|
|||
|
|
### (a) CopieEtat.ps1 : essais à blanc (lots fictifs ZZR10A avec dossier d'instantané de test écrit à 20:17, ZZR10B sans dossier ; `-BackupRoot` de test)
|
|||
|
|
|
|||
|
|
Essai 1, lot avec instantané récent (`-Depuis` = 19:28) → **0** :
|
|||
|
|
```
|
|||
|
|
COPIE OK lot=ZZR10A copie=LifePlay-master 5.8 proc=0 assets=0 absents=0 modifies=0 git=0/17/0 hors_declares=0 parasites=0 jeu_hors_docs=6 jeu_docs=84 head=89e19ca/082fb00/c8661cd verrou=165:libre cpu=20% alertes=aucune
|
|||
|
|
code=0
|
|||
|
|
```
|
|||
|
|
Essai 2, lot sans instantané, fichiers suivis écrits depuis `-Depuis` (20:26) → **1** avec le message :
|
|||
|
|
```
|
|||
|
|
COPIE ALERTE lot=ZZR10B … alertes=INSTANTANE
|
|||
|
|
ALERTE INSTANTANE : aucun instantane du lot depuis 2026-10-14 20:26 : lancer Snapshot.ps1 -Lot ZZR10B avant d'ecrire (3 fichier(s) suivi(s) modifie(s) depuis cette heure hors Docs/Migration/etat/ ; 13 plus ancien(s) ignore(s) ; dernier instantane : aucun dossier D:\Game\LifePlay-master 5.8\Saved\AMEL1-R10\bk\ZZR10B*)
|
|||
|
|
code=1
|
|||
|
|
```
|
|||
|
|
Essai 2b, instantané (20:17) antérieur à `-Depuis` (20:26) → **1** : `ALERTE INSTANTANE : aucun instantane du lot depuis 2026-10-14 20:26 : … (3 fichier(s) … ; 13 plus ancien(s) ignore(s) ; dernier instantane : 2026-10-14 20:17)`, `code=1`.
|
|||
|
|
Essai 2c, faux positif écarté (lot sans dossier, mais aucun fichier suivi écrit depuis `-Depuis` = 21:28) → **0** : `COPIE OK lot=ZZR10B … alertes=aucune`, `code=0`.
|
|||
|
|
Essai 3, paramètres invalides → **2** :
|
|||
|
|
```
|
|||
|
|
COPIE ERREUR lot=ZZR10A : -Depuis 'hier matin' invalide (attendu : AAAA-MM-JJ HH:MM, heure locale) code=2
|
|||
|
|
COPIE ERREUR lot=ZZR10A : -Depuis '2026-13-45 99:99' invalide (attendu : AAAA-MM-JJ HH:MM, heure locale) code=2
|
|||
|
|
COPIE ERREUR lot=ZZ R10 : lot 'ZZ R10' invalide (lettres, chiffres, . _ - seulement) code=2
|
|||
|
|
```
|
|||
|
|
Sans `-Depuis`, avec `-Reference` : ancien script (A0) et nouveau (E4) :
|
|||
|
|
```
|
|||
|
|
A0: COPIE OK lot=ZZR10B … hors_declares=0 parasites=0 … alertes=aucune code=0
|
|||
|
|
E4: COPIE OK lot=ZZR10B … hors_declares=0 parasites=0 … alertes=aucune
|
|||
|
|
INFO : controle d'instantane non fait (parametre -Depuis absent) code=0
|
|||
|
|
R0 (sans -Reference ni -Depuis) : … alertes=GIT puis 17 lignes ALERTE GIT, puis la ligne INFO en dernier, code=1 (comme avant)
|
|||
|
|
```
|
|||
|
|
`-Json` sans `-Depuis`, stdout seul (E6) : `contient INFO : False`, `ConvertFrom-Json : OK ; instantane_lot.controle = False`. Lot réel `AMEL1-R10` (E7, `-Depuis` 17:28) : `COPIE OK … alertes=aucune`, `code=0` ; JSON : `dernier = 2026-10-14T20:14:45`, `dossiers = [AMEL1-R10]`, `suivis_modifies = 3`, `suivis_anciens = 13`.
|
|||
|
|
|
|||
|
|
### (b) FicheStats.py : avant / après sur 3 fiches `lp-mcp-bp` de P3 sans « Niveau Nx » (R13)
|
|||
|
|
|
|||
|
|
Commande : `python -I -X utf8 Tools/FicheStats.py --lot GEL1` puis `--lot ORG4`, avec `--since "2026-10-11 05:30:00" --until "2026-10-14 18:25:41"` (lignes `lp-mcp-bp`).
|
|||
|
|
```
|
|||
|
|
AVANT | GEL1-SPEC | N1? | lp-mcp-bp | … | 41 | … | hors budget (tours) |
|
|||
|
|
AVANT | ORG4-SPEC | N1? | lp-mcp-bp | … | 18 | … | dans le budget |
|
|||
|
|
AVANT | ORG4-SPEC | N1? | lp-mcp-bp | … | 35 | … | dans le budget |
|
|||
|
|
APRÈS | GEL1-SPEC | N3? | lp-mcp-bp | … | 41 | … | dans le budget |
|
|||
|
|
APRÈS | ORG4-SPEC | N3? | lp-mcp-bp | … | 18 | … | dans le budget |
|
|||
|
|
APRÈS | ORG4-SPEC | N3? | lp-mcp-bp | … | 35 | … | dans le budget |
|
|||
|
|
```
|
|||
|
|
Niveau déduit N1 → N3 (« ? » = déduit de l'agent), budget 40 → 60 tours ; `GEL1-SPEC` (41 tours) passe de « hors budget (tours) » à « dans le budget ». Les 27 transcriptions `lp-mcp-bp` de P3 sans « Niveau Nx » (`essai_r13_niveau.py`, mêmes 27 que les lignes de `subagents.csv`) : avant `{'N1 (agent)': 27}` / `{40: 27}`, après `{'N3 (agent)': 27}` / `{60: 27}`. `AGENTS_N3` après = `['fable-top', 'lp-cart', 'lp-cart-max', 'lp-diag', 'lp-impl', 'lp-impl-max', 'lp-mcp-bp', 'opus-max', 'opus-xhigh']`. Sources des niveaux (en-têtes, ligne 3) : `lp-mcp-bp.md` « N3 », `lp-cart-max.md` « N3 », `lp-diag.md` « N3− » ; les autres `lp-*` sont N0 (`lp-builder`) ou N1, `lp-impl` N3, `lp-impl-max` N4 et `lp-cart` N2+ déjà présents.
|
|||
|
|
|
|||
|
|
### (b2) FICHE_RE élargie : combien de fiches `lp-mcp-bp` de P3 reconnues par la CLI
|
|||
|
|
|
|||
|
|
Commande : `python -I -X utf8 Saved\AMEL1-R10\essai_r13b.py <FicheStats.py de l'instantané AMEL1-R10> <Tools\FicheStats.py>` (lance `main()` des deux versions avec `--lot <L>` + fenêtre P3).
|
|||
|
|
```
|
|||
|
|
Transcriptions lp-mcp-bp de P3 sans 'Niveau Nx' en premiere ligne : 27
|
|||
|
|
lot STE ancien : 0 ; nouveau : 5 ['STE-H10-GI1', 'STE-H10-GI1', 'STE-H10-GI2', 'STE-H3d-I', 'STE-H3g-I']
|
|||
|
|
lot STG ancien : 0 ; nouveau : 3 ['STG-B1', 'STG-B2P', 'STG-B7a']
|
|||
|
|
lot CAM ancien : 0 ; nouveau : 10 ['CAM-B2f', 'CAM-B2g', 'CAM-B2i', 'CAM-B2k', 'CAM-B2m', 'CAM-B2n', 'CAM-B2p-G-PC', 'CAM-B2p-J-PC-FICHE', 'CAM-B2p-R', 'CAM-B2s']
|
|||
|
|
lot GEL1 ancien : 1 ; nouveau : 1 ['GEL1-SPEC'] lot ORG4 ancien : 2 ; nouveau : 2 ['ORG4-SPEC', 'ORG4-SPEC'] lot B2p : 0 ; 0
|
|||
|
|
TOTAL distinct (debut, tours) : ancien = 3 / 27 ; nouveau = 21 / 27 ; reconnues avant et perdues apres : 0
|
|||
|
|
```
|
|||
|
|
Avant : 3 fiches reconnues sur 27 ; après : 21 sur 27 (minorant). Les ≤ 6 restantes sont estimées sans identifiant `<lettre><n>` dans le début du prompt (`STG-WALKA`, `STG-FACADE`, fiches « (aucun) » de `subagents.csv`), non vérifié fiche par fiche.
|
|||
|
|
|
|||
|
|
Non-régression (lignes `(agent, début, tours)` de l'ancienne version retrouvées avec le même identifiant dans la nouvelle) :
|
|||
|
|
```
|
|||
|
|
lot GEL1 : ancien 3, nouveau 4 ; perdues 0 ; id change 0 ; nouvelles 1 (GEL1-D1, lp-builder)
|
|||
|
|
lot ORG4 : ancien 5, nouveau 6 ; perdues 0 ; id change 0 ; nouvelles 1 (ORG4-P0, lp-builder)
|
|||
|
|
lot STE : ancien 2, nouveau 31 ; perdues 0 ; id change 0 ; nouvelles 29
|
|||
|
|
lot STG : ancien 0, nouveau 17 ; perdues 0 ; id change 0 ; nouvelles 17
|
|||
|
|
lot CAM : ancien 0, nouveau 43 ; perdues 0 ; id change 0 ; nouvelles 43
|
|||
|
|
lot B2p : ancien 1, nouveau 1 ; perdues 0 ; id change 0 ; nouvelles 0
|
|||
|
|
lot U8 : ancien 24, nouveau 24 ; perdues 0 ; id change 0 ; nouvelles 0 (sans fenêtre : tout l'historique)
|
|||
|
|
lot STA : ancien 10, nouveau 10 ; perdues 0 ; id change 0 ; nouvelles 0 (sans fenêtre)
|
|||
|
|
identifiants déjà reconnus et inchangés (échantillon) : GEL1-SPEC, ORG4-SPEC, … ; U8 (24 lignes) et STA (10 lignes) identiques
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### (c) `git diff --stat` des deux fichiers
|
|||
|
|
```
|
|||
|
|
Tools/CopieEtat.ps1 | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|||
|
|
Tools/FicheStats.py | 6 +++-
|
|||
|
|
2 files changed, 89 insertions(+), 1 deletion(-)
|
|||
|
|
```
|
|||
|
|
`git ls-files --eol` : `i/lf w/lf attr/-text` pour les deux fichiers ; 0 CR (`tr -cd '\r' | wc -c` = 0 pour les deux).
|
|||
|
|
|
|||
|
|
Contrôles de clôture (reprise b) : `pwsh -NoProfile -File Tools\PubCheck.ps1 -Fichiers Tools/CopieEtat.ps1 Tools/FicheStats.py "Docs/Migration/etat/EVAL2/AMEL1/AMEL1-R10-R13-IMPL.md"` → `PubCheck : 0 constat(s)`, code 0 (lancé avant l'ajout de cette ligne). MD5 finaux : `Tools/CopieEtat.ps1` `a5298113f1cefb6a41d0d00f07b6052c`, `Tools/FicheStats.py` `25938733222fd298aa6740603584e841`. Après la dernière modification de `CopieEtat.ps1` (commentaire de la ligne 436), les codes E1 = 0, E2 = 1, E2b = 1, E2c = 0, E3a/b/c = 2 ont été rejoués.
|
|||
|
|
|
|||
|
|
À verser : `lp-build` § 8 — sous `pwsh -File`, `Write-Warning` part sur la sortie standard et casse un `-Json` lu par `ConvertFrom-Json` (établi, essai E6 de la première passe) ; `lp-lot` (Snapshot) — `-Path a,b` sous `pwsh -File` est une seule chaîne, un appel par chemin (estimé d'après `lp-build` § 8, non rejoué avec `Snapshot.ps1`) ; `lp-doc` (gabarit TACHES) — `FicheStats.py` ne reconnaissait pas les fiches `<LOT>-<lettre><n>[-suffixe]` (24 des 27 `lp-mcp-bp` de P3 hors CLI avant la reprise b, 6 après) : relire les `<LOT>-TACHES` mesurés avant cette date.
|