212 lines
16 KiB
Markdown
212 lines
16 KiB
Markdown
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.
|