feat(worldgen): add persistent aerial Sanctuary sites for alpha.24
Build Sanctuary / build (push) Canceled after 0s

This commit is contained in:
koka
2026-09-11 18:29:38 +02:00
parent fbefb2e6d6
commit 27d7cba93f
61 changed files with 3469 additions and 132 deletions
+262
View File
@@ -0,0 +1,262 @@
# Vérifications alpha.24
Branche `codex/aerial-sanctuary-alpha24`, base alpha.23.1 `fbefb2e`.
Minecraft 26.3-pre-2, Fabric Loader 0.19.5, Fabric API 0.160.0+26.3,
Java 25 ; mod et pack `0.1.0-alpha.24`.
**Matrice de génération réussie le 11 septembre 2026.** Les quatorze scénarios
passent : neuf créations, deux réouvertures, deux options OFF et lordre inverse
de chargement. Les tests purs, deux admissions réelles dexpansion et la
cascade native jusqu’à Y8 réussissent également. Les 24 GameTests généraux passent également.
`check build assemblePack` passe en 3 min 56 s (83 tâches), avec les 24
GameTests natifs également réussis dans ce build. JAR, MRpack, index packwiz
et bootstrap officiel sont vérifiés. La publication et la synchronisation
restent en préparation.
Le [contrat de génération](generation-alpha24.md) décrit le périmètre.
## Environnement et preuves
Les essais utilisent un serveur Fabric GameTest sans interface graphique sur
Mac. Les mondes jetables restent dans `mods/sanctuary/build/run/gameTest/` ;
aucune sauvegarde personnelle nest ouverte ou modifiée. Aucun essai Windows
natif ni contrôle graphique du client avec shaders na été exécuté.
Les résultats retenus figurent dans `build/alpha24-evidence/matrix.json`,
avec les rapports `<phase>-<graine>-<diamètre>.json` et leurs journaux `.log`.
Un résultat nest retenu quaprès sortie réussie du processus et
`passed: true` dans le rapport. Ces fichiers de développement sont ignorés par
Git. Les essais précédant la végétation sont conservés séparément dans
`build/alpha24-evidence-before-vegetation/` et ne valident pas les formes finales.
Ceux précédant la correction du rivage sont dans
`build/alpha24-evidence-before-shore-fix/` ; ils attestent les contrôles déjà
réussis, mais pas les nouveaux emplacements recherchés par le filtre corrigé.
Le journal `build/alpha24-shore-smoke.log` atteste les tests purs finaux.
Les images `balloon.png`, `merchant_*.png` et `mineral_islet_*.png` sont des
projections de contrôle calculées depuis lexport des blocs du renderer :
ce ne sont pas des captures d’écran Minecraft. Le test FULL vérifie séparément
que les matériaux prévus existent dans le monde natif.
## Résultats exécutés
| Essai | Résultat | Preuve |
| --- | --- | --- |
| Placement pur : 3 tailles × graines 0, 42, 2026 ; rotations, emprises, conflits et rivage obstrué | Réussi après correction | `alpha24-shore-smoke.log`, `Aerial24Smoke` |
| Manifeste avant journal, relecture stricte, corruption, absence, conflits, plan vide et historique23 | Réussi | Même journal, `AerialPersistence24Smoke` |
| Neuf créations de la matrice après correction du rivage | 9 sur 9 réussies | Tableau ci-dessous |
| Moyen 724, graine 0, première réouverture | Réussi, 54,85 s | `reload1-0-724.json` |
| Même monde, seconde réouverture | Réussi, 54,50 s | `reload2-0-724.json` |
| Option expérimentale OFF, en serveur natif | Réussi, 52,93 s | `create-0-724-experimental-off.json` |
| Structures globales OFF, en serveur natif | Réussi, 27,19 s | `create-0-724-global-off.json` |
| Génération des chunks dans lordre inverse | Réussi, 81,58 s ; sept champs strictement identiques | `create-0-724-reverse.json`, `reverse-comparison.json` |
| Cascade jusqu’à Y8 et deux admissions réelles entre les emprises | Réussi, 2 min 39 s | `flow-admission-0-724.json`, `alpha24-flow-admission.log` |
| Comparaison du témoin historique23 avec lalpha.23.1 | Réussie sur le code24 avant la passe végétale | `legacy23-comparison.json` |
| GameTests généraux : Blocodex, options, population et hydrologie | 24 sur 24 réussis, JVM 2 min 2 s ; suite 54,47 s | `build/alpha24-general-gametest.log` |
| `check build assemblePack`, contrôle des artefacts | Réussi ; 83 tâches, suite native 24/24 | `build/alpha24-check-build-pack.log`, `build/alpha24-artifacts.json` |
| Graine | Petit 512 | Moyen 724 | Grand 1 024 |
| --- | --- | --- | --- |
| 0 | Réussi, 62,64 s ; 57 chunks FULL | Réussi, 80,96 s ; 61 chunks FULL | Réussi, 128,84 s ; 48 chunks FULL |
| 42 | Réussi, 58,25 s ; 61 chunks FULL | Réussi, 72,91 s ; 57 chunks FULL | Réussi, 92,08 s ; 58 chunks FULL |
| 2026 | Réussi, 59,43 s ; 44 chunks FULL | Réussi, 80,77 s ; 37 chunks FULL | Réussi, 115,93 s ; 48 chunks FULL |
Chaque création active retrouve les cinq sites, leurs cinq coffres, deux
marchands et une source de cascade. Les emprises réservées vont de 31 à 55
chunks selon le monde. Les deux cas OFF retrouvent un plan vide, aucune
réservation aérienne et aucun site aérien annoncé dans le registre.
Lordre inverse, exécuté sur un nouveau Moyen, graine 0, conserve exactement
la géométrie, le codec, les départs NBT, les blocs avant et après usage,
les mutations du test et la végétation. `reverse-comparison.json` consigne
l’égalité stricte de ces sept champs ; les durées et états transitoires de
chargement ne sont pas comparés comme sils devaient être identiques.
Les durées incluent Gradle, le lancement du serveur, la préparation du monde,
les chunks FULL demandés et les assertions. Ce ne sont ni des temps de rendu
client, ni une mesure Windows, ni le délai nécessaire pour générer toute l’île.
### Correction du point de vue de rivage
La première matrice végétalisée avait échoué sur le Petit, graine 42 : le
sanctuaire minéral construisait sa voûte jusqu’à Y187 au-dessus dun point
calculé sur le terrain brut à Y174. Le planner prépare désormais les plans
racine avant le manifeste aérien, puis refuse leurs volumes au niveau du
support, du point de vue et de la ligne de visée. Les assertions FULL restent
strictes ; le cas fautif passe dans la nouvelle série. Deux tests purs
vérifient une obstruction au rivage et au milieu du segment de vue.
Cette correction peut changer le candidat retenu pour un nouveau monde24.
Un plan déjà sauvegardé reste relu tel quel : aucun recalcul implicite et
aucune modification des anciens mondes23.
### Ce que le témoin Moyen vérifie
Les cinq sites réservent **55 chunks**, sans réserver un anneau entier. Le test
charge **61 chunks FULL**, comprenant ces emprises, leurs points de rivage et
le chunk qui reçoit les villageois extraits. Il vérifie notamment :
- Les cinq vrais départs de structures natifs, leurs pièces, leurs coordonnées,
la sérialisation NBT et les états doccupation conservés.
- Cinq coffres réellement placés, leurs tables vanilla et un butin non vide,
puis leur maintien à vide après deux redémarrages.
- Deux villageois présents, un par navire, puis déplacés dans le chunk de test.
Leur position reste conservée et aucun remplaçant napparaît dans les navires.
- Des blocs de minerai et un élément de nacelle retirés restent absents après
les deux réouvertures. Cette manipulation est limitée au monde de développement.
- Des accès et intérieurs avec un sol et deux blocs libres, ainsi que les trois
couches de couverture des coffres enterrés lors de la création.
- Les points de rivage reposent sur le terrain FULL et ne sont pas enfouis.
Les colonnes extérieures échantillonnées restent vides de construction.
- Le registre passe de `PLANNED` à `GENERATED`, les recherches utilisent les
vrais départs et le journal dexpansion reste inchangé pendant ces visites.
La source deau est présente et conservée ; lessai séparé ci-dessous vérifie
sa descente par les ticks de fluide jusqu’à Y8.
La création et les deux réouvertures contrôlent aussi la végétation réelle. Sur l’îlot avec
cascade, **596 des 783 colonnes de surface intactes portent de lherbe**
(76,1 %), avec deux arbres et 27 blocs de hauteur rocheuse. Sur l’îlot sec,
ce sont **1 506 sur 1 788** (84,2 %), quatre arbres et 21 blocs de roche.
Chaque enveloppe ajoute huit blocs pour les couronnes. Les troncs ont un appui
en terre, les couronnes restent dans lemprise et les feuilles utilisent les
propriétés natives de distance, sans persistance forcée.
`persistence-comparison.json` confirme également l’égalité de la géométrie,
du codec, des départs natifs, des blocs après usage, des mutations et des
mesures de végétation dans les deux relectures.
### Admission réelle et écoulement natif
`flow-admission-0-724.json` et `build/alpha24-flow-admission.log` attestent le
test dans un autre monde jetable Moyen, graine 0. Il appelle le véritable
`ExpansionRuntime.Session.create` avant que les satellites soient visités.
| Expansion de test, diamètre 128 | Premier centre envisagé X Z | Centre réellement réservé X Z | Appel de réservation | Résultat |
| --- | --- | --- | ---: | --- |
| `aerial_collision_0_southeast` | `496 336`, chevauche un satellite | `368 496` | 114 ms | `READY`, un départ vanilla valide |
| `aerial_interval_0_northeast` | `400 -432`, passage libre | `400 -432` | 54 ms | `READY`, un départ vanilla valide |
La première demande filtre le candidat en conflit, puis poursuit les
vérifications dadaptation avant sa réservation définitive. La seconde
montre que la bande entre les satellites reste utilisable. Les deux
réservations sont idempotentes, respectent leurs emprises et atteignent
`READY` avec une structure native adaptée. Ces durées dappels ne représentent
pas la préparation complète, comprise dans le test de 2 min 39 s.
Après chargement et activation des ticks des chunks concernés, lunique
source prévue produit de leau sous l’îlot à `399 194 312`, puis à
`399 8 312`, après **1 180 ticks dattente contrôlée**. À Y8, le fluide
est de leau courante, pas une source artificiellement posée. Aucun chemin
vertical de blocs sources nest fabriqué par le renderer. Cet essai valide
ce trajet réel ; il ne garantit pas la forme de l’écoulement après des
constructions ou excavations effectuées par les joueurs.
### Chargement des habitants dans le test Grand
Le premier essai Grand, graine 0, a rencontré un délai de visibilité des
entités : les marchands existaient sur disque mais n’étaient pas encore
exposés au test. Le protocole de lecture charge désormais les navires entiers,
vérifie la disponibilité native des entités et attend au plus 600 ticks.
Lexigence reste de deux marchands distincts, sans création ou remplacement
par le test. Les trois Grands passent ensuite : le témoin graine0 attend
250 ticks et celui de graine2026, 323 ticks, avant de voir les deux habitants.
Cela confirme que lancienne limite de 200 ticks du fixture était trop courte.
Le premier essai interrompu nest pas compté dans les réussites de la matrice.
## Repères de visite — Moyen 724, graine 0
Créer un **nouveau monde Sanctuary de génération24**, taille Moyen, graine `0`,
avec **Générer les structures** et **Structures expérimentales** activés.
Les coordonnées proviennent de `create-0-724.json`, champ `look_views`.
Le nouveau rapport après correction du rivage confirme ces mêmes coordonnées.
Les repères de rivage désignent un point de vue deux blocs au-dessus du témoin
enregistré ; ils ne constituent pas des téléportations de survie exécutées.
| Lieu | Entrée X Y Z | Point de vue au rivage X Y Z | Distance horizontale entréerivage |
| --- | --- | --- | ---: |
| Montgolfière | `-492 288 110` | `-251 219 55` | 247,2 blocs |
| Navire de vivres | `-35 186 -503` | `-19 176 -282` | 221,6 blocs |
| Navire de matériel | `463 186 -204` | `229 159 -102` | 255,3 blocs |
| Îlot avec cascade | `399 237 333` | `195 161 163` | 265,5 blocs |
| Îlot sec | `-277 256 456` | `-125 227 207` | 291,7 blocs |
Pour un repérage de développement, `/locate structure sanctuary:aerial_balloon`,
`sanctuary:aerial_merchant_ship` et `sanctuary:aerial_mineral_islet` utilisent
les types natifs. `/sanctuary census structures aerial` distingue les cinq
sites. Aucun pont ou véhicule nest ajouté pour les atteindre. La limite de
512 blocs depuis un rivage ne force pas les réglages de rendu du client ou
du serveur, ni la visibilité à travers les feuillages.
## Historique23
Le rapport `legacy23-0-724.json`, produit sur un monde de génération23 avec le
code24 avant lajout de végétation aérienne, a été comparé à
`build/alpha231-evidence/final-medium.json`. Tous les champs sont identiques,
à lexception attendue de `process_id` : codec, plans, départs natifs,
géométrie, rails et traversées contrôlés dans **85 chunks FULL**.
`legacy23-comparison.json` consigne cette égalité.
Cette preuve porte sur ce témoin précis, pas sur toutes les graines ni toutes
les dimensions. Les tests de persistance conservent aussi les octets du journal23
et refusent une conversion implicite vers24. Aucun monde existant ne reçoit
automatiquement les satellites24 ; le nouveau manifeste appartient uniquement
aux nouveaux mondes24.
## Reproduction
Depuis la racine du dépôt, exécuter les commandes **séquentiellement**.
`runGameTest` recrée son monde de développement par défaut. Pour les phases
de réouverture, garder le même dossier et ajouter impérativement
`sanctuaryExpansionReload=true`.
```sh
./gradlew :sanctuary:aerial24Smoke :sanctuary:aerialPersistence24Smoke
./gradlew :sanctuary:runGameTest \
-PsanctuaryAerial24Tests=true \
-PsanctuaryTestDiameter=724 -PsanctuaryTestSeed=0 \
-PsanctuaryAerial24Phase=create -PsanctuaryDensityMaps=false
./gradlew :sanctuary:runGameTest \
-PsanctuaryAerial24Tests=true \
-PsanctuaryTestDiameter=724 -PsanctuaryTestSeed=0 \
-PsanctuaryAerial24Phase=reload1 -PsanctuaryExpansionReload=true \
-PsanctuaryDensityMaps=false
./gradlew :sanctuary:runGameTest \
-PsanctuaryAerial24Tests=true \
-PsanctuaryTestDiameter=724 -PsanctuaryTestSeed=0 \
-PsanctuaryAerial24Phase=reload2 -PsanctuaryExpansionReload=true \
-PsanctuaryDensityMaps=false
```
La matrice de créations reprend les diamètres `512`, `724`, `1024` et les
graines `0`, `42`, `2026`. Les variantes du Moyen, graine0, ajoutent séparément
`-PsanctuaryExperimentalStructures=false`,
`-PsanctuaryGenerateStructures=false` ou
`-PsanctuaryAerial24ReverseChunks=true` à la commande de création.
Lessai dadmission et deau utilise un nouveau monde :
```sh
./gradlew :sanctuary:runGameTest \
-PsanctuaryAerial24FlowAdmission=true \
-PsanctuaryTestGeneration=24 -PsanctuaryTestDiameter=724 \
-PsanctuaryTestSeed=0 -PsanctuaryDensityMaps=false
```
Cette dernière commande reproduit lessai dadmission et d’écoulement réussi.
Les assertions sont dans
[Aerial24WorldGameTests](../mods/sanctuary/src/gametest/java/fr/koka/sanctuary/gametest/Aerial24WorldGameTests.java)
et [Aerial24FlowAdmissionGameTests](../mods/sanctuary/src/gametest/java/fr/koka/sanctuary/gametest/Aerial24FlowAdmissionGameTests.java).
## Limites et distribution
Les essais ne valident pas encore le ressenti en vol, la lisibilité dans le
client, l’équilibrage économique des filons, les performances multijoueurs ou
les incidents Windows rapportés sur cette préversion Minecraft. Le test pur
des neuf plans emploie un terrain synthétique ; seule la matrice FULL valide
leur adaptation au relief réel des graines retenues.
Laccès Gitea est rétabli, avec la permission de pousser. La distribution
est en préparation ; la publication et la synchronisation Prism ne sont pas
encore effectuées. L’état final des artefacts et du canal sera consigné après
les contrôles de livraison.