LifePlay-Revival/Docs/Migration/etat/REL/MAPDL1/MAPDL1-AUTO-SPEC.md
2026-10-22 21:10:39 +02:00

212 lines
16 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 MAPDL1-AUTO-SPEC — Niveau N3 — Modèle prévu opus medium | utilisé claude-opus-5-5 — Agent session « Medium · MAPDL1 » — Skills sk-protocol, lp-city, lp-lot, lp-commandlets
# MAPDL1-AUTO : l'automate des villes reprises, exécuté par ProduirePack (2026-10-22)
Consignes de l'utilisateur :
- dans la session MAPDL1, citée mot pour mot : « même processus, automatiser la chaine de production, il y a 280 villes à traiter. je veux que des modèles plus réduits les prennent en charge » ;
- relayée par Big Boss, citée : « mapdl1 doit construire son automate en premier » ;
- Moscou 1.0.1 est validée (« ok pour moscow »).
Demande de Big Boss : suivre le modèle PROD1 de STM1. Un agent Sonnet exécute sans rien décider et s'arrête au premier écart ; MAPDL1 ne garde que le diagnostic. Pas de roue de plus.
**Rien n'a été exécuté dans UE** : pas de jeton pour cette fiche. Il n'y a eu que des essais à blanc et des arrêts négatifs.
## 1. Décision : ProduirePack.ps1 porte la recette, sans modification
`Tools\ProduirePack.ps1` (STM1, MD5 `005AF412653505CF5CA9047D6BCD496F`) n'est **pas touché**. Ses types d'étapes suffisent pour toute la partie sous jeton :
| Étape d'une ville reprise | Type ProduirePack |
|---|---|
| manifeste des archives, montage, version, démontage | `packville` (Archives, Monter, Version, Demonter) |
| import en DryRun, puis import réel (`LPImportLegacyStreetMap`) | `commandlet`, avec 13 contrôles `egal` sur la ligne TOTAUX et « reste 4 octets » |
| maillage (`LPBuildCityStatic -Flat -CompareStreetMap` Londres) | `commandlet`, contrôles `-> CONFORME` et triangles en fourchette |
| 3D classique (`LPBuildCityStatic -BuildingsOnly … StreetMapClassic`) | `commandlet`, bâtiments `egal`, triangles en fourchette |
| ligne « From version » du CREDITS | `remplacer` (ancre trouvée une seule fois, fins de ligne gardées) |
| cuisson, archive | `cuisson` (3 paquets), `archive` (octets en fourchette, 6 fichiers, CREDITS identique, archive antérieure inchangée) |
Deux opérations restent **hors moteur**, avant la recette, faites par mes outils existants et contrôlés : l'extraction du zip et la lecture des totaux (`RepriseCarte -Etape Lire`), puis le squelette du pack (`RepriseCarte -Etape Creer`). Elles n'ont pas besoin de ProduirePack, qui n'a aucun type pour un zip ou pour `NewMod.ps1`. Rien n'est donc à demander à STM1.
`LPCheckStreetMap` (relecture) n'a pas d'option `-Report`, ce qui le rend incompatible avec le type `commandlet`. Il n'entre donc pas dans la recette. La relecture depuis le disque est assurée par l'étape `classique` : elle **recharge** l'UStreetMap écrit, et son nombre de bâtiments est contrôlé `egal`. Les routes et nœuds relus ne sont pas recontrôlés, ce qui est un léger recul par rapport à `RepriseCarte -Etape Importer`.
## 2. Outils (hors `ProduirePack.ps1`)
| Fichier | État | MD5 | Octets | Liens |
|---|---|---|---:|---|
| `Tools\RecetteCarte.ps1` | **neuf** : écrit la recette d'une ville (`-Mode Nouvelle` ou `Classic`) avec les valeurs attendues calculées ; ne lance rien | `DF48FF7495741B376DEB2050853DD732` | 13 087 | **1** : lien à poser (Big Boss) |
| `Tools\ProduireCartes.ps1` | **réécrit en place** : pilote de lot (préparation hors moteur, recette, puis `ProduirePack -Recette`) ; arrêt au premier écart (`-ArretApres 1`) ; `-JetonUE` obligatoire hors `-ABlanc` | `5C95203B54CF781145F0907E5A1890AC`, puis `5762C6EC7ED9F4964D4E1632BF64F5C9` (§ 6 bis) | 11 285 | 2, gardé |
| `Tools\RepriseCarte.ps1` | inchangé depuis `MAPDL1-PROD-CONSIGNE` (tirets, `Biysk_Fixed`) | `2042423AE3F52D1E928E831D021F2077` | 24 533 | 2 |
| `Tools\LireCarteUE4.py` | inchangé | `6BA579413D32AC23128C28980EF0308F` | 11 626 | 2 |
- Tous sont en ASCII et LF ; l'analyse syntaxique donne 0 erreur.
- Instantanés : `MAPDL1-AUTO` (`RecetteCarte.ps1` absent ; `ProduireCartes.ps1` à `2CAEFFE9…` ; CREDITS de Tokyo à `3E2BA6B0…`).
- L'écriture en place a été préparée sur une copie, contrôlée, puis écrite par `WriteAllBytes`. `fsutil` montre toujours les deux noms.
**Source modifiée** : `ModSources\lpm_city_tokyo\Module\CREDITS.txt`, passé de LF à CRLF (décision de Big Boss « à la prochaine version »), MD5 `3E2BA6B0…` devenu `F5671904024C1FE7E02554E5FF159207`, 18 CR pour 18 LF. `PackVille -Etape Version` exige le CRLF.
## 3. Valeurs attendues (calculées, et non mesurées après coup)
Formules établies sur les 10 villes produites. Mesure comparée au calcul à partir des totaux de `LireCarteUE4.py` :
| Ville | Maillage mesuré | Calcul | Écart |
|---|---:|---:|---:|
| Tokyo | 1 792 923 | 1 792 923 | 0,000 % |
| Manila | 371 403 | 371 403 | 0,000 % |
| Bangalore | 2 717 119 | 2 717 119 | 0,000 % |
| NYC | 2 037 417 | 2 037 440 | −0,001 % |
| Moscow | 1 074 679 | 1 074 703 | −0,002 % |
| Mumbai | 2 141 445 | 2 141 526 | −0,004 % |
| Shanghai | 694 387 | 694 428 | −0,006 % |
| Seoul | 1 119 432 | 1 119 518 | −0,008 % |
| Beijing | 863 661 | 863 788 | −0,015 % |
| MexicoCity | 1 289 772 | 1 290 344 | −0,044 % |
| Moscow (classique) | 809 182 | 809 262 | −0,010 % |
- **classique** = 3 × points_bâtiments − 2 × bâtiments (toit de n − 2 triangles et 2 triangles par mur).
- **maillage** = classique + 2 × (points_routes − routes) + (points_parcs − 2 × parcs).
- L'écart est toujours négatif ou nul : une triangulation peut échouer, jamais en ajouter. Les bornes vont donc de **−1 % à +0,5 %** (`-Tolerance`).
- Bâtiments : `egal` (même nombre que l'ancienne carte).
- 13 totaux de l'import : `egal`, et « reste 4 octets ».
- Archive :
- mode Classic : archive 1.0.0 plus 12 à 30 octets par triangle classique (Moscou : 20,1) ;
- mode Nouvelle : 25 à 50 octets par triangle de maillage, plus 12 à 30 par triangle classique (vague 1 : 33 à 40 octets par triangle de maillage).
- Cuisson : 3 paquets ; 6 fichiers installés ; en mode Classic, 1 archive antérieure au manifeste, MD5 identique.
**3D éclairée ou `-ClassicUnlit`** : laissé en paramètre (`ProduireCartes -ClassicUnlit`, ou `-UnlitAuDela N`). Par défaut, **éclairée**, validée sur Moscou. Le nombre de triangles est le même avec ou sans éclairage, puisque les murs comptent toujours 2 triangles. Le non éclairé ne fait que partager les sommets : moins de sommets et un fichier plus petit. Ce n'est pas mesuré. Cela corrige mon estimation précédente d'un maillage « à peu près moitié moins » lourd.
## 4. Recettes écrites (vague 1, passage en 1.0.1 avec 3D classique)
Dossier `Docs\Migration\etat\REL\MAPDL1\AUTO\`, `<pack>-1.0.1.recette.json`, 8 étapes : archives, monter, classique, version, credits, demonter, cuisson, archive.
| Ville | Bâtiments | Triangles classique attendus | Archive attendue (o) | MD5 de la recette |
|---|---:|---|---|---|
| Tokyo | 129 240 | 1 590 176 – 1 614 271 | 86 881 957 – 115 794 259 | `BCE9842ABD2EE0400A72A3D134289534` |
| Manila | 31 844 | 346 384 – 351 633 | 19 075 484 – 25 373 378 | `97FDE579ECBB6036A63BB799D4C87193` |
| Mumbai | 115 936 | 1 907 735 – 1 936 642 | 94 153 427 – 128 839 535 | `F9805DB2AF835874B66EBAE7DEAD49C9` |
| Shanghai | 22 106 | 397 183 – 403 201 | 31 277 686 – 38 499 196 | `4CCA2295FF4AC4C696939B4A14840091` |
| Seoul | 41 044 | 623 317 – 632 763 | 51 169 353 – 62 502 405 | `22FB2D8522EF64495540F6C29EDA1DB5` |
| MexicoCity | 72 207 | 1 051 650 – 1 067 585 | 60 514 732 – 79 635 646 | `196864C4F3672C87C2A2230797E7B44F` |
| NYC | 90 028 | 1 929 615 – 1 958 853 | 91 082 221 – 126 166 147 | `92FEC8B814DFF1EA75879042EDB67021` |
| Beijing | 35 862 | 552 179 – 560 546 | 38 860 089 – 48 899 715 | `372F8A759DD1045DD03C5C7CC9023105` |
| Bangalore | 239 071 | 2 494 946 – 2 532 749 | 128 091 093 – 173 453 757 | `ECA9422CCB83E4F1C1F99C44AF560948` |
Les recettes fixent par MD5 PackVille, RunCommandlet, ArchivePack, UeState, BuildMod et ModSource. Les entrées fixées par SHA-256 sont `totaux-python.txt` et le `Content\StreetMap\<Ville>.uasset` du pack.
Le `totaux-python.txt` de Tokyo a été recréé hors moteur (`LireCarteUE4.py`) : P2 avait été fait à la main.
## 5. Essais (sans jeton)
| Essai | Résultat |
|---|---|
| Recette Manila, `ProduirePack -ABlanc`, pendant que PROD1 tenait l'éditeur | **arrêt code 3** : « editeur, commandlet ou compilation de cette copie en cours » (garde UeState) ; outils et entrées conformes avant l'arrêt |
| Les 9 villes, `ProduireCartes -SeulementClassic -ABlanc`, UE libre | **9 × « plan conforme », code 0** : outils (MD5), entrées (SHA-256), UeState, `Mods\` vide, `Content\` propre ; ancre du CREDITS trouvée une fois, CRLF gardé |
| `ProduirePack` sans `-JetonUE` ni `-ABlanc` | code 3 |
| Recette falsifiée (SHA-256 d'entrée à 0) | arrêt code 2, l'entrée nommée |
| `ProduireCartes` sans `-JetonUE` | code 3 |
| Moscou en `-SeulementClassic` | « deja » (archive 1.0.1 présente) |
| Annan et Pre-Saint-Gervais (`-ABlanc`) | « zip absent », sautées, code 0 |
| `RecetteCarte` : Moscou Classic (Classic déjà fait), Manila sans `-Remplacer`, Manila Nouvelle (carte déjà importée), ville inconnue | quatre refus, code 2 chacun, message explicite |
| Motifs des contrôles sur les vrais rapports (Manila `import-ecriture.md`, `static.md` ; Moscou `classic.md`, ArchivePack, journal de cuisson) | tous trouvés ; `routes=` ne capture pas `points_routes=`, `batiments=` ne capture pas `points_batiments=` |
**Non éprouvé** (il faut le jeton) :
- la boucle réelle ;
- le mode `Nouvelle` en réel (aucun nouveau zip sur le disque) ;
- le contrôle `au manifeste, N MD5 identiques` sur une vraie archive 1.0.1 (il n'est pas affiché sans `--manifeste`).
La première exécution des 9 villes sert d'épreuve.
## 6. Brève de l'exécutant (à donner telle quelle)
> Fiche MAPDL1-AUTO-EXEC-<n> — Niveau N1 — Modèle prévu sonnet — Agent lp-builder — Skills sk-protocol, lp-build
>
> **Objet** : exécuter le lot de villes reprises par l'automate, sans rien décider.
>
> **Préalable** : Big Boss t'a donné le jeton UE par un message explicite ; `pwsh -NoProfile -File "D:\Game\LifePlay-master 5.8\Tools\UeState.ps1" -Kind Editeur` rend 0 ; `D:\Game\LifePlay-master 5.8\Mods\` est vide. Sinon : arrête-toi et rends compte.
>
> **Commande unique**, en arrière-plan, depuis `D:\Game\LifePlay-master 5.8`, avec la liste de villes que donne Big Boss :
> - vague 1 (3D classique) : `pwsh -NoProfile -File "D:/Game/LifePlay-master 5.8/Tools/ProduireCartes.ps1" -Villes Manila,Shanghai,Beijing,Seoul,MexicoCity,NYC,Mumbai,Tokyo,Bangalore -SeulementClassic -VersionPack 1.0.1 -Max 5 -JetonUE` (environ 30 à 45 min) ;
> - nouvelles villes : `pwsh -NoProfile -File "D:/Game/LifePlay-master 5.8/Tools/ProduireCartes.ps1" -Toutes -Max 5 -JetonUE` (1 lot de 5 villes par jour, décision de l'utilisateur).
>
> Chemin du script : **absolu, entre guillemets, avec des barres obliques**. Dans Git Bash, `Tools\ProduireCartes.ps1` sans guillemets perd ses antislashs, d'où le code 64 de pwsh dans MAPDL1-AUTO-EXEC-1.
>
> **Pendant** : attends la notification de fin, sans sonder. Ne lance rien d'autre dans UE.
>
> **À la fin** :
> - recopie telle quelle la sortie de la commande et son code ;
> - recopie les lignes de `Docs\Migration\etat\REL\MAPDL1\PRODUCTION.csv` ajoutées pendant ta fiche ;
> - pour la dernière ville, recopie la dernière ligne de son `RAPPORT.md` (le chemin est dans la colonne `rapport`).
>
> **Interdits** :
> - modifier une recette, un outil ou une source ;
> - relancer après un arrêt ;
> - utiliser `-Depuis` ;
> - installer un pack ou lancer le jeu ;
> - commit, tag ou push ;
> - supprimer quoi que ce soit.
>
> **Si le code n'est pas 0** : ne corrige rien. Copie la ligne `**ARRET …**` ou `**ECART …**`, la ville et le chemin du rapport. Le diagnostic revient à MAPDL1.
>
> **Compte rendu** (livrable `Docs\Migration\etat\REL\MAPDL1\MAPDL1-AUTO-EXEC-<n>.md`) :
> - code ;
> - villes conformes, sautées et en échec ;
> - pour chaque archive : nom, octets et SHA-256 (colonnes du CSV) ;
> - `Mods\` vide, et UeState à 0.
>
> Rends le jeton à Big Boss.
## 6 bis. Rythme de l'utilisateur : 1 lot de 5 villes par jour
Décision de l'utilisateur, citée par Big Boss : « on fera 1 lot de 5 villes par jours. je ne veux pas être bloqué sur ce sujet. commençons par les ville déjà téléchargé et à refaire ».
**Ordre de la vague 1 en 1.0.1, par risque croissant** (triangles classiques attendus, puis bâtiments) :
| Lot | Villes (dans l'ordre) | Triangles classiques |
|---|---|---|
| Lot 1 | Manila, Shanghai, Beijing, Seoul, MexicoCity | 350 k, 401 k, 558 k, 630 k, 1,06 M |
| Lot 2 | NYC, Mumbai, Tokyo, Bangalore | 1,95 M, 1,93 M, 1,61 M (129 240 bâtiments), 2,52 M (239 071 bâtiments) |
**La même commande sert les deux jours.** Elle saute les villes déjà en 1.0.1 :
```
pwsh -NoProfile -File Tools\ProduireCartes.ps1 -Villes Manila,Shanghai,Beijing,Seoul,MexicoCity,NYC,Mumbai,Tokyo,Bangalore -SeulementClassic -VersionPack 1.0.1 -Max 5 -JetonUE
```
Essai à blanc (sans `-JetonUE`, avec `-ABlanc`) : les 5 villes du lot 1 sont planifiées, toutes « plan conforme », puis « limite -Max 5 atteinte », code 0.
**Reprise d'un lot** :
- une ville **terminée** (archive `<pack>-1.0.1-…zip` présente) est sautée (« deja ») et ne compte pas dans `-Max` ; essai : Moscou ;
- une ville **coupée en cours** n'est pas reprise d'elle-même. Les gardes l'arrêtent proprement :
- `LPBuildCityStatic` refuse un `Classic/<Ville>` existant (« existe deja », `LPBuildCityStaticCommandlet.cpp:171-173`), ce qui donne le code 1 ;
- `PackVille -Etape Version` ne trouve plus « 1.0.0 », ce qui donne le code 2 ;
- le démontage se fait dans le `finally` de ProduirePack.
Rien n'est écrasé ni compté deux fois. La reprise se fait par `ProduirePack -Depuis <étape>`, d'après `etat.json`, sur le diagnostic de MAPDL1 et une instruction écrite de Big Boss.
**Zips absents** (mode nouvelles villes) :
- une ville sans zip est sautée **sans échec ni ligne au rapport**, et ne compte pas dans `-Max` ; le lot prend la suivante qui a son zip ;
- la sortie se termine par « zips absents (sautees, sans echec) : N » ;
- essai `-Toutes -Max 5 -ABlanc` : 10 villes « deja », 266 zips absents, 0 traitée, code 0.
Changement en place de `ProduireCartes.ps1` pour ce point : une ville sans zip n'écrit plus de ligne « saute » au CSV ; en lot `-Toutes`, il y en aurait eu plus de 200 par jour. Nouveau MD5 : `5762C6EC7ED9F4964D4E1632BF64F5C9`, lien gardé, même MD5 sur les deux noms. Instantané : `MAPDL1-AUTO`.
## 7. Suite
1. Big Boss pose le lien physique de `Tools\RecetteCarte.ps1` vers l'addon.
2. Sur l'accord de l'utilisateur et le jeton, l'agent Sonnet joue la vague 1 en 1.0.1 (§ 6).
3. MAPDL1 relit les rapports et écrit `MAPDL1-AUTO-FIN`. En cas d'arrêt, un `MAPDL1-DIAG` est écrit avant toute reprise.
4. Ensuite, les nouvelles villes : par lots de 20, au rythme des zips téléchargés par l'utilisateur (geste de l'utilisateur, `MAPDL1-PROD-CONSIGNE` § 5).
## Fichiers
À commiter :
- A `Docs/Migration/etat/REL/MAPDL1/MAPDL1-AUTO-SPEC.md`
- A `Docs/Migration/etat/REL/MAPDL1/AUTO/*.recette.json` (9)
- A `Docs/Migration/etat/REL/MAPDL1/AUTO/PROD-*-ABLANC/RAPPORT.md` (rapports à blanc)
Hors git :
- `Tools\` (3 fichiers) ;
- `ModSources\lpm_city_tokyo\Module\CREDITS.txt` ;
- `LifePlay_Data`.
**À verser** :
- `lp-city` § 7 : la production des villes reprises se fait par `RecetteCarte.ps1`, puis `ProduirePack.ps1` ; le pilote de lot est `ProduireCartes.ps1`. Les triangles se calculent à l'avance (formules du § 3).
- `lp-commandlets` : `LPCheckStreetMap` n'a pas `-Report` ; il est inutilisable dans une recette ProduirePack.