LifePlay-Revival/Docs/Migration/etat/DOC/DOCMV/DOCMV-VAL.md

105 lines
16 KiB
Markdown
Raw Permalink Normal View History

Fiche DOCMV-T6 — Niveau N1 — Modèle prévu sonnet | utilisé Sonnet 5.5 (claude-sonnet-5-5) — Agent lp-validator — Skills sk-protocol, sk-recount, debug-verification, lp-validate
# DOCMV-VAL : validation statique du déplacement de 41 fichiers de `Docs\Migration\` vers `Docs\` (2026-10-10)
**Verdict final : PASS-STATIC** (voir « Suite de E1 » en fin de fichier). Le verdict initial de cette validation était FAIL (écart E1, § 5) ; il est conservé ci-dessous pour la trace.
Copie `D:\Game\LifePlay-master 5.8`, branche `ue5.8`, HEAD `ee9dce2` = tag annoté `DOCMV-avant` (`git rev-parse 'DOCMV-avant^{commit}'` = `ee9dce2cb882…`). Lecture seule : seul ce livrable est écrit. Aucune commande git qui écrit, aucune compilation. Scripts de contrôle (lecture seule) dans le bloc-notes de la session : `cmp.py`, `tagcmp.py`, `crcmp.py`, `links2.py`.
## 1. Fiches amont relues
- `DOCMV-SPEC.md` (D1-D5 § 2, S3 § 4, S5), `DOCMV-IMPL.md` (S0-S5 déclarés), `DOCMV-T1-INV.md` (inventaire, 1 190 références ; `DOCMV-T1-references.csv` = 1 191 lignes avec l'en-tête : `wc -l`), `DOCMV-TACHES.md` (présent, non audité ligne à ligne).
- Il n'y a qu'une IMPL (T4 + T5 réunies) ; pas de fiche BUILD (lot documentaire, aucune compilation attendue).
- Référence « avant » : tag `DOCMV-avant` et instantané `D:\Game\LifePlay_Backup_5.5\DOCMV\` (+ `-addon58`, `-addon55`).
- Contrôle de l'instantané : les 41 fichiers de `D:\Game\LifePlay_Backup_5.5\DOCMV\Docs\Migration\` sont identiques octet pour octet à `git show DOCMV-avant:Docs/Migration/<f>` (`tagcmp.py` : **41 sur 41**). L'instantané est donc une référence fiable.
## 2. Points à confirmer des IMPL
L'IMPL ne contient pas de section « points à confirmer » numérotée ; ses affirmations sont reprises ici.
| # | Affirmation de l'IMPL | Résultat |
|---|---|---|
| P1 | Détection de renommage git : 41 `R` au commit (« estimé », à vérifier par le gardien) | **reporté** au gardien (`git show --stat -M` de DOCMV-R4). Indice statique : similarité en octets des 10 docs modifiés, recomptée (`difflib`) : 05 99,4 % ; 08 98,5 % ; 09 98,7 % ; 19 93,0 % ; 22 99,2 % ; 24 99,3 % ; 29 98,1 % ; 32 98,2 % ; Journal 99,4 % ; README 90,2 % (seuil git 50 %) ; les 25 autres docs (Registre compris) et les 6 patchs sont identiques. Estimé, non établi |
| P2 | 41 déplacés, 0 MD5 différent | **PASS** (§ 3, C1-C2b) |
| P3 | Fins de ligne : CR avant = après sur chaque fichier | **PASS** (§ 3, C4) |
| P4 | Anciens chemins : 0 hors exceptions décidées | **FAIL partiel** à l'origine (14 occurrences non inventoriées, E1) ; **PASS** après D2-bis (voir « Suite de E1 ») |
| P5 | 0 lien cassé créé ; 12 liens README et 2 archives résolvent | **PASS** (§ 3, C7) |
| P6 | `diff -rq` des skills vide ; addon 5.5 = 5 skills recopiés | **PASS** (§ 3, C9) |
| P7 | Hors dépôt : `CLAUDE.md`, `lp-writer.md`, `.cursor`, mémoire | **PASS** (§ 3, C5) |
| P8 | « Addon58 : 1 » occurrence restante (SB0 l.4) | **écart** à l'origine : 13 lignes dans l'addon 5.8 (SB0 + 12 en-têtes de code) ; l'IMPL a corrigé son compte (« 1 hors `Plugins` », 12 sous `Plugins`) : **PASS** après correction |
## 3. Critères rejoués (commande → résultat brut)
| # | Critère | Commande / méthode | Attendu | Constaté | Verdict |
|---|---|---|---|---|---|
| C1 | Présence | `ls Docs/*.md \| wc -l` ; `ls Docs/correctifs \| wc -l` ; `ls -A Docs/Migration` | 35 ; 6 ; `etat` seul | **35 ; 6 ; `etat`** | PASS |
| C2 | Aucun fichier perdu ni écrasé | `git ls-tree -r --name-only DOCMV-avant -- Docs/Migration` hors `etat/` : 41 noms ; comparaison au listing de `Docs\` (35 + `correctifs/*`) : `diff` | mêmes 41 noms | **41 = 41, `SAME_NAMES`** ; 32 suivi (`git ls-tree DOCMV-avant` le contient) ; `Docs/*.md` absents du tag (0 collision) ; `git check-ignore -v` sur 4 cibles : code 1 (aucune ignorée) | PASS |
| C2b | 6 patchs identiques | MD5 `Docs/correctifs/*` contre `…\DOCMV\Docs\Migration\correctifs\*` | 6 identiques | **6 IDENT** (P01 à P06) | PASS |
| C3 | Docs non modifiés identiques | `cmp.py` : égalité d'octets instantané ↔ `Docs\` sur les 35 `.md` | 25 identiques (Registre compris), 10 modifiés | **25 SAME, 10 DIFF** (05, 08, 09, 19, 22, 24, 29, 32, Journal, README) | PASS |
| C4 | Fins de ligne | `cmp.py` (CR, LF, BOM par fichier), `crcmp.py` (8 fichiers du jeu, 15 de l'addon 5.8, 5 de l'addon 5.5) ; `Tools/FileCheck.ps1 -Lot DOCMV -OnlyChanged` (+ `-Lot DOCMV-addon58 -ProjectRoot …`, `DOCMV-addon55`) | CR avant = après, BOM inchangé | 35 docs : CR identiques (18, 19, 22, 25, 26 en CRLF : 291/285/217/137/92 des deux côtés) ; LF +1 sur 08, 32, Journal, +6 sur 29, +4 sur README (lignes ajoutées) ; autres fichiers `OK` ; FileCheck jeu : `fichiers=88 alertes=0 introuvables=0`, `absent=41 absent(prévu)=1 modifie=11 nouveau=35` ; addon 5.8 : `alertes=0`, `identique=9 modifie=15` ; addon 5.5 : `alertes=0`, `identique=8 modifie=5` | PASS |
| C5 | Fichiers hors dépôt | `diff` instantané `hors-depot\` et `.cursor`/`CLAUDE.md` contre l'état courant | seulement chemins + trace | `CLAUDE.md` : +1 ligne (l.22) ; `lp-writer.md` : description l.3 ; `.cursor/…/SKILL.md` l.18-19, `reference.md` l.80 : chemins ; mémoire `docs-reference-5-8.md` : l.8 (date) et l.17 réécrite. Rien d'autre | PASS |
| C6 | Anciens chemins | `Grep` du motif `Migration[/\\]+(Journal_Modifications\|Registre_Erreurs\|README\|[0-9]{2}_\|correctifs)` ; voir le détail ci-dessous | 0 hors exceptions décidées | **0 dans 13 zones** ; **14 lignes hors exceptions à l'origine** (E1), couvertes ensuite par D2-bis | FAIL à l'origine, PASS après D2-bis |
| C7 | Liens Markdown | `links2.py` : toutes les cibles `](…)` de 35 docs, `README.md` racine, 15 fichiers `etat/U58/U1` et `UA` (51 fichiers, 72 liens) ; « avant » = texte de l'instantané / `git show DOCMV-avant:` au chemin d'origine, existence simulée | 0 cassé créé | **avant 0 cassé, après 0 cassé, NEW broken []**. Témoin négatif : ancien texte au nouvel emplacement = 7 cassés (doc 19) + 1 (doc 22) + 12 (README) + 1 + 1 (archives U1 / UA) = 22, conforme à T1 § 3.1 | PASS |
| C9 | Skills identiques | `diff -rq D:\Game\LifePlay-Sandbox-5.8\Tools\claude\skills D:\Game\LifePlay-Sandbox\Tools\claude\skills` | vide | **vide, code 0** | PASS |
| C10 | Copie 5.5 intacte | `git -C "D:\Game\LifePlay-master 5.5" status --short` ; `ls Docs/Migration` | vide ; docs présents | **vide**, branche `main`, `23_Cycle_De_Vie_Mod.md` présent (lien de SB0 l.4 juste) | PASS |
Détail de C6 (motif identique pour toutes les zones ; le `Grep` d'une racine saute les dossiers ignorés : les chemins ignorés ont été passés en `path`) :
| Zone | Occurrences (lignes) | Verdict |
|---|---:|---|
| skills addon 5.8 (`Tools\claude\skills`) ; skills addon 5.5 ; `~\.claude\agents` ; `~\.claude\skills` ; `CLAUDE.md` ; `Tools\` du jeu ; `.cursor\` ; `.hyperai\` ; `README.md` racine ; mémoire du projet ; `Config\` ; `.claude\` du jeu ; `AGENTS.md` | **0** chacune | conforme |
| `Docs\*.md` (hors `etat`) | 58 lignes, toutes dans `Journal_Modifications.md` ; diff du journal = une seule ligne ajoutée (CHG-300) : les entrées passées sont intactes | conforme (D4) |
| `Source\LifePlay*\*.h` du jeu | 11 fichiers, 1 ligne chacun | conforme (D2) |
| `Docs\Migration\etat\**` | archives et lots (dont `DOCMV-*`, tickets) | conforme (D3) ; non recompté fichier par fichier |
| addon 5.8, `Docs\SB0-conception.md` l.4 | 1 (`LifePlay-master 5.5/Docs/Migration/23_…`, chemin explicite de la copie 5.5, valide) | conforme |
| addon 5.5 hors skills | 27 lignes (15 décidées D5 + 12 en-têtes de code sous `Plugins`) | D5 pour les 15 ; les 12 : D2-bis / D5 |
| addon 5.8, `Plugins\LPSandbox\Source\**` | 12 | écart E1, couvert par D2-bis |
| jeu, `Plugins\LPAnimCore\…\LPAnimCore.Build.cs` l.1 et `Plugins\ModdingExtra\…\Private\LPDataCache.h` l.1 | 2 | écart E1, couvert par D2-bis |
## 4. Diff lu en entier (fichiers, compte)
Méthode : `difflib` unifié (`-U0`) entre l'instantané et `Docs\` pour les 35 docs ; `git diff -U0` pour `README.md`, les 5 `Tools`, les 2 archives, et pour les deux addons. Tout le diff a été lu ; ne contient que des corrections de chemins et la trace DOCMV.
| Ensemble | Fichiers changés | Lignes | Nature |
|---|---:|---|---|
| Docs déplacés | 10 sur 35 (05, 08, 09, 19, 22, 24, 29, 32, Journal, README) | 05 : 1 ; 08 : 1 → 2 ; 09 : 1 ; 19 : 7 liens `../../` → `../` ; 22 : 1 (lien `Migration/etat/…`) ; 24 : 2 ; 29 : règle (3 lignes) + puce DOCMV (+4) ; 32 : l.129, 274, 285 (chemins) + 1 ligne au § 9 ; Journal : +1 ligne (CHG-300 en l.1135, après CHG-301) ; README : bandeau (+4 dont une vide), ligne journal sans la mention « CHG-300 réservé », ligne `Migration/etat/` | chemins ou trace DOCMV. `32` l.129 n'est pas listé par la SPEC S3-4 mais l'est dans l'IMPL et dans la CHG-300 (ancien chemin `Docs/Migration/NN_Projet_<Nom>.md`) : extension cohérente |
| 6 patchs | 0 | — | identiques |
| `README.md` racine | 1 (12 lignes) | l.79, 106, 129, 153, 154, 164-168, 170, 192 | `Docs/Migration/X` → `Docs/X` (texte et cible) ; README + 5 `Tools` + 2 archives = 8 fichiers, 19 insertions, 19 suppressions (`git diff --stat`) |
| `Tools` du jeu | 5 | 1 ligne chacun (en-tête) | `Docs/Migration/NN` → `Docs/NN` |
| Archives `etat` | 2 | `U1-MODS-MOTEUR.md` l.5, `UA-MODS.md` l.4 | `../../../27_` → `../../../../27_` |
| Addon 5.8 | 15 (33 insertions, 29 suppressions) | skills 5 (19 / 15) ; `README.md` 3 ; `SB-plan.md` 3 ; `Creating_Asset_Mods.md` 1 ; 7 `Tools` (1 chacun) | chemins ; `lp-doc` ajoute 3 lignes « Emplacements » et une précision de commande |
| Addon 5.5 | 5 (19 / 15) | skills seuls, `diff -rq` vide avec l'addon 5.8 | idem |
| Hors dépôt | 5 | voir C5 | chemins + trace |
Aucune autre ligne changée. Aucun fichier modifié par script (l'IMPL déclare Edit/Write et `Move-Item` ; non vérifiable autrement : estimé). `Docs/Migration/etat/U58/U1` et `UA` : seules les 2 lignes citées.
## 5. Verdict
**Verdict initial : FAIL** (un seul écart, d'inventaire et cosmétique) ; tout le reste conforme (PASS-STATIC). **Verdict final : PASS-STATIC**, voir « Suite de E1 ».
Écart E1 — anciens chemins non inventoriés, hors exceptions décidées. Attendu 0 (SPEC § 4 S5-2, fiche T6 § 3) ; constaté 14 lignes :
- Addon 5.8 `D:\Game\LifePlay-Sandbox-5.8\Plugins\LPSandbox\Source\` (12 fichiers, commentaires de code, 1 ligne chacun) : `LPAnimMeasure\LPAnimMeasurePaths.h:1` (cite le doc 24), `LPAnimMeasure\LPSkeletonProfile.h:1` (20), `LPSandbox\LPSandbox.Build.cs:3` (21), `LPModTools\LPAnimCatalogCommandlet.h:1` (20), `LPAnimChecks.h:1` (20), `LPAnimEvalCommandlet.h:1` (20), `LPAnimIdentifyCommandlet.h:1` (20), `LPAnimMethodSelect.h:1` (20), `LPAnimTwistCommandlet.h:1` (20), `LPAuditBlueprintCallsCommandlet.h:1` (27), `LPHairFromStaticMeshCommandlet.h:1` (11), `LPModTools.Build.cs:1` (24) ; entre parenthèses le doc cité.
- Jeu : `Plugins\LPAnimCore\Source\LPAnimCore\LPAnimCore.Build.cs:1` (cite 24) ; `Plugins\ModdingExtra\Source\ModdingExtra\Private\LPDataCache.h:1` (cite 11).
- Cause (établie) : `DOCMV-T1-INV.md` § 1 exclut `Plugins` de la marche sur le jeu ; l'inventaire ne cite aucun de ces fichiers (`Grep LPSandbox[/\\]Source` dans le dossier DOCMV : 0). L'affirmation de l'IMPL « Addon58 : 1 » était donc inexacte (13 lignes), et le décompte « 11 `Source/*.h` » de D2 ignorait ces 2 + 12 (l'addon 5.5 porte les mêmes 12, soit 27 lignes hors skills, dont 15 décidées D5).
- Gravité : commentaires de ligne 1 ou 3, aucun effet sur le build ni les outils ; même nature que D2. Dans le jeu, corriger `LPDataCache.h` ou `LPAnimCore.Build.cs` change un fichier compilé (recompilation). Aucune correction faite ici.
Écarts mineurs, sans effet sur le verdict : (i) `Docs/README.md` : la plage « CHG-001 à CHG-301 » est juste (CHG-301 présent, journal l.1134) alors que la SPEC S3-6 disait « jusqu'à CHG-300 » ; (ii) `32` l.129 hors liste SPEC (voir § 4) ; (iii) l'IMPL annonce 245 occurrences dans `etat` et 75 dans `Docs/*.md` : comptées en occurrences, non en lignes (je compte 58 lignes pour le journal) ; non recomptées à l'identique, pas de conséquence sur la conformité.
## 6. Points à confirmer par l'utilisateur (cases)
- [x] Les 14 lignes de l'écart E1 (12 addon 5.8, 2 jeu) : **« Laisser, comme D2 »** (2026-10-10, via l'orchestrateur ; SPEC § 2 D2-bis).
- [ ] Pour le gardien (DOCMV-R4) : exiger `git show --stat -M` = 41 `R` ; similarité attendue ≥ 90 % (P1), seuil git 50 %.
- [ ] `Docs/Migration/etat/REPO/REPO-JOURNAL.md` est modifié par deux sessions : lignes `DOCMV-R1` (lot) et `AG-R5` (autre lot) ; le gardien décide quoi commiter avec R4.
- [ ] `etat/REPO/NUMEROS.md` : non modifié à cet instant (statut « utilisé » de CHG-300 prévu en S8, non constaté).
### Fichiers du `git status --short` qui ne sont PAS du lot (à exclure du ticket DOCMV-R4)
`git status --short` : 107 lignes ; lot : 87 (41 `D` de `Docs/Migration`, 35 `??` `Docs/*.md`, `?? Docs/correctifs/`, `M README.md`, 5 `M Tools/…`, 2 `M` archives U1 / UA, `?? …/DOC/DOCMV/`, `?? …/REPO/tickets/DOCMV-R1.md`) ; hors lot : 20.
- `M Content/UI/MainMenu.uasset` (STF, binaire).
- `M` sous `Docs/Migration/etat/` : `AG/AG-TACHES.md`, `AG/LANCEMENT.md`, `BOSS/BOSS-JOURNAL.md`, `OB/OBB/OBB-T1-SPEC.md`, `OB/OBB/OBB-TACHES.md`, `ST/STE/STE-TACHES.md`, `ST/STE/fiches/STE-D.md`, `STE-GI.md`, `STE-TXT.md`, `ST/STF/STF-TACHES.md` (10) ; plus `REPO/REPO-JOURNAL.md` à partager (voir § 6, case 3).
- `??` : `REPO/tickets/AG-R4.md`, `AG-R5.md`, `ST/STE/STE-D-INV.md`, `ST/STE/fiches/STE-H2.md`, `STE-H3.md`, `ST/STF/STF-T1-CART.md`, `STF-T3-IMPL.md`, `STF-VAL.md` (8).
- Addons : `git status --short` = 15 fichiers (addon 5.8) et 5 (addon 5.5), tous attendus (tickets R2, R3) ; rien d'autre.
Tours : 20 / 40
## Constats
- Établi (preuve fraîche, commandes ci-dessus) : présence, identité des 6 patchs, absence de perte, contenu des 10 docs modifiés, fins de ligne, liens (22 cassés simulés si rien n'était corrigé, 0 après), skills identiques, copie 5.5 intacte.
- Estimé : 41 `R` au commit (similarité calculée en octets, pas par git) ; absence de script d'édition (déclaration de l'IMPL).
- Incertain : contenu du dossier `etat` hors U1 / UA (non relu, hors périmètre de la fiche) ; `DOCMV-TACHES.md` non audité.
- Fichiers écrits par ce rôle : ce seul livrable. Fichiers à commiter : `A Docs/Migration/etat/DOC/DOCMV/DOCMV-VAL.md` (avec le dossier DOCMV, ticket DOCMV-R4).
## Suite de E1 (2026-10-10)
Décision de l'utilisateur, transmise par l'orchestrateur DOCMV : « Laisser, comme D2 ». Contrôles rejoués après le message :
1. **D2-bis couvre exactement les 14 lignes.** `DOCMV-SPEC.md` § 2, ligne 24 (lue avec Read) : jeu `Plugins/LPAnimCore/Source/LPAnimCore/LPAnimCore.Build.cs` l.1 et `Plugins/ModdingExtra/Source/ModdingExtra/Private/LPDataCache.h` l.1 (2) ; addon 5.8 `Plugins/LPSandbox/Source/**` : « 10 `.h`, `LPModTools.Build.cs` l.1, `LPSandbox.Build.cs` l.3 » (12) ; total 14 ; réponse « Laisser, comme D2 » ; les 12 mêmes lignes de l'addon 5.5 relèvent de D5. Mes 14 lignes (§ 5 E1) : 10 `.h` (`LPAnimMeasurePaths`, `LPSkeletonProfile`, `LPAnimCatalogCommandlet`, `LPAnimChecks`, `LPAnimEvalCommandlet`, `LPAnimIdentifyCommandlet`, `LPAnimMethodSelect`, `LPAnimTwistCommandlet`, `LPAuditBlueprintCallsCommandlet`, `LPHairFromStaticMeshCommandlet`) + 2 `.Build.cs` (l.3 et l.1) + 2 du jeu : identiques, aucune ligne en trop ni en moins.
2. **IMPL corrigée.** `DOCMV-IMPL.md` l.48 : « Addon58 : 1 hors `Plugins` (SB0 l.4) » ; l.50-53 : « Correction après VAL (écart E1) », 14 commentaires, dont les 12 de l'addon 5.5 (D5). Cohérent avec mon recompte (P8).
3. **Rien d'autre n'a changé** : `git status --short` du jeu = 107 lignes (inchangé), addon 5.8 = 15, addon 5.5 = 5 ; `git diff --stat -- Plugins Source` du jeu et `git diff --stat -- Plugins` de l'addon 5.8 : vides (aucun de ces 14 fichiers modifié, conforme à « Laisser »).
4. **Verdict final : PASS-STATIC.** Les critères C1 à C10 sont conformes ; C6 est conforme avec les exceptions D2, D2-bis, D3, D4, D5 et SB0 l.4. Réserves restantes (cases § 6, non bloquantes pour la VAL) : 41 `R` à contrôler par le gardien, `REPO-JOURNAL.md` partagé avec `AG-R5`, `NUMEROS.md` à passer à « utilisé » en S8. Établi par lecture seule, aucune exécution ni build rejoués.