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\`, `-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\.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- — 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-.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 `-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/` 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.